如何使用快速压缩将文件放入hdfs

0s0u357o  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(321)

我为一个客户工作,我应该把一些文件压缩到hdfs与snappy。我的问题是snappy编解码器没有在中定义 mapred-site.xml 或者 hdfs-site.xml 不知怎的,我不得不把文件 hdfs put 他们应该被压缩。没有机会更改配置文件,因为它是一台生产机器,其他人正在积极使用它。
另一个建议的解决方案是将文件导入hdfs而不进行压缩,然后通过压缩创建配置单元外部表,并在删除未压缩文件的同时使用其源文件。但这是一个很长的路要走,并不能保证工作。
如有任何关于使用的建议,我们将不胜感激 hdfs put 用一些参数来压缩文件。

5fjcxozz

5fjcxozz1#

假设您在hdfs中有一个spark日志文件,它没有压缩,但您想打开它 spark.eventLog.compress truespark-defaults.conf 继续压缩旧的原木。map reduce方法最有意义,但作为一种方法,您也可以使用:

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
bmp9r5qi

bmp9r5qi2#

我建议您编写map reduce job来压缩hdfs中的数据。我不知道是否有一种方法可以对hadoopput操作进行自动压缩,但假设它不存在。一种方法是将已压缩的文件:

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

另一种方法是在mapreduce作业中压缩它。作为一个选项,您可以使用hadoop streaming jar在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 \
cmssoen2

cmssoen23#

我们用一些场景来解决这个问题
如果是rdd,则将其转换为Dataframe。 RDD.toDF 不需要参数,如果您想指定列名,您可以这样做 rdd.toDF("c1","c2","c3") 在转换为df之后,假设您想将其设置为具有snappy压缩的parquet文件格式,您需要使用sqlcontext

sqlContext.setConf("spark.parquet.commpression.codec","snappy")
sqlContext.setConf("spark.parquet.commpression.codec","gzip")

对于gzip压缩
在此之后,使用以下命令 XXDF.write.parquet("your_path") 它将通过快速压缩保存

相关问题