Yarn资源调度
Yarn架构
ResourceManager(rm):处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度;
NodeManager(nm):单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令;
ApplicationMaster(am):数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
Yarn任务提交(工作机制)
作业提交
第1步: ...
MR算法扩展
MergeSort归并排序
合并
合并细节
不断地将当前序列平均分割成2个子序列, 直到不能再分割(序列中只剩 1个元素)。
不断地将2个子序列合并成一个有序序列,直到最终只剩下1个子序列。
示例代码
编写Sort类
123456789101112131415161718192021222324252627282930313233343536373839404142434445package com.lagou;public abstract class Sort<T extends Comparable<T>> ...
MR综合案例
需求
现在有一些订单的评论数据,数据内容如下,其中数据第九个字段表示好评,中评,差评。0:好评,1:中评,2:差评。
1234567891011121314300 东西很不错,物流也很快 \N 1 106 131******33 0 2019-02-06 19:10:13301 还行,洗完有点干,不知道怎么回事 \N 1 106 136******44 0 2019-03-22 14:16:41302 还可以吧,保质期短,感觉貌似更天然些 \N 1 106 134******34 0 2019-04-10 13:40:06303 还可以吧,保质期短,感觉貌似更天然些 \N 1 105 134* ...
shuffle阶段数据的压缩机制
Hadoop当中支持的压缩算法
数据压缩有两大好处,节约磁盘空间,加速数据在网络和磁盘上的传输!
进入linux环境,执行hadoop checknative查看我们编译之后的hadoop支持的各种压缩,如果出现openssl为false,那么就在线安装一下依赖包!
安装openssl
1yum install -y openssl-devel
为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器
常见压缩方式对比分析
压缩位置
Map输入端压缩
此处使用压缩文件作为Map的输入数据,无需显示指定编解码方式,Hadoop会自动检查文件扩展名,如果压缩方式能够 ...
MapReduce读取和输出数据
InputFormat
运行MapReduce程序时,输入的文件格式包括:基于行的日志文件、二进制格式文件、数据库表等。
InputFormat是MapReduce框架用来读取数据的类。
InputFormat常见子类
TextInputFormat (普通文本文件,MR框架默认的读取实现类型)
KeyValueTextInputFormat(读取一行文本数据按照指定分隔符,把数据封装为kv类型)
NLineInputF ormat(读取数据按照行数进行划分分片)
CombineTextInputFormat(合并小文件,避免启动过多MapTask任务)
自定义InputFormat
...
MapReduce数据倾斜解决
什么是数据倾斜
数据倾斜无非就是大量的相同key被partition分配到一个分区里
现象
绝大多数task执行得都非常快,但个别task执行的极慢。甚至失败!
解决方法
对key增加随机数。
示例
map的key增加随机数,reduce输出三个文件
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879package com.lagou.mr.sk ...
Idea常用的插件
工具类
Chinese Language Pack
描述:中文支持
官网:https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack
Translation
描述:翻译插件,鼠标选中文本,点击右键即可自动翻译成多国语言。
官网:https://plugins.jetbrains.com/plugin/8579-translation/
打开翻译对话框。默认显示在工具栏上。默认快捷键:
12Windows - Ctrl + Shift + OMac OS - Control + Meta + I
...
MapReduce-Join实战
MR reduce端join
需求分析
假如数据量巨大,两表的数据是以文件的形式存储在HDFS中,需要用mapreduce程序来实现一下SQL查询运算。
代码实现
通过将关联的条件作为map输出的key,将两表满足join条件的数据并携带数据所来源的文件信息,发往同一个reduce task,在reduce中进行数据的串联。
在博客MapReduce编程规范及示例编写中maven工程wordcount里编写案例,创建reduce_join包。
编写DeliverBean类
12345678910111213141516171819202122232425262728 ...
MapReduce中的排序
排序是MapReduce框架中最重要的操作之一。
MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑.上是否需要。默认排序是按照字典顺序排序,且实现该排序的方法是快速排序。
MapTask它会将处理的结果暂时放到环形缓冲区中,当环形缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次快速排序,并将这些有序数据溢写到磁盘上,溢写完毕后,它会对磁盘上所有文件进行归并排序。
ReduceTask 当所有数据拷贝完毕后,ReduceTask统-对内存和磁盘上的所有数据进行一次归并排序。
部分排序 ...
MapReduce原理分析
MapTask运行机制
首先,读取数据组件InputFormat(默认TextInputFormat)会通过getSplits方法对输入目录中文件进行逻辑切片规划得到splits,有多少个split就对应启动多少个MapTask。split与block的对应关系默认是一对一。
将输入文件切分为splits之后,由RecordReader对象(默认LineRecordReader)进行读取,以\n作为分隔符,读取一行数据,返回<key,value>。Key表示每行首字符偏移值,value表示这一行文本内容。
读取split返回<key,value>,进入 ...