Apache Spark 是一个快速和通用的大型数据处理引擎。
一、Spark 的特点
- 速度:在内存中运行程序要比Hadoop MapReduce快100倍,磁盘上的速度要快10倍。Apache Spark拥有一个先进的DAG执行引擎,它支持非循环数据流和内存计算。
- 易用性:在Java、Scala、Python、r中快速编写应用程序。Spark提供了超过80个高级运算,这些运算可以轻松构建并行应用程序。你可以从Scala、Python和R shell中交互式地使用它。
- 普遍性:组合SQL、流媒体和复杂的分析。Spark提供了一组库,其中包括SQL和DataFrames、用于机器学习的MLlib、GraphX和Spark流。您可以在同一个应用程序中无缝地组合这些库。
- 随处运行:Spark在Hadoop、Mesos、独立或云计算上运行。它可以访问各种各样的数据源,包括HDFS、Cassandra、HBase和S3。可以使用其独立的集群模式运行Spark,在EC2上,在Hadoop纱线上,或者在Apache Mesos上。在HDFS、Cassandra、HBase、Hive、速子和任何Hadoop数据源上访问数据。
二、下载安装
1、下载
下载地点:http://spark.apache.org/downloads.html
第一是选择版本,我们选用最新的2.2.0版本。第二是选择构建在 Hadoop 的系统,Spark 不适用 HDFS,所以,可以选择任何 Hadoop 版本,这里选择的是 Hadoop 2.6版本,因为我的系统装的是2.6.4
2、Maven依赖包的定义
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
3、解压包到 HOME 目录,并将目录改为 spark
$tar zxvf spark-2.2.0-bin-hadoop2.6.tar.gz
~$mv spark-2.2.0-bin-hadoop2.6 spark
设置环境变量, 这里增添了 Scala语言的环境变量
~/.bash_profile,或者/etc/profile 下。编辑完毕后,记得 source ~/.bash_profile
90 ###setup spark
91 export SPARK_HOME=$HOME/spark
92 export PATH=$SPARK_HOME/bin:$PATH
93
94 ##setup zinc,scala
95 export ZINC_HOME=/usr/local/opt/zinc/libexec
96 export SCALA_HOME=/usr/local/opt/scala/libexec
97 export PATH=$ZINC_HOME/bin:$SCALA_HOME/bin:$PATH
98 ##setup R
99 export R_HOME=/Library/Frameworks/R.framework/Resources
4、可以下载源代码自己编译
在第2步选择Source code, 然后点击 spark-2.2.0.tgz 下载
编译步骤请参照: Mac OSX下编译 Hadoop 2.6.4
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
cd $SPARK_SOURCE_HOME(spark源码路径)
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phadoop-provided -Phive -Phive-thriftserver -Pnetlib-lgpl -DskipTests clean package
编译完毕后,在目录下有一个 dev 目录,里面生成了一个生成部署包的脚本 make-distribution.sh
./dev/make-distribution.sh --name custom-spark --tgz -Psparkr -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn
生成的安装包位于根目录下: spark-2.2.0-bin-custom-spark.tgz
生成的已经解压的文件在 dist 目录下:dist
5、 配置 slaves
进入到 spark /conf目录,
cp slaves.template slaves
在 slaves 中,增加三个从服务器的主机名称:
master
slave1
slave2
6、配置 spark-env.sh
cp spark-env.sh.template spark-env.sh
在 spark-env.sh 中增加
3 export SCALA_HOME=/usr/local/opt/scala
4 #export SPARK_WORK_MEMORY=4g
5 export SPARK_MASTER_IP=mymac
6 export MASTER=spark://mymac:7077
7、将当前的 spark 目录直接拷贝到其它的节点中
注意在 HOME 发送命令
scp -rf ~/spark wangxinnian@master:~/
scp -rf ~/spark wangxinnian@slave1:~/
scp -rf ~/spark wangxinnian@slave2:~/
然后,分别对 master, slave1,slave2的.bash_profile 增加相同的环境目录
90 ###setup spark
91 export SPARK_HOME=$HOME/spark
92 export PATH=$SPARK_HOME/bin:$PATH
93
94 ##setup zinc,scala
95 export ZINC_HOME=/usr/local/opt/zinc/libexec
96 export SCALA_HOME=/usr/local/opt/scala/libexec
97 export PATH=$ZINC_HOME/bin:$SCALA_HOME/bin:$PATH
98 ##setup R
99 export R_HOME=/Library/Frameworks/R.framework/Resources
8、运行
在 sbin目录中,直接运行 start-all.sh 和 stop-all.sh。
也可以分开运行start-master.sh 和 stop-master.sh, 以及启动 worker 的 start-slave.sh 和 stop-slave.sh。
再运行 start-slave.sh spark://mymac:7077,后面要跟 master 的参数地址。
9、问题
master: failed to launch: nice -n 0 /Users/wangxinnian/spark/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://mymac:7077
master: at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
master: at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
master: full log in /Users/wangxinnian/spark/logs/spark-wangxinnian-org.apache.spark.deploy.worker.Worker-1-master.out
slave1: failed to launch: nice -n 0 /Users/wangxinnian/spark/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://mymac:7077
slave1: at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
slave1: at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
slave1: full log in /Users/wangxinnian/spark/logs/spark-wangxinnian-org.apache.spark.deploy.worker.Worker-1-slave1.out
slave2: failed to launch: nice -n 0 /Users/wangxinnian/spark/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://mymac:7077
slave2: at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
slave2: at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
slave2: full log in /Users/wangxinnian/spark/logs/spark-wangxinnian-org.apache.spark.deploy.worker.Worker-1-slave2.out
表示无法连接到 Master, 可以查看日志。
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/spark/launcher/Main : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
这是一个比较典型的 JDK 版本不正确的提示。