我有多个小输入文件。要运行具有多个输入文件的map reduce作业,将使用以下命令:

hadoop jar <jarname> <packagename.classname> <input_dir> <output>


但是,如果上述只是一个文本文件,而应该是HAR文件,那么该命令将是什么,以便MapReduce作业的所有输出都是HAR存档?

最佳答案

您在示例中执行的MapReduce作业无法将其输出直接写入har文件。相反,您可以在MapReduce作业之后将hadoop archive作为后处理步骤运行,以将MapReduce作业输出打包到har文件中。

> hadoop jar */share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /README.txt /wordcountout

> hdfs dfs -ls /wordcountout
Found 2 items
-rw-r--r--   3 chris supergroup          0 2015-12-16 11:28 /wordcountout/_SUCCESS
-rw-r--r--   3 chris supergroup       1306 2015-12-16 11:28 /wordcountout/part-r-00000

> hadoop archive -archiveName wordcountout.har -p /wordcountout /archiveout

> hdfs dfs -ls har:///archiveout/wordcountout.har
Found 2 items
-rw-r--r--   3 chris supergroup          0 2015-12-16 12:17 har:///archiveout/wordcountout.har/_SUCCESS
-rw-r--r--   3 chris supergroup       1306 2015-12-16 12:17 har:///archiveout/wordcountout.har/part-r-00000


如果仅使用har格式的数据就可以满足您的需要,则可以选择删除原始内容(在我的示例中为/wordcountout目录)。

有关hadoop archive命令的其他信息,请参见:

http://hadoop.apache.org/docs/r2.7.1/hadoop-archives/HadoopArchives.html

10-07 12:09