大数据学习培训哪里好?既然是学习,那技术课程应该是重要的参考部分了。我是在千锋学习的大数据,感觉还不错,现在是学到spark部分了,可以就此分享一下我对spark技术的理解。
Spark是加州伯克利分校的一个数据分析栈,号称可以一栈式解决大数据的问题,包括但不限于图计算、流计算、机器学习等。那么为什么spark会发展速度这么快呢?
主要是因为spark有重要的工具,一个RDD(弹性分布式数据集 Resilience Distributed set),另一个就是DAG(任务的切分依据),不是工具,是基于内存计算,而不是基于内存存储计算。
RDD是分布式、加载不可变的数据集,对应每个分区,我直接给出一个compute的task ,那么对应的这个计算就可以分发到数据存储的机器上。关于弹性:由于RDD有容错机制(persist or cache or checkpoint),当任务计算失败,可以重新进行计算,这个特性我理解为弹性的。
关于依赖关系集的理解:RDD是抽象出来的模型,RDD的两个操作分类一个是Transformation ,另一个是Action,只有Action操作之后,才会进行真正的计算;那么其他大量的Transformation 操作是干嘛的呢?难道是看戏的?对,个人理解,那些Transformation 操作就是记录一系列的依赖关系,map---flatmap----groupBykey---count等等,这些都是一系列的瞬时计算状态,记录上级RDD操作的暂态,只有遇到Action操作才真正的进行就是。
关于分区器,spark一共提供的两种分区器,一个是hash 分区器,另一个是page 分区器;默认使用hash 分区器,那么为什么需要hash分区器呢?spark的这些RDD在计算的过程也是存在数据混洗的,也就是shuffle,不然groupBYKey,聚不到一起还叫group吗?那么多台机器之间数据混洗是需要大量的时间和性能的消耗的。
spark优化,就考虑了hash分区器,对于二元操作,预先数据分区会导致至少一个RDD不发生数据混洗,如果第二个RDD使用相同的分区方式,并且他们还缓存在同样的机器上,那么就不会发生数据的混洗了。
转载请注明出处。