简介
我有一个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有更好/不同的方法吗?
提前谢谢!
目前没有回答
相关问题 更多 >
编程相关推荐