我有100GB的JSON文件,其每一行如下所示:
{"field1":100, "field2":200, "field3":[{"in1":20, "in2":"abc"},{"in1":30, "in2":"xyz"}]}
(实际上要复杂得多,但这只是一个小的演示。)
我想把它处理成每行都是这样的:
^{pr2}$作为Hadoop的新手,我只想知道我走的路是否正确:
关于这一点: http://www.glennklockwood.com/di/hadoop-streaming.php 对于传统的应用程序,我会用Python创建一个mapper和reducer,并使用类似的方法执行它:
hadoop \
jar /opt/hadoop/contrib/streaming/hadoop-streaming-1.0.3.jar \
-mapper "python $PWD/mapper.py" \
-reducer "python $PWD/reducer.py" \
-input "wordcount/mobydick.txt" \
-output "wordcount/output"
现在让我知道如果我走对了方向:
因为我只需要将很多文件解析成另一种形式;我想我不需要任何简化步骤。我可以简单地写一个地图:
然后我可以用一个映射器和0个reducer来运行hadoop。在
这种方法似乎正确吗?我是真的正确地使用集群,还是像在一台主机上运行Python脚本一样糟糕?在
你是对的,在这种情况下,你不需要任何减速器,你的映射器的输出是你想要的,所以你应该把减速器的数量设置为0。当您告诉Hadoop JSON数据所在的输入路径时,它将自动向每个映射器提供随机数量的JSON行,映射器将处理这些行,您需要将其发送到上下文,以便它将值存储在输出路径中。这个方法是正确的,而且这个任务是100%并行的,所以如果您的集群中有多台机器并且您的配置是正确的,那么它应该充分利用集群,并且它的运行速度将比在单个主机上运行它快得多。在
相关问题 更多 >
编程相关推荐