2016-08-03 180 views
1

我正在爲客戶端工作,我應該用Snappy壓縮將一些文件放到HDFS上。我的問題是活潑的編解碼器不mapred-site.xmlhdfs-site.xml如何用Snappy壓縮文件到HDFS

不知怎的,我得把最好使用hdfs put命令文件,他們應該被壓縮定義。沒有機會更改配置文件,因爲它是一臺生產機器和其他人積極使用它。

另一個建議的解決方案是在不壓縮的情況下將文件導入HDFS,然後使用壓縮創建配置表外部表並使用其源文件刪除未壓縮的文件。但是這是一條漫長的道路,並不能保證工作。

任何有關使用hdfs put與某些參數來壓縮文件的建議將不勝感激。

+0

這不是可能,'put'只是移動數據。 –

回答

1

我建議你編寫map-reduce作業來壓縮hdfs中的數據。我不知道是否有辦法對hadoop put操作進行自動壓縮,但假設它不存在。一種選擇是把已經壓縮的文件:

snzip file.tar 
hdfs dfs -put file.tar.sz /user/hduser/test/ 

另一種方法是壓縮它在mapreduce作業。作爲一個選項,您可以使用Hadoop的流罐子HDFS內壓縮將文件:

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \ 
-Dmapred.output.compress=true \ 
-Dmapred.compress.map.output=true \ 
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec \ 
-Dmapred.reduce.tasks=0 \ 
-input <input-path> \ 
-output $OUTPUT \ 
0

假設你有在未壓縮HDFS火花日誌文件,但你想在spark-defaults.conf打開spark.eventLog.compress true和前進並壓縮舊的日誌。地圖減少的方法會最有意義,但作爲一個你也可以使用:

snzip -t hadoop-snappy local_file_will_end_in_dot_snappy 

然後上傳把它直接。

安裝snzip可能類似於此:

sudo yum install snappy snappy-devel 
curl -O https://dl.bintray.com/kubo/generic/snzip-1.0.4.tar.gz 
tar -zxvf snzip-1.0.4.tar.gz 
cd snzip-1.0.4 
./configure 
make 
sudo make install 

貴輪單個文件之旅可能是:

hdfs dfs -copyToLocal /var/log/spark/apps/application_1512353561403_50748_1 . 
snzip -t hadoop-snappy application_1512353561403_50748_1 
hdfs dfs -copyFromLocal application_1512353561403_50748_1.snappy /var/log/spark/apps/application_1512353561403_50748_1.snappy 

或者與gohdfs

hdfs cat /var/log/spark/apps/application_1512353561403_50748_1 \ 
| snzip -t hadoop-snappy > zzz 
hdfs put zzz /var/log/spark/apps/application_1512353561403_50748_1.snappy 
rm zzz