Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Hadoop中自动压缩文件?_Hadoop - Fatal编程技术网

如何在Hadoop中自动压缩文件?

如何在Hadoop中自动压缩文件?,hadoop,Hadoop,我对Hadoop完全陌生,我想压缩一个大文件并将其放入HDFS中。到目前为止,这就是我所做的 1) 已安装的单节点群集 2) 我的core-site.xml就像 <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <n

我对Hadoop完全陌生,我想压缩一个大文件并将其放入HDFS中。到目前为止,这就是我所做的 1) 已安装的单节点群集 2) 我的core-site.xml就像

<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>
我不确定这里缺少什么,我是否需要在Hadoop环境中启用任何其他属性,或者我是否需要为此编写map reduce程序?因此,需要的是,每当HDFS中出现新文件时,它都应该自动压缩

谢谢
VG

我建议您编写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 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=com.hadoop.compression.lzo.LzoCodec \
-Dmapred.reduce.tasks=0 \
-input <input-path> \
-output $OUTPUT \
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\
-输入\
-输出$输出\
有一篇关于hadoop中数据压缩的好文章,希望对您有所帮助:


我建议您编写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 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=com.hadoop.compression.lzo.LzoCodec \
-Dmapred.reduce.tasks=0 \
-input <input-path> \
-output $OUTPUT \
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\
-输入\
-输出$输出\
有一篇关于hadoop中数据压缩的好文章,希望对您有所帮助:


谢谢,Alex对我来说很有意义,但请让我更清楚地了解我们为什么需要core-site.xml中的compress属性,或者compress属性的用途,还是maperd-site.xml文件?@user3332404我提供的示例是对一次性map reduce作业输出数据应用压缩在mapred-site.xml中设置此属性将自动将其应用于所有map reduce作业输出数据,这样您就不必每次运行作业时都设置此参数谢谢Alex对我有意义,但是,请让我更清楚地了解为什么需要core-site.xml或maperd-site.xml文件中的compress属性或其目的?@user3332404我提供的示例是对一次性map reduce作业输出数据应用压缩在mapred-site.xml中设置此属性将自动将其应用于所有map reduce作业输出数据,这样,您就不必在每次运行作业时都设置此参数