2017-08-10 119 views
0

我試圖使用下面的hadoop-streaming.jar命令在HDFS位置合併一些* _0(HDFS中的部分文件)文件。hadoop-streaming.jar在每行的末尾添加了x'09'

hadoop jar $HDPHOME/hadoop-streaming.jar -Dmapred.reduce.tasks=1 -input $INDIR -output $OUTTMP/${OUTFILE} -mapper cat -reducer cat 

事情做工精細 - 除此之外,我進入的問題,因爲,從上面的命令的結果似乎添加x'09' 到每一行的末尾。

我們在定義最後一個字段爲BIGINT的零件文件(用合併文件替換)上定義了Hive表。由於合併文件將x'09'添加到最後一個字段中,相同的tbale定義現在在Hue的最後一個字段中顯示NULL(因爲510408不再是向X'09添加的數字)。

例如

部分文件中的數據。

00000320 7c 35 31 30 34 30 38 0a       ||510408.| 

數據在合併後的文件(以上命令的結果)

00000320 7c 35 31 30 34 30 38 09 0a      ||510408..| 

如何避免這種情況的發生?有沒有一些選擇,我可以在命令中設置,以防止這種情況?

欣賞你的時間任何幫助/指針。

+0

'x09'是TAB特殊字符。什麼是Hadoop Streaming的默認字段分隔符? –

+0

您是否考慮創建Hadoop存檔文件(HAR)而不是運行該笨拙的連接作業 - 您似乎完全無法控制? –

+0

@ Samson Scharfrichter - 默認字段分隔符是TAB。我正在嘗試將其更改爲其他內容(stream.map.output.field.separator),但無濟於事。 –

回答

0

我發現answerin這post -

添加下面的選擇似乎解決它。

-D mapred.textoutputformat.separator=<delimiter-of-input-file>