前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零爬着学spark

从零爬着学spark

作者头像
用户1148523
发布2018-01-09 11:13:29
1K0
发布2018-01-09 11:13:29
举报
文章被收录于专栏:FishFish

为啥叫爬着学

在此之前,我连spark是什么都不清楚,在看完《Spark快速大数据分析》(Learning Spark:Lighting-fast Data Analysis -by Holden Karau)之后,大致了解了spark的功能和组成。这篇blog应该算是这本《Spark》的读书笔记了吧。

前两章

讲了讲spark的功能,主要组成,历史,如何安装,如何初步运行,虽然万事开头难,但这部分纯属娱乐,难的马上就要开始了。

第三章 RDD扫盲

这里就开始接触了spark里最重要的一个概念:弹性分布式数据(Resilient Distributed Dataset 简称RDD)。貌似就是个数据集,里面有好多相同的元素,spark就通过某些方法对这个数据集里的元素进行分布式的操作。

  1. RDD相关操作 有两种操作,一个是转化操作,一个是行动操作。区别两个主要看最后出来的结果是个RDD还是别的什么。并且,转化操作并不实际执行(书中叫惰性求值),只有当执行行动操作的时候才实际执行。
    • map() 这个方法主要是操作RDD中的每个元素。比如可以让所有的元素的值+1之类的。还有个flatMap(),从字面理解是把每个元素拍扁(flat有扁平的意思),书中的例子是把所有句子里的单词全部拆分。
    • filter() 过滤器吧,对RDD进行相应的过滤,比如去除不符合某种条件的元素。
    • 集合操作 RDD作为元素集合,可以union(所有元素),intersection(交集),subtract(去除内容),cartesian(笛卡尔积)。
    • 其他 还有什么去重distinct(),采样sample()这类的没用过也不知道是干啥的。
    • reduce() 这是行动操作,它接收一个函数作为参数,这个函数要操作两个相同元素类型的RDD数据并返回一个同样类型的新元素。据说可以用来累加RDD,不过怎么加的没太搞懂。另外还有fold(),aggregate()之类的,和这个差不多,也没太搞懂。
    • collect() 这个操作可以获得RDD,通过这个方法可以获得惰性执行的RDD。

2.缓存 可以通过persist(缓存等级)把RDD缓存到内存或者磁盘之类的地方。

第四章 键值对RDD

  1. 各种操作
    • RDD所有操作 这里支持对于RDD的所有操作,只是注意传入的函数要操作二元组而不是单个元素
    • reduceByKey() 聚合函数,按照key来进行聚合。和combineByKey()什么的差不多。
    • groupByKey():利用RDD的键分组RDD中的元素。
    • 连接:join(),leftOuterJoin(),rightOuterJoin()
    • 数据排序:sortByKey()
    • countByKey():对每个键对应的元素分别计数
    • collectAsMap():将结果以映射表的形式返回,以便查询
  2. 数据分区 这是啥?

第五章 存取数据

就是存取各种格式的文件,包括文本文件,JSON,CSV,TSV,SequenceFile(由没有相对关系结构的键值对文件组成的常用Hadoop格式),其他的Hadoop输入输出格式。还能进行文件压缩。(是的我为什么不放点代码上来呢,因为我tm根本不会scala好吧(伟笑))。 - 文件系统包括本地常规文件系统,Amazon S3,HDFS(Hadoop分布式文件系统)等等。 - Spark SQL(后面专门讲)

第六章 进阶

  1. 共享变量
    • 累加器 累加器可以将工作节点中的值聚合到驱动器程序中,比如可以把文本中所有的空行累加统计出来。
    • 广播变量 即只用向各个节点发送一次,任务就可以通过Broadcast对象调用value来获取该对象的值。如果比较大,可以选择序列化的方式发送。
  2. 基于分区的操作 Spark提供基于分区的map和foreach操作,让你的部分代码只对RDD的每个分区运行一次,这样可以帮助降低这些操作的代价。这里好像有个mapPartitions()函数。
  3. 外部程序管道pipe() 这个就是能把你的数据通过管道整到外边去,用别的语言来处理你的数据。
  4. 数值RDD操作 提供像count(),mean(),sum()之类的方法对数值RDD进行统计。

第七章 集群运行Spark

有个运行架构,就是下面这个图

运行架构
运行架构

而在集群上运行Spark应用的过程就是 1)用户通过spark-submit脚本提交应用 2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法。 3)驱动器程序与集群管理器通信,申请资源以启动执行器节点 4)集群管理器为驱动器程序启动执行器节点 5)驱动器进程执行用户应用中的操作。根据程序中所定义的对RDD的转化操作和行动操作,驱动器节点把工作以任务的形式发送到执行器进程。 6)任务在执行器程序中进行计算并保存结果 7)如果驱动程序的main()方法退出,驱动器程序会终止执行器进程,并且通过集群管理器释放资源

  • 打包代码与依赖 可以利用Maven(用于java工程)或者sbt(用于scala工程)把多个依赖打包成一个超级jar包。如果有依赖冲突,就改个名,叫“shading”。
  • 集群管理器 有好多种,spark自带的独立集群管理器(最简单),Hadoop YARN(使用其他应用或者要用到更丰富的资源调度功能),Apache Mesos(比YARN细粒度),Amazon EC2什么的,各有特点。

第八章 Spark优化与调试

  1. 使用SparkConf来配置Spark 有很多选项可以设置诸如每个执行器的内存,使用的核心个数之类的设置。
  2. Spark的作业,任务和步骤 这里有点混,下次再看看。
  3. 查找信息 利用4040端口可以在网页上访问spark的用户界面,不过为啥我的1.6.0不行呢。
  4. 关键性能 并行度(是用多少个核心的意思?),序列化格式,内存管理,硬件供给。

第九章 Spark SQL

这是spark的一个组件,通过这个可以从各种结构化数据源( JSON,Hive,Parquet)中读取数据,还可以连接外部数据库。提供了特殊的RDD叫做DataFrame(旧版本叫SchemaRDD)。还能在别的应用中使用spark SQL。还能连接JDBC服务器,但是不太明白连接JDBC搞毛啊,JDBC不是JAVA连接数据库才用的吗?这意思是通过JDBC来访问SQL数据库吗?还允许自定义数据库的函数,和SQL差不多。最后还能调节Spark SQLd 的性能选项。

第十章 Spark Streaming

这个就是流处理数据,把一段时间内的数据弄成一个RDD,整个合起来叫DStream。 1. 转化操作 包括无状态转化和有状态转化,无状态转化就是类似map(),filter()等的,对DStream里的每个RDD进行操作的,有状态的就是当前的计算需要之前的几个RDD,这里用的是

  • 滑动窗口
  • UpdateStateByKey()

2.输入输出 输出比较简单,用某些方法就可以写成文本或者流文件。 输入则可以通过文件,或者附加数据源(Apache Kafka,Apache Flume,自定义输入源)

3.检查点 检查点机制则可以控制需要在转化图中回溯多远。不过检查点是用在驱动器程序容错的。而工作节点容错则是备份数据。

4.性能考量 性能问题主要有批次和窗口大小,并行度,垃圾回收和内存使用。

第十一章 基于MLlib机器学习

这里有MLlib是spark的一个相关软件,里面有好多好多的机器学习算法什么的,看起来挺好用的。

好了,你见过没有一段代码的学习笔记吗,原谅我的小白吧,毕竟我还是爬行阶段,下一步要开始学spark的源语言scala了,学完之后再看spark肯定又是另一种感觉吧。

PS:当然还留了一些看起来好重点的知识点没看懂,等着明天好好研究研究之后再专门写一篇。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年02月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为啥叫爬着学
  • 前两章
  • 第三章 RDD扫盲
  • 第四章 键值对RDD
  • 第五章 存取数据
  • 第六章 进阶
  • 第七章 集群运行Spark
  • 第八章 Spark优化与调试
  • 第九章 Spark SQL
  • 第十章 Spark Streaming
  • 第十一章 基于MLlib机器学习
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档