Hadoop+Hive+HBase+Zookeeper
     分类:大数据     有: 0 条评论

Hadoop+Hive+HBase+Zookeeper

     分类:大数据     有: 0 条评论

Hadoop 和 Spark 对比:https://www.zhihu.com/question/26568496

本篇搭建的集群环境是:完全分布式Hadoop+Hive+HBase+Zookeeper集群


搭建环境

史上最详细、最全面的Hadoop环境搭建:https://mp.weixin.qq.com/s/cJ8BeApMW1KGAsZgHBCgog

基本环境配置

# 使用root用户操作

关闭防火墙,SELinux

#############################################################################
# 添加hadoop用户并添加sudo权限(每台主机都执行)

useradd hadoop #添加用户hadoop 
passwd hadoop #设置用户hadoop的密码 
chmod u+w /etc/sudoers # 添加写权限
vi /etc/sudoers
进入编辑模式,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"hadoop ALL=(ALL) ALL",然后保存退出。
chmod u-w /etc/sudoers #撤销写权限

#############################################################################
# 时间同步
# NTP
yum install -y ntp

vim /etc/ntp.conf
# 注释掉原来的国外的服务器,改为中国的
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org

systemctl enable ntpd && systemctl restart ntpd
ntpdate server 0.cn.pool.ntp.org

ntpq -p和date 查看时间

#############################################################################
# 修改主机名(在每台主机上分别执行)
hostnamectl set-hostname centosmini34
hostnamectl set-hostname centosmini35
hostnamectl set-hostname centosmini39

# 修改hosts
echo "192.168.10.34 centosmini34" >> /etc/hosts
echo "192.168.10.35 centosmini35" >> /etc/hosts
echo "192.168.10.39 centosmini39" >> /etc/hosts

#############################################################################
# 配置ssh免密登陆(只在Master执行就行了)
配置master节点的hadoop用户能够以基于密钥的验正方式登录其它各节点,以便启动进程并执行监控等额外的管理工作。

su - hadoop
ssh-keygen -t rsa -P ''
ssh-copy-id hadoop@centosmini34
ssh-copy-id hadoop@centosmini35
ssh-copy-id hadoop@centosmini39

# 测试
ssh centosmini34 'ls /home/hadoop/ -la'
ssh centosmini35 'ls /home/hadoop/ -la'
ssh centosmini35 'ls /home/hadoop/ -la'

#############################################################################
# JDK环境安装
sudo su
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

vi /etc/profile 

#set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

# 验证
source /etc/profile
java -version

安装Hadoop

Hadoop通常有三种运行模式:本地(独立)模式伪分布式(Pseudo-distributed)模式和完全分布式(Fully distributed)模式。

本文档采用完全分布式模式安装

IPhostname角色角色关系
192.168.10.34centosmini34(master)NameNode,ResourceManager,Hive,Hbase,zookeeper,JobTrackerNameNode和SecondaryNameNode两个管理:DataNode
192.168.10.35centosmini35DataNode,SecondaryNameNode,NodeManager,zookeeper,Regionserver,Hbase,TaskTrackerResourceManager管理:NodeManager
192.168.10.39centosmini39DataNode,NodeManager,zookeeper,Regionserver,Hbase,Mysql,TaskTrackerJobTracker管理:TaskTracker

Regionserver(负责table数据的实际读写,管理Region)一般和DataNode一起,目的是实现数据的本地性,提高读写效率。

# 每台主机都要安装Hadoop。 使用root用户操作
官网:http://hadoop.apache.org/releases.html
wget http://mirrors.shu.edu.cn/apache/hadoop/common/hadoop-3.1.0/hadoop-3.1.0.tar.gz
tar xf hadoop-3.1.0.tar.gz -C /usr/local
chown hadoop:hadoop -R /usr/local/hadoop-3.1.0
ln -sv /usr/local/hadoop-3.1.0 /usr/local/hadoop

cat <<EOF > /etc/profile.d/hadoop.sh
HADOOP_HOME=/usr/local/hadoop
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_BASE PATH
EOF

# 测试
su - hadoop
hadoop version

# 创建数据存放目录
mkdir -pv /hadoop/{name,data,namesecondary};chown -R hadoop:hadoop -R /hadoop


# 配置Hadoop
集群中的每个节点上Hadoop的配置均相同,Hadoop在启动时会根据配置文件判定当前节点的角色及所需要运行的进程等,因此,下述的配置文件修改需要在每一个节点上运行。
# 这里只在Master(centosmini34)上配置,然后scp上传覆盖到其他节点。

cd /usr/local/hadoop/etc/hadoop/
vim core-site.xml  加在<configuration>  </configuration>内。

  <property>
        <name>fs.default.name</name>
        <value>hdfs://centosmini34:8020</value>  <!--Master的主机名-->
        <final>true</final>
        <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implimentation.</description>
  </property>


# 修改mapred-site.xml
vim mapred-site.xml

    <property>
        <name>mapred.job.tracker</name>
        <value>centosmini34:8021</value>    <!--Master的主机名-->
        <final>true</final>
        <description>The host and port that the MapReduce JobTracker runs at. </description>
    </property>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>


# 修改hdfs-site.xml
vim hdfs-site.xml

    <property>
          <name>dfs.replication</name>
          <value>3</value>
          <description>The actual number of replications can be specified when the file is created.</description>
    </property>
     <property>
        <name>dfs.data.dir</name>
        <value>/hadoop/data</value>
        <final>ture</final>
        <description>The directories where the datanode stores blocks.</description>
    </property>
     <property>
        <name>dfs.name.dir</name>
        <value>/hadoop/name</value>
        <final>ture</final>
        <description>The directories where the namenode stores its persistent matadata.</description>
    </property>
    <property>
        <name>fs.checkpoint.dir</name>
        <value>/hadoop/namesecondary</value>
        <final>ture</final>
        <description>The directories where the secondarynamenode stores checkpoints.</description>
    </property>
    <property>
        <name>dfs.secondary.http.address</name>
        <value>centosmini35:50090</value>   <!--SecondaryNameNode的主机名-->
        <description>NameNode get the newest fsimage via dfs.secondary.http.address</description>
    </property>

# 修改yarn-site.xml
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>centosmini34</value>   <!--ResourceManager的主机名-->
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>   <!--开启日志收集-->
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>106800</value>
    </property>

# 指定各DataNode节点的主机名或IP地址。
vim slaves
centosmini34
centosmini35
centosmini39

# 设置JAVA_HOME
vim hadoop-env.sh
# 可以echo $JAVA_HOME查看。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64

# 初始化数据节点,在master上执行如下命令
su - hadoop
hadoop namenode -format

cd /usr/local/hadoop/etc/hadoop
scp core-site.xml mapred-site.xml hdfs-site.xml yarn-site.xml slaves hadoop-env.sh centosmini35:/usr/local/hadoop/etc/hadoop
scp core-site.xml mapred-site.xml hdfs-site.xml yarn-site.xml slaves hadoop-env.sh centosmini39:/usr/local/hadoop/etc/hadoop

# 启动集群
cd /usr/local/hadoop/sbin

# 启动HDFS集群
./start-dfs.sh
# 启动YARN集群
./start-yarn.sh

# 同时把HDFS和YARN集群启动,实验时不建议,启动出现问题就不好定位了。
./start-all.sh
./stop-all.sh

# 管理JobHistory Server
启动可以JobHistory Server,能够通过Web控制台查看集群计算的任务的信息
/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver
/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh stop historyserver

# 查看服务运行状况
jps


浏览器打开:
192.168.10.34:8088    Applications
192.168.10.34:8042    node
192.168.10.34:9864    datanode
192.168.10.34:9870    Overview
192.168.10.34:19888   JobHistory

测试Hadoop

Hadoop提供了MapReduce编程框架,其并行处理能力的发挥需要通过开发Map及Reduce程序实现。为了便于系统测试,Hadoop提供了一个单词统计的应用程序算法样例,其位于Hadoop安装目录下${HADOOP_BASE}/share/hadoop/mapreduce/名称类似hadoop-examples-*.jar的文件中。除了单词统计,这个jar文件还包含了分布式运行的grep等功能的实现。

su - hadoop
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar

# 用wordcount来计算单词显示数量
hadoop fs -mkdir -p wc-in     #创建目录
hadoop fs -put /etc/rc.d/init.d/functions /etc/profile wc-in

# 接下来启动分布式任务,其中的WC-OUT为reduce任务执行结果文件所在的目录,此目标要求事先不能存在,否则运行将会报错。
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar wordcount wc-in WC-OUT

# 命令的执行结果按上面命令的指定存储于WC-OUT目录中
hadoop fs -ls WC-OUT

# 其中的part-r-00000正是其执行结果的输出文件,使用如下命令查看其执行结果。
hadoop fs -cat WC-OUT/part-r-00000   #输出有内容

!    5
!=    7
"    10
"$#"    4
"$(cat    1
"$-"    1
"$0"    1
"$1"    19
"$1")"    2
"$2"    1
"$?"    2
"$@"    1
"$BOOTUP"    17
"$CONSOLETYPE"    1
"$EUID"    2
"$HISTCONTROL"    1
"$RC"    4
"$STRING    1
"$SYSTEMCTL_IGNORE_DEPENDENCIES"    1
"$SYSTEMCTL_SKIP_REDIRECT"    1
"$_use_systemctl"    2
"$b"    1
"$base    1
......

Hive

Hive, 适用于数据仓库类的应用程序,但其并不是一个全状态的数据库,这主要受限于Hadoop自身设计的缺陷。其最大的缺陷在于Hive不支持行级别的更新、插入和删除操作。其次,Hadoop是面向批处理的系统,其MapReduce job的启动有着很大的开销,因此Hive查询有着很高的延迟,通常在传统数据上可以几秒钟完成的查询操作在Hive需要更长的时间,即使数据集非常小也无法避免。再次,Hive无法支持OLTP(Online Transaction Processing)的关键特性,而是接近于OLAP(Online Analytic Processing),然而在Online能力方面的表现仍然与期望有着一定的差距。故此,Hive最适用于数据仓库类的应用场景,即通过数据挖掘完成数据分析、生成报告并支持智能决策等。

鉴于Hive本身的限制,如果期望在大数据集上实现OLTP式的特性,就得认真考虑NoSQL数据库了,比如HBase、Cassandra和DynamoDB等。

Hive 是基于 Hadoop 文件系统之上的数据仓库,由Facebook提供。因此,安装Hive之前必须确保 Hadoop 已经成功安装。

与 Hadoop 类似,Hive 也有 3 种运行模式

# 官网下载:https://hive.apache.org/downloads.html
sudo su
wget http://mirrors.shu.edu.cn/apache/hive/hive-3.0.0/apache-hive-3.0.0-bin.tar.gz
tar xf apache-hive-3.0.0-bin.tar.gz -C /usr/local/
chown hadoop:hadoop -R /usr/local/apache-hive-2.3.3-bin
ln -sv /usr/local/apache-hive-2.3.3-bin /usr/local/hive


cat <<EOF > /etc/profile.d/hive.sh
HIVE_HOME=/usr/local/hive
PATH=$PATH:$HIVE_HOME/bin
export HIVE_HOME
EOF

source /etc/profile.d/hive.sh

############################################################################
# 配置hive
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64" >> /usr/local/hive/bin/hive-config.sh
echo "export HIVE_HOME=/usr/local/hive" >> /usr/local/hive/bin/hive-config.sh
echo "export HADOOP_HOME=/usr/local/hadoop" >> /usr/local/hive/bin/hive-config.sh

# 创建必要目录
查看 HDFS 是否有这些路径
hadoop fs -ls /

Found 3 items
drwxr-xr-x   - hadoop supergroup          0 2018-05-21 18:05 /hive_data
drwxrwx---   - hadoop supergroup          0 2018-05-21 18:01 /tmp
drwxr-xr-x   - hadoop supergroup          0 2018-05-21 18:02 /user

# 没有发现上面提到的路径,需要自己新建这些目录,并且给它们赋予用户写(W)权限。
hadoop dfs -mkdir -p /user/hive/warehouse
hadoop dfs -mkdir -p /tmp/hive
hadoop dfs -mkdir -p /hive_data
hadoop dfs -chmod 777 /user/hive/warehouse
hadoop dfs -chmod 777 /tmp/hive
hadoop dfs -chmod 777 /hive_data

# 检查
hadoop dfs -ls /
hadoop dfs -ls /user/hive/


# 安装Mysql(在centosmini39上root登陆)
参考:https://www.leolan.top/index.php/posts/54.html
rpm -ivh http://repo.mysql.com/mysql57-community-release-el7-9.noarch.rpm
yum install mysql-server
systemctl start mysqld

grep "password" /var/log/mysqld.log 
修改密码:mysqladmin -u root -p password回车后输入随机密码(空密码直接回车),然后输入两次新密码,修改完成。

mysql> CREATE DATABASE `hive` /*!40100 DEFAULT CHARACTER SET latin1 */;
mysql> GRANT ALL PRIVILEGES ON `hive`.* TO 'hive'@'192.168.10.%' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
mysql> exit


# 修改hive配置(回到centosmini34上切换到hadoop用户)
下载地址: http://dev.mysql.com/downloads/connector/j/  选Platform Independent 再选右边Looking for the latest GA version?
su - hadoop
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
tar xf mysql-connector-java-5.1.46.tar.gz 
mv mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar /usr/local/hive/lib/

cd /usr/local/hive/conf/
vim hive-site.xml

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://centosmini39:3306/hive?createDatabaseIfNotExsit=true;characterEncoding=UTF-8</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive</value>
    </property>

    <property>
        <name>datanucleus.readOnlyDatastore</name>
        <value>false</value>
    </property>
    <property>
        <name>datanucleus.fixedDatastore</name>
        <value>false</value>
    </property>

    <property>
        <name>datanucleus.autoCreateSchema</name>
        <value>true</value>
    </property>

    <property>
        <name>datanucleus.autoCreateTables</name>
        <value>true</value>
    </property>

    <property>
        <name>datanucleus.autoCreateColumns</name>
        <value>true</value>
    </property>
    <property>
        <name>javax.jdo.option.Multithreaded</name>
        <value>true</value>
        <description>Set this to true if multiple threads access metastore through JDO concurrently.</description>
    </property>
</configuration>

# 测试
hive
hive> show tables;
如果报错类似log4j-slf4j包重复的,按提示中的其中一个包后缀改掉(后缀不要是jar)
mv /usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar /usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar.bak

安装HBase、Zookeeper

一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群。这个集群会随着Hbase的启动而启动。当然,你也可以自己管理一个zookeeper集群,但需要配置Hbase。你需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.

当Hbase管理zookeeper的时候,你可以通过修改zoo.cfg来配置zookeeper,一个更加简单的方法是在 conf/hbase-site.xml里面修改zookeeper的配置。Zookeep的配置是作为property写在 hbase-site.xml里面的。option的名字是 hbase.zookeeper.property. 打个比方, clientPort 配置在xml里面的名字是 hbase.zookeeper.property.clientPort. 所有的默认值都是Hbase决定的,包括zookeeper, “HBase 默认配置”. 可以查找 hbase.zookeeper.property 前缀,找到关于zookeeper的配置。

对于zookeepr的配置,你至少要在 hbase-site.xml中列出zookeepr的ensemble servers,具体的字段是 hbase.zookeeper.quorum. 该这个字段的默认值是 localhost,这个值对于分布式应用显然是不可以的. (远程连接无法使用).

Zookeeper配置也可以参考:http://gitbook.cn/books/5954c9600326c7705af8a92a/index.html(或:https://blog.csdn.net/hliq5399/article/details/78193113)

你运行一个zookeeper也是可以的,但是在生产环境中,你最好部署3,5,7个节点。部署的越多,可靠性就越高,当然只能部署奇数个,偶数个是不可以的。你需要给每个zookeeper 1G左右的内存,如果可能的话,最好有独立的磁盘。 (独立磁盘可以确保zookeeper是高性能的。).如果你的集群负载很重,不要把Zookeeper和RegionServer运行在同一台机器上面。就像DataNodes 和 TaskTrackers一样

打个比方,Hbase管理着的ZooKeeper集群在节点 rs{1,2,3,4,5}.dbq168.com, 监听2222 端口(默认是2181),并确保conf/hbase-env.sh文件中 HBASE_MANAGE_ZK的值是 true ,再编辑 conf/hbase-site.xml 设置 hbase.zookeeper.property.clientPort 和 hbase.zookeeper.quorum。你还可以设置 hbase.zookeeper.property.dataDir属性来把ZooKeeper保存数据的目录地址改掉。默认值是 /tmp ,这里在重启的时候会被操作系统删掉,可以把它修改到 /hadoop/zookeeper。

# 在Matster上执行
# 官网下载:http://hbase.apache.org
sudo su
wget http://mirrors.shu.edu.cn/apache/hbase/2.0.0/hbase-2.0.0-bin.tar.gz
tar xf hbase-2.0.0-bin.tar.gz -C /usr/local/
chown -R hadoop:hadoop /usr/local/hbase-2.0.0
ln -sv /usr/local/hbase-2.0.0 /usr/local/hbase

cat <<EOF > /etc/profile.d/hbase.sh
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin
EOF

# 安装Zookeeper
# 官网下载:http://zookeeper.apache.org
wget http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
tar xf zookeeper-3.4.12.tar.gz -C /usr/local/
chown hadoop:hadoop -R /usr/local/zookeeper-3.4.12
ls -sv /usr/local/zookeeper-3.4.12 /usr/local/zookeeper

###################################################################################
# 在其他节点安装(使用root用户安装),下载很慢,所以使用scp。
scp hbase-2.0.0-bin.tar.gz zookeeper-3.4.12.tar.gz root@centosmini35:/root/
scp hbase-2.0.0-bin.tar.gz zookeeper-3.4.12.tar.gz root@centosmini39:/root/

cd /root
tar xf hbase-2.0.0-bin.tar.gz -C /usr/local/
chown -R hadoop:hadoop /usr/local/hbase-2.0.0
ln -sv /usr/local/hbase-2.0.0 /usr/local/hbase

cat <<EOF > /etc/profile.d/hbase.sh
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin
EOF

tar xf zookeeper-3.4.12.tar.gz -C /usr/local/
chown hadoop:hadoop -R /usr/local/zookeeper-3.4.12
ls -sv /usr/local/zookeeper-3.4.12 /usr/local/zookeeper

###################################################################################

配置HBase、Zookeeper

# 回到Master上,切换到root用户,配置HBase
# 完全分布式模式配置
cd /usr/local/hbase/conf/

# 修改hbase-site.xml
vim hbase-site.xml   # 修改配置

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://centosmini34:8020/hbase</value>
    <description>The directory shared by RegionServers.</description>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>The mode the cluster will be in. Possible values are
      false: standalone and pseudo-distributed setups with managed Zookeeper
      true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)</description>
  </property>
  <property>
      <name>hbase.zookeeper.property.clientPort</name>
      <value>2181</value>      <!--zookeeper端口-->
      <description>Property from ZooKeeper's config zoo.cfg.The port at which the clients will connect.</description>
  </property>
  <property>
      <name>hbase.zookeeper.quorum</name>
      <value>centosmini34,centosmini35,centosmini39</value>   <!--zookeeper节点-->
      <description>Comma separated list of servers in the ZooKeeper Quorum.                                                                  
      For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
      By default this is set to localhost for local and pseudo-distributed modes
      of operation. For a fully-distributed setup, this should be set to a full
      list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh      this is the list of servers which we will start/stop ZooKeeper on.</description>
   </property>
   <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/hadoop/zookeeper</value>   <!--zookeeper数据存储-->
      <description>Property from ZooKeeper's config zoo.cfg.
      The directory where the snapshot is stored.</description>
   </property>
</configuration>


# 修改regionservers
vim regionservers

centosmini34
centosmini35
centosmini39

# 修改hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-7.b10.el7.x86_64

# 修改Zookeeper配置
cd /usr/local/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/hadoop/zookeeper   #和hbase-site.xml里设置的一致
clientPort=2181             #和hbase-site.xml里设置的一致

##############################################################################
# 附加配置,视情况添加
echo "server.1=centosmini34:2888:3888" >> /usr/local/zookeeper/conf/zoo.cfg
echo "server.2=centosmini35:2888:3888" >> /usr/local/zookeeper/conf/zoo.cfg
echo "server.3=centosmini39:2888:3888" >> /usr/local/zookeeper/conf/zoo.cfg

echo 1 > /hadoop/zookeeper/myid               #在centosmini34上执行
touch /hadoop/zookeeper/zookeeper_server.pid  #在centosmini34上执行
echo 2 > /hadoop/zookeeper/myid               #在centosmini35上执行
/hadoop/zookeeper/zookeeper_server.pid        #在centosmini35上执行
echo 3 > /hadoop/zookeeper/myid               #在centosmini39上执行
/hadoop/zookeeper/zookeeper_server.pid        #在centosmini39上执行

##############################################################################

mkdir /hadoop/zookeeper
chown hadoop.hadoop -R /hadoop/zookeeper/

# 上传配置文件到其他节点
su - hadoop
cd /usr/local/hbase/conf/
scp hbase-env.sh hbase-site.xml regionservers centosmini35:/usr/local/hbase/conf/
scp hbase-env.sh hbase-site.xml regionservers centosmini39:/usr/local/hbase/conf/

scp /usr/local/zookeeper/conf/zoo.cfg centosmini35:/usr/local/zookeeper/conf/
scp /usr/local/zookeeper/conf/zoo.cfg centosmini39:/usr/local/zookeeper/conf/

# 启动HBase
cd /usr/local/hbase/bin
./start-hbase.sh

# 检查
jps
/usr/local/zookeeper/bin/zkServer.sh status

参考:
http://blog.51cto.com/naonao/1710296
http://blog.51cto.com/lwm666/2064581
http://gitbook.cn/books/5954c9600326c7705af8a92a/index.html(或:https://blog.csdn.net/hliq5399/article/details/78193113)
https://my.oschina.net/kolbe/blog/908526
hive 启动问题:https://blog.csdn.net/jim110/article/details/44907745

(●゚ω゚●)