2018年01月01日

我承担了一个数据质量分析的任务,顺便尝试用了一把观注了好久的Scala。 这是之后我给大家做的一个了解Scala+Spark的一个分享。

我看了一下,只是一个内部分享,应该不涉及机密数据的。

(PPT是白底与网站白底融为一体了)



001


Presenter Notes:大家上午/下午好,我是蜗牛,有幸为大家简单介绍Scala和Spark。即兴…


002


Presenter Notes:这次分享的主要目地是让大家了解Spark以及Scala这门语言。时间简短,内容有限,大家见谅。即兴…


003


Presenter Notes:这次的分享主要基于XXXX项目,随着我们业务数据的光速增长,我们在过程中出现了一些问题,例如…即兴…


004


Presenter Notes:目前我们已经能够完成一些数据分析任务,并通过 Grafana 作为数据可视化平台进行展示,即兴…下一页,展示。


005


Presenter Notes:这是我们通过 Grafana 平台进行可视化展示一个页面示例。即兴…


006


Presenter Notes:先介绍 一下 Scala 和 Spark 的简单概念,然后写一个实例来演示一下。即兴…


007


Presenter Notes:

  • 当面向对象遇到函数式,有一点转角遇到爱的感觉。
  • 同时拥有两个世界,这感觉真棒。
  • 用最少的代码构建可复用易扩展的优雅类层级结构,用高阶函数实现他们的行为。或两者之间的任何东西。
  • 我对它的第一印象,可能就这是一门借JVM上位的语言。
  • Scala这门语言呢,函数式,面向对象,自动推导,高阶函数,等等高级特性,十分性感。
  • 联邦理工学院洛桑(EPFL)的Martin Odersky设计了这门语言,2003开始放到JVM跑。
  • 比Java简洁,开发速度快,无缝集成已有的Java类库。
  • 交互式命令行(REPL),可在上面快速实验各种语法和代码(Java9也有)。
  • 融合了静态类型系统、面向对象、函数式编程等语言特性。
  • 支持高阶函数,Lambda等等各种特性。
  • 有着spark、kafka、akka这样的开源项目。

008


Presenter Notes:

  • 这里一个Scala的HelloWorld,比Java的要简洁一点,事实上,Scala的语法比Java要简洁非常多。
  • Scala就相当于Java+函数式编程,然后再加上一大坨的语法糖。函数式编程是一种比较古老的编程范式。
  • // 表达式是定义是’可计算的代码段’。
  • // 自动推导
  • // 给计算结果命名,引用一个值,不用再重新计算它。
  • // 变量
  • // 代码块是表达式的组合, 代码块的结果是最后一行的值,在scala里是不需要return的。 -
  • // 表达式加上参数就是 函数,左边加上这个就可以将一个表达式命名 -
  • // 方法与表达式的区别就是就法用def定义,后边跟着名字和参数列表以及返回类型和方法体

009


Presenter Notes:

  • // 类就相当于java的类, 不过还是有些区别的,比如没有专门的构造器写法,直接写参数就是构造器,没有静态方法,静态类,scala压根就没有静态static这个关键字。 -
  • // case class 跟类的区别是,他是不可变的,而且在比较的时候会用值进行比较。 -
  • // trait 相当于interface, 不过它的方法可以是声明,也可以是实现。 -
  • 关于Scala还有很多内容,不过我们本次的主角是Spark,就不在这上面浪费过多的时间了。

010


Presenter Notes:Spark是一个轻量级计算集群,是一个通用快速大规模数据 处理引擎。即兴举例或说明…


011


Presenter Notes:Spark 的优点,处理速度快,使用方便。即兴举例或说明…


012


Presenter Notes:Spark 的优点,通用性,运行环境。即兴举例或说明…


013


Presenter Notes:

  • 在基于standalone的Spark集群,Cluster Manger就是Master。 
Master负责分配资源,在集群启动时,Driver向Master申请资源,Worker负责监控自己节点的内存和CPU等状况,并向Master汇报。
  • 从资源方面,可以分为两个层面: 

    1. 资源的管理和分配 
资源的管理和分配,由Master和Worker来完成。Master给Worker分配资源, 
Master时刻知道Worker的资源状况。 
客户端向服务器提交作业,实际是提交给Master。
    2. 资源的使用 
资源的使用,由Driver和Executor。程序运行时候,向Master请求资源。 -
  • 时序:
    1. Client(Driver)向Master提交Application—-通过spark-sumbit提交,指定master=spark:///
    2. Master收到Driver的Application请求,申请资源(实际上是Worker的Executor),启动StandaloneExecutorBackend,StandaloneExecutorBackend是Worker跟外界通信的代表
    3. Executor启动后,Driver就可以分配Task(launchTask)
    4. 作业执行过程中,Worker向Driver汇报任务的执行情况

014


Presenter Notes:

  • 函数式编程(Functional Programming)或称函数程序设计,又称泛函编程,是一种编程典范,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。
  • 比起命令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。
  • 许多电脑同时做一件复杂的任务,涉及很多问题:比如,这个任务首先要分解成许多子任务,然后这些小任务要在这些电脑上面去分配,然后这些电脑完成了任务之后反馈的结果还要汇总,同时还要考虑如果这些电脑的故障异常等问题怎么去解决…MapReduce就是这样的一个编程模型,一个复杂的任务按照这个抽象的模型去实现,就可以有效进行并行计算。
  • 我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。
  • 现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。
  • 简单来说,在函数式语言里,Map表示对一张列表(List)中的每个元素进行计算,Reduce表示对一张列表中的每个元素进行迭代计算。
  • MapReduce的灵感来源于函数式语言(如Lisp)中的内置函数Map和Reduce。简单来说,在函数式语言里,Map表示对一张列表(List)中的每个元素进行计算,Reduce表示对一张列表中的每个元素进行迭代计算。
  • MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。
  • 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归纳)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

015


Presenter Notes:Map表示对一张列表(List)中的每个元素进行计算,Reduce表示对一张列表中的每个元素进行迭代计算。对上图进行解释…


016


Presenter Notes:我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。对上图进行解释…


017


Presenter Notes:

  • 与许多专有的大数据处理平台不同,Spark建立在统一抽象的RDD之上,使得它可以以基本一致的方式应对不同的大数据处理场景,包括MapReduce,Streaming,SQL,Machine Learning以及Graph等。
  • 这即Matei Zaharia所谓的“设计一个通用的编程抽象(Unified Programming Abstraction)。
  • 这正是Spark这朵小火花让人着迷的地方。

018


Presenter Notes:

  • 弹性分布式数据集
  • 相当于每个RDD都是一个抽象的数据集合。可以通过API对这个数据集合进行各种操作。
  • 简单解释…

019


Presenter Notes:

  • 弹性分布式数据集
  • 相当于每个RDD都是一个抽象的数据集合。可以通过API对这个数据集合进行各种操作。
  • 简单解释…

020


Presenter Notes:前面我们讲了一下一些比较重要的概念,现在我们来实战演练一下。


021


Presenter Notes:在电脑上给大家演示如何创建一个Scala项目,以及如何在本地运行Spark程序。


022


Presenter Notes:我们先来一个简单的实例,在一篇文章中统计各个单词出现的次数


023


Presenter Notes:

  • 这个交互式Spark shell,
  • 是Spark提供的一个快速方便用来学习API的,以及也是一个强大的数据分析工具。
  • 默认在当前目录,支持多种语言,
  • 自动创建好一个session供你使用,
  • 顺便给大家解释一下什么是session

024


Presenter Notes:这里讲解的时候要重点说一下每次操作后都会产生一个新的集合,不会有可变数据,由此顺带可以讲一点函数式的编程方式。


025


Presenter Notes:前面提到函数式语言的高阶函数的意思就是可以以函数为参数以及返回值。MapReduce前面提到的分布式处理重要的两个概念,分解讲一下…即兴…


026


Presenter Notes:下面我们来展示一下我们的重发率数据的分析过程。


027


Presenter Notes:讲解初始化过程,增加config等问题。


028


Presenter Notes:讲解数据加载,讲讲可以使用的各种数据源。


029


Presenter Notes:这里结合业务进行讲解,涉及公司内容,这个Notes删了。


030


Presenter Notes:这里结合业务进行讲解,涉及公司内容,这个Notes删了。


031


Presenter Notes:讲解了这里是如何进行去重的,这里结合业务进行讲解,涉及公司内容,这个Notes删了。


032


Presenter Notes:讲解数据收集,支持的数据存储方式等。


033


Presenter Notes:再顺便说说流式处理之类的补充话题,然后解答疑问。


034


Presenter Notes:对大家抽时间来参加分离表示诚挚的感谢!

结束了。