【推荐】hadoop--HA分布式集群部署步骤总结

一、理论基础

( 一)  HA 概念以及作用 
  HA(High Available), 高可用性群集,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。

(二) HDFS概述 
基础架构

1、NameNode(Master)

1)命名空间管理:命名空间支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除、列表文件和目录等基本操作。

2)块存储管理。

NameNode+HA架构

这里写图片描述

  从上面的架构图可以看出,使用Active NameNode,Standby NameNode 两个节点可以解决单点问题,两个节点通过JounalNode共享状态,通过ZKFC 选举Active ,监控状态,自动备份。

1、Active NameNode

  接受client的RPC请求并处理,同时写自己的Editlog和共享存储上的Editlog,接收DataNode的Block report, block location updates和heartbeat。

2、Standby NameNode

  同样会接到来自DataNode的Block report, block location updates和heartbeat,同时会从共享存储的Editlog上读取并执行这些log操作,保持自己NameNode中的元数据(Namespcae information + Block locations map)和Active NameNode中的元数据是同步的。所以说Standby模式的NameNode是一个热备(Hot Standby NameNode),一旦切换成Active模式,马上就可以提供NameNode服务。

3、JounalNode

  用于Active NameNode , Standby NameNode 同步数据,本身由一组JounnalNode节点组成,该组节点奇数个。

4、ZKFC

  监控NameNode进程,自动备份。

(三) YARN概述 
基础架构

1、ResourceManager(RM)

  接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。

2、NodeManager

  节点上的资源管理,启动Container运行task计算,上报资源、container情况汇报给RM和任务处理情况汇报给AM。

3、ApplicationMaster

  单个Application(Job)的task管理和调度,向RM进行资源的申请,向NM发出launch Container指令,接收NM的task处理状态信息。

4、Web Application Proxy

  用于防止Yarn遭受Web攻击,本身是ResourceManager的一部分,可通过配置独立进程。ResourceManager Web的访问基于守信用户,当Application Master运行于一个非受信用户,其提供给ResourceManager的可能是非受信连接,Web Application Proxy可以阻止这种连接提供给RM。

5、Job History Server

  NodeManager在启动的时候会初始化LogAggregationService服务, 该服务会在把本机执行的container log (在container结束的时候)收集并存放到hdfs指定的目录下. ApplicationMaster会把jobhistory信息写到hdfs的jobhistory临时目录下, 并在结束的时候把jobhisoty移动到最终目录, 这样就同时支持了job的recovery.History会启动web和RPC服务, 用户可以通过网页或RPC方式获取作业的信息。

ResourceManager+HA架构

这里写图片描述

  ResourceManager HA 由一对Active,Standby结点构成,通过RMStateStore存储内部数据和主要应用的数据及标记。

二、集群规划

  • 主机规划
主机名IP安装的软件运行的进程
cs0192.168.80.128jdk1.7、hadoop、zookeeperNameNode、ResourceManager、JournalNode、QuorumPeerMain、DFSZKFailoverController(zkfc)
cs1192.168.80.129jdk1.7、hadoop、zookeeperNameNode、ResourceManager、JournalNode、QuorumPeerMain、DFSZKFailoverController(zkfc)
cs2192.168.80.130jdk1.7、hadoop、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
cs3192.168.80.131jdk1.7、hadoop、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
cs4192.168.80.132jdk1.7、hadoop、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain

备注:Journalnode和ZooKeeper保持奇数个,这点大家要有个概念,最少不少于 3 个节点。

  • 目录规划
名称路径
所有软件目录/home/hadoop/app/
所有数据和日志目录/home/hadoop/data/

三、集群安装前的环境检查

  • 时钟同步

所有节点的系统时间要与当前时间保持一致。

查看当前系统时间

 

[html] view plain copy

  1. [root@cs0 ~]# date  
  2. Sun Apr 24 04:52:48 PDT 2016  

如果系统时间与当前时间不一致,进行以下操作。

 

[html] view plain copy

  1. [root@cs0 ~]# cd /usr/share/zoneinfo/  
  2. [root@cs0 zoneinfo]# ls     //找到Asia  
  3. [root@cs0 zoneinfo]# cd Asia/       //进入Asia目录  
  4. [root@cs0 Asia]# ls     //找到Shanghai  
  5. [root@cs0 Asia]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime        //当前时区替换为上海  

我们可以同步当前系统时间和日期与NTP(网络时间协议)一致。

 

[html] view plain copy

  1. [root@cs0 Asia]# yum install ntp   //如果ntp命令不存在,在线安装ntp  
  2. [root@cs0 Asia]# ntpdate pool.ntp.org       //执行此命令同步日期时间  
  3. [root@cs0 Asia]# date       //查看当前系统时间  
  • hosts文件检查

所有节点的hosts文件都要配置静态ip与hostname之间的对应关系。

 

[html] view plain copy

  1. [root@cs0 ~]# vi /etc/hosts  
  2. 192.168.80.128 cs0  
  3. 192.168.80.129 cs1  
  4. 192.168.80.130 cs2  
  5. 192.168.80.131 cs3  
  6. 192.168.80.132 cs4  


禁用防火墙

所有节点的防火墙都要关闭。

查看防火墙状态

 

[html] view plain copy

  1. [root@cs0 ~]# service iptables status  
  2. iptables: Firewall is not running.  

如果不是上面的关闭状态,则需要关闭防火墙。

 

[html] view plain copy

  1. [root@cs0 ~]#  chkconfig iptables off      //永久关闭防火墙  
  2. [root@cs0 ~]#  service iptables stop     

四、 配置SSH免密码通信

[html] view plain copy

  1. hadoop@cs0 ~]$ mkdir .ssh  
  2. [hadoop@cs0 ~]$ ssh-keygen -t rsa     //执行命令一路回车,生成秘钥  
  3. [hadoop@cs0 ~]$cd .ssh   
  4. [hadoop@cs0 .ssh]$ ls   
  5. authorized_keys  id_rsa  id_rsa.pub  known_hosts  
  6. [hadoop@cs0 .ssh]$ cat id_rsa.pub >> authorized_keys       //将公钥保存到authorized_keys认证文件中   


集群所有节点都要行上面的操作。

将所有节点中的共钥id_ras.pub拷贝到djt11中的authorized_keys文件中。 
cat ~/.ssh/id_rsa.pub | ssh hadoop@cs0 'cat >> ~/.ssh/authorized_keys'

所有节点都需要执行这条命令

然后将cs0中的authorized_keys文件分发到所有节点上面。

 

[html] view plain copy

  1. scp -r authorized_keys hadoop@cs1:~/.ssh/  
  2.   
  3. scp -r authorized_keys hadoop@cs2:~/.ssh/  
  4.   
  5. scp -r authorized_keys hadoop@cs3:~/.ssh/  
  6.   
  7. scp -r authorized_keys hadoop@cs45:~/.ssh/  

五、脚本工具的使用

在cs0节点上创建/home/hadoop/tools目录。

 

[html] view plain copy

  1. [hadoop@cs0 ~]$ mkdir /home/hadoop/tools  
  2.   
  3. [hadoop@cs0 ~]$cd /home/hadoop/tools  

在/home/hadoop/tools分别建立以下脚本文件。

[hadoop@cs0 tools]$ vim deploy.conf

 

[html] view plain copy

  1. cs0,all,namenode,zookeeper,resourcemanager,  
  2. cs1,all,slave,namenode,zookeeper,resourcemanager,  
  3. cs2,all,slave,datanode,zookeeper,  
  4. cs3,all,slave,datanode,zookeeper,  
  5. cs4,all,slave,datanode,zookeeper,  

[hadoop@cs0 tools]$ vim deploy.sh

 

[plain] view plain copy

  1. #!/bin/bash  
  2. #set -x  
  3.   
  4. if [ $# -lt 3 ]  
  5. then   
  6.   echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"  
  7.   echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"  
  8.   exit   
  9. fi  
  10.   
  11. src=$1  
  12. dest=$2  
  13. tag=$3  
  14. if [ 'a'$4'a' == 'aa' ]  
  15. then  
  16.   confFile=/home/hadoop/tools/deploy.conf  
  17. else   
  18.   confFile=$4  
  19. fi  
  20.   
  21. if [ -f $confFile ]  
  22. then  
  23.   if [ -f $src ]  
  24.   then  
  25.     for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
  26.     do  
  27.        scp $src $server":"${dest}  
  28.     done   
  29.   elif [ -d $src ]  
  30.   then  
  31.     for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
  32.     do  
  33.        scp -r $src $server":"${dest}  
  34.     done   
  35.   else  
  36.       echo "Error: No source file exist"  
  37.   fi  
  38.   
  39. else  
  40.   echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"  
  41. fi  

[hadoop@cs0 tools]$ vim runRemoteCmd.sh

 

[plain] view plain copy

  1. #!/bin/bash  
  2. #set -x  
  3.   
  4. if [ $# -lt 2 ]  
  5. then   
  6.   echo "Usage: ./runRemoteCmd.sh Command MachineTag"  
  7.   echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"  
  8.   exit   
  9. fi  
  10.   
  11. cmd=$1  
  12. tag=$2  
  13. if [ 'a'$3'a' == 'aa' ]  
  14. then  
  15.   
  16.   confFile=/home/hadoop/tools/deploy.conf  
  17. else   
  18.   confFile=$3  
  19. fi  
  20.   
  21. if [ -f $confFile ]  
  22. then  
  23.     for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
  24.     do  
  25.        echo "*******************$server***************************"  
  26.        ssh $server "source /etc/profile; $cmd"  
  27.     done   
  28. else  
  29.   echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"  
  30. fi  

查看已经建立的文件

 

[html] view plain copy

  1. [hadoop@cs0 tools]$ ls  
  2. deploy.conf  deploy.sh  runRemoteCmd.sh  

如果我们想直接使用脚本,还需要给脚本添加执行权限。

 

[html] view plain copy

  1. [hadoop@cs0 tools]$ chmod u+x deploy.sh  
  2. [hadoop@cs0 tools]$ chmod u+x runRemoteCmd.sh  

同时我们需要将/home/hadoop/tools目录配置到PATH路径中。

 

[html] view plain copy

  1. [hadoop@cs0 tools]$ su root  
  2. Password:  
  3. [root@cs0 tools]# vi /etc/profile  
  4. PATH=/home/hadoop/tools:$PATH  
  5. export PATH  

我们在cs0节点上,通过runRemoteCmd.sh脚本,一键创建所有节点的软件安装目录/home/hadoop/app。

 

[html] view plain copy

  1. [hadoop@cs0 tools]$ runRemoteCmd.sh "mkdir /home/hadoop/app" all  

我们可以在所有节点查看到/home/hadoop/app目录已经创建成功。

六、jdk安装

将本地下载好的jdk1.7,上传至cs0节点下的/home/hadoop/app目录。

 

[html] view plain copy

  1. [root@cs0 tools]# su hadoop  
  2. [hadoop@cs0 tools]$ cd /home/hadoop/app/  
  3. [hadoop@cs0 app]$ rz       //选择本地的下载好的jdk-7u79-linux-x64.tar.gz  
  4. [hadoop@cs0 app]$ ls  
  5. jdk-7u79-linux-x64.tar.gz  
  6. [hadoop@cs0 app]$ tar -zxvf jdk-7u79-linux-x64.tar.gz      //解压  
  7. [hadoop@cs0 app]$ ls  
  8. jdk1.7.0_79 jdk-7u79-linux-x64.tar.gz  
  9. [hadoop@cs0 app]$ rm jdk-7u79-linux-x64.tar.gz     //删除安装包  

添加jdk环境变量。

 

[html] view plain copy

  1. [hadoop@cs0 app]$ su root  
  2. Password:  
  3. [root@cs0 app]# vi /etc/profile  
  4. JAVA_HOME=/home/hadoop/app/jdk1.7.0_79  
  5. CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
  6. PATH=$JAVA_HOME/bin:$PATH  
  7. export JAVA_HOME CLASSPATH PATH  
  8. [root@cs0 app]# source /etc/profile     //使配置文件生效  

查看jdk是否安装成功。

 

[html] view plain copy

  1. [root@cs0 app]# java -version  
  2. java version "1.7.0_79"  
  3. Java(TM) SE Runtime Environment (build 1.7.0_79-b15)  
  4. Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)  

出现以上结果就说明cs0节点上的jdk安装成功。

然后将cs0下的jdk安装包复制到其他节点上。

[hadoop@cs0 app]$ deploy.sh jdk1.7.0_79 /home/hadoop/app/slave

cs1,cs2,cs3,cs4节点重复cs0节点上的jdk配置即可。

七、Zookeeper安装

将本地下载好的zookeeper-3.4.6.tar.gz安装包,上传至cs0节点下的/home/hadoop/app目录下。

 

[html] view plain copy

  1. [hadoop@cs0 app]$ ls  
  2. jdk1.7.0_79 zookeeper-3.4.6.tar.gz  
  3. [hadoop@cs0 app]$ tar zxvf zookeeper-3.4.6.tar.gz      //解压  
  4. [hadoop@cs0 app]$ ls  
  5. jdk1.7.0_79 zookeeper-3.4.6.tar.gz zookeeper-3.4.6  
  6. [hadoop@cs0 app]$ rm zookeeper-3.4.6.tar.gz        //删除zookeeper-3.4.6.tar.gz安装包  
  7. [hadoop@cs0 app]$ mv zookeeper-3.4.6 zookeeper     //重命名     

修改Zookeeper中的配置文件。

 

[html] view plain copy

  1. [hadoop@cs0 app]$ cd /home/hadoop/app/zookeeper/conf/  
  2. [hadoop@cs0 conf]$ ls  
  3. configuration.xsl  log4j.properties  zoo_sample.cfg  
  4. [hadoop@cs0 conf]$ cp zoo_sample.cfg zoo.cfg       //复制一个zoo.cfg文件  
  5. [hadoop@cs0 conf]$ vi zoo.cfg  
  6. dataDir=/home/hadoop/data/zookeeper/zkdata      //数据文件目录  
  7. dataLogDir=/home/hadoop/data/zookeeper/zkdatalog        //日志目录  
  8. # the port at which the clients will connect  
  9. clientPort=2181   
  10. //server.服务编号=主机名称:Zookeeper不同节点之间同步和通信的端口:选举端口(选举leader)  
  11. server.0=cs0:2888:3888  
  12. server.1=cs1:2888:3888  
  13. server.2=cs2:2888:3888  
  14. server.3=cs3:2888:3888  
  15. server.4=cs4:2888:3888  

通过远程命令deploy.sh将Zookeeper安装目录拷贝到其他节点上面。

 

[html] view plain copy

  1. [hadoop@cs0 app]$ deploy.sh zookeeper /home/hadoop/app  slave  

通过远程命令runRemoteCmd.sh在所有的节点上面创建目录:

 

[html] view plain copy

  1. [hadoop@cs0 app]$ runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdata" all   //创建数据目录  
  2. [hadoop@cs0 app]$ runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdatalog" all   //创建日志目录  

然后分别在cs0、cs1、cs2、cs3、cs4上面,进入zkdata目录下,创建文件myid,里面的内容分别填充为:0、1、2、3、4, 这里我们以cs0为例。

 

[html] view plain copy

  1. [hadoop@cs0 app]$ cd /home/hadoop/data/zookeeper/zkdata  
  2. [hadoop@cs0 zkdata]$ vi myid  
  3. 1   //输入数字1  

配置Zookeeper环境变量。

 

[html] view plain copy

  1. [hadoop@cs0  zkdata]$ su root  
  2. Password:   
  3. [root@cs0 zkdata]# vi /etc/profile  
  4. JAVA_HOME=/home/hadoop/app/jdk1.7.0_79  
  5. ZOOKEEPER_HOME=/home/hadoop/app/zookeeper  
  6. CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
  7. PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH  
  8. export JAVA_HOME CLASSPATH PATH ZOOKEEPER_HOME  
  9. [root@cs0 zkdata]# source /etc/profile      //使配置文件生效  

在cs0节点上面启动Zookeeper。

 

[html] view plain copy

  1. [hadoop@cs0 zkdata]$ cd /home/hadoop/app/zookeeper/  
  2. [hadoop@cs0 zookeeper]$ bin/zkServer.sh start  
  3. [hadoop@cs0 zookeeper]$ jps  
  4. 3633 QuorumPeerMain  
  5. [hadoop@cs0 zookeeper]$ bin/zkServer.sh stop       //关闭Zookeeper  

使用runRemoteCmd.sh 脚本,启动所有节点上面的Zookeeper。

 

[html] view plain copy

  1. runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper  

查看所有节点上面的QuorumPeerMain进程是否启动。

 

[html] view plain copy

  1. runRemoteCmd.sh "jps" zookeeper  

查看所有Zookeeper节点状态。

 

[html] view plain copy

  1. runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh status" zookeeper  

如果一个节点为leader,另四个节点为follower,则说明Zookeeper安装成功。

八、hadoop集群环境搭建

将下载好的apache hadoop-2.6.0.tar.gz安装包,上传至cs0节点下的/home/hadoop/app目录下

 

[html] view plain copy

  1. [hadoop@cso0 app]$ ls  
  2. hadoop-2.6.0.tar.gz jdk1.7.0_79  zookeeper  
  3. [hadoop@cso0 app]$ tar zxvf hadoop-2.6.0.tar.gz        //解压  
  4. [hadoop@cso0 app]$ ls  
  5. hadoop-2.6.0 hadoop-2.6.0.tar.gz jdk1.7.0_79  zookeeper  
  6. [hadoop@cso0 app]$ rm hadoop-2.6.0.tar.gz      //删除安装包  
  7. [hadoop@cso0 app]$ mv hadoop-2.6.0 hadoop      //重命名  

切换到/home/hadoop/app/hadoop/etc/hadoop/目录下,修改配置文件。

 

[html] view plain copy

  1. [hadoop@cso0 app]$ cd /home/hadoop/app/hadoop/etc/hadoop/   

配置HDFS

配置hadoop-env.sh

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ vi hadoop-env.sh  
  2. export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79  

配置core-site.xml

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ vi core-site.xml  
  2. <configuration>  
  3.     <property>  
  4.         <name>fs.defaultFS</name>  
  5.         <value>hdfs://cluster1</value>  
  6.     </property>  
  7.     < 这里的值指的是默认的HDFS路径 ,取名为cluster1>  
  8.     <property>  
  9.         <name>hadoop.tmp.dir</name>  
  10.         <value>/home/hadoop/data/hadoop_${user.name}</value>  
  11.     </property>  
  12.     < hadoop的临时目录,如果需要配置多个目录,需要逗号隔开,data目录需要我们自己创建>  
  13.     <property>  
  14.         <name>ha.zookeeper.quorum</name>  
  15.         <value>cs0:2181,cs1:2:2181,cs2:2181,cs3:2181,cs4:2181</value>  
  16.     </property>  
  17.     < 配置Zookeeper 管理HDFS>  
  18. </configuration>  

配置hdfs-site.xml

[hadoop@cs0 hadoop]$ vi hdfs-site.xml

 

[html] view plain copy

  1. <configuration>  
  2.     <property>  
  3.         <name>dfs.replication</name>  
  4.         <value>3</value>  
  5.     </property>  
  6.     < 数据块副本数为3>  
  7.     <property>  
  8.         <name>dfs.permissions</name>  
  9.         <value>false</value>  
  10.     </property>  
  11.     <property>  
  12.         <name>dfs.permissions.enabled</name>  
  13.         <value>false</value>  
  14.     </property>  
  15.     < 权限默认配置为false>  
  16.     <property>  
  17.         <name>dfs.nameservices</name>  
  18.         <value>cluster1</value>  
  19.     </property>  
  20.     < 命名空间,它的值与fs.defaultFS的值要对应,namenode高可用之后有两个namenode,cluster1是对外提供的统一入口>  
  21.     <property>  
  22.         <name>dfs.ha.namenodes.cluster1</name>  
  23.         <value>cs0,cs1</value>  
  24.     </property>  
  25.     < 指定 nameService 是 cluster1 时的nameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可>  
  26.     <property>  
  27.         <name>dfs.namenode.rpc-address.cluster1.cs0</name>  
  28.         <value>cs0:9000</value>  
  29.     </property>  
  30.     <cs0 rpc地址>  
  31.     <property>  
  32.         <name>dfs.namenode.http-address.cluster1.cs0</name>  
  33.         <value>cs0:50070</value>  
  34.     </property>  
  35.     < cs0 http地址>  
  36.     <property>  
  37.         <name>dfs.namenode.rpc-address.cluster1.cs1</name>  
  38.         <value>cs1:9000</value>  
  39.     </property>  
  40.     < cs1 rpc地址>  
  41.     <property>  
  42.         <name>dfs.namenode.http-address.cluster1.cs1</name>  
  43.         <value>cs1:50070</value>  
  44.     </property>  
  45.     < cs1 http地址>  
  46.     <property>  
  47.         <name>dfs.ha.automatic-failover.enabled</name>  
  48.         <value>true</value>  
  49.     </property>  
  50.     < 启动故障自动恢复>  
  51.     <property>  
  52.         <name>dfs.namenode.shared.edits.dir</name>  
  53.         <value>qjournal://cs0:8485;cs1:8485;cs2:8485;cs3:8485;cs4:8485/cluster1</value>  
  54.     </property>  
  55.     < 指定journal>  
  56.     <property>  
  57.         <name>dfs.client.failover.proxy.provider.cluster1</name>  
  58.         <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
  59.     </property>  
  60.     < 指定 cluster1 出故障时,哪个实现类负责执行故障切换>  
  61.     <property>  
  62.         <name>dfs.journalnode.edits.dir</name>  
  63.         <value>/home/hadoop/data/journaldata/jn</value>  
  64.     </property>  
  65.     < 指定JournalNode集群在对nameNode的目录进行共享时,自己存储数据的磁盘路径 >  
  66.     <property>  
  67.         <name>dfs.ha.fencing.methods</name>  
  68.         <value>shell(/bin/true)</value>  
  69.     </property>  
  70.     <property>  
  71.         <name>dfs.ha.fencing.ssh.private-key-files</name>  
  72.         <value>/home/hadoop/.ssh/id_rsa</value>  
  73.     </property>  
  74.     <property>  
  75.         <name>dfs.ha.fencing.ssh.connect-timeout</name>  
  76.         <value>10000</value>  
  77.     </property>  
  78.     < 脑裂默认配置>  
  79.     <property>  
  80.         <name>dfs.namenode.handler.count</name>  
  81.         <value>100</value>  
  82.     </property>  
  83. </configuration>  

配置 slave

 

[html] view plain copy

  1. [hadoop@djt11 hadoop]$ vi slaves  
  2. cs2  
  3. cs3  
  4. cs4  

向所有节点分发hadoop安装包。

 

[html] view plain copy

  1. [hadoop@cs0 app]$ deploy.sh hadoop /home/hadoop/app/ slave  

hdfs配置完毕后启动顺序

1、启动所有节点上面的Zookeeper进程

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper  

2、启动所有节点上面的journalnode进程

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode" all  

3、首先在主节点上(比如,cs0)执行格式化

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ bin/hdfs namenode -format / /namenode 格式化  
  2. [hadoop@cs0  hadoop]$ bin/hdfs zkfc -formatZK //格式化高可用  
  3. [hadoop@cs0 hadoop]$bin/hdfs namenode //启动namenode  

4、与此同时,需要在备节点(比如,cs1)上执行数据同步

 

[html] view plain copy

  1. [hadoop@cs1 hadoop]$ bin/hdfs namenode -bootstrapStandby   //同步主节点和备节点之间的元数据  

5、cs1同步完数据后,紧接着在cs0节点上,按下ctrl+c来结束namenode进程。 然后关闭所有节点上面的journalnode进程

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh stop journalnode" all  //然后停掉各节点的journalnode  
  2. 备注:可以使用  
  3. [hadoop@cs0 hadoop]$ sbin/hadoop-daemon.sh start zkfc   单独启动一个zkfc进程  

6、如果上面操作没有问题,我们可以一键启动hdfs所有相关进程

[hadoop@cs0 hadoop]$ sbin/start-dfs.sh

启动成功之后,关闭其中一个namenode ,然后在启动namenode 观察切换的状况。

7、验证是否启动成功

通过web界面查看namenode启动情况。

http://cs0:50070 
http://cs1:50070

上传文件至hdfs

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ vi test.txt   //本地创建一个test.txt文件  
  2. hadoop  appache  
  3. hadoop ywendeng  
  4. hadoop tomcat  
  5. [hadoop@cs0  hadoop]$ hdfs dfs -mkdir /test   //在hdfs上创建一个文件目录  
  6. [hadoop@cs0 hadoop]$ hdfs dfs -put test.txt  /test     //向hdfs上传一个文件  
  7. [hadoop@cso hadoop]$ hdfs dfs -ls /test    //查看test.txt是否上传成功  

如果上面操作没有问题说明hdfs配置成功。

YARN安装配置

配置mapred-site.xml

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ vi mapred-site.xml  
  2. <configuration>  
  3.     <property>  
  4.         <name>mapreduce.framework.name</name>  
  5.         <value>yarn</value>  
  6.     </property>  
  7.     <指定运行mapreduce的环境是Yarn,与hadoop1不同的地方>  
  8. </configuration>  

配置yarn-site.xml

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ vi yarn-site.xml  
  2. <configuration>  
  3. <property>  
  4.     <name>yarn.resourcemanager.connect.retry-interval.ms</name>  
  5.     <value>2000</value>  
  6. </property>  
  7. < 超时的周期>  
  8. <property>  
  9.     <name>yarn.resourcemanager.ha.enabled</name>  
  10.     <value>true</value>  
  11. </property>  
  12. < 打开高可用>  
  13. <property>  
  14.     <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>  
  15.     <value>true</value>  
  16. </property>  
  17. <启动故障自动恢复>  
  18. <property>  
  19.     <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>  
  20.     <value>true</value>  
  21. </property>  
  22.   
  23. <property>  
  24.     <name>yarn.resourcemanager.cluster-id</name>  
  25.     <value>yarn-rm-cluster</value>  
  26. </property>  
  27. <给yarn cluster 取个名字yarn-rm-cluster>  
  28. <property>  
  29.     <name>yarn.resourcemanager.ha.rm-ids</name>  
  30.     <value>rm1,rm2</value>  
  31. </property>  
  32. <给ResourceManager 取个名字 rm1,rm2>  
  33. <property>  
  34.     <name>yarn.resourcemanager.hostname.rm1</name>  
  35.     <value>cs0</value>  
  36. </property>  
  37. <配置ResourceManager rm1 hostname>  
  38. <property>  
  39.     <name>yarn.resourcemanager.hostname.rm2</name>  
  40.     <value>cs1</value>  
  41. </property>  
  42. <配置ResourceManager rm2 hostname>  
  43. <property>  
  44.     <name>yarn.resourcemanager.recovery.enabled</name>  
  45.     <value>true</value>  
  46. </property>  
  47. <启用resourcemanager 自动恢复>  
  48. <property>  
  49.     <name>yarn.resourcemanager.zk.state-store.address</name>  
  50.     <value>cs0:2181,cs1:2181,cs2:2181,cs3:2181,cs4:2181</value>  
  51. </property>  
  52. <配置Zookeeper地址>  
  53. <property>  
  54.     <name>yarn.resourcemanager.zk-address</name>  
  55.     <value>cs0:2181,cs1:2181,cs2:2181,cs3:2181,cs4:2181</value>  
  56. </property>  
  57. <配置Zookeeper地址>  
  58. <property>  
  59.     <name>yarn.resourcemanager.address.rm1</name>  
  60.     <value>cs0:8032</value>  
  61. </property>  
  62. < rm1端口号>  
  63. <property>  
  64.     <name>yarn.resourcemanager.scheduler.address.rm1</name>  
  65.     <value>cs0:8034</value>  
  66. </property>  
  67. < rm1调度器的端口号>  
  68. <property>  
  69.     <name>yarn.resourcemanager.webapp.address.rm1</name>  
  70.     <value>cs0:8088</value>  
  71. </property>  
  72. < rm1 webapp端口号>  
  73. <property>  
  74.     <name>yarn.resourcemanager.address.rm2</name>  
  75.     <value>cs1:8032</value>  
  76. </property>  
  77. < rm2端口号>  
  78. <property>  
  79.     <name>yarn.resourcemanager.scheduler.address.rm2</name>  
  80.     <value>cs1:8034</value>  
  81. </property>  
  82. < rm2调度器的端口号>  
  83. <property>  
  84.     <name>yarn.resourcemanager.webapp.address.rm2</name>  
  85.     <value>cs1:8088</value>  
  86. </property>  
  87. < rm2 webapp端口号>  
  88. <property>  
  89.     <name>yarn.nodemanager.aux-services</name>  
  90.     <value>mapreduce_shuffle</value>  
  91. </property>  
  92. <property>  
  93.     <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>  
  94.     <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
  95. </property>  
  96. <执行MapReduce需要配置的shuffle过程>  
  97. </configuration>  

启动YARN

1、在cs0节点上执行。

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ sbin/start-yarn.sh    

2、在cs1节点上面执行。

 

[html] view plain copy

  1. [hadoop@cs1 hadoop]$ sbin/yarn-daemon.sh start resourcemanager  

同时打开一下web界面。

 

[html] view plain copy

  1. http://cs0:8088  
  2. http://cs1:8088  

关闭其中一个resourcemanager,然后再启动,看看这个过程的web界面变化。

3、检查一下ResourceManager状态

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ bin/yarn rmadmin -getServiceState rm1  
  2. [hadoop@cs0 hadoop]$ bin/yarn rmadmin -getServiceState rm2  

4、Wordcount示例测试

 

[html] view plain copy

  1. [hadoop@cs0 hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /test/test.txt /test/out/  

如果上面执行没有异常,说明YARN安装成功。

至此,hadoop 分布式集群搭建完毕。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值