2016-08-03 10 views
1

私は、スナッピー圧縮でHDFSにいくつかのファイルを置くべきクライアントのために働いています。私の問題はうまくコーデックが定義されていないmapred-site.xmlまたはhdfs-site.xmlスナッピー圧縮でHDFSにファイルを置く方法

何とか私は好ましくはhdfs putコマンドを使用してファイルを置く必要があり、圧縮する必要があります。プロダクションマシンや他の人が積極的に使用しているため、設定ファイルを変更する機会はありません。

さらに、圧縮せずにファイルをHDFSにインポートし、圧縮されたハイブ外部テーブルを作成し、ソースファイルを使用して非圧縮ファイルを削除することをお勧めします。しかし、これは長い道のりであり、働くことは保証されていません。

hdfs putを使用してファイルを圧縮するための何らかのパラメータを使用することについてのご意見をお待ちしております。

+0

これではありません可能であれば、 'put'はデータを移動します。 –

答えて

1

hdfsでデータを圧縮するmap-reduceジョブを作成することをお勧めします。 hadoop put操作で自動圧縮を実行する方法があるかどうかはわかりませんが、存在しないとします。 1つの方法は、既に圧縮されたファイルを置くことです:

snzip file.tar 
hdfs dfs -put file.tar.sz /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=org.apache.hadoop.io.compress.SnappyCodec \ 
-Dmapred.reduce.tasks=0 \ 
-input <input-path> \ 
-output $OUTPUT \ 
0

はあなたが圧縮されていないHDFSでスパークログファイルを持っていますが、spark-defaults.confspark.eventLog.compress trueをオンにし、先に行きたかったと言います古いログを圧縮します。マップリダクションの手法は最も理にかなっていますが、1つの方法として次のものを使用することもできます。

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 
関連する問題