Hadoop Ha + Hbase + Spark高可用集群搭建
1.前言
记录Hadoop Ha + Hbase+ Spark高可用集群的搭建,主要包括每个组件的配置信息,以及启动步骤。
在ubuntu18.04环境下,集群可以正常使用,运行。
2.Ling-Ha集群架构信息
节点 Nn Rm DFSZK Dn Nm Jn Zoo spark Hm Hr node1 √ √ √ √ √ node2 √ √ √ √ node3 √ √ √ √ √ √ node4 √ √ √ √ √ √ node5 √ √ √ √ √ √ node6 √ √ √ √
集群 版本号 端口 Hadoop 3.2.2 9870 Yarn 3.2.2 8088 MapReduce JobHistory Server 3.2.2 19888 Spark-master 3.1.2 8080 Spark-histoory 3.1.2 4000 hbase 2.2.7 16010 Zookeeper 3.4.6 2181
缩写 全称 作用 Nm Namenode 元数据节点 Rm ResourceManager yarn资源管理节点 DFSZK DFSZKFailoverController zookeeper监控节点,Ha配置 Dn Datanode 数据节点 Nm NodeManager yarn单节点管理,与Rm通信 Jn JournalNode 同步NameNode之间数据,Ha配置 Zoo Zookeeper zookeeper集群 Hm HMaster Hbase主节点 Hr HRegionServer Hbase从节点
3. Hadoop-Ha配置文件
< configuration>
< property>
< name> fs.defaultFS</ name>
< value> hdfs://Ling-Ha</ value>
</ property>
< property>
< name> hadoop.tmp.dir</ name>
< value> file:/usr/local/hadoop/tmp</ value>
< description> Abase for other temporary directories.</ description>
</ property>
< property>
< name> ha.zookeeper.quorum</ name>
< value> node3:2181,node4:2181,node5:2181</ value>
</ property>
< property>
< name> ha.zookeeper.session-timeout.ms</ name>
< value> 10000</ value>
</ property>
</ configuration>
< configuration>
< property>
< name> dfs.nameservices</ name>
< value> Ling-Ha</ value>
</ property>
< property>
< name> dfs.ha.namenodes.Ling-Ha</ name>
< value> nn1,nn2</ value>
</ property>
< property>
< name> dfs.namenode.rpc-address.Ling-Ha.nn1</ name>
< value> node1:9000</ value>
</ property>
< property>
< name> dfs.namenode.http-address.Ling-Ha.nn1</ name>
< value> node1:9870</ value>
</ property>
< property>
< name> dfs.namenode.rpc-address.Ling-Ha.nn2</ name>
< value> node2:9000</ value>
</ property>
< property>
< name> dfs.namenode.http-address.Ling-Ha.nn2</ name>
< value> node2:9870</ value>
</ property>
< property>
< name> dfs.namenode.shared.edits.dir</ name>
< value> qjournal://node3:8485;node4:8485;node5:8485/Ling-Ha</ value>
</ property>
< property>
< name> dfs.journalnode.edits.dir</ name>
< value> /usr/local/hadoop/journal</ value>
</ property>
< property>
< name> dfs.ha.automatic-failover.enabled</ name>
< value> true</ value>
</ property>
< property>
< name> dfs.client.failover.proxy.provider.Ling-Ha</ name>
< value> org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</ value>
</ property>
< property>
< name> dfs.ha.fencing.methods</ name>
< value> sshfence</ value>
< value> shell(true)</ value>
</ property>
< property>
< name> dfs.ha.fencing.ssh.private-key-files</ name>
< value> /home/node1/.ssh/id_rsa</ value>
</ property>
< property>
< name> dfs.ha.fencing.ssh.connect-timeout</ name>
< value> 60000</ value>
</ property>
< property>
< name> dfs.replication</ name>
< value> 3</ value>
</ property>
< property>
< name> dfs.namenode.name.dir</ name>
< value> file:/usr/local/hadoop/tmp/dfs/name</ value>
</ property>
< property>
< name> dfs.datanode.data.dir</ name>
< value> file:/usr/local/hadoop/tmp/dfs/data</ value>
</ property>
< property>
< name> dfs.permissions</ name>
< value> false</ value>
</ property>
</ configuration>
< configuration>
< property>
< name> yarn.resourcemanager.cluster-id</ name>
< value> Ling-yarn</ value>
</ property>
< property>
< name> yarn.resourcemanager.ha.enabled</ name>
< value> true</ value>
</ property>
< property>
< name> yarn.resourcemanager.ha.rm-ids</ name>
< value> rm1,rm2</ value>
</ property>
< property>
< name> yarn.resourcemanager.hostname.rm1</ name>
< value> node1</ value>
</ property>
< property>
< name> yarn.resourcemanager.hostname.rm2</ name>
< value> node2</ value>
</ property>
< property>
< name> yarn.resourcemanager.webapp.address.rm1</ name>
< value> node1:8088</ value>
</ property>
< property>
< name> yarn.resourcemanager.webapp.address.rm2</ name>
< value> node2:8088</ value>
</ property>
< property>
< name> yarn.resourcemanager.zk-address</ name>
< value> node3:2181,node4:2181,node5:2181</ value>
</ property>
< property>
< name> yarn.resourcemanager.ha.automatic-failover.enabled</ name>
< value> true</ value>
</ property>
< property>
< name> yarn.resourcemanager.ha.automatic-failover.zk-base-path</ name>
< value> /yarn-leader-election</ value>
</ property>
< property>
< name> yarn.resourcemanager.recovery.enabled</ name>
< value> true</ value>
</ property>
< property>
< name> yarn.resourcemanager.store.class</ name>
< value> org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</ value>
</ property>
< property>
< name> yarn.nodemanager.aux-services</ name>
< value> mapreduce_shuffle</ value>
</ property>
</ configuration>
< configuration>
< property>
< name> mapreduce.framework.name</ name>
< value> yarn</ value>
</ property>
< property>
< name> mapreduce.jobhistory.address</ name>
< value> node1:10020</ value>
</ property>
< property>
< name> mapreduce.jobhistory.webapp.address</ name>
< value> node1:19888</ value>
</ property>
< property>
< name> yarn.app.mapreduce.am.env</ name>
< value> HADOOP_MAPRED_HOME=/usr/local/hadoop</ value>
</ property>
< property>
< name> mapreduce.map.env</ name>
< value> HADOOP_MAPRED_HOME=/usr/local/hadoop</ value>
</ property>
< property>
< name> mapreduce.reduce.env</ name>
< value> HADOOP_MAPRED_HOME=/usr/local/hadoop</ value>
</ property>
</ configuration>
node3
node4
node5
node6
4.Hadoop-Ha初始化启动顺序
启动zookeep集群 依次启动所有journalnode
./hadoop-daemon.sh start journalnode
hdfs namenode -format
./hadoop-daemon.sh start namenode
在从节点 同步主节点namenode到备份namenode
hdfs namenode -bootstrapStandby
hdfs zkfc -formatZK
停止主节点namenode和所有节点的journalnode
#sbin目录下
./hadoop-daemon.sh stop namenode
./hadoop-daemon.sh stop journalnode
start-dfs.sh
5.Hadoop Ha模式下 配置spark和日志服务器
#!/usr/bin/env bash
export SPARK_DIST_CLASSPATH = $( /usr/local/hadoop/bin/hadoop classpath)
export HADOOP_CONF_DIR = /usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP = "填写主节点ip"
export SPARK_HISTORY_OPTS = "-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://Ling-Ha/sparkLog"
spark.eventLog.enabled true
spark.eventLog.dir hdfs://Ling-Ha/sparkLog
spark.eventLog.compress true
spark.files file:///usr/local/spark/conf/hdfs-site.xml,file:///usr/local/spark/conf/core-site.xml
node1
node2
node3
node4
node5
node6
spark.eventLog.dir 路径需修改成hdfs-site.xml 中dfs.nameservices配置的值,且不需要指定端口 将hadoop的core-site.xml和hdfs-site.xml,放到spark的conf目录下,让spark能找到Hadoop的配置
6.Hadoop Ha模式下配置Hbase Ha
export JAVA_HOME = /usr/loca/jvm/java
export HBASE_CLASSPATH = /usr/local/hbase/conf
export HBASE_MANAGES_ZK = false
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP = "true"
< property>
< name> hbase.cluster.distributed</ name>
< value> true</ value>
</ property>
< property>
< name> hbase.rootdir</ name>
< value> hdfs://Ling-Ha/hbase</ value>
</ property>
< property>
< name> hbase.zookeeper.property.dataDir</ name>
< value> /usr/local/hbase/zookeeper</ value>
</ property>
< property>
< name> hbase.zookeeper.quorum</ name>
< value> node3:2181,node4:2181,node5:2181</ value>
</ property>
#添加节点名称
node3
node4
node5
node6
将hadoop的core-site.xml和hdfs-site.xml,放到HBase的conf目录下,让HBase能找到Hadoop的配置 配置Hbase Ha模式 在conf目录下创建backup-masters文件,输入备份节点名称