一、Yarn配置mr-historyServer
1、历史日志的概念
我们在YARN运行MapReduce的程序的时候,任务会被分发到不同的节点,在不同的Container内去执行。如果一个程序执行结束后,我们想去查看这个程序的运行状态呢?每一个MapTask的执行细节?每一个ReduceTask的执行细节?这个时候我们是查看不到的,因此我们需要开启记录历史日志的服务。历史日志服务开启之后,Container在运行任务的过程中,会将日志记录下来,保存到当前的节点。例如: 在qianfeng02节点上开启了一个Container去执行MapTask,那么此时就会在qianfeng02的$HADOOP_HOME/logs/userlogs中记录下来日志。我们可以到不同的节点上去查看日志。虽然这样可以查看,但是很不方便!因此,我们一般还会开启另外的一个服务: 日志聚合。顾名思义,就是将不同节点的日志聚合到一起保存起来。
2、操作
1) 修改mapred-site.xml
<!-- 历史任务的内部通讯地址 --><property><name>MapReduce.jobhistory.address</name><value>bigdata01:10020</value></property><!--历史任务的外部监听页面--><property><name>MapReduce.jobhistory.webapp.address</name><value>bigdata01: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>
2) yarn-site.xml
<property><name>yarn.log-aggregation-enable</name><value>true</value></property><!-- 历史日志在HDFS保存的时间,单位是秒 --><!-- 默认的是-1,表示永久保存 --><property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value></property><property><name>yarn.log.server.url</name><value>http://bigdata01:19888/jobhistory/logs</value></property>
3) 分发到不同的节点上
xsync.sh mapred-site.xmlxsync.sh yarn-site.xml
4) 重启yarn.sh
stop-yarn.shstart-yarn.sh
5) 开启历史日志
mapred --daemon start historyserver
6) 后面再执行的任务就可看日志了,之前的看不了
hadoop jar /home/mr2.jar com.qfedu.yarn.WordCountDriver /input /output2
7)查看日志情况:

8)我的URL中不是IP,而是一个主机名,根据主机名如何IP,修改windows上hosts文件。
SwitchHosts 这个软件可以轻松的帮我们修改我们的hosts文件。
hosts文件的真实路径:


9) 我们的mr-historyserver 是查看mr任务的历史日志,如果你没有使用mr,使用spark,Tez 这样的技术,那么我们这个历史日志也就不起作用了。—timeline 技术。它可以进行(mr,spark等任务的查看)
二、Yarn的任务提交流程
三、Yarn的三种任务调度器
1、FIFO Scheduler(先进先出)
2、Capacity Scheduler(容量调度器-Apache Hadoop默认使用的)
容量调度器 Capacity Scheduler 允许多个组织共享一个 Hadoop 集群。使用容量调度器时,一个独立的专门队列保证小作业一提交就可以启动。优点:小任务不会因为前面有大任务在执行,而只能一直等下去缺点:这种策略是以整个集群利用率为代价的,这意味着与使用FIFO调度器相比,大作业执行的时间要长上一些。
3、Fair Scheduler(公平调度器—CDH版本默认的调度器)

比如Yarn集群100G的内存,如果有一个任务,这个任务直接使用100G的内存。如果任务一没有执行完,又来了一个任务二,任务一和任务二平分资源。可以保证每一个任务都可以公平的享用资源。
hadoop有三个版本:
1、apache 版本2、CDH版本3、HotonWorks 版本
四、ZooKeeper的简介
1、zk是什么?
动物园管理员,因为我们的大数据技术都是动物的Logo.
1、zk是一个专门为分布式应用程序提供服务的,分布式协调服务框架。开源免费的。Hadoop以及HBase都需要使用zk.
2、因为我们需要搭建hadoop的高可用环境,所以我们讲zk.
3、本身有点类似于unix系统,因为它的目录节点都是树状结构的。
4、可以通过命令操作也可以通过java代码操作。
2、zk的特点?
1) 是一个分布式的,有一个Leader,多个追随者Follower
2) 集群中只要有半数的节点存活,整个集群就还能正常工作。
3) 每一个server都有一个相同的副本,client 不管连接哪个Server都可以获取到数据,数据都是一致的。
4) 更新数据有一定的顺序。
5) 更新数据的时候,要么同时更新成功,要么更新失败。
3、zk的数据模式

每一个节点称之为Node,这个节点可以理解为文件,也可以理解为文件夹。
一个节点下,可以有很多节点,这个节点还可以有自己的数据。
set /znode1 “hello world”
get /znode1 得到一个值 “hello world”
set /znode1/test “abc”
get /znode1/test 得到值 abc
4、zk的使用场景?
1、统一配置管理(比如java项目中的配置文件)2、服务器节点动态上下线的感知3、分布式锁(分布式锁可以用zk来解决,但是不是说zk就是分布式锁)比如转账张三 -100李四 +100系统购物的系统下订单 减库存A项目 通过消息中间件通过其他项目 B项目
五、zk的安装
1、上传文件至 /home/soft2、解压 tar -xvf apache-zookeeper-3.6.3-bin.tar.gz -C /usr/local3、重命名cd /usr/local/mv apache-zookeeper-3.6.3-bin zookeeper4、配置环境变量修改 /etc/profile添加: export ZOOKEEPER_HOME=/usr/local/zookeeper在PATH中,追加一个 $ZOOKEEPER_HOME/bin5、刷新一下环境变量source /etc/profile6、修改zookeeper中的conf配置文件里面有一个样例,将样例拷贝一份即可进入到 zookeeper 中的conf下cp zoo_sample.cfg zoo.cfg7、修改zoo.cfgtickTime=2000 # 定义的时间单元(单位毫秒),下面的两个值都是tickTime的倍数。initLimit=10 # follower连接并同步leader的初始化连接时间。syncLimit=5 # 心跳机制的时间(正常情况下的请求和应答的时间)dataDir=/usr/local/zookeeper-3.6.3/zkData # 修改zookeeper的存储路径,zkData目录一会要创建出来clientPort=2181 # 客户端连接服务器的port# 添加三个服务器节点 3888后面不能跟空格,否则报错!!!!server.1=qianfeng01:2888:3888server.2=qianfeng02:2888:3888server.3=qianfeng03:2888:3888# 解析 Server.id=ip:port1:port2# id: 服务器的id号,对应zkData/myid文件内的数字# ip: 服务器的ip地址# port1: follower与leader交互的port# port2: 选举期间使用的port# 注意:此配置文件中,不支持汉字注释8、创建zkData以及myidmkdir zkData进入到zkData 文件夹 echo "1" > myid以上是配置一台zk的步骤。
搞集群,我们使用三台zk.
同步我的zookeeper文件夹xsync.sh zookeeper同步环境变量xsync.sh /etc/profile刷新一下变量:xcall.sh source /etc/profile修改剩余两台的myidbigdata02 上的myid --> 2bigdata03 上的myid --> 3启动集群:在每一台电脑上执行 zkServer.sh start通过zkServer.sh status 查看状态。

为了以后启动zk或者停止zk比较的方便,我们可以编写一个脚本zk.sh
#!/bin/bash# 获取参数COMMAND=$1if [ ! $COMMAND ]; thenecho "please input your option in [start | stop | status]"exit -1fiif [ $COMMAND != "start" -a $COMMAND != "stop" -a $COMMAND != "status" ]; thenecho "please input your option in [start | stop | status]"exit -1fi# 所有的服务器HOSTS=( bigdata01 bigdata02 bigdata03 )for HOST in ${HOSTS[*]}dossh -T $HOST << TERMINATORecho "---------- $HOST ----------"zkServer.sh $COMMAND 2> /dev/null | grep -ivh SSLexitTERMINATORdone
六、zk的shell操作
1、打开shell客户端,连接集群
zkCli.sh 默认连接的是本机的zk节点zkCli.sh -server bigdata02:2181
2、ls 查看是否有子节点
查看某个节点下的子节点ls /ls /zookeeper还可以添加一个-s参数 ,可以查看具体的信息ls -s /zookeeper/config
3、get 查看这个节点上的数据
get /zookeeper/configget -s 节点 除了展示节点数据之外还可以看到其他信息
4、create 创建节点
节点分为四种情况:-e 创建出来的节点是临时节点,只要zk服务一关,数据就没了-s 设置带有序号的节点create /qianfeng01 永久节点create -e /qianfeng02 临时节点create -e -s /qianfeng03 "这是我的数据"节点根据是否有序以及是否是临时节点,总共有四类:
- 短暂类型ephemeral: 客户端和服务器断开后,创建的节点自己删除。
- 持久类型persistent: 客户端和服务器断开后,创建的节点不删除(默认情况)。 | 节点类型 | 描述信息 | | —- | —- | | EPHEMERAL | 临时节点,在会话结束后自动被删除。 | | EPHEMERAL_SEQUENTIAL | 临时顺序节点,在会话结束后会自动被删除。会在给定的path节点名称后添加一个序列号。 | | PERSISTENT | 永久节点,在会话结束后不会被自动删除。 | | PERSISTENT_SEQUENTIAL | 永久顺序节点,在会话结束后不会被自动删除。会在给定的path节点名称后添加一个序列号。 |
5、set
set /qianfeng01 2000
6、delete 只能删除空的没有子节点的数据
delete /qianfeng02
7、deleteall 删除所有数据,包含子节点
delete /qianfeng02
8、监听 addwatch
addWatch /test2 在这个目录下进行监听,可以监听到这个节点的新增,修改,删除状态的变化取消监听removewatches /test2
9、断开连接 quit


