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个副本占用的总存储大小

相关推荐
史嘉庆2 分钟前
Pandas 数据分析(二)【股票数据】
大数据·数据分析·pandas
唯余木叶下弦声1 小时前
PySpark之金融数据分析(Spark RDD、SQL练习题)
大数据·python·sql·数据分析·spark·pyspark
重生之Java再爱我一次2 小时前
Hadoop集群搭建
大数据·hadoop·分布式
中东大鹅3 小时前
MongoDB的索引与聚合
数据库·hadoop·分布式·mongodb
豪越大豪4 小时前
2024年智慧消防一体化安全管控年度回顾与2025年预测
大数据·科技·运维开发
互联网资讯4 小时前
详解共享WiFi小程序怎么弄!
大数据·运维·网络·人工智能·小程序·生活
AI2AGI5 小时前
天天AI-20250121:全面解读 AI 实践课程:动手学大模型(含PDF课件)
大数据·人工智能·百度·ai·文心一言
雪芽蓝域zzs6 小时前
JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码
数据仓库·hive·hadoop
贾贾20236 小时前
配电自动化中的进线监控技术
大数据·运维·网络·自动化·能源·制造·信息与通信