大数据实战第四课-hdfs及yarn的HA部署

一、QJM剖析

二、SSH互相信任关系和hosts文件配置

三、JDK部署

四、防火墙

五、Zookeeper部署及定位

六、hdfs&yarn HA部署及案例

七、debug yarn job

八、排查SNN启动原因

九、作业

一、QJM剖析

jn进程组成的集群:
任意时刻只能有一个nn active写,nn standby读
2n+1台:7台 保证写的机器:n/2+1 = 4台
3台 保证写的机器:n/2+1 = 2台

二、SSH互相信任关系和hosts文件配置

  • 详细部署请参考此篇博客:
    https://blog.csdn.net/zhikanjiani/article/details/89205904

三、JDK部署

1、下载,解压缩(注意解压时候的用户和用户组),配置环境变量。

2、 mkdir /usr/java 指定目录是因为CDH来影响的。

在hadoop001机器下可以把app目录下的软件都传输到hadoop002目录下,测试,速度贼快。
[hadoop@hadoop001 app]$ scp * hadoop002:/home/hadoop/app

jdk部署在 /usr/java 目录下
su - root tar -xzvf /home/hadoop/app/jdk-8u45-linux-x64.gz -C /usr/java/

1、为什么要部署在/usr/java目录下,因为cdh会进行影响,cdh默认目录就是/usr/java
2、jdk解压后权限修正

3台机器同时部署

四、防火墙

命令:
1、service iptables status

2、service iptables -L //查看防火墙规则

3、service iptables -F //清空防火墙规则

五、Zookeeper部署及定位

5.1 Zookeeper下文件配置

hadoop三台机器怎么统一进行解压:

  • 打开SecureCRT,View --> Command (Chat) Window,右下角会出现一个Send Commands to All Sessions.

  • 3台机器统一进行解压,配置软连接?

ls -n /home/hadoop/app/zookeeper-3.4.6 /home/hadoop/app/zookeeper

第一步:
cd conf 		//进入到ZOOKEEPER_HOME下的conf目录
cp   zoo_sample.cfg   zoo.cfg			//拷贝一份zoo.cfg配置文件
vi zoo.cfg				//编辑这个配置文件

第二步:修改zoo.cfg的dataDir目录:
zoo.cfg文本中dataDir默认存储在 /tmp下,问题是/tmp目录下每30天会进行删除,所以需要更换路径,更换后路径:dataDir=/home/hadoop/app/zookeeper/data

第三步:在zoo.cfg文本末尾加入如下:
server.1=hadoop001:2888:3888				//server.1意识是id号,后面跟着的是服务组件的通信端口
server.2=hadoop002:2888:3888
server.3=hadoop003:2888:3888

第四步:
在$ZOOKEEPER_HOME/data目录下新建一个myid文件,touch /data/myid;把数字1写进去,echo 1 > data/myid;注意有一个坑,把1写进去后要注意编辑的时候1后面不能有空格。

第五步:
传输zoo.cfg配置文件到第二台机器:scp conf/zoo.cfg hadoop002:/home/hadoop/app/zookeeper-3.4.6/conf
传输zoo.cfg配置文件到第三台机器:scp conf/zoo.cfg hadoop003:/home/hadoop/app/zookeeper-3.4.6/conf/
传输$ZOOKEEPER_HOME/data目录下的内容到第二台机器(文件夹使用-r):scp -r data hadoop002:/home/hadoop/app/zookeeper-3.4.6/
传输data目录下的内容到第三台机器:scp -r data hadoop003:/home/hadoop/app/zookeeper-3.4.6/


分别在3台机器上进行校验,进入到这个目录:/home/hadoop/app/zookeeper/data,touch myid;echo 1 >myid
echo 2 >myid
echo 3 > myid(“3“与“>”号之间有一个空格。不然会无法写入)

5.2 Zookeeper启动

1、开始启动Zookeeper,在bin目录下输入:./zkServer.sh start,再去使用命令:./zkServer.sh status,查看zookeeper节点的状态,发现都还是没有启动成功的。

如下图:hadoop001机器没有启动成功
在这里插入图片描述

瞎逼啥也没搞,J总在此处去检查了如下信息:
1、ps -ef|grep zookeeper 进程是否启动,我是有进程存在的
2、检查$ZOOKEEPER_HOME/data目录下的myid文件是否准确
3、又去当前用户环境变量中配置了ZOOKEEPER的环境变量

于是我也再次查看zookeeper节点的状态信息:

  • ./zkServer.sh status 正常显示为一个leader,两个follower。

可以看是如下图,ZOOKEEPR进程启动(进程名为QuorumPeerMain),并且状态正确。
1、hadoop001节点:
在这里插入图片描述
2、hadoop002节点:
在这里插入图片描述
3、hadoop003节点:
在这里插入图片描述

5.3 shell脚本的debug模式

注意:大数据的组件启动都是通过shell脚本,可以观察shell脚本。

实验目的:把JAVA_HOME、ZOOKEEPER_HOME目录在环境变量中删除,再去shell中debug看过程信息。

1、如何打开shell脚本的debug模式:

#!/usr/bin/env bash  ==>
#!/bin/bash -x			//加上 -x,保存好后再去运行./zkServer.sh start命令```

2、然而并不能看懂,注意shell脚本的nohup命令,
- nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper."

集群部署有了PDF文档大家都会,难点是遇到问题咋处理?

整理:debug模式开启,完整的之心脚本,打出++号的日志,+号是执行命令,which java 找不到;_ZOO_DAEMON_OUT=指定输出目录;

六、hdfs&yarn HA部署及案例

第一步:解压hadoop2.6.0-cdh5.7.0
1、三台机器一起解压,配置软连接,并且配置环境变量

  • ln -s /home/hadoop/app/hadoop-2.6.0-cdh5.7.0 /home/hadoop/app/hadoop

第二步配置core-site.xml文件:
1、因为我们已经做好了ssh的信任关系,

存放的是Hadoop集群的配置文件:
链接:https://pan.baidu.com/s/1zRDqYfDYqAtfci517PNoKQ 
提取码:5g1g 

2、打开上面的集群配置文件下的core-site.xml,在三台机器节点下共同创建临时目录:mkdir -p /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/tmp

3、核心点:注意这个参数:hadoop.proxyuser.hadoop.hosts,意思是hadoop的进程允许哪些用户来访问;代表hadoop进程运行的用户;修改 ==> hadoop.proxyuser.root.hosts ,这样的话就要以root用户去启动。

4、如下的配置指的是支持的压缩方式

<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>

第三步:配置hdfs-site.xml
三台机器统一去创建这个目录:

  • 1、mkdir -p /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/data/dfs/name(namenode 存放name table(fsimage)本地目录)
  • 2、mkdir -p /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/data/dfs/data(datanode存放block本地目录)
  • 3、mkdir -p /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/data/dfs/jn

第四步:scp命令把配置文件传到hadoop002、hadoop003

  • scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves hadoop002:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop
  • scp core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves hadoop003:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop

第五步:选择第一台机器格式化namenode:

  • hadoop namenode -format(此命令使用前需要配置hadoop的环境变量)
    在这里插入图片描述

第六步:格式化报错,查看报错信息发现需要先启动journalnode

  • 使用命令:hadoop-daemon.sh start journalnode,jps命令查看到如下进程就说明journalnode进程已经启动;三台机器都要启动jounalnode,27025 JournalNode(pid + 进程)
    在这里插入图片描述

第七步:格式化namenode完成后,把$HADOOP_HOME/data目录下的文件传输至hadoop002(因为只有两个NameNode,所以从第一台传输到第二台就够了)

  • scp -r data/ hadoop002:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/data

第八步:选择一台机器启动zkfc

  • hdfs zkfc -formatZK
  • 因为我已经部署过一次了,没有推到重来,这个节点暂时没有格式化成功。
  • 格式化zkfc进程的原因,它是一个单独的进程,和ZK进行通信它会找自己的目录。
    在这里插入图片描述

第九步:$HADOOP_HOME/etc/hadoop下的hadoop-env.sh

第八步的时候出现的问题(core-site.xml中g5和g6同时存在):

J总在core-site中配置的namespace名字没有统一:如何铲掉重做?
1、停止进程,输入如下命令:cd zookeeper --> bin/zkCli.sh --> ls / --> ls /hadoop-ha

2、删除/hadoop-ha,rmr /hadoop-ha		(相当于把底层配置的元数据删掉)

3、ps -ef|grep hadoop,把journalnode给kill掉,再查看ps -ef|grep hadoop,杀掉进程

做了这几步就删掉了底层的元数据,journalnode进程杀掉了;
4、rm -rf $HADOOP_HOME/data/*

5、 rm -f core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml (三台机器上都执行这个操作)

6、再确认下,core-site.xml中有没有g5,继续上传,然后重复第四步。

可以扩展到ZOOKEEPER:
在这里插入图片描述
问题:
1、杀进程
2、zk中的元数据清空(最关键的一步,ZK目录清空)
3、NameNode、Journalnode、DataNode文件夹数据目录清空

有一个进程ZookeeperMain是zookeeper客户端。

6.1 开始启动HDFS集群

1、启动集群:start-dfs.sh
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进程数目对比查看是否准确:
在这里插入图片描述
如上图出现的问题:

  • 发现hadoop002机器上的namenode未启动,不知咋滴就好了;使用过:hadoop-daemon.sh start namenode,反正就好了;纠正,使用SECURECRT连接本地虚拟机,NameNode其实并没有启动成功,不知为何hadoop002的ip其实是hadoop001机器的ip。
  • 原因找到了,格式化hadoop001机器下的NameNode节点后,没有把data目录下的文件传到hadoop002机器下。经过测试重新scp -r传输过去,再次启动就没问题了。

6.2 开始启动YARN

  • start-yarn.sh,此命令是启动YARN,启动了第一台机器的resourcemanager,三台机器的nodeManager;
  • 第二台机器的HA需要手动启动,hadoop-daemon.sh start resourcemanager
    在这里插入图片描述
    第二步:手动启动hadoop002机器上的ResourceManager,我们jps发现ResourceManager进程已经启动了但是报了一个错:could not find or load main class resourcemanager
    在这里插入图片描述

承接第二步:又被带沟里了,启动ResourceManager的命令应该是:yarn-daemon.sh start resourcemanager;但是很神奇的是我们使用hadoop-daemon.sh start resourcemanager启动照样有进程能启动。

6.3 测试集群能否正常运行

1、hdfs dfs -ls / 这个命令和hdfs dfs -ls hdfs://ruozeG6/查看得到的效果是一样的。

在这里插入图片描述

2、是云主机的话,在安全列表,配置规则把端口号放开。

注意一个映射关系ip和机器名的映射:
C:\Windows\System32\drivers\etc\hosts

6.4 集群UI界面解读

hadoopUI界面:

完美:
在这里插入图片描述
在这里插入图片描述
解读:
1、命名空间是ruozeclusterg6
2、jounalnode的状态
3、Browse Directory查看文件

扩充:一份文件100M,有三个副本,300M.
在这里插入图片描述

YARN的UI界面:

  • 需要注意的是:windows本地的hosts文件没有配置hostname+ip的映射。C:\Windows\System32\drivers\etc\hosts

6.5 jobhistory服务

注意:有一个jobhistory的服务,mapreduce的一些job通过这个服务可以查看所有历史的,在yarn上查看是有个数限制的。

如何启动: cd /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/sbin

  • ./mr-jobhistory-daemon.sh start historyserver

如何通过pid查看端口号:

  • netstat -nlp | grep 4382
    云主机在做任何东西都是内网,我们需要和它交互都是走的外网。

测试jobhistory服务:

1、命令:./mr-jobhistory-daemon.sh start historyserver
在这里插入图片描述
2、通过pid查看端口号,发现jobhistory的端口号是19888

  • hadoop001:19888发现进入了jobhistory页面

3、直接去$HADOOP_HOME/examples/lib下面没有找到测试jar,于是使用find命令:

  • find ./ -name “example.jar”
  • 执行一个命令计算圆周率:hadoop jar ./share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 5 10

4、状态都会在jobhistory的UI界面上展示:yarn重启之后记录就会被刷掉但是有了jobhistory之后,这些job就会被保存。
在这里插入图片描述

为什么这个任务提示失败,暂未找到原因?

J总上课演示的原因是因为cdh集成的hadoop版本不支持snappy压缩。

七、debug yarn job

如何找错误:在yarn的UI界面点击applications,点击logs,搜索error。

就能知道的是:Container launch failed for container_1567401320694_0001_01_000005 : org.apache.hadoop.yarn.exceptions.YarnException: Unauthorized request to start container.
在这里插入图片描述
如何查看hadoop支持的压缩方式:hadoop checknative,

八、排查SNN启动原因

九、作业

1、hadoop集群部署
2、整理如何定位问题
3、编译支持压缩的hadoop,伪分布式做就行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值