Hadoop-3.2.x 高可用集群搭建

本章节阐述为在指定版本环境下示例安装,其它环境可根据实际情况参考安装

一. 环境版本

软件版本下载地址提取码
centosCentOS-7.6-x86_64自行安装6s86
java jdk1.8 tar.gz 格式自行百度安装 百度云下载xfdm
java jdk1.8 rpm 格式自行百度安装官网下载iexu
zookeeper3.6.3下载
Hadoop3.2.2官网下载
Hadoop3.2.2百度云下载ed08

Hadoop 官网地址:https://hbase.apache.org/book.html#hadoop

二. 环境准备

  • 这里准备 4 台服务器,环境准备 参考上期博客环境准备

  • 四台服务器分配

    服务器一服务器二服务器三服务器四
    IP192.168.1.131192.168.1.132192.168.1.133192.168.1.134
    映射主机名n1n2n3n4
    集群主节点NameNodeNameNode
    数据节点DataNodeDataNodeDataNodeDataNode
    监控节点NodeManagerNodeManagerNodeManagerNodeManager
    Yarn集群主控节点ResourceManagerResourceManager
    负责NameNode信息同步JournalNodeJournalNodeJournalNode
    DFSZKFConlerDFSZKFConler
    zookeeperzk0zk1zk2zk3

    NameNode 和 SecondaryNameNode 不要安装在同一台服务器
    ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。

    4台服务器 /etc/hosts 均需配置以下信息
    192.168.1.131 n1
    192.168.1.132 n2
    192.168.1.133 n3
    192.168.1.134 n4

    4台主机名改为对应 n1、n2、n3、n4

三. 创建用户

  • 创建 isi 程序用户, 创建 \u01 文件夹,授权给 isi 用户
    参考上期博客:创建用户

四. 上传解压

  • 使用isi用户登录 n1服务器

    su isi
    
  • 切换到 /u01 文件夹下,上传 hadoop-3.2.2.tar.gz,这里使用在线下载

    cd /u01
    wget https://downloads.apache.org/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz
    tar zxvf hadoop-3.2.2.tar.gz
    

五. hadoop环境配置(n1)

  • 切换root用户

    su root
    
  • 将以下hadoop配置写入/etc/profile中

    # hadoop
    export HADOOP_HOME=/u01/hadoop-3.2.2
    export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
    
  • 应用刷新 profile

    srouce /etc/profile
    
  • 测试是否配置成功。
    在这里插入图片描述

六. hadoop相关配置文件

  • 创建文件夹

    su isi
    cd /u01/hadoop-3.2.2
    mkdir logs
    mkdir data
    
  • 修改 hadoop-3.2.2/etc/hadoop/hadoop-env.sh,取消并修改添加export JAVA_HOME=,使其值为我们解压出jdk的位置

    vi etc/hadoop/hadoop-env.sh
    
    # 安装的java目录
    export JAVA_HOME=/usr/local/java/jdk1.8.0_141
    # 文件最后追加
    export HDFS_NAMENODE_USER=isi
    export HDFS_DATANODE_USER=isi
    export HDFS_SECONDARYNAMENODE_USER=isi
    export YARN_RESOURCEMANAGER_USER=isi
    export YARN_NODEMANAGER_USER=isi
    
  • 修改 hadoop-3.2.2/etc/hadoop/core-site.xml

    vi etc/hadoop/core-site.xml
    

    #添加以下内容, n1是 namenode 节点的IP映射

     <configuration>
    		<property>
    			<name>fs.defaultFS</name>
    			<value>hdfs://casic</value>
    			<description>逻辑名称,必须与hdfs-site.xml中的dfs.nameservices值保持一致</description>
    		</property>
    		<property>
    			<name>hadoop.tmp.dir</name>
    			<value>/u01/hadoop-3.2.2/data</value>
    			<description>namenode上本地的hadoop临时文件夹</description>
    		</property>
    		
    		<! --
    		<property>
    			<name>hadoop.http.staticuser.user</name>
    			<value>isi</value>
    			<description>默认用户</description>
    		</property>
    		<property>
    			<name>hadoop.proxyuser.root.hosts</name>
    			<value>*</value>
    			<description></description>
    		</property>
    		<property>
    			<name>hadoop.proxyuser.root.groups</name>
    			<value>*</value>
    			<description></description>
    		</property>
    		-- >
    		
    		<property>
    			<name>io.file.buffer.size</name>
    			<value>131072</value>
    			<description>读写文件的buffer大小为:128K</description>
    		</property>
    		<property>
    			<name>ha.zookeeper.quorum</name>
    			<value>n1:2181,n2:2181,n3:2181,n4:2181</value>
    			<description>zookeeper地址</description>
    		</property>
    		<property>
    			<name>ha.zookeeper.session-timeout.ms</name>
    			<value>10000</value>
    			<description>hadoop链接zookeeper的超时时长设置为10s</description>
    		</property>
     </configuration>
    
  • 修改hadoop-3.2.2/etc/hadoop/hdfs-site.xml

    vi etc/hadoop/hdfs-site.xml
    

    #添加以下内容

    <configuration>
    	<property>
    		<name>dfs.replication</name>
    		<value>2</value>
    		<description>Hadoop中每一个block的备份数</description>
    	</property>
    	<property>  
    		<name>dfs.permissions.enabled</name>  
    		<value>false</value>  
            </property>  
    
    	<!-- 存储路径 -->
    	<property>
    		<name>dfs.namenode.name.dir</name>
    		<value>/u01/hadoop-3.2.2/data/dfs/name</value>
    		<description>namenode上存储hdfs名字空间元数据目录</description>
    	</property>
    	<property>
    		<name>dfs.datanode.data.dir</name>
    		<value>/u01/hadoop-3.2.2/data/dfs/data</value>
    		<description>datanode上数据块的物理存储位置</description>
    	</property>
    	<!--
    	<property>
    		<name>dfs.namenode.secondary.http-address</name>
    		<value>n1:9869</value>
    		<description></description>
    	</property>
    	-->
    
    	<!--指定hdfs的nameservice为 casic ,需要和core-site.xml中的保持一致 -->
    	<property>
    		<name>dfs.nameservices</name>
    		<value>casic</value>
    		<description>指定hdfs的nameservice,需要和core-site.xml中保持一致</description>
    	</property>
    	<property>
    		<name>dfs.ha.namenodes.casic</name>
    		<value>nn1,nn2</value>
    		<description>casic为集群的逻辑名称,映射两个namenode逻辑名</description>
    	</property>
    	
    	<!-- RPC通信地址 -->
    	<property>
    		<name>dfs.namenode.rpc-address.casic.nn1</name>
    		<value>n1:8020</value>
    		<description>namenode1的RPC通信地址</description>
    	</property>
    	<property>
    		<name>dfs.namenode.rpc-address.casic.nn2</name>
    		<value>n2:8020</value>
    		<description>namenode2的RPC通信地址</description>
    	</property>
    	
    	<!-- http通信地址 -->
    	<property>
    		<name>dfs.namenode.http-address.casic.nn1</name>
    		<value>n1:50070</value>
    		<description>namenode1的http通信地址</description>
    	</property>
    	<property>
    		<name>dfs.namenode.http-address.casic.nn2</name>
    		<value>n2:50070</value>
    		<description>namenode2的http通信地址</description>
    	</property>
    	
    	<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
    	<property>
    		<name>dfs.namenode.shared.edits.dir</name>
    		<value>qjournal://n1:8485;n2:8485;n3:8485/casic</value>
    		<description>指定NameNode的edits元数据的共享存储位置(JournalNode列表)</description>
    	</property>
    	<property>
    		<name>dfs.journalnode.edits.dir</name> 
    		<value>/u01/hadoop-3.2.2/data/journaldata</value>
    		<description>指定JournalNode在本地磁盘存放数据的位置</description>
    	</property>	
    	
    	<!-- 容错 -->
    	<property>
    		<name>dfs.ha.automatic-failover.enabled</name>
    		<value>true</value>
    		<description>开启NameNode故障自动切换</description>
    	</property>
    	<property>
    		<name>dfs.client.failover.proxy.provider.gky</name>
    		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    		<description>失败后自动切换的实现方式</description>
    	</property>
    
       	<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
    	<property>
    		<name>dfs.ha.fencing.methods</name>
    		<value>
    				sshfence
    				shell(/bin/true)
    		</value>
    	</property>
    	<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
    	<property>
    		<name>dfs.ha.fencing.ssh.private-key-files</name>
    		<value>/u01/.ssh/id_rsa</value>
    	</property>
    	<!-- 配置sshfence隔离机制超时时间 -->
    	<property>
    		<name>dfs.ha.fencing.ssh.connect-timeout</name>
    		<value>30000</value>
    	</property>
    
    </configuration>
    
  • 修改hadoop-3.2.2/etc/hadoop/mapred-site.xml

    vi etc/hadoop/mapred-site.xml
    

    #添加以下内容

    <configuration>
    	<!-- 指定mr框架为yarn方式 -->
    	<property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    		<description>job执行框架: local, classic or yarn</description>
    	</property>
    	
    	<!--
    	<property>
    		<name>mapreduce.application.classpath</name>
    		<value>/u01/hadoop-3.2.2/etc/hadoop:/u01/hadoop-3.2.2/share/hadoop/common/lib/*:/u01/hadoop-3.2.2/share/hadoop/common/*:/u01/hadoop-3.2.2/share/hadoop/hdfs/*:/u01/hadoop-3.2.2/share/hadoop/hdfs/lib/*:/u01/hadoop-3.2.2/share/hadoop/mapreduce/*:/u01/hadoop-3.2.2/share/hadoop/mapreduce/lib/*:/u01/hadoop-3.2.2/share/hadoop/yarn/*:/u01/hadoop-3.2.2/share/hadoop/yarn/lib/*</value>
    	</property>
    	-->
    
    	<property>
    		<name>mapreduce.jobhistory.address</name>
    		<value>n1:10020</value>
    	</property>
    	<property>
    		<name>mapreduce.jobhistory.webapp.address</name>
    		<value>n1:19888</value>
    	</property>
    	
    	<property>
            	<name>yarn.app.mapreduce.am.env</name>
            	<value>HADOOP_MAPRED_HOME=/u01/hadoop-3.2.2</value>
        	</property>
        	<property>
            	<name>mapreduce.map.env</name>
            	<value>HADOOP_MAPRED_HOME=/u01/hadoop-3.2.2</value>
        	</property>
       	<property>
            	<name>mapreduce.reduce.env</name>
            	<value>HADOOP_MAPRED_HOME=/u01/hadoop-3.2.2</value>
        </property>
    
    	<property>
    		<name>mapreduce.map.memory.mb</name>
    		<value>1024</value>
    		<description>map阶段的task工作内存</description>
    	</property>
    	<property>
    		<name>mapreduce.reduce.memory.mb</name>
    		<value>2048</value>
    		<description>reduce阶段的task工作内存</description>
    	</property>
    	
    </configuration>
    
  • 修改hadoop-3.2.2/etc/hadoop/yarn-site.xml

    vi etc/hadoop/yarn-site.xml
    

    #添加以下内容

    <configuration>
        <!-- Site specific YARN configuration properties -->
        <!--启用resourcemanager ha-->  
       	<!--是否开启RM ha,默认是开启的-->  
    	<property>
    		<name>yarn.resourcemanager.ha.enabled</name>
    		<value>true</value>
    		<description>开启resourcemanager高可用</description>
    	</property>
    
    	<!--声明两台resourcemanager的cluster ID -->  
    	<property>
    		<name>yarn.resourcemanager.cluster-id</name>
    		<value>yrcasic</value>
    		<description>指定yarn集群中的id</description>
    	</property>
    
    	<!-- 指定resourcemanager的名字  -->  
    	<property>
    		<name>yarn.resourcemanager.ha.rm-ids</name>
    		<value>rm1,rm2</value>
    		<description>指定resourcemanager的名字</description>
    	</property>
    
    	<!-- 分别指定resourcemanager的地址  --> 
    	<property>
    		<name>yarn.resourcemanager.hostname.rm1</name>
    		<value>n3</value>
    		<description>设置rm1的名字</description>
    	</property>
    	<property>
    		<name>yarn.resourcemanager.hostname.rm2</name>
    		<value>n4</value>
    		<description>设置rm2的名字</description>
    	</property>
    
    	<!--如果不添加以下内容的话运行mapreduce的时候会出现问题。这里怀疑是AM和RM通信有问题;一台是备RM,一台活动的RM,在YARN内部,当MR去活动的RM为任务获取资源的时候没问题,但是去备RM获取时就会出现这个问题。-->   
    	<property>
            	<name>yarn.resourcemanager.address.rm1</name>
            	<value>n3:8032</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.scheduler.address.rm1</name>  
            	<value>n3:8030</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.webapp.address.rm1</name>
            	<value>n3:8088</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
            	<value>n3:8031</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.admin.address.rm1</name>
            	<value>n3:8033</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.ha.admin.address.rm1</name>
            	<value>n3:23142</value>
    	</property>
    
    	<property>
            	<name>yarn.resourcemanager.address.rm2</name>
            	<value>n4:8032</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.scheduler.address.rm2</name>
            	<value>n4:8030</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.webapp.address.rm2</name>
            	<value>n4:8088</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
            	<value>n4:8031</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.admin.address.rm2</name>
            	<value>n4:8033</value>
    	</property>
    	<property>
            	<name>yarn.resourcemanager.ha.admin.address.rm2</name>
            	<value>n4:23142</value>
    	</property>
    
    
    	<!--启用自动恢复,当任务进行一半,rm坏掉,就要启动自动恢复,默认是false--> 
       	<property>  
           		<name>yarn.resourcemanager.recovery.enabled</name>  
           		<value>true</value>  
        	</property>     
        	<!--指定resourcemanager的状态信息存储在zookeeper集群,默认是存放在FileSystem里面。-->   
        	<property>  
           		<name>yarn.resourcemanager.store.class</name>  
           		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>  
        	</property> 
    
    	<!-- zookeeper 地址 -->
    	<property>
    		<name>yarn.resourcemanager.zk-address</name>
    		<value>n1:2181,n2:2181,n3:2181,n4:2181</value>
    		<description>指定zk集群地址</description>
    	</property>
    	<property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    		<description>运行mapreduce程序必须配置的附属服务</description>
    	</property>
    
    	<property>
    		<name>yarn.nodemanager.local-dirs</name>
    		<value>/u01/hadoop-3.2.2/tmpdata/yarn/local</value>
    		<description>nodemanager本地存储目录</description>
    	</property>
    	<property>
    		<name>yarn.nodemanager.log-dirs</name>
    		<value>/u01/hadoop-3.2.2/tmpdata/yarn/log</value>
    		<description>nodemanager本地日志目录</description>
    	</property>
    	
    </configuration>
    
  • 修改集群下的 hadoop-3.2.2/etc/hadoop/workers 文件

    vi etc/hadoop/workers
    

    #添加以下内容

    n1
    n2
    n3
    n4
    

七. 分发其它节点

  • 分发 n1 中的 Hadoop 到 n2、n3、n4
    scp -r /u01/hadoop-3.2.2  n2:/u01/
    scp -r /u01/hadoop-3.2.2  n3:/u01/
    scp -r /u01/hadoop-3.2.2  n4:/u01/
    
  • 修改n3 节点, yarn-site.xml 上添加 HA id
    <property>  
      <name>yarn.resourcemanager.ha.id</name>  
      <value>rm1</value>  
    </property>
    
  • 修改n4 节点, yarn-site.xml 上添加 HA id
    <property>  
      <name>yarn.resourcemanager.ha.id</name>  
      <value>rm2</value>  
    </property>
    

八. 启动hadoop和测试

  1. 启动 zookeeper
    启动 所有 zookeeper 节点

    /bin/zkServer.sh start conf/zoo.cfg
    
  2. 启动每个 journalnode
    在 (n1、n2、n3 )journalnode节点用如下命令启动journalnode

     ./sbin/hadoop-daemon.sh start journalnode
    
  3. 在( n1) 格式化NameNode,使用start-all开启所有进程,并且使用jps查看进程情况。

    ./bin/hdfs namenode -format
    

    如果出现 has been successfully formatted. 则表示格式化成功
    如果出现 Retrying connect to server: n2/192.168.1.132:8485. Already tried 0 time(s)

    执行以下命令,启动集群再执行格式化命令

     ./sbin/start-dfs.sh
     ./bin/hdfs namenode -format
    

    激活第一个启动 n1 为 active 节点

     ./bin/hdfs --daemon start namenode
    
  4. 在另一个namenode ( n2) 同步 主namenode

     ./bin/hdfs namenode -bootstrapStandby
     ./sbin/start-dfs.sh
    
  5. 在 (n1) 格式 zkfc

     ./bin/hdfs zkfc -formatZK
    
  6. 在 (n1) 启动 yarn

    ./sbin/start-yarn.sh
    
  7. 在 (n1) 启动历史日志服务器

    ./bin/mapred --daemon start historyserver
    
  8. 在 (n1、n2) 启动httpfs服务
    powershell ./bin/hdfs --daemon start httpfs
    补充:如果想单独启动zkfc使用以下命令
    powershell ./bin/hdfs --daemon start zkfc

  9. 使用 jps 查看服务
    n1
    在这里插入图片描述
    n2
    在这里插入图片描述
    n3
    在这里插入图片描述
    n4
    在这里插入图片描述

  10. 查看集群界面

    浏览器访问:http://n1:50070
    此时看到四个节点状态正常
    在这里插入图片描述
    n1 为 active 状态在这里插入图片描述

  11. 强制节点变为active(手动故障转移
    如果两个 namenode 都为 standby 状态
    这时可以先强制手动是其中一个节点变为active

    ./bin/hdfs haadmin -transitionToActive nn1 --forcemanual
    
  12. 其它界面信息
    浏览器访问:http://n2:8042
    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值