Hbase完全分布式部署与安装
一、案例实验环境
操作系统 | IP地址 | 主机名 | 备注 |
---|---|---|---|
centos7.9 | 192.168.10.128 | node1 | jdk-8u171-linux-x64.rpm hadoop-2.6.5.tar.gz hbase-1.0.2-bin.tar.gz |
centos7.9 | 192.168.10.129 | node2 | jdk-8u171-linux-x64.rpm |
centos7.9 | 192.168.10.130 | node3 | jdk-8u171-linux-x64.rpm |
关闭防火墙(所有节点全部执行)
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld</span></span>
关闭selinux
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@localhost ~]# sed -i /^SELINUX/s/enforcing/disabled/ /etc/selinux/config
[root@localhost ~]# reboot </span></span>
修改主机名
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@localhost ~]# hostnamectl set-hostname node1 192.168.10.128
[root@localhost ~]# hostnamectl set-hostname node2 192.168.10.129
[root@localhost ~]# hostnamectl set-hostname node3 192.168.10.130</span></span>
修改hosts文件(/etc/hosts),所有节点执行
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# cat >>/etc/hosts <<EOF
192.168.10.128 node1
192.168.10.129 node2
192.168.10.130 node3
EOF</span></span>
搭建时间同步服务,所有节点全部执行(此处同步的是阿里云服务器时间)
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# yum -y install ntpdate
[root@node1 ~]# ntpdate ntp.aliyun.com
19 Jul 11:48:34 ntpdate[8321]: step time server 203.107.6.88 offset 545406.063268 sec
[root@node1 ~]# date
Tue Jul 19 11:49:02 CST 2022</span></span>
二、安装Hadoop 运行环境
1、创建用户,首先在所有节点新建用户 hduser,然后设置权限
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# groupadd hadoop // 创建 hadoop 用户组
[root@node1 ~]# useradd -g hadoop hduser //创建 hduser 用户
[root@node1 ~]# passwd hduser //设置 hduser 的密码</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# vi /etc/sudoers //在root添加hduser ALL=(ALL) ALL</span></span>
2、安装jdk、配置免密登录
1.所有节点都安装jdk-8u171-linux-x64.rpm
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# rpm -vih jdk-8u171-linux-x64.rpm
[root@node1 ~]# vi /etc/profile //配置环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64 //在末尾添加
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
[root@node1 ~]# source /etc/profile //加载环境变量
[root@node1 ~]# java -version //验证jdk
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)</span></span>
2、配置本机 SSH 免密码登录(只在node1节点执行)
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# ssh-keygen -t rsa //一路回车
[root@node1 ~]# ssh-copy-id node1
[root@node1 ~]# ssh-copy-id node2
[root@node1 ~]# ssh-copy-id node3</span></span>
4、安装 Hadoop
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# tar zxvf hadoop-2.6.5.tar.gz -C /home/hduser/ //解压文件指定安装目录/home/hduser
[root@node1 ~]# cd /home/hduser/
[root@node1 hduser]# mv hadoop-2.6.5/ hadoop //解压后重命名为 hadoop</span></span>
进入“hadoop”目录,其目录结构如下:
bin:执行文件目录。包含 hadoop、hdfs、yarn 等命令,所有用户均可执行。
etc:Hadoop 配置文件都在此目录。
include:包含 C 语言接口开发所需头文件。
lib:包含 C 语言接口开发所需链接库文件。
libexec:运行 sbin 目录中的脚本会调用该目录下的脚本。
logs:日志目录,在运行过 Hadoop 后会生成该目录。
sbin:仅超级用户能够执行的脚本,包括启动和停止 dfs、yarn 等。
share: 包括 doc 和 hadoop 两个目录, 其中 doc 目录包含大量的 Hadoop帮助文档;hadoop 目录包含了运行 Hadoop 所需的所有 jar 文件,在开发中用到的 jar 文件也可在该目录找到
2、配置 hadoop 环境变量,所有节点全部执行
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hduser]# vi /etc/profile
export HADOOP_HOME=/home/hduser/hadoop //末尾添加
export PATH=$HADOOP_HOME/bin:$PATH
[root@node1 hduser]# source /etc/profile</span></span>
3、配置 hadoop
先进入 node1 进行配置,随后将配置文件复制到 node2、node3。配置 Hadoop 主要涉及的配置文件有 7 个,都在 hadoop/etc/hadoop 文件夹下,包括:hadoop-env.sh、 yarn-env.sh、slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。具体配置如下
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# cd /home/hduser/hadoop/etc/hadoop/
[root@node1 hadoop]# vi hadoop-env.sh //25行添加注释,在26行出入以下内容
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64 //插入jdk的路径</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# vi yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64 //开头部分添加此内容</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# vi slaves #打开并清空原内容
node2 #添加
node3 #添加
[root@node1 hadoop]# vi core-site.xml #将最后两行删除,插入一下内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hduser/hadoop/tmp</value>
</property>
</configuration></span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# vi hdfs-site.xml 在第19和21行中间插入一下内容
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
#Secondary NameNode 服务器 HTTP 地址和端口
<value>node1:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
#NameNode 存储名字空间及汇报日志的位置
<value>file:/home/hduser/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
#DataNode 存放数据块的目录列表
<value> file:/home/hduser/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
#冗余备份数量,一份数据可设置多个拷贝
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
#在NameNode 和 DataNode 中启用
WebHDFS
<value>true</value>
</property>
</configuration></span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# cp mapred-site.xml.template mapred-site.xml //从末班文件中复制一个出来
[root@node1 hadoop]# vi mapred-site.xml //在19和21行中间添加以下内容
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
</configuration></span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# vi yarn-site.xml //后三行删除添加以下内容
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>node1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>node1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>node1:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>node1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>node1:8088</value>
</property>
</configuration></span></span>
![image-20220719152809881](img/image-20220719152809881.png
将这 7 个文件复制到 node2、node3 的同目录下
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# scp -r /home/hduser/hadoop node2:/home/hduser
[root@node1 hadoop]# scp -r /home/hduser/hadoop node3:/home/hduser</span></span>
4、验证安装配置
(1) 在 node1上格式化 NameNode
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# cd /home/hduser/hadoop/
[root@node1 hadoop]# bin/hdfs namenode -format
[root@node1 hadoop]# sbin/start-dfs.sh //启动
也可以使用
sbin/start-all.sh 同时启动
</span></span>
5、查看进程启动YARN
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# jps //查看Java进程
[root@node1 hadoop]#sbin/start-yarn.sh 启动</span></span>
查看集群状态
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hadoop]# bin/hdfs dfsadmin -report </span></span>
5、安装Hbase
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 ~]# tar zxvf hbase-1.0.2-bin.tar.gz -C /home/hduser/ //解压指定解压目录/home/hduser/
[root@node1 ~]# cd /home/hduser/hbase-1.0.2/ //进入解压路径</span></span>
修改hbase配置文件
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hbase-1.0.2]# vi conf/hbase-site.xml //删除末尾两行插入以下内容
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase01</value>
<description>配置 HRegionServer 的数据库存储目录</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>配置 HBase 为完全分布式</description>
</property>
<property>
<name>hbase.master</name>
<value>node1:60000</value>
<description>配置 HMaster 的地址</description>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1,node2,node3</value>
<description>配置 ZooKeeper 集群服务器的位置</description>
</property>
</configuration></span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hbase-1.0.2]# vi conf/hbase-env.sh //在末尾添加一下内容
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export HADOOP_HOME=/home/hduser/hadoop
export HBASE_HOME=/home/hduser/hbase-1.0.2
export HBASE_MANAGES_ZK=true
[root@node1 hbase-1.0.2]# vi conf/regionservers //清空内容
node2
node3</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hbase-1.0.2]# scp -r /home/hduser/hbase-1.0.2 node2:/home/hduser/
[root@node1 hbase-1.0.2]# scp -r /home/hduser/hbase-1.0.2 node:/home/hduser/</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hbase-1.0.2]# bin/start-hbase.sh //启动Hbase
[root@node1 hbase-1.0.2]# bin/hbase shell //登入数据库
hbase(main):001:0> status</span></span>
创建一个表kgc
<span style="background-color:#f8f8f8"><span style="color:#333333">hbase(main):002:0> create 'kgc' ,'nianji','chengji'
hbase(main):003:0> list
TABLE
kgc
1 row(s) in 0.0180 seconds
=> ["kgc"]
hbase(main):004:0> put 'kgc','xiaoyi','chengji:shengwu','100' //插入一条数据,小易 成绩生物100
hbase(main):006:0> describe 'kgc' //查看表的信息
hbase(main):007:0> scan 'kgc' //扫描表
ROW COLUMN+CELL
xiaoyi column=chengji:shengwu, timestamp=16582878
01012, value=100
1 row(s) in 0.0440 seconds
hbase(main):011:0> put 'kgc','sanjiang','chengji:yingyu','150' //插入数据
hbase(main):023:0> scan 'kgc' 扫描表信息
ROW COLUMN+CELL
sanjiang column=chengji:yingyu, timestamp=165828808
3428, value=150
xiaoyi column=chengji:shengwu, timestamp=16582878
01012, value=100
2 row(s) in 0.0070 seconds</span></span>
6、 MapReduce 与 Hbase
-
将 hbase-site.xml 复制到/home/hduser/hadoop/etc/hadoop/ 下
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@node1 hbase-1.0.2]# cp /home/hduser/hbase-1.0.2/conf/hbase-site.xml /home/hduser/hadoop/etc/hadoop/
编辑hadoop-env.sh,增加一行
[root@node1 hbase-1.0.2]# vi /home/hduser/hadoop/etc/hadoop/hadoop-env.sh //在末尾添加
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/home/hduser/hbase-1.0.2/lib/*
最后注意将上述操作的两个文件,复制到 Hadoop 集群中其它节点上
[root@node1 hbase-1.0.2]# scp /home/hduser/hadoop/etc/hadoop/hbase-site.xml /home/hduser/hadoop/etc/hadoop/hadoop-env.sh node2:/home/hduser/hadoop/etc/hadoop/
[root@node1 hbase-1.0.2]# scp /home/hduser/hadoop/etc/hadoop/hbase-site.xml /home/hduser/hadoop/etc/hadoop/hadoop-env.sh node3:/home/hduser/hadoop/etc/hadoop/
[root@node1 hduser]# cd /home/hduser/
使用以下命令测试 kgc是hbase里面的表,可以统计出这个表的行数
[root@node1 hduser]# hadoop/bin/hadoop jar /home/hduser/hbase-1.0.2/lib/hbase-server-1.0.2.jar rowcounter kgc
</span></span>