Spark部署

1 Spark概述

Spark是一种基于内存的快速,通用,可扩展的大数据分析计算引擎

1.1 核心模块

Spark Core:
提供了Spark最基础与最核心的功能
Spark SQL:
是Spark用来操作结构化数据的组件。通过Spark SQL,用户可以使用SQL或者Apche Hive版本的HQL来查询数据
Spark Streaming:
Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API
Spark MLlib:
一个机器学习算法库。不仅提供了模型评估,数据导入等额外功能,还提供了一些更底层的机器学习原语。

2 Spark快速上手

创建Maven项目 => 安装Scala插件 => 增加依赖

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.4.5</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <!-- 该插件用于将Scala代码编译成class文件 -->
        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <version>3.2.2</version>
            <executions>
                <execution>
                    <!-- 声明绑定到maven的compile阶段 -->
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2.1 WordCount案例

流程图

// 创建Spark运行配置对象
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")

// 创建Spark上下文环境对象(连接对象)
val sc : SparkContext = new SparkContext(sparkConf)

// 读取文件数据
val fileRDD: RDD[String] = sc.textFile("input/word.txt")

// 将文件中的数据进行分词
val wordRDD: RDD[String] = fileRDD.flatMap( _.split(" ") )

// 转换数据结构 word => (word, 1)
val word2OneRDD: RDD[(String, Int)] = wordRDD.map((_,1))

// 将转换结构后的数据按照相同的单词进行分组聚合
val word2CountRDD: RDD[(String, Int)] = word2OneRDD.reduceByKey(_+_)

// 将数据聚合结果采集到内存中
val word2Count: Array[(String, Int)] = word2CountRDD.collect()

// 打印结果
word2Count.foreach(println)

//关闭Spark连接
sc.stop()

3 Spark运行环境

3.1 Local模式

不需要其他任何节点资源在本地执行Spark代码的环境

首先解压spark-2.4.5-bin-hadoop2.7.tgz,将其命名为spark-local

启动Local环境:bin/spark-shell --master local[4]
Web UI监控界面访问:http://虚拟机地址:4040

测试本地模式:
(在spark-local下创建input目录,并添加word.txt文件)

sc.textFile("input/word.txt").flatMap(_.split("")).map((_,1)).reduceByKey(_+_).collect

退出::quit
提交应用:

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.11-2.4.5.jar \
10

3.2 Standalone模式

基本配置

解压 -> 改名为spark-standalone

  • 修改slaves.template为slaves
    添加work节点:
linux1
linux2
linux3
  • 修改spark-env.sh.template为spark-env.sh,添加JAVA_HOME和集群对应的master节点
    (7077,相当于hadoop内部通信的9000端口)
export JAVA_HOME=/opt/module/jdk1.8.0_144
SPARK_MASTER_HOST=linux1
SPARK_MASTER_PORT=7077

向各个节点同步目录
启动集群:sbin/start-all.sh
UI界面:8080端口

提交应用:

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
./examples/jars/spark-examples_2.11-2.4.5.jar \
10

参数说明

参数说明

配置历史服务器:

修改spark-defaults.conf.template为spark-defaults.conf
配置日志存储路径:

spark.eventLog.enabled          true
spark.eventLog.dir               hdfs://linux1:9000/directory

(启动hadoop集群,创建对应的目录/directory)

在spark-env.sh,添加日志配置

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://linux1:9000/directory 
-Dspark.history.retainedApplications=30"

  • 参数1含义:WEBUI访问的端口号为18080

  • 参数2含义:指定历史服务器日志存储路径

  • 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。

  • 分发文件,重新启动集群和历史服务

sbin/start-all.sh
sbin/start-history-server.sh
配置高可用(HA)

首先停止集群,启动Zookeeper
修改spark-env.sh配置:

注释如下内容:
#SPARK_MASTER_HOST=linux1
#SPARK_MASTER_PORT=7077

添加如下内容:
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER 
-Dspark.deploy.zookeeper.url=linux1,linux2,linux3 
-Dspark.deploy.zookeeper.dir=/spark"

分发文件,启动集群
启动备用Master节点:sbin/start-master.sh

3.3 Yarn模式

解压 -> 改名为spark-yarn
修改hadoop的配置文件yarn-site.xml,并分发

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是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>

修改spark-env.sh,添加JAVA_HOME和YARN_CONF_DIR配置

export JAVA_HOME=/opt/module/jdk1.8.0_144
YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop

测试:

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.11-2.4.5.jar \
10

  • 配置历史服务器
    修改spark-defaults.conf,配置日志存储路径
spark.eventLog.enabled          true
spark.eventLog.dir               hdfs://linux1:9000/directory

修改spark-env.sh,添加日志配置

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://linux1:9000/directory 
-Dspark.history.retainedApplications=30"

修改spark-defaults.con

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://linux1:9000/directory 
-Dspark.history.retainedApplications=30"

测试:

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.11-2.4.5.jar \
10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值