HDFS&Yarn HA 集群部署(三台机器)

1.规划&环境准备

1.1 软件准备

组件名版本百度网盘
Centos服务器 3台7.6 64位https://pan.baidu.com/s/1z3BPYQ9-zdy6GRfdrfI_3A 提取码: xi6h
Jdkjdk-8u45-linux-x64.gzhttps://pan.baidu.com/s/1z3BPYQ9-zdy6GRfdrfI_3A 提取码: xi6h
Hadoophadoop-2.6.0-cdh5.15.1.tar.gzhttps://pan.baidu.com/s/1z3BPYQ9-zdy6GRfdrfI_3A 提取码: xi6h
Zookeeperzookeeper-3.4.6.tar.gzhttps://pan.baidu.com/s/1z3BPYQ9-zdy6GRfdrfI_3A 提取码: xi6h

1.2 主机规划

笔者这里购买了3台阿里云按量服务器作为实验环境,可以根据自己实际情况来选择
三台机器[ruozedata001,ruozedata002,ruozedata003]规划如下:

IPHOST安装软件进程
172.24.102.253ruozedata001Hadoop ZookeeprNameNode
DFSZKFailoverController
JournalNode
DataNode

ResourceManager
JobHistoryServer
NodeManager

QuorumPeerMain
172.24.102.255ruozedata002Hadoop ZookeeprNameNode
DFSZKFailoverController
JournalNode
DataNode

ResourceManager
NodeManager

QuorumPeerMain
172.24.102.254ruozedata003Hadoop ZookeeprJournalNode
DataNode

NodeManager

QuorumPeerMain

2.安装前准备

2.1 添加hadoop用户并创建目录

ruozedata001/ruozedata002/ruozedata003 三台机器均做以下操作:

2.1.1 添加hadoop用户
[root@ruozedata001 ~]# useradd hadoop
2.2.2 创建目录
# 切换至hadoop用户
[root@ruozedata001 ~]# su - hadoop
# 创建目录
[hadoop@ruozedata001 ~]$ mkdir app software source lib data script tmp
目录名称说明
app组件安装目录
software组件安装包
source源码包
lib开发的jar包
data数据目录
scriptshell脚本
tmp临时目录
2.2.3 配置Hosts使ip与hostname绑定

/etc/hosts 配置的是内网ip而不是外网ip

[root@ruozedata001 ~]# vi /etc/hosts
# 这里修改为自己机器的ip
172.24.102.253  ruozedata001
172.24.102.255  ruozedata002
172.24.102.254  ruozedata003
2.2.4 安装rz和sz命令

使用lrzsz软件包能够让我们非常方便的往服务器上传和下载文件

# 安装 这里切换root用户来安装软件
[root@ruozedata001 ~]#  yum -y install lrzsz 
# 上传文件,执行命令rz,会跳出文件选择窗口,选择好文件,点击确认即可。
[root@ruozedata001 ~]#  rz
# 下载文件,执行命令sz
[root@ruozedata001 ~]#  sz
2.2.5 配置Hadoop的SSH互信

参考hadoop官网ssh配置 (这个是参考 主要是注意 authorized_keys 和权限)
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#Setup_passphraseless_ssh

# 生成密钥  执行该命令 之后直接点击四次回车
[hadoop@ruozedata001 ~]$ ssh-keygen
[hadoop@ruozedata001 ~]$ cd ~/.ssh
# 能够看到生成了公钥
[hadoop@ruozedata001 .ssh]$ ls
id_rsa  id_rsa.pub

三台机器均执行该操作,分别生成密钥
然后将ruozedata002.ruozedata003机器上的 id_rsa.pub下载到本地并重命名为 id_rsa.pub2, id_rsa.pub3然后上传到 ruozedata001 上

# ruozedata002 下载
[hadoop@ruozedata002 .ssh]$ sz id_rsa.pub
# ruozedata003 下载
[hadoop@ruozedata003 .ssh]$ sz id_rsa.pub
# 上传到ruozedata001
[hadoop@ruozedata001 .ssh]$  rz
# 将密钥保存到authorized_keys
[hadoop@ruozedata001 .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[hadoop@ruozedata001 .ssh]$ cat id_rsa.pub2 >> authorized_keys
[hadoop@ruozedata001 .ssh]$ cat id_rsa.pub3 >> authorized_keys
[hadoop@ruozedata001 .ssh]$ chmod 0600 ~/.ssh/authorized_keys

然后sz下载ruozedata001 的authorized_keys至本地并rz上传到ruozedata002和ruozedata003并赋予chmod 0600权限
三台机器都执行如下三行命令进行验证

[hadoop@ruozedata001 ~]$ ssh ruozedata001 date
Wed Aug 21 19:14:50 CST 2019
[hadoop@ruozedata001 ~]$ ssh ruozedata002 date
Wed Aug 21 19:14:50 CST 2019
[hadoop@ruozedata001 ~]$ ssh ruozedata003 date
Wed Aug 21 19:14:51 CST 2019

note: ~/.ssh/known_hosts 该文件会记录认证信息,如果其他机器被重新生成过ssh-key,那么需要手动删除掉该文件中历史认证信息

2.2.6 上传需要安装的软件

使用rz命令将Jdk,Hadoop和Zookeeper都上传到ruozedata001然后通过scp复制到其他机器

[hadoop@ruozedata001 ~]$ cd software/
# 上传文件
[hadoop@ruozedata001 software]$ rz
[hadoop@ruozedata001 software]$ scp * ruozedata002:/home/hadoop/software/
[hadoop@ruozedata001 software]$ scp * ruozedata003:/home/hadoop/software/

3 软件安装

3.1 Jdk安装

解压

# 切换root用户
[hadoop@ruozedata001 software]$ exit
[root@ruozedata001 ~]# mkdir /usr/java
[root@ruozedata001 ~]# cd /home/hadoop/software
[root@ruozedata001 software]# tar -zxvf jdk-8u45-linux-x64.gz -C /usr/java
#  jdk目录的权限修正,注意用户和用户组,这步很重要 
[root@ruozedata001 ~]# chown -R root:root /usr/java/*

配置环境变量

[root@ruozedata001 ~]# vi /etc/profile
# 追加以下内容
export JAVA_HOME=/usr/java/jdk1.8.0_45
export PATH=$JAVA_HOME/bin:$PATH
# 使配置文件生效
[root@ruozedata001 ~]# source /etc/profile

验证

[root@ruozedata001 ~]# which java
# 出现以下输出说明正确安装
/usr/java/jdk1.8.0_45/bin/java

3.2 Zookeeper安装&配置

解压

# 切换hadoop用户
[hadoop@ruozedata001 app]$ su - hadoop
# 解压 -C指定解压位置
[hadoop@ruozedata001 software]$ tar -zxvf zookeeper-3.4.6.tar.gz -C ~/app/
# 最佳实践:使用软连接,在软件版本升级时不用修改环境变量等配置 
[hadoop@ruozedata001 app]$ ln -s zookeeper-3.4.6 zookeeper

修改zookeeper配置文件(三台机器均修改)

# 拷贝一份官方示例配置文件zoo_sample.cfg
[hadoop@ruozedata001 conf]$ cp zoo_sample.cfg zoo.cfg
# 编辑zoo.cfg 修改dataDir 并添加server信息
[hadoop@ruozedata001 conf]$ vi zoo.cfg
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 修改dataDir位置
dataDir=/home/hadoop/data/zookeeper
# 设置三个节点的zookeeper内部通讯端口
server.1=ruozedata001:2888:3888
server.2=ruozedata002:2888:3888
server.3=ruozedata003:2888:3888
# 创建对应目录
[hadoop@ruozedata001 conf]$ mkdir /home/hadoop/data/zookeeper
# 给每台机器上的zookeeper创建唯一标识myid
# !!注意 > 箭头左右有空格
[hadoop@ruozedata001 conf]$ echo 1 > /home/hadoop/data/zookeeper/myid
[hadoop@ruozedata002 conf]$ echo 2 > /home/hadoop/data/zookeeper/myid
[hadoop@ruozedata003 conf]$ echo 3 > /home/hadoop/data/zookeeper/myid

添加环境变量

[hadoop@ruozedata001 ~]$ vi ~/.bash_profile
# 追加ZOOKEEPER_HOME变量
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
# 使配置文件生效
[hadoop@ruozedata001 ~]$ source ~/.bash_profile

验证

# 出现以下输出说明正确安装
[hadoop@ruozedata001 ~]$ which zkServer.sh
~/app/zookeeper/bin/zkServer.sh

启动&停止

# 启动
[hadoop@ruozedata001 conf]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

# 查看状态
[hadoop@ruozedata001 conf]$ zkServer.sh status
JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Mode: follower

# 停止
[hadoop@ruozedata001 conf]$ zkServer.sh stop

note:ZK启动后,过30s-1min再检查一下status看看是否正在运行,因为可能会出现启动之后就挂的情况

3.3 Hadoop安装&配置

解压

[hadoop@ruozedata001 software]$ tar -zxvf hadoop-2.6.0-cdh5.15.1.tar.gz -C ~/app/
# 软连接
[hadoop@ruozedata001 app]$ ln -s hadoop-2.6.0-cdh5.15.1 hadoop

修改环境变量

[hadoop@ruozedata001 hadoop]$ vi ~/.bash_profile
# 添加HADOOP_HOME变量
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# 使配置文件生效
[hadoop@ruozedata001 hadoop]$ source ~/.bash_profile

修改配置文件

# 修改hadoop-env.sh中的JAVA_HOME
[hadoop@ruozedata001 hadoop]$ vi hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.8.0_40
# 删除 core.site.xml hdfs-site.xml slaves yarn-site.xml mapred-site.xml
[hadoop@ruozedata001 hadoop]$ rm -f core-site.xml hdfs-site.xml slaves yarn-site.xml 

这里提供配置文件打包下载: https://pan.baidu.com/s/1ecXacRF7Bg3qTrj-PcYfJQ 提取码: eq22
也可参考以下文件配置
core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!--Yarn 需要使用 fs.defaultFS 指定NameNode URI -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://ruozeclusterg7</value>
        </property>
        <!--==============================Trash机制======================================= -->
        <property>
                <!--多长时间创建CheckPoint NameNode截点上运行的CheckPointer 从Current文件夹创建CheckPoint;默认:0 由fs.trash.interval项指定 -->
                <name>fs.trash.checkpoint.interval</name>
                <value>0</value>
        </property>
        <property>
                <!--多少分钟.Trash下的CheckPoint目录会被删除,该配置服务器设置优先级大于客户端,默认:0 不删除 -->
                <name>fs.trash.interval</name>
                <value>1440</value>
        </property>

         <!--指定hadoop临时目录, hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配 置namenode和datanode的存放位置,默认就放在这>个路径中 -->
        <property>   
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/tmp/hadoop</value>
        </property>

         <!-- 指定zookeeper地址 -->
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>ruozedata001:2181,ruozedata002:2181,ruozedata003:2181</value>
        </property>
         <!--指定ZooKeeper超时间隔,单位毫秒 -->
        <property>
                <name>ha.zookeeper.session-timeout.ms</name>
                <value>2000</value>
        </property>

        <property>
           <name>hadoop.proxyuser.hadoop.hosts</name>
           <value>*</value> 
        </property> 
        <property> 
            <name>hadoop.proxyuser.hadoop.groups</name> 
            <value>*</value> 
       </property> 


      <property>
		  <name>io.compression.codecs</name>
		  <value>org.apache.hadoop.io.compress.GzipCodec,
			org.apache.hadoop.io.compress.DefaultCodec,
			org.apache.hadoop.io.compress.BZip2Codec,
			org.apache.hadoop.io.compress.SnappyCodec
		  </value>
      </property>
</configuration>

hdfs-side.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!--HDFS超级用户 -->
	<property>
		<name>dfs.permissions.superusergroup</name>
		<value>hadoop</value>
	</property>

	<!--开启web hdfs -->
	<property>
		<name>dfs.webhdfs.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>/home/hadoop/data/dfs/name</value>
		<description> namenode 存放name table(fsimage)本地目录(需要修改)</description>
	</property>
	<property>
		<name>dfs.namenode.edits.dir</name>
		<value>${dfs.namenode.name.dir}</value>
		<description>namenode粗放 transaction file(edits)本地目录(需要修改)</description>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>/home/hadoop/data/dfs/data</value>
		<description>datanode存放block本地目录(需要修改)</description>
	</property>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<!-- 块大小128M (默认128M) -->
	<property>
		<name>dfs.blocksize</name>
		<value>134217728</value>
	</property>
	<!--======================================================================= -->
	<!--HDFS高可用配置 -->
	<!--指定hdfs的nameservice为ruozeclusterg7,需要和core-site.xml中的保持一致 -->
	<property>
		<name>dfs.nameservices</name>
		<value>ruozeclusterg7</value>
	</property>
	<property>
		<!--设置NameNode IDs 此版本最大只支持两个NameNode -->
		<name>dfs.ha.namenodes.ruozeclusterg7</name>
		<value>nn1,nn2</value>
	</property>

	<!-- Hdfs HA: dfs.namenode.rpc-address.[nameservice ID] rpc 通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.ruozeclusterg7.nn1</name>
		<value>ruozedata001:8020</value>
	</property>
	<property>
		<name>dfs.namenode.rpc-address.ruozeclusterg7.nn2</name>
		<value>ruozedata002:8020</value>
	</property>

	<!-- Hdfs HA: dfs.namenode.http-address.[nameservice ID] http 通信地址 -->
	<property>
		<name>dfs.namenode.http-address.ruozeclusterg7.nn1</name>
		<value>ruozedata001:50070</value>
	</property>
	<property>
		<name>dfs.namenode.http-address.ruozeclusterg7.nn2</name>
		<value>ruozedata002:50070</value>
	</property>

	<!--==================Namenode editlog同步 ============================================ -->
	<!--保证数据恢复 -->
	<property>
		<name>dfs.journalnode.http-address</name>
		<value>0.0.0.0:8480</value>
	</property>
	<property>
		<name>dfs.journalnode.rpc-address</name>
		<value>0.0.0.0:8485</value>
	</property>
	<property>
		<!--设置JournalNode服务器地址,QuorumJournalManager 用于存储editlog -->
		<!--格式:qjournal://<host1:port1>;<host2:port2>;<host3:port3>/<journalId> 端口同journalnode.rpc-address -->
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://ruozedata001:8485;ruozedata002:8485;ruozedata003:8485/ruozeclusterg7</value>
	</property>

	<property>
		<!--JournalNode存放数据地址 -->
		<name>dfs.journalnode.edits.dir</name>
		<value>/home/hadoop/data/dfs/jn</value>
	</property>
	<!--==================DataNode editlog同步 ============================================ -->
	<property>
		<!--DataNode,Client连接Namenode识别选择Active NameNode策略 -->
                             <!-- 配置失败自动切换实现方式 -->
		<name>dfs.client.failover.proxy.provider.ruozeclusterg7</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	<!--==================Namenode fencing:=============================================== -->
	<!--Failover后防止停掉的Namenode启动,造成两个服务 -->
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	</property>
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/home/hadoop/.ssh/id_rsa</value>
	</property>
	<property>
		<!--多少milliseconds 认为fencing失败 -->
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>

	<!--==================NameNode auto failover base ZKFC and Zookeeper====================== -->
	<!--开启基于Zookeeper  -->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<!--动态许可datanode连接namenode列表 -->
	 <property>
	   <name>dfs.hosts</name>
	   <value>/home/hadoop/app/hadoop/etc/hadoop/slaves</value>
	 </property>
</configuration>

mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!-- 配置 MapReduce Applications -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	<!-- JobHistory Server ============================================================== -->
	<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>ruozedata001:10020</value>
	</property>
	<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>ruozedata001:19888</value>
	</property>

<!-- 配置 Map段输出的压缩,snappy-->
  <property>
      <name>mapreduce.map.output.compress</name> 
      <value>true</value>
  </property>
              
  <property>
      <name>mapreduce.map.output.compress.codec</name> 
      <value>org.apache.hadoop.io.compress.SnappyCodec</value>
   </property>

</configuration>

yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!-- nodemanager 配置 ================================================= -->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
		<value>org.apache.hadoop.mapred.ShuffleHandler</value>
	</property>
	<property>
		<name>yarn.nodemanager.localizer.address</name>
		<value>0.0.0.0:23344</value>
		<description>Address where the localizer IPC is.</description>
	</property>
	<property>
		<name>yarn.nodemanager.webapp.address</name>
		<value>0.0.0.0:23999</value>
		<description>NM Webapp address.</description>
	</property>

	<!-- HA 配置 =============================================================== -->
	<!-- Resource Manager Configs -->
	<property>
		<name>yarn.resourcemanager.connect.retry-interval.ms</name>
		<value>2000</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	<!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing -->
	<property>
		<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
		<value>true</value>
	</property>
	<!-- 集群名称,确保HA选举时对应的集群 -->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yarn-cluster</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>


    <!--这里RM主备结点需要单独指定,(可选)
	<property>
		 <name>yarn.resourcemanager.ha.id</name>
		 <value>rm2</value>
	 </property>
	 -->

	<property>
		<name>yarn.resourcemanager.scheduler.class</name>
		<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
	</property>
	<property>
		<name>yarn.resourcemanager.recovery.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
		<value>5000</value>
	</property>
	<!-- ZKRMStateStore 配置 -->
	<property>
		<name>yarn.resourcemanager.store.class</name>
		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
	</property>
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>ruozedata001:2181,ruozedata002:2181,ruozedata003:2181</value>
	</property>
	<property>
		<name>yarn.resourcemanager.zk.state-store.address</name>
		<value>ruozedata001:2181,ruozedata002:2181,ruozedata003:2181</value>
	</property>
	<!-- Client访问RM的RPC地址 (applications manager interface) -->
	<property>
		<name>yarn.resourcemanager.address.rm1</name>
		<value>ruozedata001:23140</value>
	</property>
	<property>
		<name>yarn.resourcemanager.address.rm2</name>
		<value>ruozedata002:23140</value>
	</property>
	<!-- AM访问RM的RPC地址(scheduler interface) -->
	<property>
		<name>yarn.resourcemanager.scheduler.address.rm1</name>
		<value>ruozedata001:23130</value>
	</property>
	<property>
		<name>yarn.resourcemanager.scheduler.address.rm2</name>
		<value>ruozedata002:23130</value>
	</property>
	<!-- RM admin interface -->
	<property>
		<name>yarn.resourcemanager.admin.address.rm1</name>
		<value>ruozedata001:23141</value>
	</property>
	<property>
		<name>yarn.resourcemanager.admin.address.rm2</name>
		<value>ruozedata002:23141</value>
	</property>
	<!--NM访问RM的RPC端口 -->
	<property>
		<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
		<value>ruozedata001:23125</value>
	</property>
	<property>
		<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
		<value>ruozedata002:23125</value>
	</property>
	<!-- RM web application 地址 -->
	<property>
		<name>yarn.resourcemanager.webapp.address.rm1</name>
		<value>ruozedata001:8088</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address.rm2</name>
		<value>ruozedata002:8088</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.https.address.rm1</name>
		<value>ruozedata001:23189</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.https.address.rm2</name>
		<value>ruozedata002:23189</value>
	</property>
	<property>
	   <name>yarn.log-aggregation-enable</name>
	   <value>true</value>
	</property>
	<property>
		 <name>yarn.log.server.url</name>
		 <value>http://ruozedata001:19888/jobhistory/logs</value>
	</property>


	<property>
		<name>yarn.nodemanager.resource.memory-mb</name>
		<value>2048</value>
	</property>
	<property>
		<name>yarn.scheduler.minimum-allocation-mb</name>
		<value>1024</value>
		<discription>单个任务可申请最少内存,默认1024MB</discription>
	 </property>

  
  <property>
	<name>yarn.scheduler.maximum-allocation-mb</name>
	<value>2048</value>
	<discription>单个任务可申请最大内存,默认8192MB</discription>
  </property>

   <property>
       <name>yarn.nodemanager.resource.cpu-vcores</name>
       <value>2</value>
    </property>
</configuration>

slaves

ruozedata001
ruozedata002
ruozedata003

上传好之后 ll查看下文件的角色信息 如果不是hadoop用户 修改下

# 上传好之后 ll 查看下文件的角色信息 如果不是hadoop用户 修改下
[root@ruozedata001 ~]$ chown -R hadoop:hadoop /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/etc/hadoop

4.集群启动

note: 第一次启动需要初始化

4.1.启动zookeeper

三台机器均执行启动命令

[hadoop@ruozedata001 ~]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

4.2.启动HDFS

启动之前需要先启动 journalnode

# 三台都要启动JN
[hadoop@ruozedata001 app]$ hadoop-daemon.sh start journalnode

格式化NameNode
note: 只选取一台进行格式化,其他的点只需复制元数据就行

[hadoop@ruozedata001 app]$ hadoop namenode -format
# 将初始化ruozedata001 的namenode元数据同步到其他台机器上 为了让三台元数据保持一致!
[hadoop@ruozedata001 app]$ scp -r /home/hadoop/data/dfs/name ruozedata002:/home/hadoop/data/dfs/
[hadoop@ruozedata001 app]$ scp -r /home/hadoop/data/dfs/name ruozedata003:/home/hadoop/data/dfs/

初始化zkfc

# 一台机器就可以了  zk是个集群 无需别的机器还去做
[hadoop@ruozedata001 app]$ hdfs zkfc -formatZK

启动DFS(注意有坑!)

[hadoop@ruozedata001 app]$ start-dfs.sh
Starting namenodes on [ruozedata001 ruozedata002]
ruozedata002: starting namenode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-namenode-ruozedata002.out
ruozedata001: starting namenode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-namenode-ruozedata001.out
ruozedata003: starting datanode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-datanode-ruozedata003.out
: Name or service not knownstname cc# 问题点
: Name or service not knownstname ruozedata002  # 问题点
Starting journal nodes [ruozedata001 ruozedata002 ruozedata003]
ruozedata001: journalnode running as process 2428. Stop it first.
ruozedata002: journalnode running as process 2554. Stop it first.
ruozedata003: journalnode running as process 2527. Stop it first.
Starting ZK Failover Controllers on NN hosts [ruozedata001 ruozedata002]
ruozedata001: starting zkfc, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-zkfc-ruozedata001.out
ruozedata002: starting zkfc, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/hadoop-hadoop-zkfc-ruozedata002.out

这里ruozedata001和ruozedata002DN001 DN启动报错,dn是slaves 文件控制的 检查这个文件
扩展小知识点:
linux文件的类型分为两种 window的格式/ linux本身的格式
这两种格式再Linux下都可以cat
检查slaves文件

[hadoop@ruozedata001 hadoop]$ cat slaves 
ruozedata001
ruozedata002
ruozedata003[hadoop@ruozedata001 hadoop]$ file slaves 
slaves: ASCII text, with CRLF line terminators
slaves: ASCII text, with CRLF line terminators说明类型是windows的   需要windows 转换成Linux的 

解决

# 安装dos2unix转换工具
[root@ruozedata001 ~]# yum install -y dos2unix
# 查看当前slaves文件格式
[hadoop@ruozedata001 hadoop]$ file slaves 
slaves: ASCII text, with CRLF line terminators
# 转换格式
[hadoop@ruozedata001 hadoop]$ dos2unix slaves 
dos2unix: converting file slaves to Unix format ...
# 转换ok
[hadoop@ruozedata001 hadoop]$ file slaves 
slaves: ASCII text
hadoop@ruozedata001 hadoop]$ pwd
/home/hadoop/app/hadoop/etc/hadoop
# 复制到其他机器
[hadoop@ruozedata001 hadoop]$ scp slaves ruozedata002:/home/hadoop/app/hadoop/etc/hadoop/
slaves                                          100%   38     0.0KB/s   00:00    
[hadoop@ruozedata001 hadoop]$ scp slaves ruozedata003:/home/hadoop/app/hadoop/etc/hadoop/
slaves                                          100%   38     0.0KB/s   00:00  

再次启动DFS集群

[hadoop@ruozedata001 hadoop]$ start-dfs.sh 

web页面验证hdfs启动情况,ruozedata001 和ruozedata002应该都可以访问,其中一个为active另一个为standby
访问地址:http://ip:50070/
active
active
standby
standby

4.3 启动Yarn

[hadoop@ruozedata001 ~]$ start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-resourcemanager-ruozedata001.out
ruozedata002: starting nodemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-nodemanager-ruozedata002.out
ruozedata003: starting nodemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-nodemanager-ruozedata003.out
ruozedata001: starting nodemanager, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/yarn-hadoop-nodemanager-ruozedata001.out
# 第二台的rm是启动不起来,切换ruozedata002手工启动ResourceManager 
[hadoop@ruozedata002 ~]$ yarn-daemon.sh start resourcemanager

web页面访问
ResourceManager (active)
访问地址 http://ip:8088
ResourceManager (standby)
访问地址 http://ip:8088/cluster/cluster 注意:standby 的RM节点必须输入完整路径才能访问
Active
active
Standby
standby

4.4 启动jobhistory

[hadoop@ruozedata001 ~]$ mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/logs/mapred-hadoop-historyserver-ruozedata001.out

4.5 使用jps验证运行情况

ruozedata001
1
ruozedata002
2
ruozedata003
3

5.关闭集群

# 倒着关闭
[hadoop@ruozedata001 ~]$ mr-jobhistory-daemon.sh stop historyserver 
[hadoop@ruozedata002 ~]$ yarn-daemon.sh stop resourcemanager 
[hadoop@ruozedata001 ~]$ stop-all.sh 
[hadoop@ruozedata001 ~]$ zkServer.sh stop 
[hadoop@ruozedata002 ~]$ zkServer.sh stop 
[hadoop@ruozedata003 ~]$ zkServer.sh stop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值