大数据生态系统基础:Apache Spark(一):介绍和编译、安装

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 http://blog.csdn.net/caridle/article/details/76018314
        

     a. note:提高Maven编译时的堆内存大小,防止编译过程中产生OOM异常,相关命令如下:

  export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

      b. 编译

   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 版本不正确的提示。
发布了52 篇原创文章 · 获赞 4 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/caridle/article/details/76777462