2016-08-03 64 views
1

我對Hadoop是全新的,我想壓縮一個大文件並將它放在HDFS中。到目前爲止,這是我所做的 1)安裝單節點羣集 2)我的core-site.xml就像如何在Hadoop中自動壓縮文件?

<configuration> 
<property> <name>fs.defaultFS</name> 
<value>hdfs://localhost:9000</value> 
</property> 
<property> <name>io.compression.codecs</name> 
<value>com.hadoop.compression.lzo.LzoCodec</value> 
</property> 
</configuration> 

現在,當我將本地2GB文件應用到HDFS中時,使用以下命令。我仍然在HDFS中看到相同的大小。

hadoop fs -put 06_27_06_2016_tcp-leef.log-online /user/hduser/test/ 

不知道我是缺少在這裏,有我需要的Hadoop環境,使或者我需要寫的map-reduce對這一計劃的任何其他財產呢?所以要求是,每當一個新的文件來在HDFS中它應該自動壓縮。

感謝 VG

回答

0

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

gzip 06_27_06_2016_tcp-leef.log-online 
hdfs dfs -put 06_27_06_2016_tcp-leef.log-online.gz /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=com.hadoop.compression.lzo.LzoCodec \ 
-Dmapred.reduce.tasks=0 \ 
-input <input-path> \ 
-output $OUTPUT \ 

有關於Hadoop的數據壓縮的好文章,希望你會發現它非常有用:

http://comphadoop.weebly.com/

+0

謝謝亞歷克斯對我有意義,但可以給我更多的清楚,我們爲什麼需要或在core-site.xml或maperd-site.xml文件中壓縮屬性的目的? – user3332404

+0

@ user3332404示例我提供的是爲單時間map-reduce作業輸出數據應用壓縮在mapred-site.xml中設置此屬性將自動將它應用於所有map-reduce作業輸出數據,因此您不會每次運行作業時都必須設置此參數 – Alex