开场白
hello 大家好,很感谢dmp的技术小组能搭建这样一个平台,让我们这些分布在不同岗位上人坐在一块,分享一下自己领域的东西,有种回到大学讨论课的感觉了啊。
先自我介绍一下,我是xxx,目前在数据平台组负责cms的数据开发,今天由我来给大家分享一下spark相关的应用,可能讲的很一般,但有句话叫做“有句话叫做他山之石可以攻玉”,希望我们能互相启发。

前奏
那话不多少,进入今天的正题,
【打开ppt第一页】
做技术的人啊,都有一种焦虑,因为这个应用层的技术更新迭代太块。我之前上学时学的javaWeb那一套,jsp,servlet,hibernate,struts,ba、la、ba、la我毕业后发现都不用了,毕业就失业了。大数据的技术栈也是这样。这是我在网络上找的图,眼花缭乱,五彩缤纷。这么多大数据组件,我们怎么去学呢,是不是对于每个组件都要一头扎进去。可以,当时这样容易陷入一个误区。
【打开PPT第二页】
有句话叫做,手里有锤子,看谁都像钉子。其实我们做大数据的,手里不仅有锤子,还有镰刀,榔头,斧头,各种各样。每个工具有各自的位置,斧头可以砍柴,你不能拿着它去割韭菜是吧。
那这些五花八门的框架都在什么位置呢?
【打开PPt第三页】
大数据都是围绕数据做文章,数据从生到死,或者说是进入下一个轮回,大概可以分为这几块
1、数据采集,各个简要介
2、数据村粗
3、数据计算
4、数据应用
5、数据可视化
今天的重点是Spark,处在数据大数据计算这个位置,
【打开PPT第四页】
除了上面的这几块,其他的类似DophineSheduler调度,Zookeeper做协调

【PPT5-四代计算引擎】
计算引擎,网路上有这样划分的,他们代表了发展的四个阶段
第一阶段代表是MR,大数据飞入寻常百姓家
第二阶段代表是TEZ为代表,对MR进行优化
第三阶段代表是Spark,对MR的再优化
第四阶段是批流一体的代表Flink

【简要介绍MR】
MR就是归并的过程
1、介绍经典算法MergerSort的方法论
2、MR的对比
3、shuffle过程简介

  1. package com.vivi.app
  2. object FPDemo {
  3. def main(args: Array[String]): Unit = {
  4. val mrd = new MyRd[String]("vivo huawei oppo xiaomi samsung vivo")
  5. val res = mrd
  6. .flatmaps(_.split(" "))
  7. .map((_, 1))
  8. println(res.str)
  9. }
  10. }
  11. class MyRd[R](sth: R*) {
  12. var str = sth
  13. def map[I, O](fun: I => O) = {
  14. val rs: Seq[O] = for (elem <- sth) yield fun(elem)
  15. new MyRd[O](rs: _*)
  16. }
  17. def filters(fun: R => Boolean) = {
  18. val rs: Seq[R] = for (elem <- sth if (fun(elem))) yield elem
  19. new MyRd[R](rs: _*)
  20. }
  21. def flatmaps(fun: R => Array[R]) = {
  22. val os: Seq[R] = for (x <- sth; y <- fun(x)) yield y
  23. new MyRd[R](os: _*)
  24. }
  25. def reduces(fun: (R, R) => R) = {
  26. var last = sth(0)
  27. for (i <- 1 until sth.length) {
  28. last = fun(last, sth(i))
  29. }
  30. last
  31. }
  32. }

函数类型

函数的类型,类比int string double 函数也可以看成为一种类型,类型的标示如下所示

  1. val f1 :(Int,Int)=>Int = (a:Int,b:Int) => a+ b

高阶函数

函数作为参数
手写filter map reduce foreach

匿名函数

讲完匿名函数后,演示将代码直接传递到高阶函数 中

sparkRDD