千锋郑州大数据培训讲师精讲MapReduce
本文由千锋郑州大数据培训讲师分享Yarn的工作流程,Mapreduce的三大核心问题,Map过程的切片读取的原则等。
一、Yarn的工作流程
任务被打成jar包,并上传到linux然后执行hadoop jar xxxx 命令。
1. client提交任务向RM请求一个JobID,RM响应它给client返回一个jobID。
2.客户端获取jobID之后开始检查输入输出路径,并计算输入切片。
3.将JAR包、配置文件、输入分片复制到一个以作业ID命名的HDFS文件系统的目录下;(作业jar的副本较多一般是10个为了提高集群的读取速度,这个数量是可以设置的)这样集群中有多个副本可供节点管理器NM访问。
4.调用资源管理器RM的 submitApplication() 方法提交作业job。
5.NM收到提交的作业后将请求转给yarn的scheduler,scheduler会分配一个 空闲的container,然后NM在RM的管理下在容器中启动AppM进程。
6.AM接受来自HDFS系统的在客户端计算的输入分片,然后判断任务所需要的资源,
如果自己 的本机器够用就用自己的机器计算,如果不够用再去向RM申请资源。
7.RM分配资源给AM,AM根据RM获取的资源信息去和NM通信来启动container并分发task,在container运行人物之前会先将资源本地化(将计算需要的jar文件、配置文件、来自分布式缓存的文件下载到本地),最后再执行map或者reduce任务。
AppMaster 是mapreduce框架内部的一个组件,只要调用使用了reduce就会实例化一个Appmaster,客户也是可以自己重写自己的Appmaster的这样就不会使用系统自己的了。
二、Mapreduce的三大核心问题
1. map读数据是怎么读取的?
2.shuffle是怎么分解又聚集数据的?
3.reduce的结果输出是怎么输出的?
三、Map过程的切片读取的原则
以128M为一个切片和block块大小一样,如果严格按照128M来进行切割读取的话,有可能128M恰好在一个单词的中间这样读取的话计算结果就会出错。
为了解决这个问题,在读取的时候都会多读取一行即多读取下一个切片的一小部分下一个切片永远抛弃第一行文件的起始片不能抛弃第一行。文件的最后一个切片不能往下多读一行。
shuffle流程原理
1.map将分片之后的数据以特定的格式(TextInputFormat)读取,以具体的方式读取 (一次一行的方式 LineRecordReader),将读取的一行数据以空格切割(要取出每一行的单词数)。
2.将切割后的数据发送出去 context.write(k2 , v2) // 这样的形式。
3.OutputCollector收集器会接收map输出的数据(应该是一个一个的小数据),收集的差不多大小就将收集的数据写入环形缓存器内(环形缓存器默认是100M,当内部写入的数据达到阈值80%也就是80M就会启动一个后台线程将数据溢出到磁盘这一过程中会对溢出的数据进行分区和排序。为了解决重复的k v过多的问题还可以在写入磁盘之前做一次combiner的局部合并,它的特点是有可能调用一次或多次但是不能改变最终结果)。
4.写入磁盘之前首先将数据按照分区规则进行分区,如果没有指定分区规则(一般分区
的个数和reduce的个数相同),就会按照Hadoop默认的分区规则进行分区,然后按照排序规则对分区内的数据按照k2(map输出的key即reducer输入的key)进行排序 ,如果k2 是Text类型则按照k2的字典顺序的排序规则,如果是Bean按照自定义的排序规则排序,然后得到多个分区且排序的小文件。分区是按照分区号排序,分区内的数据是按照k2的排序规则进行排序,小文件内可以有多个分区。由于map向缓存区中存数据速度远远比缓冲区向磁盘写数据的速度,所以当缓冲区中的数据达到80%,map就会阻塞,停止向缓冲区存入数据,直到缓冲区中的数据写入到多个小文件并清空缓冲区,才让map继续向缓冲区存入数据,之所以写入多个小文件,是因为文件越小排序的速度越快。注意:一个分区如果过大可能存在于多个小文件之中。在得到多个分区且排序的小文件后要进行合并,合并规则是按照分区号将多个小文件中的部分分区数据合并成对应分区号的完整分区数据里面,在合并的同时再对分区内的多个部分数据按照k2排序规则进行一次排序。
5.框架reducetask先从合并文件中读出一个key传给reduce方法,同时传一个value 迭代器;value迭代器的hasnext方法会判断文件的下一个key是否是已经传入的key如果是则next返回下一个value这个key的总value值增加,如果不是则直接返回false结束本次reduce方法的调用;继续传入新的key重复这一步骤直到结束
6.将最终的结果写入到指定的目录里存放在HDFS上
zookeeper的相关操作
在zookeeper的安装目录bin/下执行 ./zkCli.sh 可以进入 zookeeper的shell
help 可以查看帮助文档。
ls / 查看zookeeper根目录下注册节点启动ZK服务: bin/zkServer.sh start 查看ZK服务状态: bin/zkServer.sh status
停止ZK服务: bin/zkServer.sh stop 重启ZK服务bin/zkServer.sh restart 连接服务器 zkCli.sh -server 127.0.0.1:2181 创建 testnode节点,关联字符串"zz" create /zk/testnode "zz" 查看节点内容 get /zk/testnode 设置节点内容 set /zk/testnode abc 删除节点 delete /zk/testnode
正常情况下程序注册了节点之后节点是可以一直持续到程序运行结束的,如果想让程序一直检测节点信息可以让进程休眠在后台运行。
程序里加入这一句之后,如果在zookeeper上手动创建节点或者修改节点IDEA就能够接收到信息。
IDEA连接高可用HDFS系统不能再像以前直接连接一个hdfs主机即可
高可用集群的连接需要将所有工作的机器的主机名或者地址、端口号都设置到程序里
这样虽然能连上HDFS-HA但是代码太啰嗦,可以使用将HDFS的两个配置文件(core-site.xml hdfs-site.xml)放到工程的resources里面,代码中的配置参数就只需要配置
onf.set("fs.defaultFS","hdfs://集群的命名空间名");
服务器的动态上下线服务器在zookeeper上注册自己,客户端对服务器的注册节点进行监测,动态感知服务器的上线和下线。
每一个不同的key就调用一次reduce方法,然后把这个key的个数给统计出来。
二进制串在Java里面所指的是byte[],byte是Java的8中原生数据类型之一(Primitive
data types)
mapreduce是可以人工干预的地方。map数据怎么读取(流式文本,按行还是。。); map比较排序时按照自己的业务逻辑写;reduce汇总的分组(欺骗迭代器);reduce结果的输出。
大数据时代,中国IT环境也将面临重新洗牌,不仅仅是企业,更是程序员们转型可遇而不可求的机遇。千锋大数据培训机构郑重承诺,无论是有基础的你选择网络教育培训,还是没有基础的你选择全程面授的线下培训班,只要你来,千锋定会让你满载而归!
相关推荐HOT
更多>>大数据培训学习什么,你了解多少
大数据培训学习什么?你了解多少?随着互联网技术的不断发展,大数据技术开始走进人们的视野,并成为现阶段吃香的技术能力之一。那么熟练掌握大...详情>>
2023-03-16 15:16:01云计算培训怎么样?可靠吗
云计算培训怎么样?可靠吗?靠不靠谱要看你什么要求了,因人而异。但如果你是想通过培训机构快速掌握好技能,然后进入行业,这个一般都没有问题...详情>>
2023-03-07 14:51:00java编程工资多少?主要学哪些内容
java编程工资多少?主要学哪些内容?java程序员的月收入在6000-20000不等,在一线城市有工作经验的java程序员的薪资收入会高一些,在二三线城市...详情>>
2023-02-24 14:56:07it工程培训机构,云计算难学吗
下面给小伙伴们列举一个学习大纲参考: 第一阶段: 零基础入门 1、计算机基础 2、Raid设置与网络服务基础 3、网络基础 第...详情>>
2022-12-01 17:48:04