2016-08-03 32 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> 

ここで、HDFSにローカルの2GBファイルをコピーするとき、次のコマンドを使用します。

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

ない、私はここで行方不明です私はHadoopの環境で有効にする必要がありますか私は、このためのプログラムをマップは、削減記述する必要がありますか他のプロパティがありますか?だから、新しいファイルが来るたび要件があることを確認してくださいHDFSでは自動的に圧縮されます。

おかげ VG

答えて

0

私はあなたがHDFSにデータを圧縮するマップ-削減の仕事を書くことをお勧めします。 hadoop put操作で自動圧縮を実行する方法があるかどうかはわかりませんが、存在しないとします。 1つの方法は、既に圧縮されたファイルを置くことです:

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ジョブの中で圧縮することです。あなたはあなたのHDFS内のファイルを圧縮するためのHadoopストリーミングjarファイルを使用することができます。オプションとして :

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ファイルで、なぜ必要なのか、またはcompressプロパティの目的をもっと明確に教えてください。 – user3332404

+0

@ user3332404私が提供した例は、map-reduceジョブ出力データを1回だけ圧縮することです。mapred-site.xmlでこのプロパティを設定すると、すべてのmap-reduceジョブ出力データに自動的に適用されるため、ジョブを実行するたびにこのパラメータを設定する必要があります – Alex

関連する問題