一、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.xml
xsync.sh yarn-site.xml
4) 重启yarn.sh
stop-yarn.sh
start-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/soft
2、解压 tar -xvf apache-zookeeper-3.6.3-bin.tar.gz -C /usr/local
3、重命名
cd /usr/local/
mv apache-zookeeper-3.6.3-bin zookeeper
4、配置环境变量
修改 /etc/profile
添加: export ZOOKEEPER_HOME=/usr/local/zookeeper
在PATH中,追加一个 $ZOOKEEPER_HOME/bin
5、刷新一下环境变量
source /etc/profile
6、修改zookeeper中的conf配置文件
里面有一个样例,将样例拷贝一份即可
进入到 zookeeper 中的conf下
cp zoo_sample.cfg zoo.cfg
7、修改zoo.cfg
tickTime=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:3888
server.2=qianfeng02:2888:3888
server.3=qianfeng03:2888:3888
# 解析 Server.id=ip:port1:port2
# id: 服务器的id号,对应zkData/myid文件内的数字
# ip: 服务器的ip地址
# port1: follower与leader交互的port
# port2: 选举期间使用的port
# 注意:此配置文件中,不支持汉字注释
8、创建zkData以及myid
mkdir zkData
进入到zkData 文件夹 echo "1" > myid
以上是配置一台zk的步骤。
搞集群,我们使用三台zk.
同步我的zookeeper文件夹
xsync.sh zookeeper
同步环境变量
xsync.sh /etc/profile
刷新一下变量:
xcall.sh source /etc/profile
修改剩余两台的myid
bigdata02 上的myid --> 2
bigdata03 上的myid --> 3
启动集群:
在每一台电脑上执行 zkServer.sh start
通过zkServer.sh status 查看状态。
为了以后启动zk或者停止zk比较的方便,我们可以编写一个脚本zk.sh
#!/bin/bash
# 获取参数
COMMAND=$1
if [ ! $COMMAND ]; then
echo "please input your option in [start | stop | status]"
exit -1
fi
if [ $COMMAND != "start" -a $COMMAND != "stop" -a $COMMAND != "status" ]; then
echo "please input your option in [start | stop | status]"
exit -1
fi
# 所有的服务器
HOSTS=( bigdata01 bigdata02 bigdata03 )
for HOST in ${HOSTS[*]}
do
ssh -T $HOST << TERMINATOR
echo "---------- $HOST ----------"
zkServer.sh $COMMAND 2> /dev/null | grep -ivh SSL
exit
TERMINATOR
done
六、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/config
get -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