文章目录
- 0、使用须知
- 1、三台服务器分别启动ZooKeeper
- 2、启动HDFS HA
- 4、测试HDFS HA(自动故障转移)
- 5、启动YARN HA
- 6、测试YARN HA(自动故障转移)
- 7、启动HBase HA
- 8、测试HBase HA (自动故障转移)
- 9、关闭HBase HA
- 10、启动Spark HA
- 11、测试Spark HA
- 12、关闭Spark HA
- 10、启动并测试Hive
- 11、关闭Hive
- 12、测试Sqoop
- 13、启动Kafka
- 14、测试Kafka( Producer & Consumer 通信)
- 15、关闭Kafka
- 16、启动Flume
- 17、测试Flume
- 18、启动Storm
- 19、关闭Storm
- 20、关闭HDFS HA
- 21、关闭YARN HA
- 22、关闭ZKFC守护进程:
- 23、关闭ZooKeeper
- 24、启动ElasticSearch
- 25、测试ElasticSearch
- 26、启动Kibana
- 27、启动ElasticSearch Head
- 28、测试ElasticSearch Head
- 29、测试Kibana
- 30、关闭Kibana
- 31、关闭ElasticSearch Head
- 32、关闭ElasticSearch
- 33、其他备注
0、使用须知
0.1、说明
- 这只是一个最后的整合,略去了挺多细节,真正要细看的话请移步:http://www.philpy.top/tags/4或https://blog.csdn.net/qq_43613793/category_10851706.html
- 所需资源都可以去这里下载:http://www.philpy.top/download/
- 本来我也想把虚拟机的OVF文件上传到上面的:
然后劝退了…
0.2、环境变量配置
大多数我都是配了环境变量的,但是上面的详情文章里面是没有配全的,因此再在这里贴一下:
0.2.1、centos01
export JAVA_HOME=/opt/modules/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/opt/modules/hadoop-2.8.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export ZOOKEEPER_HOME=/opt/modules/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
export HBASE_HOME=/opt/modules/hbase-1.2.6.1
export PATH=$PATH:$HBASE_HOME/bin:$HBASE_HOME/sbin
export HIVE_HOME=/opt/modules/apache-hive-2.3.8-bin
export PATH=$PATH:$HIVE_HOME/bin
export SQOOP_HOME=/opt/modules/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin
export FLUME_HOME=/opt/modules/apache-flume-1.8.0-bin
export PATH=$PATH:$FLUME_HOME/bin
export KAFKA_HOME=/opt/modules/kafka_2.11-2.0.0
export PATH=$PATH:$KAFKA_HOME/bin
export KAFKA_CONFIG_HOME=/opt/modules/kafka_2.11-2.0.0/config
export PATH=$PATH:$KAFKA_CONFIG_HOME/bin
export STORM_HOME=/opt/modules/apache-storm-1.1.0
export PATH=$PATH:$STORM_HOME/bin
export ELASTICSEARCH_HOME=/opt/modules/elasticsearch-7.12.0
export PATH=$PATH:$ELASTICSEARCH_HOME/bin
export KIBANA_HOME=/opt/modules/kibana-7.12.0-linux-x86_64
export PATH=$PATH:$KIBANA_HOME/bin
export ELASTICSEARCH_HEAD__HOME=/opt/modules/node-v10.9.0-linux-x64
export PATH=$PATH:$ELASTICSEARCH_HEAD__HOME/bin
0.2.2、centos02
export JAVA_HOME=/opt/modules/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/opt/modules/hadoop-2.8.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export ZOOKEEPER_HOME=/opt/modules/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
export HIVE_HOME=/opt/modules/apache-hive-2.3.8-bin
export PATH=$PATH:$HIVE_HOME/bin
export STORM_HOME=/opt/modules/apache-storm-1.1.0
export PATH=$PATH:$STORM_HOME/bin
export ELASTICSEARCH_HOME=/opt/modules/elasticsearch-7.12.0
export PATH=$PATH:$ELASTICSEARCH_HOME/bin
0.2.3、centos03
export JAVA_HOME=/opt/modules/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
export ZOOKEEPER_HOME=/opt/modules/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
export STORM_HOME=/opt/modules/apache-storm-1.1.0
export PATH=$PATH:$STORM_HOME/bin
export ELASTICSEARCH_HOME=/opt/modules/elasticsearch-7.12.0
export PATH=$PATH:$ELASTICSEARCH_HOME/bin
1、三台服务器分别启动ZooKeeper
zkServer.sh start
启动后jps
查看三台服务器的进程:
三台服务器都多了名为QuorumPeerMain
的ZooKeeper进程;
查看各个节点的zk状态:
zkServer.sh status
三个节点必有一个节点为leader
,(大概率是centos02
)
2、启动HDFS HA
2.1、启动HDFS
在centos01
:
start-dfs.sh
启动后jps
查看三台服务器的进程:
centos01
和centos02
都多了名为NameNode
、DataNode
、JournalNode
的ZooKeeper进程,centos03
多了名为DataNode
和JournalNode
的进程,配置了两个NameNode就是为了HA
NameNode
主要负责管理HDFS文件系统,DataNode
主要存储HSDFS文件,JournalNode
主要负责两个NameNode
之间的通信,即保证两个NameNode
之间的数据一致
2.2、测试HDFS
在集群中随便哪个节点输入任意HDFS命令:
hadoop fs -ls /
结果是报错:
因为没有启动ZKFC守护进程
2.3、启动ZKFC守护进程
在centos01
、centos02
:
hadoop-daemon.sh start zkfc
访问centos01:50070
、centos02:50070
:
可以发现一个是avtive,一个是standby(哪个节点先启动的ZKFC守护进程,哪个节点就为active)
jps
查看三台服务器的进程:
centos01
和centos02
都多了名为DFSZKFailoverController
的ZKFC守护进程,centos03
没变化
2.4、再次测试HDFS
再次测试,在集群中随便哪个节点输入任意HDFS命令:
hadoop fs -ls /
没有报错:
(这里什么都没有是因为我的HDFS文件系统里什么都没有)
4、测试HDFS HA(自动故障转移)
在节点centos01
中杀掉NameNode的进程,然后执行hdfs命令。若能成功,说明自动故障转移成功
此时centos01节点的NameNode已失效,centos02节点的NameNode自动激活为active
(说明自动故障转移成功)
再测试hdfs命令,虽然有报错,但是的确还是可以成功执行:
(这里我创建了一个文件夹并又查看了一下)
接下来我们再在节点centos01
重启NameNode:
hadoop-daemon.sh start namenode
此时centos01
节点复活自动变为standby状态,centos02
节点依旧为active:
再次测试hdfs命令,成功,没有报错:
5、启动YARN HA
在centos01
:
start-yarn.sh
在centos02
:
yarn-daemon.sh start resourcemanager
启动后jps
查看三台服务器的进程:
centos01
和centos02
都多了名为ResourceManager
和NodeManager
的进程,centos03
多了名为NodeManager
的进程
**ResourceManager
负责跟踪集群中的资源以及调度应用程序(例如MapReduce程序),NodeManager
负责管理YARN集群中的节点以及监视资源使用情况( CPU、内存、硬盘、网络等)、 跟踪节点健康等 **
访问centos01:8088
、centos02:8088
:
如果访问备用ResourceManager地址centos02:8088
,会发现自动跳转到centos01:8088
。因为此时活动状态的ResourceManager在centos01
节点上,访问备用ResourceManager会自动跳转到活动ResourceManager
6、测试YARN HA(自动故障转移)
在centos01
节点上执行MapReduce默认的WordCount程序,当正在执行Map任务时,新开一个SSH Shell窗口,杀掉centos01的ResourceManager进程,观察程序执行过程。若程序仍能流畅执行,说明自动故障转移生效,ResourceManager遇到故障后,自动切换到centos02
节点上继续执行。此时访问备用ResourceManager的Web页面地址centos02:8088
,发现可以成功访问
准备数据:
运行MapReduce之WordCount单词计数程序:
hadoop jar /opt/modules/hadoop-2.8.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.2.jar wordcount /yarn_ha_mr_test.txt /yarn_ha_mr_test_output
在程序执行到map任务时在centos02
通过ssh登录centos01
杀掉centos01
的ResourceManager:
此时再在浏览器中查看YARN的状态,发现centos01:8088
已经无法访问,但是centos02:8088
可以访问并且可以看到MapReduce任务:
查看MapReduce结果:
hadoop fs -cat /yarn_ha_mr_test_output/*
发现MapReduce仍然成功执行了,说明YARN HA搭建成功并且可以进行故障转移
再把centos01
的ResourceManager启动回来:
yarn-daemon.sh start resourcemanager
此时访问centos01:8088
会跳转到centos02:8088
7、启动HBase HA
在centos01
节点:
start-hbase.sh
访问centos01:16010
:
centos01
为Master,centos02
为备用Backup Master
启动后jps
查看三台服务器的进程:
centos01
和centos02
多了名为HMaster
和HRegionServer
的进程,centos03
多了名为HRegionServer
的进程
HMaster节点负责管理HRegionServer节点,这里我配置了HDFS HA,因此HMaster也和NameNode一样,有两个,在centos01
和centos02
上(HBase将底层数据存储在HDFS中,因此通常HMaster和NameNode出现在同一节点,HRegionServer和DataNode出现在同一节点)
打开HBase Shell,随便测试一下:
hbase shell
list
HBase Shell可用
8、测试HBase HA (自动故障转移)
在centos01
中杀掉hbase的HMaster进程后再测试HBase Shell是否可用,若可用则说明HBase HA搭建成功
杀掉centos01
的HMaster后,centos02
自动转变为Master:
此时测试HBase Shell,依然可以使用,说明HBase HA可用:
再次启动centos01
的HBase的Master:
hbase-daemon.sh start master
centos01
变成了Backup Master,Master依旧为centos02
且centos02
下的Backup Masters多了一个centos01
:
9、关闭HBase HA
stop-hbase.sh
10、启动Spark HA
在centos01
和centos02
节点:
cd /opt/modules/spark-2.4.0-bin-hadoop2.7/
sbin/start-all.sh
访问centos01:8080
和centos02:8080
,centos01
问ALIVE状态,centos02
为STANDBY状态:
启动后jps
查看三台服务器的进程:
centos01
多了名为Master
的进程,centos02
多了名为Master
和Worker
的进程,centos03
多了名为Worker
的进程
进入Spark Shell:
bin/spark-shell --master spark://centos01:7077
11、测试Spark HA
使用 kill -9 命令杀掉centos01
节点的Master进程,稍等几秒后多次刷centos02
节点的Web界面,发现Master的状态由STANDBY状态变为RECOVERING(恢复,该状态持续的时间非常短暂),最后变为ALIVE
此时,若需要连接Spark集群执行操作,--master
参数的连接地址需要改为spark://centos02:7077
:
bin/spark-shell --master spark://centos02:7077
此时再重新启动centos01
的Spqrk Master:
sbin/start-master.sh
此时centos01
的状态为STANDBY,centos02
为ALIVE:
Spark HA测试成功
12、关闭Spark HA
在centos01
和centos02
节点:
cd /opt/modules/spark-2.4.0-bin-hadoop2.7/
sbin/stop-all.sh
10、启动并测试Hive
启动MetaStore Service:
hive --service metastore &
此时通过jps命令查看进程,会发现多了一个名为“RunJar”的进程,它就是Metastore Server的独立进程:
在centos01
和centos02
两个节点中分别通过hive
命令启动Hive CLI并测试,在centos01
中创建一张表,在centos02
中可以看到
11、关闭Hive
使用kill -9
命令杀掉RunJar
进程
12、测试Sqoop
sqoop list-databases --connect jdbc:mysql://10.0.116.102:3306/hive_db?serverTimezone=Hongkong --username hive --P
Sqoop查询出来的结果与本机MySql查询出来的结果一致
13、启动Kafka
分别在三台服务器上启动Kafka:
cd /opt/modules/kafka_2.11-2.0.0
bin/kafka-server-start.sh -daemon config/server.properties
启动后jps
查看三台服务器的进程:
三台服务器都多了名为Kafka
的进程
14、测试Kafka( Producer & Consumer 通信)
14.1、创建主题(Topic)
bin/kafka-topics.sh --create --zookeeper centos01:2181,centos02:2181,centos03:2181 --replication-factor 2 --partitions 2 --topic topictest
14.2、查看主题列表
bin/kafka-topics.sh --list --zookeeper centos01:2181
14.3、创建生产者(Producer)
bin/kafka-console-producer.sh --broker-list centos01:9092,centos02:9092,centos03:9092 --topic topictest
创建完成后,控制台进入等待键盘输入消息的状态:
14.4、创建消费者(Consumer)
bin/kafka-console-consumer.sh --bootstrap-server centos01:9092,centos02:9092,centos03:9092 --topic topictest
消费者创建成功后,就等待生产者发送消息:
14.5、测试 Producer & Consumer 通信
生产者发送消息:
消费者接收消息:
14.6、删除主题
bin/kafka-topics.sh --delete --zookeeper centos01:2181,centos02:2181,centos03:2181 --topic topictest
15、关闭Kafka
cd /opt/modules/kafka_2.11-2.0.0
bin/kafka-server-stop.sh -daemon config/server.properties
16、启动Flume
flume-ng agent --conf c0nf --conf-file $FLUME_HOME/conf/flume-conf.properties --name a1 -Dflume.root.logger=INFO,console
17、测试Flume
新开一个SSH窗口,执行以下命令,连接本地44444端口:
telnet localhost 44444
此时在新开的SSH窗口输入内容,在之前的SSH窗口就可以看到内容:
18、启动Storm
18.1、centos01
启动Nimbus和UI服务
storm nimbus >/dev/null 2>&1 &
storm ui >/dev/null 2>&1 &
jps
查看进程:
centos01
多了名为core
和nimbus
的进程
centos01://8080
查看Storm UI:
18.2、在centos02
和centos03
启动Supervisor服务:
storm supervisor >/dev/null 2>&1 &
centos02
和centos03
都多了名为Supervisor
的进程
centos01://8080
再次查看Storm UI:
19、关闭Storm
使用kill -9
命令在centos01
中杀掉core
和nimbus
进程,在centos02
中杀掉Supervisor
进程
20、关闭HDFS HA
在centos01
:
stop-dfs.sh
21、关闭YARN HA
在centos01
:
stop-yarn.sh
在centos02
:
yarn-daemon.sh stop resourcemanager
22、关闭ZKFC守护进程:
在centos01
和centos02
:
hadoop-daemon.sh stop zkfc
23、关闭ZooKeeper
zkServer.sh stop
24、启动ElasticSearch
在三个节点分别启动ElasticSearch并通过jps
命令查看进程:
elasticsearch -d
jps
三台服务器都多了名为Elasticsearch
的进程
25、测试ElasticSearch
在任意一个节点上执行以下命令,访问centos01
节点的9200端口:
curl centos01:9200
成功输出以下信息则说明Elasticsearch集群搭建成功:
26、启动Kibana
在centos01
:
kibana &
访问centos01:5601
:
27、启动ElasticSearch Head
在centos01
:
cd /opt/modules/elasticsearch-head-master
grunt server &
访问centos01:9100
:
28、测试ElasticSearch Head
向Elasticsearch中添加一个名为customer的索引并添加三条数据:
curl -H "Content-Type: application/json" -X POST 'centos01:9200/customer/_doc/_bulk?pretty' -d '
{"index":{"_id":"1"}}
{"name":"zhangsan","age":20,"score":98}
{"index":{"_id":"2"}}
{"name":"lisi","age":22,"score":68}
{"index":{"_id":"3"}}
{"name":"wangwu","age":22,"score":88}
'
29、测试Kibana
30、关闭Kibana
ps -ef | grep node
# 或
ss -lntp | grep 5601
获得Kibana的进程PID,然后kill -9
杀掉该PID即可:
31、关闭ElasticSearch Head
ps -aux|grep grunt
找到ElasticSearch Head的进程,然后用kill -9
命令杀死即可
32、关闭ElasticSearch
分别在三台服务器上用jps
查看ElasticSearch的进程,然后用kill -9
命令杀死即可
33、其他备注
集群在运行过程中掉进程是常事,所以需要多注意一下,发现哪个进程掉了就再把他起来,起单独的进程的常用命令:
ZooKeeper:zkServer.sh
# 启动zookeeper
zkServer.sh start
# 停止zookeeper
zkServer.sh stop
HDFS:hadoop-daemon.sh
# 启动NameNode
hadoop-daemon.sh start namenode
# 停止NameNode
hadoop-daemon.sh stop namenode
# 启动DataNode
hadoop-daemon.sh start datanode
# 停止DataNode
hadoop-daemon.sh stop datanode
# 启动JournalNode
hadoop-daemon.sh start journalnode
# 停止JournalNode
hadoop-daemon.sh stop journalnode
# 启动ZKFC守护进程
hadoop-daemon.sh start zkfc
# 停止ZKFC守护进程
hadoop-daemon.sh stop zkfc
YARN:yarn-daemon.sh
# 启动ResourceManager
yarn-daemon.sh start resourcemanager
# 停止ResourceManager
yarn-daemon.sh stop resourcemanager
# 启动NodeManager
yarn-daemon.sh start nodemanager
# 停止NodeManager
yarn-daemon.sh stop nodemanager
HBase:hbase-daemon.sh
# 启动HMaster
hbase-daemon.sh start master
# 停止HMaster
hbase-daemon.sh stop master
# 启动HRegionserver
hbase-daemon.sh start regionserver
# 停止HRegionserver
hbase-daemon.sh stop regionserver
Spark:spark-daemon.sh
# 启动Master
spark-daemon.sh start master
# 停止Master
spark-daemon.sh stop master
# 启动Worker
spark-daemon.sh start worker
# 停止Worker
spark-daemon.sh stop worker