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_LOOKUP
为 true
。这意味着在启动 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个副本占用的总存储大小