【发布时间】:2016-02-14 13:19:55
【问题描述】:
我正在运行一个 map reduce 程序来读取 HDFS 文件,如下所示:
hadoop jar /opt/mapr/hadoop/hadoop-0.20.2/contrib/streaming/hadoop-0.20.2-dev-streaming.jar -Dmapred.reduce.tasks=1000 -file $homedir/mapper.py -mapper $homedir/mapper.py -file $homedir/reducer.py -reducer $homedir/reducer.py -input /user/data/* -output /output/ 2> output.text
有什么要确认的,路径 /user/data/* 包含文件夹,包括文件,/user/data/* 将遍历所有子文件夹下的所有文件,对吗?
hdfs 文本文件的每一行都包含一个 JSON 字符串,因此映射器读取文件如下:
for line in sys.stdin:
try:
object = json.loads(line)
但是 HDFS 的所有者将文件从文本更改为序列文件。我发现 map reduce 程序输出了很多零大小的文件,这可能意味着它没有成功地从 HDFS 读取文件。
我应该对代码进行哪些更改才能从序列文件中读取?我还有一个 HIVE 外部表来根据 mapreduce 的输出执行聚合和排序,并且 HIVE 之前是 STORED AS TEXTFILE,我应该更改为 STORED AS SEQUENCEFILE 吗?
谢谢,
【问题讨论】:
标签: python hadoop mapreduce hive sequencefile