2017/09/17学习总结

1.map reduce 执行过程:
input->combiner->shuffle->output
(1)combiner负责完成上面提到的将同一个map中相同的key进行合并,避免重复传输,从而减少传输中的通信开销。
(2)Shuffle过程,也称Copy阶段.Shuffle过程是贯穿于map和reduce两个过程的。
(3)shuffle过程要求:
完整地从map task端拉取数据到reduce task端
在拉取数据的过程中,尽可能地减少网络资源的消耗
尽可能地减少磁盘IO对task执行效率的影响

2.分区
(1)Partition 对应于数据库的 Partition 列的密集索引
(2)在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中
用户在加载数据的时候必须显示的指定该部分数据放到哪个分区
(3)静态分区:静态分区在加载数据和使用时都需要在sql语句中指定
(4)动态分区:使用动态分区需要设置hive.exec.dynamic.partition参数值为true,默认值为false
在默认情况下,hive会假设主分区时静态分区,副分区使用动态分区;
如果想都使用动态分区,需要设置set hive.exec.dynamic.partition.mode=nostrick,默认为strick
3.MR Job的基本过程
(1)一个InputSplit输入到map,会运行我们实现的Mapper的处理逻辑,对数据进行映射操作
map输出时,会首先将输出中间结果写入到map自带的buffer中
(buffer默认大小为100M,可以通过io.sort.mb配置)
map自带的buffer使用容量达到一定限制
(默认0.80或80%,可以通过io.sort.spill.percent配置)
(2)一个后台线程会准备将buffer中的数据写入到磁盘,这个后台线程在将buffer中数据写入磁盘之前,会首先将buffer中的数据进行partition(分区,partition数为Reducer的个数)
对于每个的数据会基于Key进行一个in-memory排序,排序后,会检查是否配置了Combiner
如果配置了则直接作用到已排序的每个partition的数据上
对map输出进行化简压缩(这样写入磁盘的数据量就会减少,降低I/O操作开销)
(3)现在可以将经过处理的buffer中的数据写入磁盘,生成一个文件
(每次buffer容量达到设置的门限,都会对应着一个写入到磁盘的文件)
map任务结束之前,会对输出的多个文件进行合并操作,合并成一个文件
(若map输出至少3个文件,在多个文件合并后写入之前,如果配置了Combiner,则会运行来化简压缩输出的数据,文件个数可以通过min.num.splits.for.combine配置;如果指定了压缩map输出,这里会根据配置对数据进行压缩写入磁盘)
这个文件仍然保持partition和排序的状态
reduce阶段,每个reduce任务开始从多个map上拷贝属于自己partition
(map阶段已经做好partition,而且每个reduce任务知道应该拷贝哪个partition;拷贝过程是在不同节点之间,Reducer上拷贝线程基于HTTP来通过网络传输数据)。
每个reduce任务拷贝的map任务结果的指定partition,也是先将数据放入到自带的一个buffer中
(buffer默认大小为Heap内存的70%,可以通过mapred.job.shuffle.input.buffer.percent配置)
如果配置了map结果进行压缩,则这时要先将数据解压缩后放入buffer中。。
(4)reduce自带的buffer使用容量达到一定门限(默认0.66或66%,可以通过mapred.job.shuffle.merge.percent配置)
或者buffer中存放的map的输出的数量达到一定门限(默认1000,可以通过mapred.inmem.merge.threshold配置)
buffer中的数据将会被写入到磁盘中。
(5)在将buffer中多个map输出合并写入磁盘之前,如果设置了Combiner,则会化简压缩合并的map输出
(6)当属于该reducer的map输出全部拷贝完成,则会在reducer上生成多个文件
这时开始执行合并操作,并保持每个map输出数据中Key的有序性
将多个文件合并成一个文件(在reduce端可能存在buffer和磁盘上都有数据的情况,这样在buffer中的数据可以减少一定量的I/O写入操作开销)
(7)最后,执行reduce阶段,运行我们实现的Reducer中化简逻辑,最终将结果直接输出到HDFS中
(因为Reducer运行在DataNode上,输出结果的第一个replica直接在存储在本地节点上)

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值