最近尝试搭建spark开发环境,简单记录一下过程,后期有时间再完善。

Spark 简介

 spark是一个快速通用的大规模数据处理引擎。

   

  快速:spark在内存中的运行速度比Hadoop MapReduce快100倍,比在    磁盘上的处理速度快10倍;

  易于使用:支持Java,Python,Scala和R语言。

  普遍性:apache spark 提供了 spark sql、spark streaming、mlib 和 graph等多种形式进行操作;

  多平台运行:spark可以运行在hadoop、mesos、standalone或者cloud上。spark可以访问不同的数据源,如hdfs、cassandra、hbase和S3.

Spark安装配置

作为一个开源的框架,Spark在使用之前需要自己进行编译,spark  maven工程下载地址为 https://github.com/apache/spark。Spark打包有多种方式,其中之一是使用工程中自带的shell脚本  make-distribution.sh 。

 针对Apache版本的Hadoop(Hadoop2.x版本)编译

  

. make-distribution.sh -Pyarn -Phadoop-2.4 -Dhadoop.version=2.5.0 -Phive -Phive-thriftserver

针对CDH5.x版本的Hadoop编译

.make-distribution.sh --tgz -Pyarn -Phadoop-2.4 -Dhadoop.version=2.5.0-cdh5.3.6 -Phive -Phive-thriftserver

编译成功后会在当前路径下生成名为spark-1.3.0-bin-2.5.0的tar包。

由于spark是scala编写的,所以安装spark之前需要先安装scala,版本为2.10.4。 解压后在/etc/profile文件中配置scala_home环境变量,然后  source  /etc/profile,使用scala -version查看成功结果。

  

[zpl@zpl-hadoop zookeeper-3.4.5]$ echo ${SCALA_HOME}
        /home/zpl/software/scala-2.10.4

spark的常用运行模式有  local、standalone和yarn 。

解压完成后修改配置文件

1,将log4j.properties.template重命名为log4j.properties;

2,在  spark-env.sh  中配置 JAVA_HOME、SCALA_HOME以及hadoop配置路径:

JAVA_HOME=/home/zpl/Downloads/jdk1.7.0_67
      SCALA_HOME=/home/zpl/software/scala-2.10.4
      HADOOP_CONF_DIR=/home/zpl/software/hadoop-2.5.0/etc/hadoop

进入spark安装目录,运行命令 

        

bin/spark-shell 

 spark context作为spark命令行的入口,初始时已经创建好实例,名称为sc,使用sc读取hdfs上的数据文件: 


    var  rdd = sc.textFile("/wcinput/wc.input")

spark自动判断rdd为string类型,我们可以使用spark函数查看rdd信息,如:

rdd.count 

      rdd.first 

      rdd.take(2) //取前两条数据 

      rdd.collect  //把所有的数据变成集合 

      rdd.filter(x=>x.contains("yarn")).collect //过滤 

      rdd.cache  //将rdd加载到内存中去

对于每一个spark应用来说,都有一个web监控界面,端口号为4040,以后每个应用一次递加。

运行wordcount程序

用函数将内容拆分成单个单词形式的数组,

rdd.flatMap(x=>x.splie(" ")).collect

将每个单词组装成key/value形式

rdd.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>(x+y)).collect

spark standalone 模式

standalone模式运行时包括主节点  master和多个从节点 work,

在 spark-env.sh中增加以下配置:

SPARK_MASTER_IP=zpl-hadoop
    SPARK_MASTER_PORT=7077
    SPARK_MASTER_WEBUI_PORT=8080
    SPARK_WORKER_CORES=2
    SPARK_WORKER_MEMORY=2g
    SPARK_WORKER_PORT=7078
    SPARK_WORKER_WEBUI_PORT=8081
    SPARK_WORKER_INSTANCES=1

修改slave配置文件,因为当前只有一个节点,所以只增加当前主机名即可。  

启动时先启动master  

  

     sbin/start-master.sh  

再启动 slaves,注意是slaves而不是slave,

     sbin/start-slaves.sh 

再次启动shell时,需要加参数 --master,表明运行在spark上,

    bin/spark-shell.sh --master  spark://zpl-hadoop:7070 

 Spark应用请求过程。

       一个spark应用由一个driver program和多个executor组成,当客户端请求时,driver program 创建spark context,由sc生成的cluster manager(集群管理器)向集群申请资源,创建RDD等。Executor进程存在于work节点上,用来运行任务,executor中又有很多task,每一个task就是一个线程,是work发送到executor运行的最小单位。