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