Python+Cassandra CqlPagingInputFormat+Hadoop流媒体

2024-04-27 05:13:11 发布

您现在位置:Python中文网/ 问答频道 /正文

简介

我有一个cassandra 1.2.19集群,上面安装并配置了hadoop 1.2.1,并在其之上以完全分布式模式进行配置(另外还有一个非cassandra节点作为主节点),一切都正常,我可以在上面运行MapReduce作业。

问题

现在,我想使用hadoop流来运行一个使用python映射器和还原程序的映射/减少。映射器的代码相当简单,它从标准输入读取每一行,执行“映射”,并为减速机生成一些输出。

我正在使用主控程序中的这样的命令运行map/reduce:

hadoop jar /usr/share/hadoop/contrib/streaming/hadoop-streaming-1.2.1.jar \
-D cassandra.input.keyspace="keyspace_name" \
-D cassandra.input.partitioner.class="Murmur3Partitioner" \
-D cassandra.input.columnfamily="cf_name" \
-D cassandra.consistencylevel.read="ONE" \
-D cassandra.input.widerows=true \
-D cassandra.input.thrift.address=XXX.XXX.XXX.XXX \
-inputformat org.apache.cassandra.hadoop.cql3.CqlPagingInputFormat \
-input /keyspace_name/cf_name \
-output /dev/test \
-file mapper.py  -mapper mapper.py \
-file reducer.py -reducer reducer.py

示例代码mapper.py如下:

^{pr2}$

由于我使用的表只包含2列(它是一个键值存储),所以我希望hadoop流媒体发送带有分隔符的键值对(默认为tab,我认为),但是映射程序接收到:

^{pr3}$

它给我引用HeapByteBuffers,而不是实际值。

问题

1-执行map/reduce以告诉cassandra/hadoop将实际值作为映射器的输入而不是HeapByteBuffer时是否缺少参数? 2-是否有方法从python访问此堆的实际值? 3-使用python编写的映射器/还原程序,在cassandra之上运行hadoop有更好/不同的方法吗?

提前谢谢!


Tags: 代码namepy程序hadoopmapreduceinput