首先什么是Spark
上面是官网的截图,第一句话就说了:spark是一个应用于大数据的分析引擎
因此,spark是一个用于数据处理的执行引擎
速度
上面图中很明确的体现了Spark的速度
官方给出的速度是Hadoop的100倍,当然,这个数据并不是绝对的,但是在绝大部分情况下的确是Spark要比Hadoop快,而原理上来讲其实主要是Hadoop的计算是由MapReduce担当的,而MapReduce是分为map和reduce两部分进行的,其中每一个map和reduce又都需要task进程,而进程意味着开启与销毁等等上的性能问题。并且Hadoop计算过程中其实会产生很多中间数据,类似于WC的XXX,1这种也加大了负担。
对比来看Spark,Spark是基于线程的,理论上会比MapReduce好用,并且Spark基于内存的计算也使得其拜托了磁盘的束缚(其实就是没有中间数据)
易用性
Spark可以快速的使用JAVA,Scala,Python,R甚至是用SQL来进行编程,比MapReduce的编程效率要高很多
通用性
Spark结合了SparkSQL,SparkStreaming,GraphX,MILB,因此根据不同需求你可以选择不同的组件进行处理
跑在任何地方
Spark可以跑在各种地方:yarn,Mesos,K8S,standalone甚至是在云上,而且可以访问各种数据源(当你会使用以后sqoop就可以不用了)
编译
官网其实给出了几个预编译版本:
但是并不建议使用,因为在正常的工作环境下很有可能需要你针对某个模块去进行修改编译,因此,学会自己编译是很有必要的
注意:我自己用的是Hadoop2.6.0
下载
下载源码
在上边选择source code也行,选择github下载也可以
在Git clone下用git branch -v
来查看版本,git checkout
指定一个版本。
下载完成以后根据官方文档进行编译 点此查看
最开始我们可以看到2.4.0的要求
The Maven-based build is the build of reference for Apache Spark. Building Spark using Maven requires Maven 3.5.4 and Java 8. Note that support for Java 7 was removed as of Spark 2.2.0.
也就是我们要用maven的版本在 3.5.4以上,JDK要1.8以上
解压以后我们发现里边会自带一个mvn,但是我建议还是使用自己下载的mvn进行编译,毕竟自己的用着还是舒服(以后开发好多都需要用到mvn)
这里我用的自己的mvn 3.6.0
这是官网给出的编译代码:
./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Psparkr -Phadoop-2.7 -Phive -Phive-thriftserver -Pmesos -Pyarn -Pkubernetes
很长一段,拆开来看我们可以看见他使用的是dev下边的脚本,我们去脚本里看看
返回来看代码--name
这个名字代表了我们编译完成后最终jar包的名字
而后边的--pip
代表的是python,--r
是R语言,--tgz
是是否打成tgz的包
再后边的-PXXX
分别代表的是pom.xml文件中的Hadoop,hive等等一系列的东西
但是我们发现Hadoop默认版本是2.7,但是我一直用的都是2.6怎么办
这样我们就需要另外一个参数将他传进去-Dhadoop.version=2.6.0-cdh5.7.0
这样我们就表明了Hadoop的版本是CDH5.7的2.6.0了
也就是在这里指定了Hadoop的版本
但是我们又发现里边没有cdh的版本怎么办,那么我们只能去指定mvn曾库添加cloudera的仓库
记得放在第一行,他会默认尝试这个仓库的
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
最后我们的代码就变成了
./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Phive -Phive-thriftserver -Pyarn -Dhadoop.version=2.6.0-cdh5.7.0
这样就可以运行了
但是我们发现他很快就会卡住,等一段时间就可以继续了,其实,那是它再检查环境变量,如果想让他更快我们可以把这些手动配置进去
在make-distribution.sh脚本中添加
VERSION=2.4.0
SCALA_VERSION=2.11
SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0
SPARK_HIVE=1
注释掉下边这些
成功以后会生成一个spark-2.4.0-bin-2.6.0-cdh5.7.0.tgz
这个文件,我们可以发现他的命名组成,这里不过多赘述
IDEA添加Spark依赖
我们编程不可能一直都在Linux系统中,所以我们会用到IDEA,pom.xml中添加
这些依赖就可以用了 ,PS:我这里的版本是调用的,方便一些,类似于上边编译的pom一样