linux

Hadoop数据压缩Linux上如何配置

小樊
51
2025-10-18 16:11:45
栏目: 智能运维

Hadoop数据压缩在Linux上的配置指南

1. 准备工作:选择压缩格式

Hadoop原生支持多种压缩格式,需根据压缩比、速度、是否支持split等需求选择:

2. 安装压缩编解码器依赖

根据选择的格式安装对应库(以Snappy、Gzip为例):

3. 配置Hadoop核心参数

修改Hadoop配置文件(位于$HADOOP_HOME/etc/hadoop/),启用压缩功能:

3.1 配置core-site.xml(全局压缩编解码器)
<configuration>
    <!-- 指定Hadoop支持的压缩编解码器,多个用逗号分隔 -->
    <property>
        <name>io.compression.codecs</name>
        <value>org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec</value>
    </property>
</configuration>
3.2 配置mapred-site.xml(MapReduce作业压缩)
<configuration>
    <!-- 启用Map输出压缩(减少shuffle数据量) -->
    <property>
        <name>mapreduce.map.output.compress</name>
        <value>true</value>
    </property>
    <!-- Map输出压缩编解码器(推荐Snappy,速度快) -->
    <property>
        <name>mapreduce.map.output.compress.codec</name>
        <value>org.apache.hadoop.io.compress.SnappyCodec</value>
    </property>
    <!-- 启用最终输出压缩(如作业输出到HDFS) -->
    <property>
        <name>mapreduce.output.fileoutputformat.compress</name>
        <value>true</value>
    </property>
    <!-- 最终输出压缩编解码器(如归档选Bzip2,小文件选Gzip) -->
    <property>
        <name>mapreduce.output.fileoutputformat.compress.codec</name>
        <value>org.apache.hadoop.io.compress.BZip2Codec</value>
    </property>
</configuration>
3.3 配置hdfs-site.xml(HDFS块大小优化)
<configuration>
    <!-- 调整块大小(默认128MB),大文件适合更大的块 -->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value> <!-- 128MB -->
    </property>
    <!-- 增加NameNode/Datanode处理线程数(提升并发) -->
    <property>
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
    </property>
    <property>
        <name>dfs.datanode.handler.count</name>
        <value>100</value>
    </property>
</configuration>

4. 重启Hadoop服务

使配置生效:

# 根据实际服务名调整(如hadoop-namenode、hadoop-datanode等)
sudo systemctl restart hadoop-namenode
sudo systemctl restart hadoop-datanode
sudo systemctl restart hadoop-resourcemanager
sudo systemctl restart hadoop-nodemanager

5. 验证压缩功能

5.1 命令行上传压缩文件到HDFS
# 使用Snappy压缩上传本地文件
hadoop fs -put -f -D mapreduce.output.fileoutputformat.compress=true \
-D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec \
localfile.txt /user/hadoop/output/compressed_snappy/
5.2 查看压缩文件
# 列出HDFS中的压缩文件
hadoop fs -ls /user/hadoop/output/compressed_snappy/
# 下载并解压文件
hadoop fs -get /user/hadoop/output/compressed_snappy/localfile.txt.snappy ./localfile.txt
# 使用gunzip解压(如果是Gzip格式)
gunzip localfile.txt.gz
5.3 运行MapReduce作业验证

编写MapReduce程序(如WordCount),在驱动类中设置压缩配置:

Configuration conf = new Configuration();
conf.set("mapreduce.output.fileoutputformat.compress", "true");
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");
Job job = Job.getInstance(conf, "WordCount");
// 其他配置...
System.exit(job.waitForCompletion(true) ? 0 : 1);

提交作业后,检查输出目录是否生成压缩文件(如.snappy后缀)。

注意事项

0
看了该问题的人还看了