Hadoop、Hbase使用Snappy压缩

1. 前期准备

系统环境:centos7.9

配置信息:8C8G100G

hadoop和hbase为单节点部署模式

jdk版本jdk1.8.0_361

1.1. 修改系统时间

timedatectl set-timezone <TimeZone>

1.2. 修改主机名以及主机名和IP的映射

vim /etc/hosts

#将自己的主机名以及ip映射添加进去

1.3. 关闭防火墙

临时关闭防火墙

systemctl stop firewalld.service

永久关闭

systemctl disable firewalld.service

2. hadoop部署

2.1. 下载安装包

mkdir /u01

cd /u01

wget https:``//dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz

tar -zxvf hadoop-``3.3``.``6``.tar.gz

2.2. 修改配置文件

2.2.1. 修改core-site.xml

<configuration>

``<property>

``<name>fs.defaultFS</name>

``<value>hdfs:``//192.168.68.129:9000</value>

``</property>

``<!-- 指定 hadoop 数据的存储目录 -->

``<property>

``<name>hadoop.tmp.dir</name>

``<value>/u01/hadoop-``3.3``.``6``/tmp</value>

``</property>

``<property>

``<name>hadoop.proxyuser.root.hosts</name>

``<value>*</value>

``</property>

``<property>

``<name>hadoop.proxyuser.root.groups</name>

``<value>*</value>

``</property>

``<property>

``<name>io.compression.codecs</name>

``<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec</value>

``</property>

``<property>

``<name>io.compression.codec.lzo.``class``</name>

``<value>org.apache.hadoop.io.compress.SnappyCodec</value>

``</property>

</configuration>

2.2.2. 修改hdfs-site.xml

<configuration>

``<property>

``<name>dfs.namenode.name.dir</name>

``<value>/u01/hadoop-``3.3``.``6``/hdfs/name</value>

``<``final``>``true``</``final``>

``</property>

``<property>

``<name>dfs.datanode.data.dir</name>

``<value>/u01/hadoop-``3.3``.``6``/hdfs/data</value>

``<``final``>``true``</``final``>

``</property>

``<property>

``<name>dfs.http.address</name>

``<value>``192.168``.``68.129``:``50070``</value>

``</property>

``<property>

``<name>dfs.permissions</name>

``<value>``false``</value>

``</property>

</configuration>

2.2.3. 修改yarn-site.xml

<configuration>

``<property>

``<name>yarn.nodemanager.aux-services</name>

``<value>mapreduce_shuffle</value>

``</property>

</configuration>

2.2.4. 修改hadoop-env.sh

export HDFS_NAMENODE_USER=hadoop

export HDFS_DATANODE_USER=hadoop

export HDFS_SECONDARYNAMENODE_USER=hadoop

export YARN_RESOURCEMANAGER_USER=hadoop

export YARN_NODEMANAGER_USER=hadoop

export HADOOP_MAPRED_HOME=/u01/hadoop-3.3.6

export HDFS_NAMENODE_USER=hadoop:

设置NameNode进程以hadoop用户身份运行。NameNode是HDFS中的主节点,负责管理文件系统的命名空间和客户端对文件的访问。

export HDFS_DATANODE_USER=hadoop:

设置DataNode进程以hadoop用户身份运行。DataNode是HDFS中的从节点,负责存储实际的数据块,并执行读写操作。

export HDFS_SECONDARYNAMENODE_USER=hadoop:

设置Secondary NameNode进程以hadoop用户身份运行。Secondary NameNode不是NameNode的备份,而是辅助NameNode进行检查点操作,帮助保持NameNode的运行状态。

export YARN_RESOURCEMANAGER_USER=hadoop:

设置ResourceManager进程以hadoop用户身份运行。ResourceManager是YARN的一部分,负责整个集群的资源管理和分配。

export YARN_NODEMANAGER_USER=hadoop:

设置NodeManager进程以hadoop用户身份运行。NodeManager是YARN的一部分,负责单个节点上的资源管理以及容器的生命周期管理。

export HADOOP_MAPRED_HOME=/u01/hadoop-3.3.6:

指定MapReduce框架的安装目录。这通常指向Hadoop发行版的根目录,在这个例子中是/u01/hadoop-3.3.6。

2.2.5. 修改mapred-site.xml

<configuration>

``<property>

``<name>mapreduce.framework.name</name>

``<value>yarn</value>

``</property>

``<property>

``<name>yarn.app.mapreduce.am.env</name>

``<value>HADOOP_MAPRED_HOME=/u01/hadoop-``3.3``.``6``</value>

``</property>

``<property>

``<name>mapreduce.map.env</name>

``<value>HADOOP_MAPRED_HOME=/u01/hadoop-``3.3``.``6``</value>

``</property>

``<property>

``<name>mapreduce.reduce.env</name>

``<value>HADOOP_MAPRED_HOME=/u01/hadoop-``3.3``.``6``</value>

``</property>

``<!-- 这个参数设为``true``启用压缩 -->

``<property>

``<name>mapreduce.output.fileoutputformat.compress</name>

``<value>``true``</value>

``</property>

``<property>

``<name>mapreduce.map.output.compress</name>

``<value>``true``</value>

``</property>

``<!-- 使用编解码器 -->

``<property>

``<name>mapreduce.output.fileoutputformat.compress.codec</name>

``<value>org.apache.hadoop.io.compress.SnappyCodec</value>

``</property>

</configuration>

2.2.6. 修改环境变量

vim /etc/profile

export HADOOP_HOME=/u01/hadoop-``3.3``.``6

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

2.3. 启动hadoop服务

2.3.1. 格式化namenode

hdfs namenode -format

2.3.2. 启动服务

./sbin/start-all.sh

启动成功后,使用jps命令查看服务

显示有NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager这5个服务

则为启动成功

查看hdfs和yarn的web界面,端口分别是50070和8088

2.4. 验证snappy压缩

验证方法:运行Hadoop的hadoop-mapreduce-examples-3.3.6.jar测试包进行wordcount,查看生成的文件大小

创建一个文件,input,键入以下内容或其它内容,把这个文件上传到hdfs,当然也可以使用本地文件

jakchquihfquhdqwhcn9eiuhcf198fh8chquihfquhdqwhcwqhdb9uchquihfquhdqwhch91ugh2ufgb92ufb2ufsfcd

2.4.1. 未开启压缩

把mapred-site.xml和core-site.xml相关的snappy配置去掉,重启hadoop服务,执行以下命令行

./bin/hadoop jar /u01/hadoop-``3.3``.``6``/share/hadoop/mapreduce/hadoop-mapreduce-examples-``3.3``.``6``.jar wordcount /u01/input /u01/output-n

查看生成的文件大小,验证结果

2.4.2. 开启压缩

执行以下命令行

./bin/hadoop jar /u01/hadoop-``3.3``.``6``/share/hadoop/mapreduce/hadoop-mapreduce-examples-``3.3``.``6``.jar wordcount /u01/input /u01/output-y4

查看生成的文件大小,验证结果

3. hbase部署

3.1. 下载安装包

cd /u01

wget https:``//dlcdn.apache.org/hbase/2.6.1/hbase-2.6.1-bin.tar.gz

tar -zxvf hbase-``2.6``.``1``-bin.tar.gz

cd hbase-``2.6``.``1

3.2. 修改配置文件

3.2.1. 修改hbase-site.xml

<configuration>

``<property>

``<name>hbase.cluster.distributed</name>

``<value>``true``</value>

``</property>

``<property>

``<name>hbase.rootdir</name>

``<value>hdfs:``//master2:9000/hbase</value>

``</property>

``<property>

``<name>hbase.tmp.dir</name>

``<value>/u01/hbase-``2.6``.``1``/tmp</value>

``</property>

``<property>

``<name>hbase.wal.provider</name>

``<value>filesystem</value>

``</property>

``<property>

``<name>hbase.io.compress.snappy.codec</name>

``<value>org.apache.hadoop.hbase.io.compress.xerial.SnappyCodec</value>

``</property>

</configuration>

3.2.2. 修改hbase-env.xml

如果启动出现SLF4J: Found binding in jar:file:/u01/hbase-2.6.1/lib/client-facing-thirdparty/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class

则添加以下配置

export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=``true

export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true 这个命令的作用是设置环境变量 HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUPtrue。这意味着在启动 HBase 时,将禁用 Hadoop 类路径查找功能。

通常情况下,HBase 在启动时会尝试查找 Hadoop 的类路径,以便能够与 Hadoop 集成。但是,在某些环境中,例如在不使用 Hadoop 或者希望使用自定义配置的情况下,禁用这个功能是有意义的。通过设置此环境变量为 true,可以避免 HBase 自动查找 Hadoop 类路径,从而可能解决一些依赖性问题或者提高启动速度。

3.2.3. 添加环境变量

vim /etc/profile 或者 在/home目录中的.bashrc文件中 添加

export HBASE_HOME=/u01/hbase-``2.6``.``1

export PATH=$PATH:$HBASE_HOME/bin

3.3. 启动hbase服务

./bin/start-hbase.sh

启动成功后,使用jps查看启动的服务有有HQuorumPeer、HMaster、HRegionServer

3.4. 验证snappy压缩

验证方法:使用hbase shell创建两张表compress_1219_3和no_compress_1219_3,一张指定使用snappy压缩,另一张不指定,然后使用hbase java api往这两张表写入相同的数据,观察表的存储大小情况

3.4.1. 建表

使用hbase shell

create ``'compress_1219_3'``,{ NAME => ``'cf'``, COMPRESSION => ``'SNAPPY' }

create ``'no_compress_1219_3'``,{ NAME => ``'cf' }

3.4.2. 生成数据

执行两次,依次向compress_1219_3和no_compress_1219_3写数据

package com.easipass;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Table;

import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

public class Main {

``public static void main(String[] args) ``throws IOException {

``Configuration configuration = HBaseConfiguration.create();

``configuration.set(``"hbase.zookeeper.property.clientPort"``, ``"2181"``);

``// 如果是集群 则主机名用逗号分隔

``configuration.set(``"hbase.zookeeper.quorum"``, ``"192.168.68.129"``);

``Connection connection = ConnectionFactory.createConnection(configuration);

``//修改为compress_1219_3和no_compress_1219_3,分别执行

``Table table = connection.getTable(TableName.valueOf(``"compress_1219_2"``));

``//rowkey

``for (``int i = ``1``; i < ``200000``; i++) {

``Put put = ``new Put(Bytes.toBytes(``"H5000000"``+i));

``//列簇,列名,列值

``put.addColumn(

``Bytes.toBytes(``"cf"``),

``Bytes.toBytes(``"name"``),

``Bytes.toBytes(``"AAAAAAABBBB中文Hadoop、hbase使用snappy压缩"``+``"5000000"``+i)

``);

``put.addColumn(

``Bytes.toBytes(``"cf"``),

``Bytes.toBytes(``"age"``),

``Bytes.toBytes(``"AAAAAAABBBB中age文Hadoop、hbase使用snappy压缩"``+``"5000000"``+i)

``);

``table.put(put);

``}

``table.close();

``connection.close();

``}

}

3.4.3. 从内存flush到磁盘

使用hbase shell的flush命令手动将两张表的数据从内存写到磁盘

flush ``'compress_1219_3'

flush ``'no_compress_1219_3'

3.4.4. 未开启压缩

查看表配置

查看region大小和表存储大小

再来查看hdfs的存储情况

第一列为一个副本的大小,第二列为3个副本占用的总存储大小

3.4.5. 开启压缩

查看表配置

查看region大小和表存储大小

共产生了一个region

再来查看hdfs的存储情况

第一列为一个副本的大小,第二列为3个副本占用的总存储大小

相关推荐
艾莉丝努力练剑1 小时前
【Git:综合复盘】Git 原理与使用
大数据·人工智能·git·elasticsearch·面试
IT研究室1 小时前
最新大数据毕业设计选题推荐-基于大数据的全球地震活动时空分布分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·数据分析·spark·课程设计
计算机源码社1 小时前
基于Hadoop+Spark的商家优惠券营销效果数据分析与可视化-基于Python的商家优惠券营销效果检测与评估分析系统
大数据·hadoop·python·数据挖掘·spark·毕业设计·数据可视化
AcaDesign2 小时前
上海市科技奖申报答辩ppt制作案例_科技进步奖ppt模板_技术发明奖ppt设计_自然科学奖ppt美化
大数据·科技·powerpoint
Raas1008 小时前
MAI Gateway(魔芋企业级AI网关)技术揭秘:AI网关支持哪些模型?从原理到落地
大数据·人工智能·网关·gateway·mai gateway·企业级产品
YangYang9YangYan11 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
大大大大晴天11 小时前
OpenMetadata VS DataHub VS Atlas VS Gravitino
大数据
Qyr9914 小时前
2026全球汽车碳刷行业发展全景分析报告
大数据
蓝速科技15 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
精益数智工坊15 小时前
云计算环境数据怎么同步?云计算集成方案有哪些?
大数据·人工智能·数据挖掘·数据可视化