从零搭建Hadoop+Zookeeper+HBase完全分布式集
前言
实验室项目需要部署一个hadoop集群,虽然自己之前用虚拟机也搭建过伪分布式的hadoop集群,但那个时候也是有问题就问度娘,没有系统整理,于是,对搭建过程也几乎是像小白一样懵逼~~~因此,这次记录下整个过程,尤其是踩过的坑,方便后来自己查阅,也希望能帮助到正在搭建集群的你。
先来介绍下集群的系统配置:
- 系统环境:Ubuntu 16.04
- Java Jdk:1.8.0_191
- Hadoop:2.8.5
- Zookeeper:3.4.12
- HBase:2.1.0
为了方便介绍,这里我以3台服务器为例进行介绍,下面是主机的一些信息:
主机名 | IP |
---|---|
master | 10.100.200.220 |
slave1 | 10.100.200.221 |
slave2 | 10.100.200.222 |
为了清晰直观,本文针对每一部分都给出了每个主机的配置清单。其中标记了√为需要配置,标记了X为不需要配置。
准备工作
由于是从零开始搭建集群,所以需要做好一些前期准备工作——配置用户和用户组、配置主机名、安装配置SSH、配置免密登录SSH、关闭防火墙等。这些配置是集群搭建的最最基础的部分,希望读者耐心配置。
配置清单
准备工作的配置清单如下:
配置项 | master | slave1 | slave2 |
---|---|---|---|
配置用户和用户组 | √ | √ | √ |
配置主机名 | √ | √ | √ |
安装配置SSH | √ | √ | √ |
配置免密登录SSH | √ | √ | √ |
关闭防火墙 | √ | √ | √ |
配置用户和用户组
搭建hadoop集群环境要求所有主机的用户和用户组要完全一致。配置过程如下:
-
新建用户,建议用adduser命令。
sudo adduser hadoop
因为使用了sudo命令,所以要输入当前用户的密码才能进行下一步的操作。配置hadoop用户密码需要输入两次密码,然后一直按回车,最后输入Y确定。
-
在创建hadoop用户的同时也创建了hadoop用户组,下面把hadoop用户加入到hadoop用户组。
sudo usermod -a -G hadoop hadoop
-
前面一个hadoop是组名,后面一个hadoop是用户名。完成后输入一下命令查询结果。
cat /etc/group
-
然后再把hadoop用户赋予root权限,让他可以使用sudo命令。
sudo vi /etc/sudoers
修改文件如下:
# User privilege specification root ALL=(ALL) ALL hadoop ALL=(ALL) ALL # 添加这一行配置
保存退出,hadoop用户就拥有了root权限。
配置主机名
我们一开始就给出了3台主机的主机名(master、slave1、slave2),但是默认的主机名却是千奇百怪,因此要把原来的主机名改成我们设定的。
-
编辑 /etc/hostname ,把里面的内容更改为你所需要的设定的主机名。
sudo vim /etc/hostname
-
更改hosts文件,修改(或增加)127.0.1.1后面的名称改为设定值。
sudo vim /etc/hosts
-
重启服务器,更改生效。
sudo reboot
-
验证。重新登录后,会发现主机名已经更改为设定值了。
hostname -
修改host文件,配置域名。编辑hosts文件:
sudo vi /etc/hosts
添加下面内容:
10.100.200.220 master 10.100.200.221 slave1 10.100.200.222 slave2
踩坑记录:主机名和hosts文件中设置的名称应当保持一致,否则会产生意外的错误。另外,建议把/etc/hosts文件中的127.0.0.1 localhost给注释掉。为避免表述不清,让大家产生疑惑,直接贴出hosts文件的截图。
hosts安装配置SSH
在Hadoop运行过程中,主从机之间是通过SSH进行通信的,所以需要对所有主机进行SSH的安装和配置工作。
- 先更新一下apt。
sudo apt-get update
- 接下来,安装SSH。
sudo apt-get install openssh-server
- 安装完成之后,使用下面的命令来查看SSH是否安装成功。
如果有输出就表示SSH安装成功了。也可以使用SSH登陆本地机器来测试一下。ps -e | grep ssh
ssh localhost
温馨提示:安装好SSH之后,大家就可以使用SSH进行远程操作了。如果是虚拟机的话,大家可能对此没有什么感觉;但如果是物理机的话,这就十分方便了。集群中所有主机的配置只需要一台MAC就搞定了。
配置免密登录SSH
主机间免密登录才能实现主机间的顺畅通信,因此该环节非常重要!
-
在master主机上生成密钥对。
ssh-keygen -t rsa
输入后一直回车选择默认即可。
keygen
-
将公钥(~/.ssh/id_rsa.pub中的内容)复制到文件authorized_keys中去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
-
分别在从机slave1,slave2上都进行同样的操作,同时将两个从机的公玥都复制奥主机master的~/.ssh/authorized_keys中去。
-
将master上的~/.ssh/authorized_keys通过scp命令复制到从机slave1,slave2中去。
scp -r ~/.ssh/authorized_keys slave1:~/.ssh/ scp -r ~/.ssh/authorized_keys slave2:~/.ssh/
-
验证一下免密登录是否成功。在master上登录slave1、slave2(其他主机上验证方法也是一样的)。
ssh slave1
如果是第一次登录,则会要求输入密码,但之后登录都不再需要密码。那么,恭喜你,这一步配置已经完美结束了!
ssh
关闭防火墙
集群需要开放很多端口,因此,为了避免出现端口未开放的问题,我索性关闭了防火墙。我使用ufw命令关闭防火墙。
- 关闭防火墙
sudo ufw disable
- 查看防火墙状态
ufw statussudo ufw status
正式搭建
如果你已经配置到了这一步,那么恭喜你,因为你已经完成了集群搭建工作的一大半任务了,下面,让我们继续剩下一小半的任务吧~
接下来的任务全部通过SSH远程配置。
同样,给出这一部分的配置清单:
配置项 | master | slave1 | slave2 |
---|---|---|---|
Java JDK | √ | √ | √ |
Zookeeper | √ | √ | √ |
Hadoop | √ | √ | √ |
HBase | √ | √ | √ |
Java JDK
Hadoop的有些计算是通过jar包进行分布式计算的。因此,安装Hadoop前需要安装JDK。
-
java JDK下载传送门。
-
将JDK下载到本地后,通过scp命令将安装包发送到每个主机上。
scp jdk-8u191-linux-x64.tar.gz hadoop@10.100.200.220:~/
-
登录master主机。
ssh hadoop@10.100.200.220
-
在 /usr/local/ 中建 cluster文件夹。
mkdir /usr/local/cluster
-
进入服务器根目录下,将jdk-8u191-linux-x64.tar.gz解压至 /usr/local/cluster中。
tar -zxvf ~/jdk-8u191-linux-x64.tar.gz -C /usr/local/cluster/
-
进入 /usr/local/cluster 中,为了方便日后版本的更新,这里使用软链接的方法。
cd /usr/local/cluster ln -s jdk1.8.0_191 java
-
进行环境变量的配置。
sudo vi ~/.bashrc
添加如下内容:
#java export JAVA_HOME=/usr/local/cluster/java export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
-
使环境变量立刻生效。
source ~/.bashrc
-
验证环境变量是否配置成功。
java -version
如果输出如下图所示,即代表JDK环境变量配置好了。
java version
Zookeeper
-
Zookeeper下载传送门。
-
将Zookeeper下载到本地后,通过scp命令将安装包发送到master主机上。下面以master为例介绍安装配置,其他的主机安装和配置是完全一样的。
scp zookeeper-3.4.12.tar.gz hadoop@10.100.200.220:~/
-
进入服务器根目录下,将zookeeper-3.4.12.tar.gz解压至 /usr/local/cluster中。
tar -zxvf ~/zookeeper-3.4.12.tar.gz -C /usr/local/cluster/
-
进入 /usr/local/cluster 中,为了方便日后版本的更新,这里使用软链接的方法。
cd /usr/local/cluster ln -s zookeeper-3.4.12 zookeeper
-
设置环境变量,在 ~/.bashrc 添加如下内容。
#zookeeper export ZOOKEEPER=/usr/local/cluster/zookeeper export PATH=$PATH:$ZOOKEEPER/bin
-
使环境变量立刻生效。
source ~/.bashrc
-
配置zookeeper
- 建立数据和日志文件
mkdir /usr/local/cluster/zookeeper/data mkdir /usr/local/cluster/zookeeper/logs
- 进入conf目录创建并修改zoo.cfg文件
修改后的内容为:cp zoo_sample.cfg zoo.cfg
这里还需要在数据目录 /usr/local/cluster/zookeeper/data下新建名为myid的文件,各个主机对应的内容是不同的,master的内容是0,slave1的内容是1,slave2的内容是2,分别对应server.x中的x。server.A=B:C:D,其中A是一个数字, 表示这是第几号server。B是该server所在的IP地址。C配置该server和集群中的leader交换消息所使用的端口。D配置选举leader时所使用的端口。# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/local/cluster/zookeeper/data dataLogDir=/usr/local/cluster/zookeeper/logs # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 server.0=10.100.200.220:2888:3888 server.1=10.100.200.221:2888:3888 server.2=10.100.200.222:2888:3888
- 建立数据和日志文件
-
使用scp命令,将配置好的Zookeeper发送到其他从节点上去。
scp -r /usr/local/cluster/zookeeper/ slave1:/usr/local/cluster/ scp -r /usr/local/cluster/zookeeper/ slave2:/usr/local/cluster/
!!!别忘了从节点上的myid要改成对应的值!!!
!!!别忘了从节点上的myid要改成对应的值!!!
!!!别忘了从节点上的myid要改成对应的值!!!
重要的事情说三遍!!!
-
启动zookeeper。
在各个节点执行以下命令:.zkServer.sh start
输入jps进行验证。
jps_zookeeper
- 查看各个主机的状态。
zookeeper statuszkServer.sh status
Hadoop
-
Hadoop下载传送门。
-
将Hadoop下载到本地后,通过scp命令将安装包发送到master上。
scp hadoop-2.8.5.tar.gz hadoop@10.100.200.220:~/
-
进入服务器根目录下,将zookeeper-3.4.12.tar.gz解压至 /usr/local/cluster中。
tar -zxvf ~/hadoop-2.8.5.tar.gz -C /usr/local/cluster/
-
进入 /usr/local/cluster 中,为了方便日后版本的更新,这里使用软链接的方法。
cd /usr/local/cluster ln -s hadoop-2.8.5 hadoop
-
设置环境变量,在 ~/.bashrc 添加如下内容。
#hadoop export HADOOP_HOME=/usr/local/cluster/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-
使环境变量立刻生效。
source ~/.bashrc
-
验证Hadoop是否安装成功。
hadoop version
如果输出hadoop版本信息即安装成功。
-
配置hadoop。
-
进入hadoop的配置目录。
cd /usr/local/cluster/hadoop/etc/hadoop/
-
新建几个文件夹,配置文件中需要用到。
mkdir tmp mkdir hdfs mkdir hdfs/name mkdir hdfs/data
-
需要修改的配置文件为:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slaves、hadoop-env.sh、yarn-env.sh。将如下configuration的内容复制到对应的配置文件中即可。
-
hadoop-env.sh 和 yarn-env.sh增加下面一行命令,即配置java环境。
export JAVA_HOME=/usr/local/cluster/java
-
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/cluster/hadoop/tmp</value> </property> </configuration>
-
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/cluster/hadoop/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/cluster/hadoop/hdfs/data</value> </property> <property> <name>dfs.http.address</name> <value>master:50070</value> </property> <property> <name>dfs.secondary.http.address</name> <value>master:50090</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
-
yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> </configuration>
-
mapred-site.xml
通过cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml创建etc/hadoop/mapred-site.xml,内容改为如下:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>
-
slaves
slave1 slave2
-
配置文件修改完以后,将master下hadoop文件夹复制到slave1和slave2中。
scp -r /usr/local/cluster/hadoop/ slave1:/usr/local/cluster/ scp -r /usr/local/cluster/hadoop/ slave2:/usr/local/cluster/
-
-
运行Hadoop。注意:启动hadoop的命令都只在master上执行。
- 启动namenode,如果是第一次启动namenode,需要对namenode进行格式化。命令如下:
/usr/local/cluster/hadoop/bin/hdfs namenode -format
- 启动hdfs:
/usr/local/cluster/hadoop/sbin/start-dfs.sh
- 验证hdfs是否启动成功。
在master输入 jps,应当存在NameNode和SecondaryNamenode。
jps_hdfs在slave1和slave2输入jps,应当存在DataNode。
web_datanode进一步验证,访问:http://master:50070/dfshealth.html#tab-overview,如图:
web_dfs
-
启动yarn
/usr/local/cluster/hadoop/sbin/start-yarn.sh
-
验证yarn是否启动成功。
在master输入 jps,应当存在ResourceManager。
在slave1和slave2输入jps,应当存在NodeManager
jps_nodemanager进一步验证,访问:http://master:50070/dfshealth.html#tab-overview,如图:
web_cluster - 启动namenode,如果是第一次启动namenode,需要对namenode进行格式化。命令如下:
HBase
-
HBase下载传送门。
-
将HBase下载到本地后,通过scp命令将安装包发送到master主机上。
scp hbase-2.1.0-bin.tar.gz hadoop@10.100.200.220:~/
-
进入服务器根目录下,将hbase-2.1.0-bin.tar.gz解压至 /usr/local/cluster中。
tar -zxvf ~/hbase-2.1.0-bin.tar.gz -C /usr/local/cluster/
-
进入 /usr/local/cluster 中,为了方便日后版本的更新,这里使用软链接的方法。
cd /usr/local/cluster ln -s hbase-2.1.0 hbase
-
设置环境变量,在 ~/.bashrc 添加如下内容。
#hbase export HBASE_HOME=/usr/local/cluster/hbase export PATH=$PATH:$HBASE_HOME/bin
-
使环境变量立刻生效。
source ~/.bashrc
-
验证Hbase是否安装成功。
hbase version
如果输出hadoop版本信息即安装成功。
-
配置HBase
主要修改conf目录下的三个文件:hbase-env.sh、hbase-site.xml、regionservers。
- hbase-env.sh
export JAVA_HOME=/usr/local/cluster/java export HBASE_CLASSPATH=/usr/local/cluster/hbase/lib export HBASE_PID_DIR=/usr/local/cluster/hbase/data export HBASE_LOG_DIR=/usr/local/cluster/hbase/logs export HBASE_MANAGES_ZK=false
注意:要在hbase文件下,新建data和logs两个文件夹
mkdir /usr/local/cluster/hbase/data mkdir /usr/local/cluster/hbase/logs
- hbase-site.xml
<configuration> <property> <name>hbase.tmp.dir</name> <value>/usr/local/cluster/hbase/data</value> </property> <property> <name>hbase.rootdir</name> <value>hdfs://master:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/usr/local/cluster/zookeeper/data</value> <description>property from zoo.cfg,the directory where the snapshot is stored</description> </property> </configuration>
- regionservers
master slave1 slave2
-
启动hbase
/usr/local/cluster/hbase/bin/start-hbase.sh
-
验证hbase是否启动成功。
jps_hbase_master_region
在master输入 jps,应当存在HMaster和HRegionServer。在slave1和slave2输入jps,应当存在HRegionServer。
jps_hbase_region进一步验证,访问:http://master:16010/master-status,如图。
web_hbase
踩坑记录:HBase装完之后,发现HREgionServer可以启动,但是HMaster却始终无法启动,通过日志文件发现报的错误如下:
java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:635) at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:619) at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at org.apache.hadoop.hbase.util.CommonFSUtils.getRootDir(CommonFSUtils.java:358) at org.apache.hadoop.hbase.util.CommonFSUtils.isValidWALRootDir(CommonFSUtils.java:407) at org.apache.hadoop.hbase.util.CommonFSUtils.getWALRootDir(CommonFSUtils.java:383) at org.apache.hadoop.hbase.regionserver.HRegionServer.initializeFileSystem(HRegionServer.java:691) at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:600) at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:484) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2965) at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:236) at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:140) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:149) at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2983) Caused by: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 25 more 2018-08-01 23:30:33,794 ERROR [main] master.HMasterCommandLine: Master exiting java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster. at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2972) at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:236) at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:140) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:149) at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2983) Caused by: java.lang.NoClassDefFoundError: org/apache/htrace/SamplerBuilder at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:635) at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:619) at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669) at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94) at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703) at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373) at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295) at org.apache.hadoop.hbase.util.CommonFSUtils.getRootDir(CommonFSUtils.java:358) at org.apache.hadoop.hbase.util.CommonFSUtils.isValidWALRootDir(CommonFSUtils.java:407) at org.apache.hadoop.hbase.util.CommonFSUtils.getWALRootDir(CommonFSUtils.java:383) at org.apache.hadoop.hbase.regionserver.HRegionServer.initializeFileSystem(HRegionServer.java:691) at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:600) at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:484) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2965) ... 5 more Caused by: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 25 more
这个问题耗费了很长时间都没找到错误原因,最终在这里找到了解决方法。
cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/
"个人感觉hbase-2.1.0编译的问题,建议以后还是自己编译一下hbase代码,目前还不知道这样改动会有什么问题。"
总结
以上,就完成了整个集群环境的搭建。希望没有坑到你。如果不行坑到了你,欢迎留言吐槽!