搭建大数据三节点(Hadoop、Hbase、Zookeeper、Kafka、Hive)环境(含配置文件参考)

心之所向,身之所往,己不由心,身又岂能由己,心之所向,一鹿向羊

1.jpg

话不投机半句多,上干货

hbase 集群环境搭建

1)操作系统,ubuntu ,版本信息如下:
ceson@ceson01:~/wechat_env$ cat /proc/version
Linux version 4.15.0-54-generic (buildd@lgw01-amd64-014) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #58-Ubuntu SMP Mon Jun 24 10:55:24 UTC 2019
2)JDK:1.8
3)zookeeper版本: zookeeper-3.4.12
4)hadoop版本: hadoop-3.1.2
5)hbase版本: hbase-2.0.5
6)hive版本:hive-3.1.2
7)三个主机(IP及机器名,IP可以随意更改,主机名尽可能保持一致,后面所有配置都以主机名写入zookeeper,hadoop,hbase配置文件;
  如果你机器名不是这个,后面的机器名配置更改为你环境中的机器名):
192.168.1.134 ceson01
192.168.1.107 ceson02
192.168.1.169 ceson03
8)kafka版本: kafka_2.11-2.0.0
9)三个机器创建用户ceson/ceson(username/password)

hbase三个ip地址(可随意更换)及hostname(最好不变, 代码层面会根据hostname找到hbase)

目前hbase使用三个机器部署集群,需要修改hostname,以及hosts文件修改,请使用有权限的用户执行以下操作
note:建议ip使用静态设置,避免使用动态获取ip的方式,否则Ip和机器名映射就出现错乱

登录192.168.1.134
vim /etc/hostname
ceson01

假如重启机器后,hostname不生效,修改以下配置文件
vim  /etc/cloud/cloud.cfg
This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true  #这里是将false改成true

vim /etc/hosts
192.168.1.134    ceson01
192.168.1.107    ceson02
192.168.1.169    ceson03

reboot

登录192.168.1.107
vim /etc/hostname
ceson02

vim  /etc/cloud/cloud.cfg
This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true  #这里是将false改成true

vim /etc/hosts
192.168.1.134    ceson01
192.168.1.107    ceson02
192.168.1.169    ceson03

reboot

登录192.168.1.169
vim /etc/hostname
ceson03

vim  /etc/cloud/cloud.cfg
This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true  #这里是将false改成true

vim /etc/hosts
192.168.1.134    ceson01
192.168.1.107    ceson02
192.168.1.169    ceson03

reboot

jdk版本:

下载jdk1.8,及配置环境变量,以下版本为测试环境版本:
note:当前hbase版本必须使用jdk1.8或以上

ceson@ceson01:~$ java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)

zookeeper,hadoop,hbase,hive,kafka 版本:

分别下载zookeeper-3.4.12,hadoop-3.1.2,hbase-2.0.5,hive-3.1.2,kafka_2.11-2.0.0 组件,以下版本为参考:

https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
http://archive.apache.org/dist/hbase/2.0.5/hbase-2.0.5-bin.tar.gz
http://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz
https://www-eu.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

使用ceson账户登录(其它两个机器的操作执行以下的操作)
mkdir wechat_env
cd wechat_env
自己到上面链接下载后上传到该目录
或者如下操作下载组件
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
wget http://archive.apache.org/dist/hbase/2.0.5/hbase-2.0.5-bin.tar.gz
wget http://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz
wget https://www-eu.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
假设zookeeper,habase组件都在以下目录路径下:/home/ceson/wechat_env:

note:如果不是该目录(/home/ceson/wechat_env):
以root用户登录授权登录用户(testuser)文件夹wechat_env所有权限(以下两个命令以ceson用户登录的不用执行)
chown -R testuser /yourpath/wechat_env
su testuser

检查你当前操作的路径
ceson@ceson01:~/wechat_env$ pwd
/home/ceson/wechat_env

解压zookeeper,hadoop,hbase三个文件

tar zxvf hbase-2.0.5-bin.tar.gz
tar zxvf hadoop-3.1.2.tar.gz
tar zxvf zookeeper-3.4.12.tar.gz

配置无密码SSH访问 该步骤不是必须,但有该步操作,后面需要登录其它机器,则不需要输入密码

a.登录三台主机上分别执行 ssh-keygen -t rsa 生成公钥和私钥,
b.将三台主机的公钥分别追加到主机的~/.ssh/authorized_keys,在登录三台主机后都执行以下三条命令
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson01
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson02
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson03

经过上面操作ceson01ceson02,ceson03就可以无密码相互登录
检查是否配置正确,以在ceson01机器操作示例
ssh ceson02
ssh ceson03
均可以实现无密码登录

1.部署zookeeper-3.4.12

1.1 修改配置文件zoo.cfg(注意:修改哪个机器的配置文件,就把对应的ceson0123改为0.0.0.0)

cd /home/ceson/wechat_env/zookeeper-3.4.12/conf
cp zoo_sample.cfg zoo.cfg 
vim zoo.cfg 
note:在文件末尾加入以下配置,其它默认,注释掉原来的配置# dataDir=/tmp/zookeeper
dataDir=/home/ceson/wechat_env/zookeeper/data
dataLogDir=/home/ceson/wechat_env/zookeeper/logs
server.1=ceson01:2888:3888
server.2=ceson02:2888:3888
server.3=ceson03:2888:3888

server.4=192.168.1.185:2888:3888
server.5=192.168.1.119:2888:3888

1.2 在ceson01机器执行下面的操作

cd /home/ceson/wechat_env
scp -r ./zookeeper-3.4.12/ ceson@ceson02:/home/ceson/wechat_env
scp -r ./zookeeper-3.4.12/ ceson@ceson03:/home/ceson/wechat_env

1.3 设置zookeeper数据目录

cd /home/ceson/wechat_env
ceson@ceson01:~/wechat_env$ mkdir zookeeper
ceson@ceson01:~/wechat_env$ cd zookeeper
ceson@ceson01:~/wechat_env/zookeeper$ mkdir data
ceson@ceson01:~/wechat_env/zookeeper$ echo 1 > /home/ceson/wechat_env/zookeeper/data/myid
ceson@ceson01:~/wechat_env/zookeeper$ ls
data
ceson@ceson01:~/wechat_env/zookeeper$ cd data/
ceson@ceson01:~/wechat_env/zookeeper/data$ ls
myid
ceson@ceson01:~/wechat_env/zookeeper/data$ more myid
1

1.4 复制zookeeper data目录到其它两个机器,需要另外登录其它两个机器修改myid文件

cd /home/ceson/wechat_env
ceson@ceson01:~/wechat_env$ scp -r ./zookeeper/ ceson@ceson02:/home/ceson/wechat_env
ceson@ceson01:~/wechat_env$ scp -r ./zookeeper/ ceson@ceson03:/home/ceson/wechat_env

1.5 登录ceson02机器,执行以下操作

ceson@ceson02:~$ echo 2 > /home/ceson/wechat_env/zookeeper/data/myid
ceson@ceson02:~$ more /home/ceson/wechat_env/zookeeper/data/myid
2

1.6 登录ceson03机器,执行以下操作

ceson@ceson03:~$ echo 3 > /home/ceson/wechat_env/zookeeper/data/myid
ceson@ceson03:~$ more /home/ceson/wechat_env/zookeeper/data/myid
3

1.7 修改zookeeper环境变量(以ceson01机器为例,其它两个机器执行同样操作)如果该文件无法修改,可切换有权限的用户修改该文件

su root
root@ceson01:/home/ceson# vim /etc/profile
在文件末尾加入以下配置
export ZOOKEEPER_HOME=/home/ceson/wechat_env/zookeeper-3.4.12
export PATH=$PATH:$ZOOKEEPER_HOME/bin

root@ceson01:/home/ceson# source /etc/profile

1.8 在三台主机上分别执行如下命令,确认zookeeper是否正确启动

ceson@ceson01:~$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/ceson/wechat_env/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

1.9 在三台机器上面查询zookeeper运行状态(见如下信息)

ceson@ceson01:~$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/ceson/wechat_env/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
ceson@ceson02:~$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/ceson/wechat_env/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
ceson@ceson03:~$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/ceson/wechat_env/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader

1.10 ubuntu 18设置静态ip,下面以设置固定Ip:192.168.1.134为例;在/etc/netplan目录下有个.yaml文件,
当前环境的文件名为50-cloud-init.yaml,以修改后的内容替换原来的部分(如果当前用户无权限修改该文件,请更换操作账户)
note:如果不设置静态Ip,重启后Ip有变动的话,就需要登录每个zookeeper的机器更改hosts文件,修改ip,机器名的映射

原来文件内容
network:
    ethernets:
        ens18:
            dhcp4: true
    version: 2

修改后的文件内容
network:
    ethernets:
        ens18:  #配置的网卡名称 ,该节点使用你环境的配置即可,不一定是这个名称
            dhcp4: no #dhcp4关闭
            addresses: [192.168.1.134/24]   #设置当前机器IP及掩码
            gateway4: 192.168.1.253   #设置网关,改为测试环境所在的网关
    version: 2
执行以下命令
cd /etc/netplan
vim 50-cloud-init.yaml

sudo netplan apply

1.11 在三台机器执行以下操作,配置zookeerper开机启动

a.创建/etc/rc.local文件,使用有权限的用户编辑该文件,当前是以root用户执行
root@ceson01:/home/ceson# vim /etc/rc.local
添加需要开机启动的任务(加入以下5行脚本,如果rc.local已经存在的,第一行代码不用加入)
#!/bin/bash
# JDK ENV
export JAVA_HOME=/usr/lib/jdk1.8.0_141
# startup zookeerper 使用ceson账户启动zookeeper,“-l”表示以登录方式执行
su ceson -l -c '/home/ceson/wechat_env/zookeeper-3.4.12/bin/zkServer.sh start'

b. 赋可执行权限
root@ceson01:/home/ceson# chmod 755 /etc/rc.local

c.验证以上修改是否有效,重启机器后执行以下命令即可
ceson@ceson01:~$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/ceson/wechat_env/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower

2.部署hadoop

2.1 设置ulimit:
先查看当前用户 ulimit:

ulimit -n
修改操作: echo ulimit -n 32768 >>/etc/profile
不重启生效命令:source /etc/profile
在文件 /etc/security/limits.conf末尾增加两行
ceson           -       nofile          32768
ceson         soft/hard nproc           32000

ceson 替换成你运行Hbase和Hadoop的用户

2.2 在/etc/pam.d/common-session 加上这一行
note:pam_limits.so模块可以使用在对一般应用程序使用的资源限制方面。如果需要在SSH服务器上对来自不同用户的ssh访问进行限制,就可以调用该模块来实现相关功能。
当需要限制用户admin登录到SSH服务器时的最大连接数(防止同一个用户开启过多的登录进程),就可以在/etc/pam.d/sshd文件中增加一行对pam_limits.so模块的调用:

vim /etc/pam.d/common-session
session required  pam_limits.so

2.3 进入目录/home/ceson/wechat_env/hadoop-3.1.2/etc/hadoop,修改以下6个文件:
hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、workers

cd /home/ceson/wechat_env/hadoop-3.1.2/etc/hadoop

2.3.1 修改文件 hadoop-env.sh,指定JAVA_HOME设置

vim hadoop-env.sh
export JAVA_HOME=/usr/lib/jdk1.8.0_141

2.3.2 修改文件 core-site.xml
fs.defaultFS指定NameNode的地址
hadoop.tmp.dir指定临时文件的目录

vim core-site.xml

<configuration>
    <!-- hdfs地址,ha模式中是连接到nameservice  -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://cluster</value>
    </property>
    <!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录,也可以单独指定 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/ceson/wechat_env/hadoop/tmp</value>
    </property>

    <!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>ceson01:2181,ceson02:2181,ceson03:2181</value>
    </property>
</configuration>

2.3.3 修改文件 hdfs-site.xml
dfs.replication指定数据文件冗余的份数

vim hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/ceson/wechat_env/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/ceson/wechat_env/hadoop/hdfs/data</value>
    </property>
    
    <!-- 指定副本数,不能超过机器节点数  -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <!-- 为namenode集群定义一个services name -->
    <property>
        <name>dfs.nameservices</name>
        <value>cluster</value>
    </property>

    <!-- nameservice 包含哪些namenode,为各个namenode起名 -->
    <property>
        <name>dfs.ha.namenodes.cluster</name>
        <value>nn1,nn2</value>
    </property>

    <!-- 名为 nn1 的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
    <property>
        <name>dfs.namenode.rpc-address.cluster.nn1</name>
        <value>ceson01:9000</value>
    </property>

    <!-- 名为 nn2 的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
    <property>
        <name>dfs.namenode.rpc-address.cluster.nn2</name>
        <value>ceson02:9000</value>
    </property>

    <!--名为 nn1 的namenode的http地址和端口号,用来和web客户端通讯 -->
    <property>
        <name>dfs.namenode.http-address.cluster.nn1</name>
        <value>ceson01:50070</value>
    </property>

    <!-- 名为 nn2 的namenode的http地址和端口号,用来和web客户端通讯 -->
    <property>
        <name>dfs.namenode.http-address.cluster.nn2</name>
        <value>ceson02:50070</value>
    </property>
      
    <!-- namenode间用于共享编辑日志的journal节点列表 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://ceson01:8485;ceson02:8485;ceson03:8485/cluster</value>
    </property>

    <!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>

    <!-- journalnode 上用于存放edits日志的目录 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/ceson/wechat_env/hadoop/tmp/data/dfs/journalnode</value>
    </property>

    <!-- 客户端连接可用状态的NameNode所用的代理类 -->
    <property>
        <name>dfs.client.failover.proxy.provider.cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
        sshfence
        shell(/bin/true)
        </value>
    </property>

    <!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/ceson/.ssh/id_rsa</value>
    </property>

    <!-- 启用webhdfs -->
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>

    <property>
        <name>dfs.journalnode.http-address</name>
        <value>0.0.0.0:8480</value>
    </property>

    <property>
        <name>dfs.journalnode.rpc-address</name>
        <value>0.0.0.0:8485</value>
    </property>

    <!-- connect-timeout超时时间 -->
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
</configuration>

2.3.4 修改文件 mapred-site.xml
指定运行mapreduce的框架为YARN

vim mapred-site.xml

<configuration>
    <!-- 采用yarn作为mapreduce的资源调度框架 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/home/ceson/wechat_env/hadoop-3.1.2</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/home/ceson/wechat_env/hadoop-3.1.2</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/home/ceson/wechat_env/hadoop-3.1.2</value>
    </property>

</configuration>

2.3.5 修改文件 yarn-site.xml
指定运行YARN的主机、地址和reducer获取数据的方式

vim yarn-site.xml

<configuration>
    <!-- Site specific YARN configuration properties -->
    <!-- 启用HA高可用性 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>

    <!-- 指定resourcemanager的名字 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>

    <!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
  
    <!-- 指定rm1的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>ceson01</value>
    </property>
  
    <!-- 指定rm2的地址  -->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>ceson02</value>
    </property>
  
    <!-- 指定当前机器ceson01作为rm1 -->
    <property>
        <name>yarn.resourcemanager.ha.id</name>
        <value>rm1</value>
    </property>
  
    <!-- 指定zookeeper集群机器 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>ceson01:2181,ceson02:2181,ceson03:2181</value>
    </property>
  
    <!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

2.3.6 修改文件 workers

vim workers
ceson01
ceson02
ceson03

2.4 ceson01主机把配置文件同步给另两台主机

scp -r /home/ceson/wechat_env/hadoop-3.1.2/etc/hadoop/ ceson@ceson02:/home/ceson/wechat_env/hadoop-3.1.2/etc/
scp -r /home/ceson/wechat_env/hadoop-3.1.2/etc/hadoop/ ceson@ceson03:/home/ceson/wechat_env/hadoop-3.1.2/etc/

scp -r /home/dev/wechat_env/hadoop-3.1.2/etc/hadoop/ dev@ceson05:/home/dev/wechat_env/hadoop-3.1.2/etc/
scp -r /home/dev/wechat_env/hadoop-3.1.2/etc/hadoop/ dev@ceson06:/home/dev/wechat_env/hadoop-3.1.2/etc/

在ceson02节点(hadoop高可用备用节点)修改yarn-site.xml(下面部分的配置原来是rm1
<!-- 指定当前机器ceson02作为rm2 -->
    <property>
        <name>yarn.resourcemanager.ha.id</name>
        <value>rm2</value>
    </property>

在ceson03节点修改yarn-site.xml 删除以下属性
<!-- 指定当前机器ceson01作为rm1 -->
    <property>
        <name>yarn.resourcemanager.ha.id</name>
        <value>rm1</value>
    </property>

2.5 ceson01主机初次运行需要格式化hdfs,后面运行就不需要步骤

每个hadoop节点启动journalnode
hdfs --daemon start journalnode

# 在节点ceson01上手动输入[hdfs namenode –format]
hdfs namenode –format

#格式化 zk(在ceson01 手动输入)
hdfs zkfc –formatZK

#启动 ceson01 namenode 
hadoop-daemon.sh start namenode

#ceson02上同步ceson01 namenode元数据 
hdfs namenode -bootstrapStandby

2.6 启动Hadoop集群环境

start-all.sh
或者启动
start-dfs.sh
start-yarn.sh

2.7 主备节点启动状况查看

ceson@ceson01:~$ hdfs haadmin -getServiceState nn1
active
ceson@ceson01:~$ hdfs haadmin -getServiceState nn2
standby

2.8 验证hadoop
50070端口是Hadoop管理页面,切到Datanodes选项卡可以看到集群所有Datanode的情况
8088端口是YARN管理页面,可以看到集群节点运行任务的情况

http://ceson01:50070/
http://ceson01:8088/

或者jsp命令 主备master节点一般都会驻留以下进程,非master节点只有以下部分进程
21776 DataNode
22725 ResourceManager
21271 NameNode
22919 NodeManager
21005 JournalNode
22302 DFSZKFailoverController

3.部署hbase

3.1 进入解压后的hbase目录,修改 hbase-env.sh 文件,修改jdk配置和ZooKeeper配置,如下所示

ceson@ceson01:~$ cd /home/ceson/wechat_env/hbase-2.0.5/conf
ceson@ceson01:~/wechat_env/hbase-2.0.5/conf$ vim hbase-env.sh
修改以下两个配置
export JAVA_HOME=/usr/lib/jdk1.8.0_141
# Tell HBase whether it should manage it's own instance of ZooKeeper or not.
export HBASE_MANAGES_ZK=false

3.2 修改 hbase-site.xml 文件,修改节点内容<configuration>,内容如下
hbase.rootdir表示HBase的存储目录,要和Hadoop的core-site.xml配置一致
hbase.cluster.distributed表示是否分布式存储
hbase.zookeeper.quorum指定ZooKeeper管理的机器

ceson@ceson01:~/wechat_env/hbase-2.0.5/conf$ vim hbase-site.xml

<configuration>
    <!-- 配置HBASE临时目录 -->
    <property >
        <name>hbase.tmp.dir</name>
        <value>/home/ceson/wechat_env/hbase</value>
    </property>
    <!-- 设置HRegionServers共享目录,请加上端口号 -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://cluster/hbase</value>
    </property>

    <!--这里注意了,只需端口即可,不必再写主机名称了!-->
    <property>
        <name>hbase.master</name>
        <value>60000</value>
    </property>

    <!-- 启用分布式模式 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

    <!-- 指定Zookeeper集群位置 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>ceson01,ceson02,ceson03</value>
    </property>

    <!-- 指定ZooKeeper集群端口 -->
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
    
    <!-- 完全分布式式必须为false -->
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
    
</configuration>

3.3 修改 regionservers 文件 :

ceson@ceson01:~/wechat_env/hbase-2.0.5/conf$ vim regionservers
往regionservers文件写入如下内容
ceson01
ceson02
ceson03

3.4 修改 HBase 支持对 Hmaster 的高可用配置

创建文件conf/backup-masters
ceson@ceson01:~/wechat_env/hbase-2.0.5/conf$ vim backup-masters
往backup-masters文件写入如下内容
ceson02

3.5 将ceson01节点的配置同步到其它节点

a.复制ceson01节点中hadoop配置文件hdfs-site.xml到ceson01节点habase conf下面,执行下面脚本
scp -r /home/ceson/wechat_env/hadoop-3.1.2/etc/hadoop/hdfs-site.xml ceson@ceson01:/home/ceson/wechat_env/hbase-2.0.5/conf/hdfs-site.xml

b.同步ceson01配置到其它节点
scp -r /home/ceson/wechat_env/hbase-2.0.5/conf/ ceson@ceson02:/home/ceson/wechat_env/hbase-2.0.5
scp -r /home/ceson/wechat_env/hbase-2.0.5/conf/ ceson@ceson03:/home/ceson/wechat_env/hbase-2.0.5

3.6 启动hbase

/home/ceson/wechat_env/hbase-2.0.5/bin/start-hbase.sh 

note:如果有log4j错误
每个hbase安装的节点执行以下脚本删除jar
rm -rf /home/ceson/wechat_env/hbase-2.0.5/lib/slf4j-log4j12-1.7.25.jar

3.7 验证hbase

登录三台机器,执行
jps
master节点机器有以下进程
28117 HMaster

备用节点
31281 HMaster
31131 HRegionServer

其它节点
29371 HRegionServer

或者访问
http://192.168.1.134:16010

打开页面测试查看高可用是否启用
http://ceson02:16010

3.8 异常处理

a.在master节点机器出现如下异常信息【Master startup cannot progress, in holding-pattern until region onlined】,执行以下脚本,清除在zk中hbase节点信息
stop-hbast.sh
zkCli.sh
rmr /hbase
start-hbase.sh

b.stop-hbase.sh 一直......
执行hbase-daemons.sh stop regionserver
在jps kill掉Master

替换hbase安装目录下的hadoop版本,当前部署暂不替换。

4 安装kafka集群(要启动kafka集群,需要先启动zookeeper集群)

4.1 下载及解压kafka,当前集群以下版本为例(当前kafka集群使用上面配置的zk集群)

cd /home/ceson/wechat_env

wget http://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz 

tar -xvf kafka_2.11-2.0.0.tgz

4.2 编辑配置文件server.properties,

cd kafka_2.11-2.0.0/config/
sudo vim server.properties

修改以下配置项,由于上面的机器已经修改了hostname,可以使用hostname或者ip,当前执行命令的机器在ceson01所以listeners对应的机器名是ceson01(localhost或者ip均可)
broker.id 每个broker都有一个唯一的id值用来区分彼此,Kafka broker的id值必须大于等于0时才有可能正常启动
zookeeper.connect属性指需要指向的zookeeper,可以两台或以上即可,目前三台zookeeper,所以均写上。

ceson01机器的kafka配置
broker.id=1
listeners=PLAINTEXT://ceson01:9092
zookeeper.connect=ceson01:2181,ceson02:2181,ceson03:2181
log.dirs=/home/ceson/wechat_env/kafka/logs

ceson02机器的kafka配置
broker.id=2
listeners=PLAINTEXT://ceson02:9092
zookeeper.connect=ceson01:2181,ceson02:2181,ceson03:2181
log.dirs=/home/ceson/wechat_env/kafka/logs

ceson03机器的kafka配置
broker.id=3
listeners=PLAINTEXT://ceson03:9092
zookeeper.connect=ceson01:2181,ceson02:2181,ceson03:2181
log.dirs=/home/ceson/wechat_env/kafka/logs

4.3 启动kafka

cd /home/ceson/wechat_env/kafka_2.11-2.0.0
bin/kafka-server-start.sh config/server.properties

设置开机启动kafka 修改/etc/rc.local文件,在上面启动zookeeper的后面追加

添加需要开机启动的任务(加入以下5行脚本,如果rc.local已经存在的,第一行代码不用加入)
#!/bin/bash
# JDK ENV
export JAVA_HOME=/usr/lib/jdk1.8.0_141
# startup zookeerper 使用ceson账户启动zookeeper,“-l”表示以登录方式执行
su ceson -l -c '/home/ceson/wechat_env/zookeeper-3.4.12/bin/zkServer.sh start'

sleep 3s

cd /home/ceson/wechat_env/kafka_2.11-2.0.0
# startup kafka
su ceson -l -c 'bin/kafka-server-start.sh config/server.properties &'

4.3 设置开机启动kafka 修改/etc/rc.local文件,在上面启动zookeeper的后面追加

sudo vim /etc/rc.local

sleep 3s

# startup kafka 注意后面的符号'&':如果不加,否则在该命令后面启动的其它需要开机启动的服务无法启动,所以要谨记加入该符号。
su ceson -l -c '/home/ceson/wechat_env/kafka_2.11-2.0.0/bin/kafka-server-start.sh /home/ceson/wechat_env/kafka_2.11-2.0.0/config/server.properties &'

5 设置开机启动hadoop,hbase集群,以下的开机启动只是简单方式的启动,生产环境应该采用更严谨的启动方式,下面的启动方式仅作为参考。

5.1 设置开机启动hadoop 修改/etc/rc.local文件,后面追加

sudo vim /etc/rc.local

sleep 3s

# startup hadoop
su ceson -l -c '/home/ceson/wechat_env/hadoop-3.1.2/sbin/start-dfs.sh'

sleep 3s

su ceson -l -c '/home/ceson/wechat_env/hadoop-3.1.2/sbin/start-yarn.sh'

5.2 设置开机启动hbase,habase启动需要依赖hadoop,所以需要把hbase启动放在hadoop后面


sudo vim /etc/rc.local

sleep 3s

# startup hbase
su ceson -l -c '/home/ceson/wechat_env/hbase-2.0.5/bin/start-hbase.sh'

5 安装hive组件 (hive只需要在NameNode节点安装即可,datanode节点可以不安装)

5.1 下载及解压hive组件,当前以下版本为例

cd /home/ceson/wechat_env

### 自行下载或者使用下面方式下载hive组件
wget https://www-us.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

tar -xvf apache-hive-3.1.2-bin.tar.gz
mv apache-hive-3.1.2-bin apache-hive-3.1.2
pwd
/home/ceson/wechat_env/apache-hive-3.1.2
sudo vim /etc/profile
###文件最后追加下面三行配置
# set hive env
export HIVE_HOME=/home/ceson/wechat_env/apache-hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

###配置生效
source  /etc/profile

5.2 hive新建配置目录

mkdir /home/ceson/wechat_env/hive
mkdir /home/ceson/wechat_env/hive/warehouse

5.3 在hadoop添加hive的相关文件目录并设置相应权限

hadoop fs -mkdir -p /home/ceson/wechat_env/hive
hadoop fs -mkdir -p /home/ceson/wechat_env/hive/tmp
hadoop fs -mkdir -p /home/ceson/wechat_env/hive/log
hadoop fs -mkdir -p /home/ceson/wechat_env/hive/warehouse

hadoop fs -chmod -R 0777 /home/ceson/wechat_env/hive

5.4 检查这目录是否成功创建

ceson@ceson01:~/wechat_env$ hadoop fs -ls /home/ceson/wechat_env/hive
Found 3 items
drwxrwxrwx   - ceson supergroup          0 2019-09-12 14:58 /home/ceson/wechat_env/hive/log
drwxrwxrwx   - ceson supergroup          0 2019-09-12 14:58 /home/ceson/wechat_env/hive/tmp
drwxrwxrwx   - ceson supergroup          0 2019-09-12 14:26 /home/ceson/wechat_env/hive/warehouse

5.5 修改hive-site.xml
cd /home/ceson/wechat_env/apache-hive-3.1.2/conf
cp hive-default.xml.template hive-site.xml
vim hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<configuration>
    <!-- 设置 hive仓库的HDFS上的位置 -->
    <property>
        <name>hive.exec.scratchdir</name>
        <value>/home/ceson/wechat_env/hive/tmp</value>
    </property>
    <!--资源临时文件存放位置 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/home/ceson/wechat_env/hive/warehouse</value>
    </property>
    <!-- 设置日志位置 -->
    <property>
        <name>hive.querylog.location</name>
        <value>/home/ceson/wechat_env/hive/log</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.1.119:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property> 
</configuration>

5.6 修改hive-env.sh文件

cd /home/ceson/wechat_env/apache-hive-3.1.2/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh #追加下面脚本

# Hive Configuration Directory can be controlled by:
export JAVA_HOME=/usr/lib/jdk1.8.0_141
export HADOOP_HOME=/home/ceson/wechat_env/hadoop-3.1.2
export HIVE_HOME=/home/ceson/wechat_env/apache-hive-3.1.2
export HIVE_CONF_DIR=${HIVE_HOME}/conf 

# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=${HIVE_HOME}/lib

5.7 初始化hive(当前初始化使用了mysql作为基本数据库)

下载mysql-connector-java.jar拷到hive_home/lib下面,再执行下面命令

schematool -dbType mysql -initSchema

5.8 查看初始化信息

schematool -dbType mysql -initInfo

5.9 启动hive

ceson@ceson01:~/wechat_env$ hive

5.10 复制到ceson02节点(03节点可以不安装)

ceson@ceson01:~/wechat_env$ scp -r ./apache-hive-3.1.2 ceson@ceson02:/home/ceson/wechat_env
在ceson02机器执行5.1中的hive环境变量设置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容