如何部署Oracle Linux 10.x Apache HBase 1.2.0集群?
- By : Will
- Category : Apache-Hadoop
1 基础知识
2 最佳实践
2.1 环境信息
2.1.1 角色Hadoop HDFS的基本信息
IP Address = 10.168.0.10[1-3]
OS = Oracle Linux 10.x x86_64
Host Name = hd0[1-3].cmdschool.org
详细的角色分布如下,
Apache Hadoop HDFS NameNode(hdfs-nn) = hd01.cmdschool.org
Apache Hadoop HDFS SecondaryNameNode(hdfs-snn) = hd02.cmdschool.org
Apache Hadoop HDFS DataNode(hdfs-snn) = hd0[1-3].cmdschool.org
需要注意的是如果你尚未配置HDFS,请参阅
2.1.2 角色Apache Hadoop YARN的基本信息
IP Address = 10.168.0.10[1-3] OS = Oracle Linux 10.x x86_64
Host Name = hd0[1-3].cmdschool.org
详细的角色分布如下,
Apache Hadoop YARN ResourceManager(yarn-rm) = hd01.cmdschool.org
Apache Hadoop YARN NodeManager(yarn-nm) = hd0[1-3].cmdschool.org
需要注意的是如果你尚未配置HDFS,请参阅
2.1.3 角色Apache ZooKeeper的基本信息
IP Address = 10.168.0.10[1-3]
OS = Oracle Linux 10.x x86_64
Host Name = hd0[1-3].cmdschool.org
详细的角色分布如下,
Apache Hadoop ZooKeeper(zoo) = hd0[1-3].cmdschool.org.cmdschool.org
需要注意的是如果你尚未配置ZooKeeper,请参阅
2.1.4 角色Apache HBase的基本信息
hostname = hd[01-3].cmdschool.org
ipaddress = 10.168.0.10[1-3]
OS = Oracle Linux 10.x x86_64
详细的角色分布如下,
HBase Master(hbase-master) = hd01.cmdschool.org
HBase BackupMaster(hbase-bmaster) = hd02.cmdschool.org
Hbase RegionServers(hbase-region) = hd0[1-3].cmdschool.org
2.2 系统的基本配置
In hd0[1-3],
vim /etc/security/limits.d/hadoop.conf
加入如下配置,
hadoop soft nproc 32000 hadoop hard nproc 32000
另外,还需要配置以下配置才能使limits配置生效,
vim /etc/pam.d/common-session
加入如下配置,
session required pam_limits.so
2.3 软件环境配置
2.3.1 下载软件包
In hd0[1-3],
cd ~ wget https://archive.apache.org/dist/hbase/1.2.0/hbase-1.2.0-bin.tar.gz
如果你需要其他版本,请从以下链接下载,
http://archive.apache.org/dist/hbase/
2.3.2 解压软件包
In hd0[1-3],
tar -xf hbase-1.2.0-bin.tar.gz
2.4 部署软件包
2.4.1 配置运行用户
In hd0[1-3],
groupadd hbase useradd -g hbase -d /var/lib/hbase/ hbase
2.4.2 部署软件到目录
In hd0[1-3],
mv hbase-1.2.0 /usr/ ln -s /usr/hbase-1.2.0/conf /etc/hbase chown hbase:hbase -R /usr/hbase-1.2.0/ chmod 755 -R /usr/hbase-1.2.0/
2.4.3 配置主到从节点的hbase用户公钥认证
In hd01,
su - hbase mkdir ~/.ssh ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
以上命令创建公钥证书,以下命令利用root复制证书到各个从节点:
In hd01,
cp /var/lib/hbase/.ssh/id_rsa.pub /var/lib/hbase/.ssh/authorized_keys chown hbase:hbase -R /var/lib/hbase/.ssh/ chmod 0600 /var/lib/hbase/.ssh/authorized_keys ssh hd02 mkdir -p /var/lib/hbase/.ssh/ scp /var/lib/hbase/.ssh/id_rsa.pub hd02:/var/lib/hbase/.ssh/authorized_keys ssh hd02 chown hbase:hbase -R /var/lib/hbase/.ssh/ ssh hd02 chmod 0600 /var/lib/hbase/.ssh/authorized_keys ssh hd03 mkdir -p /var/lib/hbase/.ssh/ scp /var/lib/hbase/.ssh/id_rsa.pub hd03:/var/lib/hbase/.ssh/authorized_keys ssh hd03 chown hbase:hbase -R /var/lib/hbase/.ssh/ ssh hd03 chmod 0600 /var/lib/hbase/.ssh/authorized_keys
配置完成后,可使用如下命令测试,
In hd01,
su - hbase ssh hd01 ssh hd02 ssh hd03
2.4.4 配置从到主节点的hbase用户公钥认证
In hd01,
su - hbase scp /var/lib/hbase/.ssh/id_rsa hd02:/var/lib/hbase/.ssh/id_rsa scp /var/lib/hbase/.ssh/id_rsa hd03:/var/lib/hbase/.ssh/id_rsa
配置完成或,务必使用如下命令测试公钥认证,
In hd0[1-3],
su - hbase ssh hd01
注:以上,如果不用输入密码即可完成登录,则配置完成。
2.5 配置软件包
2.5.1 配置软件包的环境变量
In hd0[1-3],
vim /etc/profile.d/hbase.sh
加入如下定义,
export HBASE_HOME=/usr/hbase-1.2.0
export PATH=${HBASE_HOME}/bin:$PATH
export HBASE_CONF_DIR=/etc/hbase
export HBASE_STOP_TIMEOUT=1200
export HBASE_MASTER=hd01:${HBASE_HOME}
– 变量“HBASE_HOME”声明HBase的家目录
– 变量“PATH”声明可执行文件的位置(加入HBase执行文件的声明)
– 变量“HBASE_CONF_DIR”声明HBase配置文件路径
– 变量“HBASE_MASTER”声明使用RSync同步的HBase目标主机与目录
创建完成后,你需要使用如下命令导入环境变量,
source /etc/profile.d/hbase.sh
配置环境变量所需的目录,
mkdir -p /var/run/hbase/ /var/log/hbase chown hbase:hbase /var/run/hbase/ /var/log/hbase chmod 775 /var/run/hbase/ /var/log/hbase
2.5.2 配置HBase的启动环境变量
In hd01,
cp /usr/hbase-1.2.0/conf/hbase-env.sh /usr/hbase-1.2.0/conf/hbase-env.sh.default vim /usr/hbase-1.2.0/conf/hbase-env.sh
修改如下参数,
export JAVA_HOME=/usr/java/jdk1.8.0_121 export HBASE_LOG_DIR=/var/log/hbase export HBASE_IDENT_STRING=$USER export HBASE_NICENESS=10 export HBASE_PID_DIR=/var/run/hbase export HBASE_MANAGES_ZK=false
– 变量“JAVA_HOME”声明JDK的家目录
– 变量“HBASE_LOG_DIR”声明HBase日志目录位置
– 变量“HBASE_IDENT_STRING”声明HBase的运行用户
– 变量“HBASE_NICENESS”声明HBase的运行级别
– 变量“HBASE_PID_DIR”声明HBase的PID目录位置
– 变量“HBASE_MANAGES_ZK”设置为“false”声明Hbase不管理ZooKeeper(即ZooKeeper是独立分开的)
另外,由于使用的是JDK8+,所以如下行需要注释掉,
# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+ #export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m" #export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
否则启动服务可见如下提示,
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
2.6 配置PrimaryMaster节点
2.6.1 配置HBase启动所需的目录
In hd01,
su - hdfs hdfs dfs -mkdir /hbase hdfs dfs -chown hbase:hbase /hbase
配置完毕后,我们建议使用如下命令确认,
su - hdfs hdfs dfs -ls /
可见如下显示,
Found 1 items drwxr-xr-x - hbase hbase 0 2019-12-20 16:05 /hbase
2.6.2 修改HBase主配置文件
In hd01,
cp /usr/hbase-1.2.0/conf/hbase-site.xml /usr/hbase-1.2.0/conf/hbase-site.xml.default vim /usr/hbase-1.2.0/conf/hbase-site.xml
修改配置如下,
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hd01:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hd01,hd02,hd03</value>
</property>
</configuration>
参数解析,
– 参数“hbase.rootdir”定义HBase的数据目录到HDFS的名称节点主机名称为“hd01”的“/hbase”目录
– 参数“hbase.cluster.distributed”设置“true”即声明集群使用完全分布模式
– 参数“hbase.zookeeper.quorum”指定ZooKeeper仲裁的主机列表(主机间使用逗号分隔)
2.6.3 手动同步主节点配置
In hd01,
su - hbase -c 'rsync -a -e ssh --delete $HBASE_MASTER/ "$HBASE_HOME"'
2.6.4 手动启动服务
In hd01,
su - hbase -c '/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase/ start master'
可见如下显示,
starting master, logging to /var/log/hbase/hbase-hbase-master-hd01.cmdschool.org.out
我们建议你检查以下日志,
cat /var/log/hbase/hbase-hbase-master-*.out
如果有如下错误提示,
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/hbase-1.2.0/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/hadoop-2.6.5/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
以上为包冲突,我们建议你使用如下命令删除HBase目录的包,
rm -rf /usr/hbase-1.2.0/lib/slf4j-log4j12-1.7.5.jar
另外,如果服务无法正常启动,请检查如下日志,
cat /var/log/hbase/hbase-hbase-master-*.log
可使用如下命令检查启动的进程,
pgrep -a -u hbase java
可见如下显示,
12171 /usr/java/jdk1.8.0_121/bin/java -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -XX:+UseConcMarkSweepGC -Dhbase.log.dir=/var/log/hbase -Dhbase.log.file=hbase-hbase-master-hd01.cmdschool.org.log -Dhbase.home.dir=/usr/hbase-1.2.0 -Dhbase.id.str=hbase -Dhbase.root.logger=INFO,RFA -Djava.library.path=/usr/hadoop-2.6.5/lib/native -Dhbase.security.logger=INFO,RFAS org.apache.hadoop.hbase.master.HMaster start
可使用如下命令查看服务倾听的端口,
ss -antp | grep -f<(pgrep -u hbase java)
可见如下显示,
LISTEN 0 128 *:16010 *:* users:(("java",pid=133496,fd=365))
LISTEN 0 128 [::ffff:10.168.0.101]:16000 *:* users:(("java",pid=133496,fd=320))
ESTAB 0 0 [::ffff:10.168.0.101]:51776 [::ffff:10.168.0.103]:2181 users:(("java",pid=133496,fd=381))
ESTAB 0 0 [::ffff:10.168.0.101]:37818 [::ffff:10.168.0.102]:2181 users:(("java",pid=133496,fd=372))
ESTAB 0 0 [::ffff:10.168.0.101]:46462 [::ffff:10.168.0.101]:2181 users:(("java",pid=133496,fd=363))
ESTAB 0 0 [::ffff:10.168.0.101]:34030 [::ffff:10.168.0.101]:9000 users:(("java",pid=133496,fd=373))
ESTAB 0 0 [::ffff:10.168.0.101]:46478 [::ffff:10.168.0.101]:2181 users:(("java",pid=133496,fd=385))
根据以上倾听的端口,你可能需要执行以下命令开放服务所需的端口,
firewall-cmd --permanent --add-port 16000/tcp --add-port 16010/tcp firewall-cmd --reload firewall-cmd --list-all
2.6.5 手动停止服务
In hd01,
su - hbase -c '/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase/ stop master'
可见如下显示,
stopping master.
2.6.6 配置服务控制脚本
In hd01,
vim /usr/lib/systemd/system/hbase-master.service
可加入如下配置,
[Unit] Description=Apache HBase manager Wants=network.target Before=network.target After=network-pre.target Documentation=https://hbase.apache.org/book.html [Service] Type=forking User=hbase Group=hbase Environment="HBASE_HOME=/usr/hbase-1.2.0" Environment="HBASE_CONF_DIR=/etc/hbase" Environment="HBASE_STOP_TIMEOUT=1200" Environment="HBASE_MASTER=hd01:/usr/hbase-1.2.0" ExecStartPre=+/bin/sh -c 'mkdir -p /var/run/hbase;chown hbase:hbase /var/run/hbase;chmod 775 /var/run/hbase' ExecStartPre=+/bin/sh -c 'mkdir -p /var/log/hbase;chown hbase:hbase /var/log/hbase;chmod 775 /var/log/hbase' ExecStartPre=rsync -a -e ssh --delete $HBASE_MASTER/ $HBASE_HOME ExecStart=/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase/ start master ExecStop=/usr/bin/kill -SIGINT $MAINPID PIDFile=/var/run/hbase/hbase-hbase-master.pid Restart=on-success LimitNPROC=32000 [Install] WantedBy=multi-user.target
修改完脚本后,你需要使用如下命令重载服务,
systemctl daemon-reload
你可使用如下命令启动服务并设置自启动,
systemctl start hbase-master.service systemctl status hbase-master.service systemctl enable hbase-master.service
2.7 配置BackupMaster节点
2.7.1 手动同步主节点配置
In hd02,
su - hbase -c 'rsync -a -e ssh --delete $HBASE_MASTER/ "$HBASE_HOME"'
2.7.2 手动启动服务
In hd02,
su - hbase -c '/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase/ start master'
可见如下显示,
starting master-backup, logging to /var/log/hbase/hbase-hbase-master-backup-hd02.cmdschool.org.out
我们建议你检查以下日志,
cat /var/log/hbase/hbase-hbase-master-*.out
另外,如果服务无法正常启动,请检查如下日志,
cat /var/log/hbase/hbase-hbase-master-*.log
可使用如下命令检查启动的进程,
pgrep -a -u hbase java
可见如下显示,
227581 /usr/java/jdk1.8.0_121/bin/java -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -Dhbase.log.dir=/var/log/hbase -Dhbase.log.file=hbase-hbase-master-hd02.cmdschool.org.log -Dhbase.home.dir=/usr/hbase-1.2.0 -Dhbase.id.str=hbase -Dhbase.root.logger=INFO,RFA -Djava.library.path=/usr/hadoop-2.6.0/lib/native -Dhbase.security.logger=INFO,RFAS org.apache.hadoop.hbase.master.HMaster start
可使用如下命令查看服务倾听的端口,
ss -antp | grep -f <(pgrep -u hbase java)
可见如下显示,
LISTEN 0 128 *:16010 *:* users:(("java",pid=227581,fd=364))
LISTEN 0 128 [::ffff:10.168.0.102]:16000 *:* users:(("java",pid=227581,fd=319))
ESTAB 0 0 [::ffff:10.168.0.102]:55816 [::ffff:10.168.0.101]:2181 users:(("java",pid=227581,fd=371))
ESTAB 0 0 [::ffff:10.168.0.102]:44520 [::ffff:10.168.0.102]:2181 users:(("java",pid=227581,fd=362))
根据以上倾听的端口,你可能需要执行以下命令开放服务所需的端口,
firewall-cmd --permanent --add-port 16000/tcp --add-port 16010/tcp firewall-cmd --reload firewall-cmd --list-all
2.7.3 手动停止服务
In hd02,
su - hbase -c '/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase stop master'
可见如下显示,
stopping master.
如果遇到如下错误提示,
no master-backup to stop because no pid file /var/run/hbase/hbase-hbase-master-backup.pid
可尝试使用如下命令停止服务,
su - hbase -c '/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase --hosts /etc/hbase/backup-masters stop master --backup'
2.7.4 配置服务控制脚本
In hd02,
vim /usr/lib/systemd/system/hbase-master.service
可加入如下配置,
[Unit] Description=Apache HBase manager Wants=network.target Before=network.target After=network-pre.target Documentation=https://hbase.apache.org/book.html [Service] Type=forking User=hbase Group=hbase Environment="HBASE_HOME=/usr/hbase-1.2.0" Environment="HBASE_CONF_DIR=/etc/hbase" Environment="HBASE_STOP_TIMEOUT=1200" Environment="HBASE_MASTER=hd01:/usr/hbase-1.2.0" ExecStartPre=+/bin/sh -c 'mkdir -p /var/run/hbase;chown hbase:hbase /var/run/hbase;chmod 775 /var/run/hbase' ExecStartPre=+/bin/sh -c 'mkdir -p /var/log/hbase;chown hbase:hbase /var/log/hbase;chmod 775 /var/log/hbase' ExecStartPre=rsync -a -e ssh --delete $HBASE_MASTER/ $HBASE_HOME ExecStart=/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase/ start master ExecStop=/usr/bin/kill -SIGINT $MAINPID PIDFile=/var/run/hbase/hbase-hbase-master.pid Restart=on-success LimitNPROC=32000 [Install] WantedBy=multi-user.target
修改完脚本后,你需要使用如下命令重载服务,
systemctl daemon-reload
你可使用如下命令启动服务并设置自启动,
systemctl start hbase-master.service systemctl status hbase-master.service systemctl enable hbase-master.service
2.8 配置RegionServers节点
2.8.1 手动同步主节点配置
In hd0[1-3],
su - hbase -c 'rsync -a -e ssh --delete $HBASE_MASTER/ "$HBASE_HOME"'
2.8.2 手动启动服务
In hd0[1-3],
su - hbase -c '/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase start regionserver'
可见如下显示,
starting regionserver, logging to /var/log/hbase/hbase-hbase-regionserver-hd01.cmdschool.org.out
我们建议你检查以下日志,
cat /var/log/hbase/hbase-hbase-regionserver-*.out
另外,如果服务无法正常启动,请检查如下日志,
cat /var/log/hbase/hbase-hbase-regionserver-*.log
可使用如下命令检查启动的进程,
pgrep -a -u hbase java | grep regionserver
可见如下显示,
135780 /usr/java/jdk1.8.0_121/bin/java -Dproc_regionserver -XX:OnOutOfMemoryError=kill -9 %p -Dhbase.log.dir=/var/log/hbase -Dhbase.log.file=hbase-hbase-regionserver-hd01.cmdschool.org.log -Dhbase.home.dir=/usr/hbase-1.2.0 -Dhbase.id.str=hbase -Dhbase.root.logger=INFO,RFA -Djava.library.path=/usr/hadoop-2.6.0/lib/native -Dhbase.security.logger=INFO,RFAS org.apache.hadoop.hbase.regionserver.HRegionServer start
可使用如下命令查看服务倾听的端口,
ss -antp | grep -f <(jps | grep HRegionServer | awk '{print $1}')
可见如下显示,
LISTEN 0 128 *:16030 *:* users:(("java",pid=135780,fd=364))
LISTEN 0 128 [::ffff:10.168.0.101]:16020 *:* users:(("java",pid=135780,fd=319))
ESTAB 0 0 [::ffff:10.168.0.101]:16020 [::ffff:10.168.0.101]:58012 users:(("java",pid=135780,fd=381))
ESTAB 0 0 [::ffff:10.168.0.101]:41230 [::ffff:10.168.0.101]:50010 users:(("java",pid=135780,fd=377))
ESTAB 0 0 [::ffff:10.168.0.101]:55542 [::ffff:10.168.0.103]:2181 users:(("java",pid=135780,fd=371))
CLOSE-WAIT 1 0 [::ffff:10.168.0.101]:44396 [::ffff:10.168.0.101]:50010 users:(("java",pid=135780,fd=387))
ESTAB 0 0 [::ffff:10.168.0.101]:16020 [::ffff:10.168.0.101]:58014 users:(("java",pid=135780,fd=386))
ESTAB 0 0 [::ffff:10.168.0.101]:51487 [::ffff:10.168.0.101]:16000 users:(("java",pid=135780,fd=372))
ESTAB 0 0 [::ffff:10.168.0.101]:39270 [::ffff:10.168.0.101]:50010 users:(("java",pid=135780,fd=382))
ESTAB 0 0 [::ffff:10.168.0.101]:39894 [::ffff:10.168.0.102]:2181 users:(("java",pid=135780,fd=362))
根据以上倾听的端口,你可能需要执行以下命令开放服务所需的端口,
firewall-cmd --permanent --add-port 16020/tcp --add-port 16030/tcp firewall-cmd --reload firewall-cmd --list-all
2.8.3 手动停止服务
In hd0[01-3],
su - hbase -c '/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase stop regionserver'
可见如下显示,
stopping regionserver.
2.8.4 配置服务控制脚本
In hd0[1-3],
vim /usr/lib/systemd/system/hbase-region.service
可加入如下配置,
[Unit] Description=Apache HBase manager Wants=network.target Before=network.target After=network-pre.target Documentation=https://hbase.apache.org/book.html [Service] Type=forking User=hbase Group=hbase Environment="HBASE_HOME=/usr/hbase-1.2.0" Environment="HBASE_CONF_DIR=/etc/hbase" Environment="HBASE_STOP_TIMEOUT=1200" Environment="HBASE_MASTER=hd01:/usr/hbase-1.2.0" ExecStartPre=+/bin/sh -c 'mkdir -p /var/run/hbase;chown hbase:hbase /var/run/hbase;chmod 775 /var/run/hbase' ExecStartPre=+/bin/sh -c 'mkdir -p /var/log/hbase;chown hbase:hbase /var/log/hbase;chmod 775 /var/log/hbase' ExecStartPre=rsync -a -e ssh --delete $HBASE_MASTER/ "$HBASE_HOME" ExecStart=/usr/hbase-1.2.0/bin/hbase-daemon.sh --config /etc/hbase/ --hosts /etc/hbase/regionservers start regionserver ExecStop=/usr/bin/kill -SIGINT $MAINPID PIDFile=/var/run/hbase/hbase-hbase-regionserver.pid Restart=on-success LimitNPROC=32000 [Install] WantedBy=multi-user.target
修改完脚本后,你需要使用如下命令重载服务,
systemctl daemon-reload
你可使用如下命令启动服务并设置自启动,
systemctl start hbase-region.service systemctl status hbase-region.service systemctl enable hbase-region.service
2.8.5 查看集群服务
http://hd01.cmdschool.org:16010/

没有评论