#Spark入门#这个系列课程,是综合于我从2017年3月分到今年7月份为止学习并使用Spark的使用心得感悟,暂定于每周更新,之后可能会上传讲课视频和PPT,目前先在博客园把稿子打好。注意:这只是一个草稿,里面关于知识的误解还请各大网友监督,咱们互相进步。总而言之,网络上的知识学会断舍离,学会带着辩证的眼光去学习就能进步。html
谈到Spark,实际上从16年本科实习的时候就已经开始接触,那个时候是从Pig入门大数据Hadoop的,有兴趣的朋友能够看Hadoop家族之Pig入门;当时你们基本都在使用Pig,Pig我也没有接触太深,大概两个月后开始跟着当时的师父(当时是实习的硕士,后来就业去了阿里)学了Spark,整个公司就他在写Spark,他是一个我很佩服的人,属于全栈工程师类型的人,先后端数据分析以及数据挖掘的算法都会,因此就跟着使用Python写着Spark的一些入门程序,可见我另一个博客Spark2.0系列RDDVs.DataSetVs.DataFrame,实际上这里关于Dataset的介绍是很是不全面的,接下来我也会在这个Spark入门系列讲的更为详细一点。目前看来,大数据相关的职位那么吃香,不少学计算机的,学数学的,学统计的,半路上培训的,各类各样的人都来投Spark工程师的岗位,由于薪资高的缘由吧,可是真正喜欢这个职业的又有几个,但愿你们能一直坚持下去,见证大数据技术的更新迭代!git
第一个问题,什么是HadoopTM?实际上这个答案Hadoop官网已经给的很明确:github
Hadoop是Apache软件基金会支持可靠的、可扩展的一个开源的分布式计算框架的工程。(PS:Apache软件基金会真是扛下了开源世界的半壁江山,旗下支持的开源的大数据项目你们有兴趣能够去官网访问一下。)算法
具体而言,Apache Hadoop软件库是一个容许使用简单编程模型跨计算机集群处理大型数据集合的框架,其设计的初衷是将单个服务器扩展成上千个机器组成的一个集群为大数据提供计算服务,其中每一个机器都提供本地计算和存储服务。shell
Hadoop工程包括如下模块:数据库
Apache中其余Hadoop相关的项目包括:apache
第二个问题,既然Hadoop生态家族这么庞大,咱们为何要选择Spark做为对于大数据进行数据分析和数据挖掘的基本计算框架?编程
这个问题的答案实际上Spark官网已经给的很明确了,我就照样搬砖过来。json
Apache Spark拥有先进的DAG调度器、查询优化器以及物理执行引擎从而高性能的实现批处理和流数据处理。后端
Spark提供80个以上高级算子便于执行并行应用,而且可使用Scala、Python、R以及SQL的shell端交互式运行Spark应用。
#经过Spark的Python的DataFrame的API读取JSON文件 df = spark.read.json("logs.json") df.where("age > 21").show()
Spark拥有一系列库,包括SQL和DataFrame,用于机器学习的MLib,支持图计算GraphX以及流计算模块Streaming。你能够在一个应用中同时组合这些库。
Spark能够直接运行以自身的standalone集群模式运行,也能够在亚马逊EC2上运行,不过企业级用的比较多的是Hadoop Yarn模式,固然也有Mesos和Kubernetes模式。能够获取不限于来自于HDFS、Apache Cassandra、Apache HBase和Apache Hive等上百种数据源。
那么,第三个问题,Hadoop和Spark之间的关系是什么?
首先要从Hadoop的MapReduce编程框架提及,若是说MapReduce是第一代计算引擎,那么Spark就是第二代计算引擎。
MapReduce将复杂的并行计算过程高度的抽象到了两个函数:Map函数和Reduce函数。
MapReduce的核心是“分而治之”策略。数据在其MapReduce的生命周期中过程当中须要通过六大保护神的洗礼,分别是:Input、Split、Map、Shuffule、Reduce和Output。
MapReduce框架采用Master/Slave架构,一个Master对应多个Slave,Master运行JobTracker,Slave运行TaskTracker;JobTracker充当一个管理者,负责Client端提交的任务可以由手下的TaskTracker执行完成,而TaskTracker充当普通员工执行的Task分为Map Task(Split and Map)和Reduce Task(Shuffle and Reduce)。
如今,咱们普通的开发人员只要会用MapReduce的API就能够实现高大上的并行计算了,可是对于非科班毕业的数据分析(例如我这样半路出家的统计学毕业)人员而言,MapReduce存在的局限性不只仅是在于其代码的又长又臭,固定的框架等,总而言之其短板可见如下列表:
要知道,咱们一般意义上的Hadoop每每是Hadoop生态圈,意味着不少技术对Hadoop自己具备的局限进行了扩展和改进,从而有了Pig、Hive将SQL语言翻译成MapReduce程序,让咱们从繁琐的MapReduce程序中释放出来。若是说Pig这类的类SQL语言解决了MapReduce中存在的大量手写代码,那么Tez就解决是去除了Map和Reduce两个任务之间的屏障从而提高了总体的性能,从而将多个MapReduce任务在一个Tez任务中处理完。
随着大数据处理的应用场景愈来愈多,人们对Hadoop的要求也愈来愈高,开发出的对应的系统也愈来愈多,人们迫切的须要一个综合的计算框架,Spark应运而生,咱们能够看看Spark能够干些什么。
那么为何Spark能作到这些?
首先,咱们须要理解Spark中的三大概念:
有意思的是Spark使用“lazy evaluation”,意味着执行Transformations操做的时候实际上系统并无发生任何操做,只有在遇到Actions操做的时候Spark才开始真正从头运行程序执行一系列转换并返回结果。由于有了这种惰性求值方式加上RDD的血缘依赖关系致使程序在一系列连续的运算中造成了DAG,而这种DAG(Directed Acyclic Graph)能够优化整个执行计划(参照上图中的Tez)。
最后再强调一下,为何要选择Spark?
咱们都知道Spark最初是由UC伯克利大学的AMP实验室研究出来的,强烈推荐这个实验室的Projects!Happy Coding!