目录:

  • 一、Spark的安装
  • 1.安装环境:
  • 2.Spark的下载:
  • 3.安装步骤:
  • 3.1 配置Job History Server【Standalone】
  • 3.2 配置Spark HA【Standalone】
  • 3.3 配置Spark【Yarn】
  • 二、Spark的使用
  • 1.执行spark程序(standalone)
  • 2.执行spark程序(yarn)
  • 3.启动Spark Shell
  • 4.在IDEA中使用Spark本地调试wordCount程序


一、Spark的安装

1.安装环境:

在linux上安装spark ,前提要部署了hadoop集群,并且安装了scala、zookeeper,JDK1.8

2.Spark的下载:

Scaka官方网址:

http://spark.apache.org/ Scala下载地址:

http://spark.apache.org/downloads.html

打开上述链接,进入到下图,点击红框下载 spark-2.4.5-bin-hadoop2.7.tgz,如下图所示:

cm怎么安装spark spark的安装详细过程_apache

3.安装步骤:

Spark的部署模式有Local、Local-Cluster、Standalone、Yarn、Mesos,我们选择最具代表性的Standalone集群部署模式。

(1)将安装包上传到服务器并解压

[liu@master software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C ../module/

(2)配置Spark【Standalone】

进入Spark安装目录/conf下

将slaves.template复制为slaves
将spark-env.sh.template复制为spark-env.sh

cm怎么安装spark spark的安装详细过程_spark_02


修改slaves文件,将work的hostname输入:

cm怎么安装spark spark的安装详细过程_hdfs_03


修改spark-env.sh文件,添加如下配置:

cm怎么安装spark spark的安装详细过程_大数据_04


为了防止出现“JAVA_HOME not set”异常,可以在sbin目录下的spark-config.sh 文件中加入如下配置:

cm怎么安装spark spark的安装详细过程_apache_05


将修改的配置文件分发到另外两台从机:

[liu@master conf]$ scp -r slaves liu@server1:/home/liu/modules/spark-2.2.0/conf/
[liu@master conf]$ scp -r slaves liu@server2:/home/liu/modules/spark-2.2.0/conf/
[liu@master conf]$ scp -r spark-env.sh liu@server1:/home/liu/modules/spark-2.2.0/conf/
[liu@master conf]$ scp -r spark-env.sh liu@server2:/home/liu/modules/spark-2.2.0/conf/
[liu@master sbin]$ scp -r spark-config.sh liu@server1:/home/liu/modules/spark-2.2.0/sbin/
[liu@master sbin]$ scp -r spark-config.sh liu@server2:/home/liu/modules/spark-2.2.0/sbin/

目前Spark集群配置完毕,通过Spark安装目录/sbin/start-all.sh启动。启动后执行jps命令,主节点上有Master进程,其他子节点上有Work进程

cm怎么安装spark spark的安装详细过程_hdfs_06


进入Spark的Web管理页面(主节点):http://master:8080/

cm怎么安装spark spark的安装详细过程_cm怎么安装spark_07


到此为止,Spark集群安装完毕。

3.1 配置Job History Server【Standalone】

(1)进入Spark安装目录conf下,将spark-default.conf.template复制为spark-default.conf

修改spark-default.conf文件,开启Log:

【注意:HDFS上的目录必须是存在的】

cm怎么安装spark spark的安装详细过程_hdfs_08


(2)修改conf /spark-env.sh文件,添加如下配置:

cm怎么安装spark spark的安装详细过程_cm怎么安装spark_09


(3)将配置好的Spark文件拷贝到其他节点上,然后启动通过sbin /start-history-server.sh启动Spark日志收集服务

进入Spark的日志管理页面(主节点):http://master:4000/

cm怎么安装spark spark的安装详细过程_大数据_10

到此为止,Spark History Server安装完毕。

3.2 配置Spark HA【Standalone】

(1)停止spark所有服务,修改配置文件spark-env.sh,在该配置文件中删掉SPARK_MASTER_HOST并添加如下配置:

cm怎么安装spark spark的安装详细过程_cm怎么安装spark_11


(2)将spark-env.sh同步到另外两台节点

[liu@master conf]$ scp -r spark-env.sh liu@server1:/home/liu/modules/spark-2.2.0/conf/
[liu@master conf]$ scp -r spark-env.sh liu@server2:/home/liu/modules/spark-2.2.0/conf/

(3)在主机上执行sbin/start-all.sh脚本,启动集群并启动第一个master节点,然后在一台从机上执行sbin/start-master.sh启动第二个master节点。

cm怎么安装spark spark的安装详细过程_大数据_12


cm怎么安装spark spark的安装详细过程_hdfs_13


cm怎么安装spark spark的安装详细过程_apache_14

3.3 配置Spark【Yarn】

(1)修改Hadoop配置下的yarn-site.xml,添加以下配置:

<property>
               <name>yarn.resourcemanager.hostname</name>
               <value>master</value>
       </property>
       <property>
               <name>yarn.nodemanager.aux-services</name>
               <value>mapreduce_shuffle</value>
       </property>
       <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
       <property>
               <name>yarn.nodemanager.pmem-check-enabled</name>
               <value>false</value>
       </property>
       <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
       <property>
               <name>yarn.nodemanager.vmem-check-enabled</name>
               <value>false</value>
       </property>

(2)修改 conf /spark-env.sh 添加以下内容让Spark能够发现Hadoop配置文件:

cm怎么安装spark spark的安装详细过程_apache_15


cm怎么安装spark spark的安装详细过程_大数据_16

二、Spark的使用

1.执行spark程序(standalone)

利用蒙特·卡罗算法求PI:

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
/home/liu/modules/spark-2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar \
100
参数说明:
--master spark://master:7077 指定Master的地址
--executor-memory 1G 指定每个executor可用内存为1G
--total-executor-cores 2 指定每个executor使用的cup核数为2个
2.执行spark程序(yarn)

利用蒙特·卡罗算法求PI:

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
--master yarn \
--deploy-mode client \
/home/liu/modules/spark-2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar \
100
3.启动Spark Shell
bin/spark-shell \
--master spark://master:7077 \
--executor-memory 2g \
--total-executor-cores 2

如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。

在Spark shell中用scala语言编写spark程序:

sc.textFile("hdfs://master:9000/Scala.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2).saveAsTextFile("hdfs://master:9000/output")

方法说明:

  • sc是SparkContext对象,该对象时提交spark程序的入口
  • textFile(hdfs://master:9000/Scala.txt)是hdfs中读取数据
  • flatMap(.split(" "))先map在压平 map((,1))将单词和1构成元组
  • reduceByKey(+)按照key进行reduce,并将value累加
  • saveAsTextFile(“hdfs:// master:9000/output”)将结果写入到hdfs中
4.在IDEA中使用Spark本地调试wordCount程序
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark_01 {
  def main(args: Array[String]): Unit = {
    if (args.length<=0){
      println(
        """
          |缺少参数
          |inputPath outputPath
        """.stripMargin
      )
      return
    }
    //获取配置文件 setMaster:提交模式:local本地运行模式
    val conf: SparkConf = new SparkConf().setAppName("wordCount").setMaster("local[*]")
    //Spark的上下文对象 SparkContext
    val sc: SparkContext = new SparkContext(conf)

    //Spark 的wordCount
    sc.textFile(args(0)).flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2).saveAsTextFile(args(1))
    sc.stop()
  }
}