以下のように、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 プログラムがサイズ 0 のファイルを多数出力していることがわかりました。これはおそらく、HDFS からファイルを正常に読み取れなかったことを意味します。
sequencefile から読み取れるようにするには、コードに何を変更すればよいですか? mapreduce の出力に基づいて集計と並べ替えを実行するための HIVE 外部テーブルもあり、以前は HIVE が STORED AS TEXTFILE でしたが、 STORED AS SEQUENCEFILE に変更する必要がありますか?
ありがとう、