随笔分类 - Apache Spark

Spark的使用及源码走读
摘要: 在学习使用Spark的过程中,总是想对内部运行过程作深入的了解,其中DEBUG和TRACE级别的日志可以为我们提供详细和有用的信息,那么如何进行合理设置呢,不复杂但也绝不是将一个INFO换为TRACE那么简单。阅读全文
posted @ 2015-04-13 22:18 徽沪一郎 阅读(2802) | 评论 (1) 编辑
摘要: Spark运行过程中资源的申请和释放一直是源码分析时需要关注的重点,从资源种类上来说,有CPU、内存、网络、磁盘,其中前三者会在进程退出时由OS来负责释放。而占用的磁盘资源,如果Spark自身不及时的清理,就势必会造成文件的堆积,直至磁盘被占满不可用。 因此有必要弄清楚Spark运行过程中产生的临时文件及其释放的时机,这样有助于部署和运维过程中采取相应的文件清理策略。阅读全文
posted @ 2015-03-08 20:25 徽沪一郎 阅读(2753) | 评论 (1) 编辑
摘要: 本文就spark-cassandra-connector的一些实现细节进行探讨,主要集中于如何快速将大量的数据从cassandra中读取到本地内存或磁盘。阅读全文
posted @ 2014-11-17 21:11 徽沪一郎 阅读(2584) | 评论 (0) 编辑
摘要: 编写了独立运行的Spark Application之后,需要将其提交到Spark Cluster中运行,一般会采用spark-submit来进行应用的提交,在使用spark-submit的过程中,有哪些事情需要注意的呢? 本文试就此做一个小小的总结。阅读全文
posted @ 2014-10-26 20:43 徽沪一郎 阅读(8021) | 评论 (0) 编辑
摘要: 根据论坛上的信息,在Sparkrelease计划中,在Spark 1.3中有将SparkR纳入到发行版的可能。本文就提前展示一下如何安装及使用SparkR.阅读全文
posted @ 2014-09-28 21:18 徽沪一郎 阅读(4206) | 评论 (0) 编辑
摘要: Spark 1.1中对spark core的一个重大改进就是引入了sort-based shuffle处理机制,本文就该处理机制的实现进行初步的分析。阅读全文
posted @ 2014-09-19 10:22 徽沪一郎 阅读(3416) | 评论 (2) 编辑
摘要: 本文简要介绍如何使用spark-cassandra-connector将json文件导入到cassandra数据库,这是一个使用spark的综合性示例。阅读全文
posted @ 2014-09-06 14:54 徽沪一郎 阅读(1965) | 评论 (1) 编辑
摘要: 本文讲述如何使用datastax提供的spark-cassandra-connector来连接cassandra进行数据读取和更新。阅读全文
posted @ 2014-09-02 21:48 徽沪一郎 阅读(2729) | 评论 (0) 编辑
摘要: 本文就拟牛顿法L-BFGS的由来做一个简要的回顾,然后就其在spark mllib中的实现进行源码走读。阅读全文
posted @ 2014-08-25 19:52 徽沪一郎 阅读(2589) | 评论 (0) 编辑
摘要: 本文简要描述线性回归算法在Spark MLLib中的具体实现,涉及线性回归算法本身及线性回归并行处理的理论基础,然后对代码实现部分进行走读。阅读全文
posted @ 2014-08-15 20:04 徽沪一郎 阅读(4039) | 评论 (3) 编辑
摘要: 通过一个简明的Demo程序来说明如何使用scala中的PackratParsers阅读全文
posted @ 2014-08-11 13:40 徽沪一郎 阅读(1820) | 评论 (0) 编辑
摘要: WEB UI和Metrics子系统为外部观察监测Spark内部运行情况提供了必要的窗口,本文将简略的过一下其内部代码实现。阅读全文
posted @ 2014-08-05 10:12 徽沪一郎 阅读(2821) | 评论 (0) 编辑
摘要: Spark应用开发实践性非常强,很多时候可能都会将时间花费在环境的搭建和运行上,如果有一个比较好的指导将会大大的缩短应用开发流程。 本篇主要讲述如何运行KafkaWordCount,这个需要涉及Kafka集群的搭建,还是说越仔细越好。阅读全文
posted @ 2014-08-02 21:57 徽沪一郎 阅读(8192) | 评论 (3) 编辑
摘要: ShuffleMapTask的计算结果保存在哪,随后Stage中的task又是如何知道从哪里去读取的呢,reduceByKey(_ + _)中的combine计算发生在什么地方,本文将为你一一揭晓。阅读全文
posted @ 2014-07-24 12:58 徽沪一郎 阅读(3124) | 评论 (0) 编辑
摘要: 本文主要讲述在standalone cluster部署模式下,应用(Driver Application)所需要的资源是如何获得,在应用退出时又是如何释放的。阅读全文
posted @ 2014-07-21 23:36 徽沪一郎 阅读(2408) | 评论 (0) 编辑
摘要: 上篇博文讲述了如何通过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都需要编译,花费的时间不少,效率不高,而且属于侵入性的修改,不优雅。本篇讲述如何使用intellij idea来跟踪调试spark源码。阅读全文
posted @ 2014-07-17 13:47 徽沪一郎 阅读(9158) | 评论 (4) 编辑
摘要: 今天不谈Spark中什么复杂的技术实现,只稍为聊聊如何进行代码跟读。众所周知,Spark使用scala进行开发,由于scala有众多的语法糖,很多时候代码跟着跟着就觉着线索跟丢掉了,另外Spark基于Akka来进行消息交互,那如何知道谁是接收方呢?阅读全文
posted @ 2014-07-05 20:15 徽沪一郎 阅读(3874) | 评论 (0) 编辑
摘要: 之所以对spark shell的内部实现产生兴趣全部缘于好奇代码的编译加载过程,scala是需要编译才能执行的语言,但提供的scala repl可以实现代码的实时交互式执行,这是为什么呢? 既然scala已经提供了repl,为什么spark还要自己单独搞一套spark repl,这其中的缘由到底何在? 显然,这些都是问题,要解开这些谜团,只有再次开启一段源码分析之旅了。阅读全文
posted @ 2014-06-28 09:21 徽沪一郎 阅读(3706) | 评论 (0) 编辑
摘要: 本文就standalone部署方式下的容错性问题做比较细致的分析,主要回答standalone部署方式下的包含哪些主要节点,当某一类节点出现问题时,系统是如何处理的。 组成cluster的不同节点,启动时有没有固定的顺序,为什么是这样的顺序,针对这些问题,本文会做一个详尽的分析。阅读全文
posted @ 2014-06-17 21:51 徽沪一郎 阅读(3032) | 评论 (2) 编辑
摘要: 图的并行化处理一直是一个非常热门的话题,这里头的重点有两个,一是如何将图的算法并行化,二是找到一个合适的并行化处理框架。Spark作为一个非常优秀的并行处理框架,将一些并行化的算法移到其上面就成了一个很自然的事情。 Graphx是一些常见图算法在Spark上的并行化实现,同时提供了丰富的API接口。本文就Graphx的代码架构及pagerank在graphx中的具体实现做一个初步的学习。阅读全文
posted @ 2014-06-11 11:01 徽沪一郎 阅读(4556) | 评论 (0) 编辑
摘要: 在新近发布的spark 1.0中新加了sql的模块,更为引人注意的是对hive中的hiveql也提供了良好的支持,作为一个源码分析控,了解一下spark是如何完成对hql的支持是一件非常有趣的事情。阅读全文
posted @ 2014-06-04 11:19 徽沪一郎 阅读(4416) | 评论 (1) 编辑
摘要: Hive是基于Hadoop的开源数据仓库工具,提供了类似于SQL的HiveQL语言,使得上层的数据分析人员不用知道太多MapReduce的知识就能对存储于Hdfs中的海量数据进行分析。由于这一特性而收到广泛的欢迎。 Hive的整体框架中有一个重要的模块是执行模块,这一部分是用Hadoop中MapReduce计算框架来实现,因而在处理速度上不是非常令人满意。由于Spark出色的处理速度,有人已经成功将HiveQL的执行利用Spark来运行,这就是已经非常闻名的Shark开源项目。 在Spark 1.0中,Spark自身提供了对Hive的支持。本文不准备分析Spark是如何来提供对Hive的支持的,而只着重于如何搭建Hive On Spark的测试环境。阅读全文
posted @ 2014-05-30 08:44 徽沪一郎 阅读(5169) | 评论 (0) 编辑
摘要: 在即将发布的spark 1.0中有一个新增的功能,即对sql的支持,也就是说可以用sql来对数据进行查询,这对于DBA来说无疑是一大福音,因为以前的知识继续生效,而无须去学什么scala或其它script. 一般来说任意一个sql子系统都需要有parser,optimizer,execution三大功能模块,在spark中这些又都是如何实现的呢,这些实现又有哪些亮点和问题?带着这些疑问,本文准备做一些比较深入的分析。阅读全文
posted @ 2014-05-27 16:10 徽沪一郎 阅读(5852) | 评论 (1) 编辑
摘要: “spark已经比较头痛了,还要将其运行在yarn上,yarn是什么,我一点概念都没有哎,再怎么办啊。不要跟我讲什么原理了,能不能直接告诉我怎么将spark在yarn上面跑起来,I'm a dummy, just told me how to do it.” 如果你和我一样是一个对形而上的东西不是太感兴趣,而只纠结于怎么去做的话,看这份guide保证不会让你失望, :)。阅读全文
posted @ 2014-05-19 18:30 徽沪一郎 阅读(3633) | 评论 (0) 编辑
摘要: 本来源码编译没有什么可说的,对于java项目来说,只要会点maven或ant的简单命令,依葫芦画瓢,一下子就ok了。但到了Spark上面,事情似乎不这么简单,按照spark officical document上的来做,总会出现这样或那样的编译错误,让人懊恼不已。阅读全文
posted @ 2014-05-16 16:44 徽沪一郎 阅读(4832) | 评论 (4) 编辑
摘要: Hadoop2中的Yarn是一个分布式计算资源的管理平台,由于其有极好的模型抽象,非常有可能成为分布式计算资源管理的事实标准。其主要职责将是分布式计算集群的管理,集群中计算资源的管理与分配。 Yarn为应用程序开发提供了比较好的实现标准,Spark支持Yarn部署,本文将就Spark如何实现在Yarn平台上的部署作比较详尽的分析。阅读全文
posted @ 2014-05-15 10:48 徽沪一郎 阅读(5100) | 评论 (1) 编辑
摘要: 在Spark源码走读系列之2中曾经提到Spark能以Standalone的方式来运行cluster,但没有对Application的提交与具体运行流程做详细的分析,就这些问题,本文做了一个比较详细的分析,并对在standalone模式下,Master节点是如何实现HA这一问题做出解答。阅读全文
posted @ 2014-05-12 12:09 徽沪一郎 阅读(6020) | 评论 (0) 编辑
摘要: Spark计算速度远胜于Hadoop的原因之一就在于中间结果是缓存在内存而不是直接写入到disk,本文尝试分析Spark中存储子系统的构成,并以数据写入和数据读取为例,讲述清楚存储子系统中各部件的交互关系。阅读全文
posted @ 2014-05-08 13:37 徽沪一郎 阅读(4912) | 评论 (2) 编辑
摘要: 在流数据的处理过程中,为了保证处理结果的可信度(不能多算,也不能漏算),需要做到对所有的输入数据有且仅有一次处理。在Spark Streaming的处理机制中,不能多算,比较容易理解。那么它又是如何作到即使数据处理结点被重启,在重启之后这些数据也会被再次处理呢?阅读全文
posted @ 2014-05-02 19:05 徽沪一郎 阅读(4859) | 评论 (1) 编辑
摘要: Spark Streaming能够对流数据进行近乎实时的速度进行数据处理。采用了不同于一般的流式数据处理模型,该模型使得Spark Streaming有非常高的处理速度,与storm相比拥有更高的吞吐能力。 本篇简要分析Spark Streaming的处理模型,Spark Streaming系统的初始化过程,以及当接收到外部数据时后续的处理步骤。阅读全文
posted @ 2014-04-25 21:22 徽沪一郎 阅读(6318) | 评论 (0) 编辑
摘要: 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚运行着的task其输入的数据从哪获取,处理的结果返回到哪里,如何返回。阅读全文
posted @ 2014-04-23 15:07 徽沪一郎 阅读(10277) | 评论 (0) 编辑
摘要: 本文以wordCount为例,详细说明spark创建和运行job的过程,涉及的内容有spark运行环境的搭建,如何将spark以local cluster模式运行,同时大体勾勒出job在提交过程中的函数调用路径。阅读全文
posted @ 2014-04-21 17:33 徽沪一郎 阅读(13724) | 评论 (1) 编辑
摘要: 在对Spark的源码进行具体的走读之前,如果想要快速对Spark的有一个整体性的认识,阅读Matei Zaharia做的Spark论文是一个非常不错的选择。 在阅读该论文的基础之上,再结合Spark作者在2012 Developer Meetup上做的演讲Introduction to Spark Internals,那么对于Spark的内部实现会有一个比较大概的了解。 有了上述的两篇文章奠定基础之后,再来进行源码阅读,那么就会知道分析的重点及难点。阅读全文
posted @ 2014-04-15 11:36 徽沪一郎 阅读(21524) | 评论 (4) 编辑
摘要: Scala越来越流行, Spark也愈来愈红火, 对spark的代码进行走读也成了一个很普遍的行为。不巧的是,当前java社区中很流行的ide如eclipse,netbeans对scala的支持都不算太好。在这种情况下不得不想到编辑器之神emacs,利用emacs+ensime来打造scala编程环境。 本文讲述的步骤全部是在arch linux上,其它发行版的linux视具体情况变通。阅读全文
posted @ 2014-04-11 16:49 徽沪一郎 阅读(5725) | 评论 (2) 编辑