Hadoop Ha + Hbase + Spark高可用集群搭建手册

Hadoop Ha + Hbase + Spark高可用集群搭建

1.前言

记录Hadoop Ha + Hbase+ Spark高可用集群的搭建,主要包括每个组件的配置信息,以及启动步骤。

在ubuntu18.04环境下,集群可以正常使用,运行。

2.Ling-Ha集群架构信息

节点NnRmDFSZKDnNmJnZoosparkHmHr
node1
node2
node3
node4
node5
node6
集群版本号端口
Hadoop3.2.29870
Yarn3.2.28088
MapReduce JobHistory Server3.2.219888
Spark-master3.1.28080
Spark-histoory3.1.24000
hbase2.2.716010
Zookeeper3.4.62181
缩写全称作用
NmNamenode元数据节点
RmResourceManageryarn资源管理节点
DFSZKDFSZKFailoverControllerzookeeper监控节点,Ha配置
DnDatanode数据节点
NmNodeManageryarn单节点管理,与Rm通信
JnJournalNode同步NameNode之间数据,Ha配置
ZooZookeeperzookeeper集群
HmHMasterHbase主节点
HrHRegionServerHbase从节点

3. Hadoop-Ha配置文件

  • core-site.xml
<configuration>
        <!--Yarn 需要使用 fs.defaultFS 指定NameNode URI -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Ling-Ha</value>
        </property>
       <!--指定hadoop临时目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
        <!-- 指定zookeeper地址 -->
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>node3:2181,node4:2181,node5:2181</value>
        </property>
        <!--指定ZooKeeper超时间隔,单位毫秒 -->
        <property>
                <name>ha.zookeeper.session-timeout.ms</name>
                <value>10000</value>
        </property>
</configuration>
  • hdfs-site.xml
<configuration>
        <!--集群名称,此值在接下来的配置中将多次出现务必注意同步修改-->
        <property>
                <name>dfs.nameservices</name>
                <value>Ling-Ha</value>
        </property>
        <!--所有的namenode列表,此处也只是逻辑名称,非namenode所在的主机名称-->
        <property>
                <name>dfs.ha.namenodes.Ling-Ha</name>
                <value>nn1,nn2</value>
        </property>
        <!--namenode之间用于RPC通信的地址,value填写namenode所在的主机地址-->
        <!--默认端口8020,注意Ling-Ha与nn1要和上文的配置一致-->
        <property> 
                <name>dfs.namenode.rpc-address.Ling-Ha.nn1</name> 
                <value>node1:9000</value> 
        </property>
        <!-- namenode的web访问地址,默认端口9870-->
	<property>
	       <name>dfs.namenode.http-address.Ling-Ha.nn1</name>
	       <value>node1:9870</value>
	</property>
        <!--备份NameNode node2主机配置-->
        <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>
        <!--journalnode主机地址,最少三台,默认端口8485--> 
        <!--格式为 qjournal://jn1:port;jn2:port;jn3:port/${nameservices}--> 
        <property>
               <name>dfs.namenode.shared.edits.dir</name>
               <value>qjournal://node3:8485;node4:8485;node5:8485/Ling-Ha</value>
        </property>
        <!--日志文件输出路径,即journalnode读取变更的位置-->
        <!--NameNode的元数据在JournalNode上的存放位置 --> 
        <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>
        <!--故障时相互操作方式(namenode要切换active和standby),选ssh方式-->
        <property>
             <name>dfs.ha.fencing.methods</name>
	     <value>sshfence</value>
	     <!--不进行shell(true)设置,无法进行自动切换-->
	     <value>shell(true)</value>
        </property>
        <!--修改为自己用户的ssh key存放地址-->
        <property>
             <name>dfs.ha.fencing.ssh.private-key-files</name>
	     <value>/home/node1/.ssh/id_rsa</value>
        </property>
        <!--ssh连接超时-->
        <property>
             <name>dfs.ha.fencing.ssh.connect-timeout</name>
             <value>60000</value>
        </property>
        <!--*************************************************以上为高可用配置***************************************************-->
        <!--指定冗余副本个数-->
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <!--指定namenode名称空间的存储地址--> 
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <!--指定datanode数据存储地址-->
        <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>
  • yarn-site.xml
<configuration>
 <!--********************************配置resourcemanager*******************************************************-->
	 <property>  
		<name>yarn.resourcemanager.cluster-id</name>  
		<value>Ling-yarn</value>  
	 </property>  
         <!--开启高可用-->
         <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
         </property>
         <!-- 指定RM的名字 -->
         <property> 
                <name>yarn.resourcemanager.ha.rm-ids</name> 
                <value>rm1,rm2</value> 
         </property>
         <!-- 分别指定RM的地址 -->
         <property> 
                <name>yarn.resourcemanager.hostname.rm1</name> 
                <value>node1</value> 
         </property>     
         <property> 
		<name>yarn.resourcemanager.hostname.rm2</name> 
		<value>node2</value> 
         </property>
	<!--配置rm1--> 
	<property>
		<name>yarn.resourcemanager.webapp.address.rm1</name>
		<value>node1:8088</value>
	</property>
	<!--配置rm2-->  
	<property>
		<name>yarn.resourcemanager.webapp.address.rm2</name>
		<value>node2:8088</value>
        </property>
        <!-- 指定zk集群地址 -->
        <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>
 <!--********************************配置resourcemanager*******************************************************-->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
  • mapred-site.xml
<configuration>
        <!-- 指定mr框架为yarn方式 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>node1:10020</value>
        </property>
        <!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
        <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>
  • workers
node3
node4
node5
node6

4.Hadoop-Ha初始化启动顺序

  • 启动zookeep集群
  • 依次启动所有journalnode
 #sbin目录下
 ./hadoop-daemon.sh start journalnode
  • 格式化主节点namenode,然后启动
hdfs namenode -format
./hadoop-daemon.sh start namenode
  • 在从节点 同步主节点namenode到备份namenode
hdfs namenode -bootstrapStandby
  • 在主节点namenode格式化zk
hdfs zkfc -formatZK
  • 停止主节点namenode和所有节点的journalnode
 #sbin目录下
./hadoop-daemon.sh stop namenode
./hadoop-daemon.sh stop journalnode
  • 执行脚本,启动所有节点
start-dfs.sh

5.Hadoop Ha模式下 配置spark和日志服务器

  • 配置spark-env.sh
#!/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-default.conf
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
  • 配置workers
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

  • 修改hbase-env.sh
#java
export JAVA_HOME=/usr/loca/jvm/java
#hbase
export HBASE_CLASSPATH=/usr/local/hbase/conf
#不使用自带zookeeper
export HBASE_MANAGES_ZK=false
#不包含hadoop包
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
  • 修改hbase-site.xml
<!--指定分布式-->
	<property>
	    <name>hbase.cluster.distributed</name>
	    <value>true</value>
	</property>
  <!--hbase在hdfs上路径-->
	<property>
	    <name>hbase.rootdir</name>
	    <value>hdfs://Ling-Ha/hbase</value>
	</property>
  <!--配置zk本地数据存放目录-->
	<property>
	    <name>hbase.zookeeper.property.dataDir</name>
	    <value>/usr/local/hbase/zookeeper</value>
	</property>
  <!--zoo集群-->
	<property>
	    <name>hbase.zookeeper.quorum</name>
	    <value>node3:2181,node4:2181,node5:2181</value>
	</property>
  • 修改regionservers
#添加节点名称
node3
node4
node5
node6
  • 将hadoop的core-site.xml和hdfs-site.xml,放到HBase的conf目录下,让HBase能找到Hadoop的配置
  • 配置Hbase Ha模式 在conf目录下创建backup-masters文件,输入备份节点名称
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值