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


        

spark add基础命令 spark(a)_spark


        第一是选择版本,我们选用最新的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 下载



spark add基础命令 spark(a)_apache_02



      编译步骤请参照: 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 版本不正确的提示。