从入门到精通 参加好程序员大数据培训秒变牛人

先说下入学好程序员大数据高端班的感受吧,刚来的时候还不是很适应这里紧张的节奏,觉得睡眠不够,注意力不集中,精神不振,好在后期通过调整,慢慢适应了这里的节奏,也慢慢的融入到这个集体之中。
最直观的感想可能就是学习氛围非常的好,大家来这里都是为了找到一份满意的工作,虽然好程序员的教学质量和就业服务非常的到位,但是找工作面试主要还是依靠个人的能力,良好的学习氛围离不开严格的管理制度,只有严格的管理才能打造出精英的学生,才会有高薪的工作。这里的老师可以说非常负责,能够看出是在行业中有着多年经验的专家,试图用最容易理解的方式将知识点传达给学生,课后也留一些作业帮助学生巩固课堂知识,平时也积极辅导学生,虽然大家相处的时间不长,但是感情处的非常好,像朋友一样。多次交谈也让我受益其中,对未来增添了希望。那谈及学习则是个漫长而需要全力以赴的过程,举例分享下最近的笔记,相信大家会发现,温故确实能知新,学而不厌,定能发现新的知识与框架。
一、mapreduce原理
mapreduce采用“分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,mapreduce就是“任务的分解与结果的汇总”。
在hadoop中,用于执行mapreduce任务的机器角色有两个:一个是jobtracker;另一个是tasktracker,jobtracker是用于调度工作的,tasktracker是用于执行工作的。一个hadoop集群中只有一台jobtracker。
在分布式计算中,mapreduce框架负责处理并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
需要注意的是,用mapreduce来处理的数据集(或任务)必须具备一个特点,那就是待处理的数据集必须可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
二、那么简单描述下流程
总的来说通过:input -> map -> shuffle/sort/merge -> reduce ->output
一个reduce任务: (input -> map -> sort) => (merge -> reduce ->output)
多个reduce任务: (input -> map -> shuffle -> sort) => (merge -> reduce ->output)
注意reduce任务不具备数据本地化的优势,单个reduce任务的输入通常来自所有mapper的输出。 reduce的输出通常存储在hdfs中以实现可靠存储。
这时需要提及combiner的作用和partition的作用。前者是通过reduce来实现,在map端运行计算任务,减少map端的输出数据。输出结果与reduce的输出一致。(集群上的可用带宽限制了mapreduce作业的数量,因此尽量避免map和reduce任务之间的数据传输是有利的)。后者partition的作用在于, partition的默认实现是hashpartition,它是map端将数据按照reduce个数取余,进行分区,不同的reduce来copy自己的数据。partition的作用是将数据分到不同的reduce进行计算,加快计算效果。
三、 如何解决数据倾斜问题
数据倾斜, map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,从而导致某几个节点迟迟运行不完,此称之为数据倾斜。
解决方式通过自己实现partition类,用key和value相加取hash值,如java:
修改前public int getpartition(k key, v value, int numreducetasks) {
return (key.hashcode() & integer.max_value) % numreducetasks; }
修改后public int getpartition(k key, v value, int numreducetasks)
{return ((key.hashcode() + value.hashcode()) & integer.max_value) % numreducetasks;
到此是近期学习的一处总结,课程已经过半,收获颇多,倍感压力的同时,也看见了未来的希望和曙光,年轻之所以被认作希望,就在于我们可以创造出无数种可能,或许,希望渺茫,再或许跌倒在前行的路上,但是,无付出则无回报,无果敢则无未来,年轻就在于拼搏,在于策马扬鞭,矢志不渝向未来!