在此之前,我连spark是什么都不清楚,在看完《Spark快速大数据分析》(Learning Spark:Lighting-fast Data Analysis -by Holden Karau)之后,大致了解了spark的功能和组成。这篇blog应该算是这本《Spark》的读书笔记了吧。
讲了讲spark的功能,主要组成,历史,如何安装,如何初步运行,虽然万事开头难,但这部分纯属娱乐,难的马上就要开始了。
这里就开始接触了spark里最重要的一个概念:弹性分布式数据(Resilient Distributed Dataset 简称RDD)。貌似就是个数据集,里面有好多相同的元素,spark就通过某些方法对这个数据集里的元素进行分布式的操作。
2.缓存 可以通过persist(缓存等级)把RDD缓存到内存或者磁盘之类的地方。
就是存取各种格式的文件,包括文本文件,JSON,CSV,TSV,SequenceFile(由没有相对关系结构的键值对文件组成的常用Hadoop格式),其他的Hadoop输入输出格式。还能进行文件压缩。(是的我为什么不放点代码上来呢,因为我tm根本不会scala好吧(伟笑))。 - 文件系统包括本地常规文件系统,Amazon S3,HDFS(Hadoop分布式文件系统)等等。 - Spark SQL(后面专门讲)
有个运行架构,就是下面这个图
而在集群上运行Spark应用的过程就是 1)用户通过spark-submit脚本提交应用 2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法。 3)驱动器程序与集群管理器通信,申请资源以启动执行器节点 4)集群管理器为驱动器程序启动执行器节点 5)驱动器进程执行用户应用中的操作。根据程序中所定义的对RDD的转化操作和行动操作,驱动器节点把工作以任务的形式发送到执行器进程。 6)任务在执行器程序中进行计算并保存结果 7)如果驱动程序的main()方法退出,驱动器程序会终止执行器进程,并且通过集群管理器释放资源
这是spark的一个组件,通过这个可以从各种结构化数据源( JSON,Hive,Parquet)中读取数据,还可以连接外部数据库。提供了特殊的RDD叫做DataFrame(旧版本叫SchemaRDD)。还能在别的应用中使用spark SQL。还能连接JDBC服务器,但是不太明白连接JDBC搞毛啊,JDBC不是JAVA连接数据库才用的吗?这意思是通过JDBC来访问SQL数据库吗?还允许自定义数据库的函数,和SQL差不多。最后还能调节Spark SQLd 的性能选项。
这个就是流处理数据,把一段时间内的数据弄成一个RDD,整个合起来叫DStream。 1. 转化操作 包括无状态转化和有状态转化,无状态转化就是类似map(),filter()等的,对DStream里的每个RDD进行操作的,有状态的就是当前的计算需要之前的几个RDD,这里用的是
2.输入输出 输出比较简单,用某些方法就可以写成文本或者流文件。 输入则可以通过文件,或者附加数据源(Apache Kafka,Apache Flume,自定义输入源)
3.检查点 检查点机制则可以控制需要在转化图中回溯多远。不过检查点是用在驱动器程序容错的。而工作节点容错则是备份数据。
4.性能考量 性能问题主要有批次和窗口大小,并行度,垃圾回收和内存使用。
这里有MLlib是spark的一个相关软件,里面有好多好多的机器学习算法什么的,看起来挺好用的。
好了,你见过没有一段代码的学习笔记吗,原谅我的小白吧,毕竟我还是爬行阶段,下一步要开始学spark的源语言scala了,学完之后再看spark肯定又是另一种感觉吧。
PS:当然还留了一些看起来好重点的知识点没看懂,等着明天好好研究研究之后再专门写一篇。