搭建成功后各节点分工如下所示:

NameNode SecondaryNameNode DateNode Zookeeper ZKFailoverController JournalNode ResourceManager NodeManager MySQL Hive HMaster HRegionServer Redis ElasticSearch
node01 * * * * * * *
node02 * * * * * * * * *
node03 * * * * * * * *
node04 * * * * * * *

一、基础环境配置

1、检查防火墙状态并关闭防火墙

检查防火墙状态,如果Active状态为active (running),则防火墙为开启状态。

systemctl status firewalld

关闭防火墙

systemctl stop firewalld

启动防火墙

systemctl start firewalld

设置开机禁用防火墙

systemctl disable firewalld.service

设置开机启用防火墙

systemctl enable firewalld.service

2、配置免秘钥

(1)node01、node02、node03、node04分别执行以下命令,生成dsa。

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
cd .ssh

(2)分别分发密钥,本文只展示node01分发node02的命令,命令如下:
node01执行以下命令,分发密钥。

scp id_dsa.pub node02:`pwd`/node01.pub

node02执行以下命令

cat ~/.ssh/node01.pub >> ~/.ssh/authorized_keys

node01执行以下命令,验证免秘钥配置是否成功,如果成功,则不需要密码即可访问node02。

ssh node02

node01、node02、node03、node04间分别执行上述命令,分发并配置密钥,实现所有节点之间可以在不使用密码的情况下互相访问。

3、Windows10下的地址映射(可不做)

进入C:\Windows\System32\drivers\etc目录,编辑hosts文件

在末尾添加如下配置:

192.168.153.11	node01
192.168.153.12	node02
192.168.153.13	node03
192.168.153.14	node04

添加后web端输入的IP地址即可被主机名代替。

4、安装JDK

解压JDK安装包

cd /opt/software
rpm -i jdk-7u67-linux-x64.rpm

编写环境变量

whereis java
vi + /etc/profile

环境变量中添加:

# JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin

重新加载环境变量。

. /etc/profile

二、Hadoop环境搭建

Hadoop全分布式配合Zookeeper与Yarn集群实现高可用性(HA,high availability),集群各节点角色分配如下:

NameNode SecondaryNameNode DateNode Zookeeper ZKFailoverController JournalNode ResourceManager NodeManager
node01 * * *
node02 * * * * * *
node03 * * * * *
node04 * * * *

各个角色的作用如下:

所属组件 作用
NameNode HDFS 维护和管理文件系统元数据
SecondaryNameNode HDFS 帮助NameNode备份数据
DateNode HDFS 负责具体的数据块存储
Zookeeper Zookeeper ZKFailoverController启动所依赖的环境
ZKFailoverController Zookeeper ZooKeeper故障转移控制器,通过监视和控制Active NameNode与Standby NameNode之间的状态实现NameNode的主备切换
JournalNode Yarn 负责监控日志并通过日志保持Active NameNode与Standby NameNode之间元数据同步
ResourceManager Yarn 资源调度过程中监控 NodeManager的健康状况并分配与调度资源
NodeManager Yarn 资源调度过程中管理单个节点上的资源

前期准备:配置IP、MAC地址、hosts、hostname、关闭防火墙、安装jdk、配置环境变量

1、伪分布式安装

在node01节点中先搭建伪分布式

(1)hadoop包安装并配置环变量

安装版本:hadoop-2.6.5.tar.gz

tar xf hadoop-2.6.5.tar.gz -C /opt/module
vi + /etc/profile

在环境变量中添加如下:

# HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

更新更改的配置

source /etc/profile

(2)更改Hadoop的配置文件

进入Hadoop配置文件目录

cd /opt/module/hadoop-2.6.5/etc/hadoop

Hadoop的第二次JAVA_HOME 环境变量配置

分别在hadoop-env.sh、mapred-env.sh、yarn-env.sh三个文件中添加JDK的环境变量

vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh

修改三个配置文件中间的JAVA_HOME设置

export JAVA_HOME=/usr/java/jdk1.7.0_67

配置core-site.xml

vi core-site.xml

在core-site.xml中添加如下配置:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/module/hadoop/pseudo</value>
    </property>
</configuration>

配置hdfs-site.xml

vi hdfs-site.xml

在hdfs-site.xml中添加如下配置:

<configuration>
   <property>
        <name>dfs.replication</name>
        <value>1</value>
   </property>
   <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node01:50090</value>
    </property>
</configuration>

配置slaves:

vi slaves

在slaves中添加:

node01

(3)格式化并启动hdfs

格式化hdfs(只能格式化一次,再次启动集群不要执行)

hdfs namenode -format

启动集群

start-dfs.sh

角色进程查看

jps

帮助命令:

hdfs 
hdfs dfs 	

查看web UI

地址为http://node01:50070与http://192.168.153.11:50070。

如果之前未配置Windows10的地址映射,则地址只能为http://192.168.153.11:50070
在这里插入图片描述

创建目录:

hdfs dfs  -mkdir -p  /user/root

查看目录:

hdfs dfs -ls /

上传文件:

hdfs dfs -put hadoop-2.6.5.tar.gz /user/root				

停止集群:

stop-dfs.sh

2、全分布式环境搭建

事先准备:先将单节点的hadoop配置文件复制并保存到hadoop_pseudo文件夹备份:

cd /opt/module/hadoop-2.6.5/etc/
cp -r hadoop hadoop_pseudo 

(1)在伪分布式的基础上更改hadoop的配置文件

更改配置core-site.xml

cd /opt/module/hadoop-2.6.5/etc/hadoop/
vi core-site.xml

将core-site.xml改为如下格式

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/module/hadoop/full</value>
    </property>

更改配置hdfs-site.xml

vi hdfs-site.xml

将hdfs-site.xml改为如下格式

   <property>
        <name>dfs.replication</name>
        <value>2</value>
   </property>
   <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node02:50090</value>
    </property>

更改配置slaves:

vi slaves

将slaves改为如下内容

node02
node03
node04

(2)分发Hadoop到其他节点

分发 hadoop-2.6.5 给其他节点

cd /opt/module/
scp -r hadoop-2.6.5 node02:`pwd`
scp -r hadoop-2.6.5 node03:`pwd`
scp -r hadoop-2.6.5 node04:`pwd`

分发环境变量配置文件给其他节点

scp /etc/profile node02:/etc/
scp /etc/profile node03:/etc/
scp /etc/profile node04:/etc/
. /etc/profile

(3)格式化并启动

格式化(只能格式化一次)

hdfs namenode -format 

启动Hadoop集群

start-dfs.sh

完成简单的创建目录以及上传文件操作

hdfs dfs -mkdir -p /user/root
for i in `seq 100000`;do  echo "hello world $i" >> test.txt;done
hdfs dfs -D dfs.blocksize=1048576 -put test.txt

登录web界面 http://node01:50070
在这里插入图片描述
在这里插入图片描述

3、HA高可用配置

前期准备:将全分布式的hadoop配置文件备份到hadoop_full文件夹中

cd /opt/module/hadoop-2.6.5/etc/
cp -r hadoop hadoop_full

(1)重新配置Hadoop的配置文件并分发

配置core-site.xml

cd /opt/module/hadoop-2.6.5/etc/hadoop/
vi core-site.xml

在core-site.xml文件中,更改原有配置

    <property>
       <name>fs.defaultFS</name>
       <value>hdfs://mycluster</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/module/hadoop/ha</value>
    </property> 

更改后,在core-site.xml文件中,增加如下

    <property>
       <name>ha.zookeeper.quorum</name>
       <value>node02:2181,node03:2181,node04:2181</value>
    </property>

配置hdfs-site.xml

vi hdfs-site.xml

去掉原有的SNN配置

    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node02:50090</value>
    </property>

增加如下配置

    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node01:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>node02:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>node01:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>node02:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_dsa</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/var/module/hadoop/ha/journalnode</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>

更改后的hdfs-site.xml如下:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
       <name>dfs.ha.namenodes.mycluster</name>
       <value>nn1,nn2</value>
    </property>
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn1</name>
       <value>node01:8020</value>
    </property>
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn2</name>
       <value>node02:8020</value>
    </property>
    <property>
       <name>dfs.namenode.http-address.mycluster.nn1</name>
       <value>node01:50070</value>
    </property>
    <property>
       <name>dfs.namenode.http-address.mycluster.nn2</name>
       <value>node02:50070</value>
    </property>

    <property>
       <name>dfs.namenode.shared.edits.dir</name>
       <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
    </property>

    <property>
       <name>dfs.client.failover.proxy.provider.mycluster</name>
       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
       <name>dfs.ha.fencing.methods</name>
       <value>sshfence</value>
    </property>
    <property>
       <name>dfs.ha.fencing.ssh.private-key-files</name>
       <value>/root/.ssh/id_rsa</value>
    </property>

    <property>
       <name>dfs.journalnode.edits.dir</name>
       <value>/var/module/hadoop/ha/journalnode</value>
    </property>

    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
     </property>
</configuration>

分发core-site.xml hdfs-site.xml 给其他节点

scp core-site.xml hdfs-site.xml node02:`pwd`
scp core-site.xml hdfs-site.xml node03:`pwd`
scp core-site.xml hdfs-site.xml node04:`pwd`	

(2)安装zookeeper集群(node02、node03、node04):

1.zk压缩包解压在其他路径下(node02):

tar xf zookeeper-3.4.6.tar.gz -C /opt/module/

2.进入conf目录,拷贝zoo_sample.cfg zoo.cfg 并配置dataDir,集群节点(node02)

cd /opt/module/zookeeper-3.4.6/conf
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg

在文件中间修改:

dataDir=/var/module/zk

在文件末尾添加:

server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888

3.(node02)分发zookeeper到node03、node04

cd /opt/module/
scp -r zookeeper-3.4.6/ node03:`pwd`
scp -r zookeeper-3.4.6/ node04:`pwd`

4.创建 /var/module/zk目录,进入各自目录 分别输出1,2,3 至文件 myid(node02、node03、node04)

node02、node03、node04先创建需要的zk文件夹

mkdir /var/module/zk

node02进行如下配置,将node02的myid设置为1

echo 1 > /var/module/zk/myid

node03进行如下配置,将node03的myid设置为2

echo 2 > /var/module/zk/myid

node04进行如下配置,将node04的myid设置为3

echo 3 > /var/module/zk/myid

node02、node03、node04检查myid是否配置正确

cat /var/module/zk/myid

5.各节点配置环境变量,读取profile

vi + /etc/profile

在环境变量中添加:

#ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin

分发到node03和node04中(也可以单独在node03、node04中配置环境变量)

scp /etc/profile node03:/etc/
scp /etc/profile node04:/etc/

更新配置文件

source /etc/profile
  1. node02、node03、node04启动zkServer.sh start 集群
zkServer.sh start
zkServer.sh status
zkServer.sh stop

node02、node03、node04节点启动journalnode集群

hadoop-daemon.sh start journalnode

随意找一个nn节点格式化(node01):

hdfs namenode -format

启动该节点(node01):

hadoop-daemon.sh start namenode

另一nn节点同步(node02):

hdfs namenode -bootstrapStandby

格式化zkfc,在zookeeper中可见目录创建(node01):

hdfs zkfc -formatZK

(3)配置mr-hd2.x yarn

NN1 NN2 DN ZK ZKFC JNN RS NM
node01 * * *
node02 * * * * * *
node03 * * * * *
node04 * * * *

进入配置文件目录并更改文件名称

cd /opt/module/hadoop-2.6.5/etc/hadoop
mv mapred-site.xml.template mapred-site.xml  

配置mapred-site.xml

vi mapred-site.xml

在mapred-site.xml中增加如下配置:

	<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
	</property>

配置yarn-site.xml:

vi yarn-site.xml

在yarn-site.xml中增加如下配置:

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property> 
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node03</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node04</value>
    </property>
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node02:2181,node03:2181,node04:2181</value>
    </property>

分发两个文件到:node02、node03、node04节点

scp mapred-site.xml yarn-site.xml node02:`pwd`
scp mapred-site.xml yarn-site.xml node03:`pwd`
scp mapred-site.xml yarn-site.xml node04:`pwd`

4、启动:

(1)首次启动

1.node02、node03、node04分别启动Zookeeper:

zkServer.sh start

2.hdfs (注意,有一个脚本不要用,start-all)

start-dfs.sh

如果nn 和 nn2没有启动,需要在node01、node02分别手动启动:

hadoop-daemon.sh start namenode	

3.启动nodemanager:

start-yarn.sh

4.在node03、node04节点分别执行脚本:

yarn-daemon.sh start resourcemanager

(2)UI访问

Hadoop UI(node01)访问地址:
http://node01:50070
http://192.168.153.11:50070
在这里插入图片描述
Hadoop UI(node02)访问地址:
http://node02:50070
http://192.168.153.12:50070
在这里插入图片描述

yarnUI访问地址:
http://node03:8088
http://192.168.153.13:8088
在这里插入图片描述

(3)停止集群

node01: (停止nodemanager)

stop-dfs.sh 
stop-yarn.sh

node03、node04:(停止resourcemanager)

yarn-daemon.sh stop resourcemanager 

(4)启动集群

以后每次启动集群,只需要执行以下命令
node02、node03、node04:

zkServer.sh start

node01:

start-all.sh

node03、node04:

yarn-daemon.sh start resourcemanager

三、Hive安装

前置条件:配置IP、MAC地址、hosts、hostname、关闭防火墙、安装jdk、配置环境变量,测试安装Hadoop全分布式

Hive依赖于上一章搭建的高可用分布式系统与MySQL数据库。

NameNode SecondaryNameNode DateNode Zookeeper ZKFailoverController JournalNode ResourceManager NodeManager MySQL Hive
node01 * * * *
node02 * * * * * * *
node03 * * * * * *
node04 * * * * *

在搭建的Hive环境中,各节点的作用如下:

作用
node01 安装MySQL,作为Hive启动必备条件
node02 搭建单节点Hive
node03 搭建多节点Hive,作为Hive的服务端
node04 搭建多节点Hive,作为Hive的客户端

1、安装MySQL

node01中配置MySQL

yum install mysql-server

如果提示“No package mysql-server available.”(找不到软件包),执行如下命令

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm

启动 MySQL服务

systemctl start mysqld

查看 MySQL 运行状态:

systemctl status mysqld

进入数据库

mysql

数据库中执行以下命令设置密码(密码设置为“121314”,可根据习惯修改):

use mysql;
grant all privileges on *.* to 'root'@'%' identified by '121314' with grant option;
select host,user,password from user;
update user set password=password('121314') where user='root' and host='localhost';
flush privileges;
quit

修改密码后进入MySQL的命令变为:

mysql -u root -p

然后再PassWord后面输入设置的密码“121314”。

2、Hive单节点搭建(node02节点搭建)

单用户模式,node02单节点配置Hive,与node01的MySQL相连接

(1)解压并配置Hive配置文件(node02单节点)

在node02上解压安装Hive

cd /opt/software
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/
cd /opt/module/
mv apache-hive-1.2.1-bin hive

在node02节点中配置环境变量。

vi + /etc/profile

进行如下更改

#HIVE_HOME
HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin

更新环境变量

source /etc/profile

(2)修改jar包名称并配置MySQL驱动(node02)

在node02节点中修改HADOOP_HOME\lib目录下的jline-*.jar 变成HIVE_HOME\lib下的jline-2.12.jar。

cd /opt/module/hadoop-2.6.5/share/hadoop/yarn/lib/
rm -rf jline-0.9.94.jar 
cp /opt/module/hive/lib/jline-2.12.jar ./

在node02节点中拷贝MySQL驱动包到HIVE_HOME\lib目录下

cd /opt/software
cp mysql-connector-java-5.1.32-bin.jar /opt/module/hive/lib/

(3)修改配置文件(node02)

在node02节点中修改hive-site.xml

cd /opt/module/hive/conf
mv hive-default.xml.template hive-site.xml
vi hive-site.xml

在node02节点中批量删除hive-site.xml原有的配置:在末行命令行输入: .,$-1d;并增加如下配置

    <property>  
        <name>hive.metastore.warehouse.dir</name>  
        <value>/user/hive_remote/warehouse</value>  
    </property> 
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node01/hive_remote?createDatabaseIfNotExist=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>121314</value>
    </property>

(4)单节点启动Hive并执行简单的操作

启动条件:先在node02、node03、node04启动Zookeeper集群,并在node01启动Hadoop集群,最后在node03、node04启动Yarn
node02、node03、node04:

zkServer.sh start

node01:

start-all.sh

node03、node04:

yarn-daemon.sh start resourcemanager

node02单节点启动Hive(记得先启动Hadoop集群)

hive

node02进行Hive的基本操作:

show tables;
create table tbl(id int,age int);
show tables;
insert into tbl values(1,1);
select * from tbl;
quit;

在node01:50070的webUI页面中的Browse Directory输入路径/user/hive_remote/warehouse/tbl可以看到Hive中存入的表。
在这里插入图片描述

node01中进入数据库可以看到hive存到数据库中的表:

mysql -uroot -p
show databases;
use hive_remote;
show tables;
select * from TBLS;
quit;

在这里插入图片描述

3、Hive多节点搭建

多用户模式Remote分开,node03是服务端,node04是客户端

(1)分发Hive到其他节点并编辑配置文件

将node02中的单节点hive分发到node03、node04

scp -r hive/ node03:`pwd`
scp -r hive/ node04:`pwd`

node03、node04配置环境变量:

vi /etc/profile
#HIVE_HOME
HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
. /etc/profile

(2)更改服务端配置文件(node03)

node03(服务端)更改hive.site.xml配置文件

cd /opt/module/hive/conf/
vi hive-site.xml

前两项的value改变,“hive_romate"改为"hive”

    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>       
    </property>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node01/hive?createDatabaseIfNotExist=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>121314</value>
    </property>

(3)更改客户端配置文件(node04)

1.node04(客户端)更改hive.site.xml配置文件

cd /opt/module/hive/conf/
vi hive-site.xml

2.更改hive-site.xml

    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node03:9083</value>
    </property>
    <property>
        <name>hive.metastore.local</name>
        <value>false</value>
    </property>

3.修改HADOOP_HOME\lib目录下的jline-*.jar 变成HIVE_HOME\lib下的jline-2.12.jar。

cd /opt/module/hadoop-2.6.5/share/hadoop/yarn/lib/
rm -rf jline-0.9.94.jar
cp /opt/module/hive/lib/jline-2.12.jar ./

(4)先后启动服务端和客户端

node03服务端元数据启动(阻塞式窗口)

hive --service metastore

node04客户端启动

hive

在node04的hive客户端里进行简单的操作

create table psn(id int);
show tables;
insert into psn values(1);

可以在node01的MySQL中查找hive库中的psn表
可以在http://node01:50070的web页面中进入/user/hive/warehouse/psn查找表文件
在这里插入图片描述

4、hiveserver2 Beeline启动

(1)node03启动hiveserver2(阻塞式窗口)

hiveserver2

(2)node04的beeline连接(两种方式)

方式一:

beeline

(连接成功后node03的hiveserver2会弹出ok)

!connect jdbc:hive2://node03:10000/default root 121314

退出beeline连接

!close
!quit

方式二:

beeline -u jdbc:hive2://node03:10000/default root 121314
show tables ;

退出连接

!quit

四、HBase

HBase依赖于Hadoop高可用分布式系统。集群各节点角色分配如下

NameNode SecondaryNameNode DateNode Zookeeper ZKFailoverController JournalNode ResourceManager NodeManager MySQL Hive HMaster HRegionServer
node01 * * * * *
node02 * * * * * * * *
node03 * * * * * * *
node04 * * * * * * *

除去搭建完成的Hadoop高可用系统,本部分需要搭建的角色配置如下:

HMaster HRegionServer
node01 *
node02 *
node03 *
node04 * *

其中HMaster与HRegionServer的配置如下:
各个角色的作用如下:

所属组件 作用
HMaster HBase 负责监控集群中所有的HRegionServer实例
HRegionServer HBase 负责数据cell的处理,是拆分合并region的实际执行者

1、伪分布式

在node01节点中搭建

(1)解压安装HBase并配置环境变量

安装(node01单节点)

cd /opt/software
tar -zxvf hbase-0.98.12.1-hadoop2-bin.tar.gz -C /opt/module/
cd /opt/module
mv hbase-0.98.12.1-hadoop2 hbase

环境变量

vi /etc/profile

环境变量中做如下修改

#HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin

保存并更新环境变量

source /etc/profile

(2)修改配置文件

1.修改hbase-env.sh

cd /opt/module/hbase/conf
vi hbase-env.sh

更改hbase-env.sh的JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.7.0_67

2.修改hbase-site.xml

vi hbase-site.xml

进行如下配置:

    <property>
        <name>hbase.rootdir</name>
        <value>file:///home/testuser/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/testuser/zookeeper</value>
    </property>

(3)启动HBase并进行简单的操作

1.启动HBASE

start-hbase.sh

2.进入web端:node01:60010
在这里插入图片描述

3.进入hbase命令行:

hbase shell

4.HBase基本操作:

status
version
whoami
create 'tbl','cf'
list
put 'tbl','2','cf:name','zhangsanfeng'
get 'tbl','2'
scan 'tbl'
flush 'tbl'
quit

2、完全分布式hbase搭建

node01主,node04从

在node01中配置,后续分发到node02、node03、node04

(1)更改HBase的配置文件

1.修改hbase-env.sh

vi hbase-env.sh 

更改JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.7.0_67

更改HBASE_MANAGES_ZK(第124行)

export HBASE_MANAGES_ZK=false

2.修改hbase-site.xml

vi hbase-site.xml

删除原来的伪分布式配置

  <property>
        <name>hbase.rootdir</name>
        <value>hdfs://mycluster/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>node02,node03,node04</value>
    </property>

3.修改regionservers

vi regionservers

更改为:

node02
node03
node04

4.创建backup-masters(以node01为启动节点,所以该文件中配置node04)

vi backup-masters

添加以下配置

node04

5、拷贝hdfs-site.xml到conf目录

cp /opt/module/hadoop-2.6.5/etc/hadoop/hdfs-site.xml ./

(2)分发HBase到其他节点并配置环境变量

将hbase分发到其他节点(node02、node03、node04)

scp -r /opt/module/hbase node02:/opt/module/
scp -r /opt/module/hbase node03:/opt/module/
scp -r /opt/module/hbase node04:/opt/module/

其他节点修改环境变量(node02、node03、node04)

vi + /etc/profile
# HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin

(3)启动HBase

启动条件:先在node02、node03、node04启动Zookeeper集群,并在node01启动Hadoop集群,最后在node03、node04启动Yarn
node02、node03、node04:

zkServer.sh start

node01:

start-all.sh

node03、node04:

yarn-daemon.sh start resourcemanager

在node01启动HBase:

start-hbase.sh

进入node01与node04的web端:

http://node01:60010
在这里插入图片描述
http://node04:60010
在这里插入图片描述
进入HBase命令行:

hbase shell

关闭HBase:

stop-hbase.sh

五、Redis

1、redis单机环境搭建

安装版本 redis-2.8.18.tar.gz

1.下载gcc、tcl 命令编译器

yum -y install gcc tcl
whereis gcc tcl

2.解压

cd /opt/software/
tar xf redis-2.8.18.tar.gz -C /opt/module/

3.编译、创建目录、拷贝

cd /opt/module/redis-2.8.18/
make && make PREFIX=/opt/module/redis install

4.配置环境变量:

vi + /etc/profile
# REDIS_HOME
export REDIS_HOME=/opt/module/redis
export PATH=$PATH:$REDIS_HOME/bin

5.重新加载配置文件:

. /etc/profile 

6.进入utils 目录,安装服务脚本:

cd /opt/module/redis-2.8.18/utils
./install_server.sh 

端口、实例、配置文件、日志、持久化数据目录、执行路径配置

enter执行 、ctrl+c退出

7.启动客户端:

redis-cli

8.使用帮助:

utils目录下:

redis-cli -h
redis-server -h 	

9.启动客户端:

redis -cli (6379)

帮助: 直接输入 help

2、redis伪分布主从环境配置

(1)高可用搭建

进入opt目录下

cd /opt

1.创建redis目录:

mkdir redis

2.在redis目录下分别创建3个端口目录: 6380,6381,6382
(不在配置文件中写他的目录指定关系,直接在当前目录下执行,持久化目录)

cd redis/
mkdir 6380
mkdir 6381
mkdir 6382

3.当前目录下分别启动3个实例:
(1)启动服务端。在node01中新建三个终端,分别进入/opt/redis/6380、/opt/redis/6381以及/opt/redis/6382目录,并且执行以下命令:
进入6380的终端执行:

cd /opt/redis/6380
redis-server --port 6380

进入6381的终端执行:

cd /opt/redis/6381
redis-server --port 6381 --slaveof 127.0.0.1 6380

进入6382的终端执行:

cd /opt/redis/6382
redis-server --port 6382 --slaveof 127.0.0.1 6380

(2)在node01中新建三个终端作为三个客户端,分别执行以下命令:

redis-cli -p 6380
redis-cli -p 6381
redis-cli -p 6382

4.主从演示 crud权限,高可用

(2)伪分布哨兵集群搭建:

1.拷贝src下的redis-sentinel至bin目录下:

cd /opt/module/redis-2.8.18/src/
cp redis-sentinel /opt/module/redis/bin/

2.创建哨兵配置文件目录:

cd /opt
mkdir sent

3.目录下创建启动配置文件病拷贝:

cd /opt/sent/
vi s1.conf 

配置文件内容:

port 26380
sentinel monitor mymaster 127.0.0.1 6380 2

拷贝

cp s1.conf s2.conf
cp s1.conf s3.conf

分别对拷贝的s2.conf、s3.conf进行更改

s2.conf:

vi s2.conf 

s2.conf更改为:

port 26381
sentinel monitor mymaster 127.0.0.1 6380 2

s3.conf:

vi s3.conf 

s3.conf更改为:

port 26382
sentinel monitor mymaster 127.0.0.1 6380 2

4 启动Redis伪分布式哨兵集群
需要在node01中启动九个终端,包括三个服务端、三个客户端以及三个哨兵。

(1)启动服务端
启动三个主从redis实例,在node01中新建三个终端,分别进入/opt/redis/6380、/opt/redis/6381、/opt/redis/6382目录,并且执行以下命令:
进入6380的终端执行:

cd /opt/redis/6380
redis-server --port 6380

​ 进入6381的终端执行:

cd /opt/redis/6381
redis-server --port 6381 --slaveof 127.0.0.1 6380

​ 进入6382的终端执行:

cd /opt/redis/6382
redis-server --port 6382 --slaveof 127.0.0.1 6380

(2)启动哨兵

启动sentinel读取配置文件,在node01中新建三个终端并进入/opt/sent/目录,三个终端分别执行以下命令:
三个终端统一执行:

cd /opt/sent/

三个终端分别执行以下三个命令中的一个:

redis-sentinel s1.conf 
redis-sentinel s2.conf 
redis-sentinel s3.conf

(3)启动客户端。
测试:演示自动提备
在node01中新建三个终端,分别执行以下命令:

redis-cli -p 6380
redis-cli -p 6381
redis-cli -p 6382

挂断主节点,哨兵会自动寻找新的节点

3、redis主从全分布集群

全分布式redis集群搭建:单节点多实例
删除之前安装的2.8版本并安装3.0版本

1 删除2.8版本bin目录及文件:

cd /opt/module/
rm -rf redis-2.8.18/
cd /opt/module/redis
rm -rf /opt/module/redis/bin/

2 Xftp 上传redis-cluster 目录到根目录

3 redis-cluster目录下解压redis 3.0 :

cd /opt/software/redis-cluster/
tar xf redis-3.0.4.tar.gz

4 redis目录下make命令编译拷贝bin至 /opt/module/redis/下

cd /opt/software/redis-cluster/redis-3.0.4
make && make PREFIX=/opt/module/redis install

成功后会有哨兵显示

5 测试 是否成功

输入re后按table键看是有提示

6 安装rubby编译环境

yum -y install ruby rubygems 

7 redis-cluster 目录下安装 redis gem 模块:

cd /opt/software/redis-cluster/
gem install --local redis-3.3.0.gem

8 创建文件目录、主从节点并匹配端口(已完成):
redis集群 3.x版本
物理节点1个
指定3个主节点端口为7000、7001、7002
对应的3个从节点端口为7003、7004、7005

mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005

9 创建配置文件redis.conf(启集群模式: 3.0 支持单机集群,但必须在配置文件中说明) (已完成)

指定不冲突的端口 及 <对应端口号>
文件内容:
声明支持集群模式
指定端口

在7000-7005每个目录中均放入redis.conf
redis.conf内容如下:

cluster-enabled yes
port 700X 

10 启动所有服务,要进入子目录启动服务
开启6个终端,分别进入7000到7005目录。执行启动命令redis-server redis.conf

cd /opt/software/redis-cluster/redis-test/7000
cd /opt/software/redis-cluster/redis-test/7001
cd /opt/software/redis-cluster/redis-test/7002
cd /opt/software/redis-cluster/redis-test/7003
cd /opt/software/redis-cluster/redis-test/7004
cd /opt/software/redis-cluster/redis-test/7005

6个终端同时执行以下命令,启动Redis:

redis-server redis.conf
ss -tanl | grep 700

11 创建集群,槽位认领

新建一个终端,在安装目录下的src中,找到 redis-trib.rb 这是rubby脚本执行程序,完成redis3.0集群创建

cd /opt/software/redis-cluster/redis-3.0.4/src
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: d4cbae0d69b87a3ca2f9912c8618c2e69b4d8fab 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
M: bc2e33db0c4f6a9065792ea63e0e9b01eda283d7 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
M: 5c2217a47e03331752fdf89491e253fe411a21e1 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
M: 3d4b31af7ae60e87eef964a0641d43a39665f8fc 127.0.0.1:7003
   slots: (0 slots) master
   replicates d4cbae0d69b87a3ca2f9912c8618c2e69b4d8fab
M: 710ba3c9b3bda175f55987eb69c1c1002d28de42 127.0.0.1:7004
   slots: (0 slots) master
   replicates bc2e33db0c4f6a9065792ea63e0e9b01eda283d7
M: 7e723cbd01ef5a4447539a5af7b4c5461bf013df 127.0.0.1:7005
   slots: (0 slots) master
   replicates 5c2217a47e03331752fdf89491e253fe411a21e1

自动分配了主从,自动分配了slots,所有槽都有节点处理,集群上线

客户端连接
新建三个端口,输入以下命令连接

redis-cli -p 7000 -c
redis-cli -p 7001 -c
redis-cli -p 7002 -c

在7000输入set k1 a 跳转到7002
在7001输入get k1 跳转到7002
在7002输入get k1 不跳转

六、ElasticSearch

本章节与node01、node02、node03三个节点安装ElasticSearch并搭建集群,同时安装head可视化插件。

注意:ElasticSearch具有特殊性,不能使用root用户运行,所以创建一个es普通用户。安装ElasticSearch时直接切换到es用户安装,相比于用root安装,省去了转权限的步骤。

xftp拷贝elasticsearch-2.2.1.zip至software目录下

node01、node02、node03共同安装
1.安装unzip

yum -y install unzip

2.共享模式下创建es用户:(node01、node02、node03)

useradd es

为es用户添加密码

passwd es

密码设置为:

123456

3.root 用户创建 /opt/module/es(普通用户无法创建)(node01、node02、node03)(注意:此时的目录权限属于root)

mkdir -p /opt/module/es 

在module目录下执行下面命令赋予权限(node01、node02、node03)

cd /opt/module/
chown es:es es

切换用户es(node01、node02、node03)

su es

4.使用es用户解压elasticsearch-2.2.1.zip包至es目录,保证es文件属于用户es:

cd /opt/software
unzip elasticsearch-2.2.1.zip -d /opt/module/es

5.进入es/conf, 修改elasticsearch.yml配置文件:

cd /opt/module/es/elasticsearch-2.2.1/config/
vi elasticsearch.yml

修改elasticsearch.yml配置文件的cluster:

# elasticsearch集群名字
cluster.name: my-application

修改elasticsearch.yml配置文件的node(分发文件后记得修改node):

node.name: node01 

修改elasticsearch.yml配置文件的network(分发文件后记得修改network):

network.host: 192.168.153.11
http.port: 9200

末尾增加防脑裂:

discovery.zen.ping.multicast.enabled: false 
discovery.zen.ping.unicast.hosts: ["192.168.153.11","192.168.153.12", "192.168.153.13"]
discovery.zen.ping_timeout: 120s
client.transport.ping_timeout: 60s

6.将提供的plugins文件夹通过Xftp工具传输到 /opt/module/es/elasticsearch-2.2.1/中
7.切换至root用户把plugins文件夹的权限给es用户(可以不做)

su root
cd /opt/module/es/elasticsearch-2.2.1/
chown es:es -R plugins/
su es

8.分发其他节点(用es角色分发):

cd /opt/module/es
scp -r elasticsearch-2.2.1/ es@node02:/opt/module/es/
scp -r elasticsearch-2.2.1/ es@node03:/opt/module/es/

9.分别修改配置文件的主机名和IP地址

cd /opt/module/es/elasticsearch-2.2.1/config/
vi elasticsearch.yml

分别将node02和node03的elasticsearch.yml中主机名和IP地址修改成自己的。
10.进入bin目录,启动脚本:

cd /opt/module/es/elasticsearch-2.2.1/bin/
./elasticsearch

11.测试插件效果
http://node01:9200/_plugin/head
http://192.168.153.11:9200/_plugin/head?pretty
在这里插入图片描述

七、小结

至此Hadoop生态系统环境已经搭建完毕,首先搭建Hadoop分布式系统并通过Zookeeper集群与Yarn集群实现系统的高可用性,其次安装MySQL并搭建Hive的多节点集群,然后安装HBase数据库并搭建HBase的集群,最后分别安装哨兵模式的Redis集群和ElasticSearch集群。

集群启动步骤如下:
node02、node03、node04启动Zookeeper:

zkServer.sh start

node01启动Hadoop:

start-all.sh

node03、node04启动Yarn:

yarn-daemon.sh start resourcemanager

node01启动HBase集群

start-hbase.sh
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐