一、Spark概述

1、Spark简介

Spark是专为大规模数据处理而设计的,基于内存疾速通用,可扩大的集群计算引擎,实现了高效的DAG执行引擎,能够通过基于内存来高效解决数据流,运算速度相比于MapReduce失去了显著的进步。

2、运行构造

Driver

运行Spark的Applicaion中main()函数,会创立SparkContext,SparkContext负责和Cluster-Manager进行通信,并负责申请资源、任务分配和监控等。

ClusterManager

负责申请和治理在WorkerNode上运行利用所需的资源,能够高效地在一个计算节点到数千个计算节点之间伸缩计算,目前包含Spark原生的ClusterManager、ApacheMesos和HadoopYARN。

Executor

Application运行在WorkerNode上的一个过程,作为工作节点负责运行Task工作,并且负责将数据存在内存或者磁盘上,每个 Application都有各自独立的一批Executor,工作间互相独立。

二、环境部署

1、Scala环境

安装包治理

[root@hop01 opt]# tar -zxvf scala-2.12.2.tgz[root@hop01 opt]# mv scala-2.12.2 scala2.12

配置变量

[root@hop01 opt]# vim /etc/profileexport SCALA_HOME=/opt/scala2.12export PATH=$PATH:$SCALA_HOME/bin[root@hop01 opt]# source /etc/profile

版本查看

[root@hop01 opt]# scala -version

Scala环境须要部署在Spark运行的相干服务节点上。

2、Spark根底环境

安装包治理

[root@hop01 opt]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz[root@hop01 opt]# mv spark-2.1.1-bin-hadoop2.7 spark2.1

配置变量

[root@hop01 opt]# vim /etc/profileexport SPARK_HOME=/opt/spark2.1export PATH=$PATH:$SPARK_HOME/bin[root@hop01 opt]# source /etc/profile

版本查看

[root@hop01 opt]# spark-shell

3、Spark集群配置

服务节点

[root@hop01 opt]# cd /opt/spark2.1/conf/[root@hop01 conf]# cp slaves.template slaves[root@hop01 conf]# vim slaveshop01hop02hop03

环境配置

[root@hop01 conf]# cp spark-env.sh.template spark-env.sh[root@hop01 conf]# vim spark-env.shexport JAVA_HOME=/opt/jdk1.8export SCALA_HOME=/opt/scala2.12export SPARK_MASTER_IP=hop01export SPARK_LOCAL_IP=装置节点IPexport SPARK_WORKER_MEMORY=1gexport HADOOP_CONF_DIR=/opt/hadoop2.7/etc/hadoop

留神SPARK_LOCAL_IP的配置。

4、Spark启动

依赖Hadoop相干环境,所以要先启动。

启动:/opt/spark2.1/sbin/start-all.sh进行:/opt/spark2.1/sbin/stop-all.sh

这里在主节点会启动两个过程:Master和Worker,其余节点只启动一个Worker过程。

5、拜访Spark集群

默认端口是:8080。

http://hop01:8080/

运行根底案例:

[root@hop01 spark2.1]# cd /opt/spark2.1/[root@hop01 spark2.1]# bin/spark-submit --class org.apache.spark.examples.SparkPi --master local examples/jars/spark-examples_2.11-2.1.1.jar运行后果:Pi is roughly 3.1455357276786384

三、开发案例

1、外围依赖

依赖Spark2.1.1版本:

<dependency>    <groupId>org.apache.spark</groupId>    <artifactId>spark-core_2.11</artifactId>    <version>2.1.1</version></dependency>

引入Scala编译插件:

<plugin>    <groupId>net.alchim31.maven</groupId>    <artifactId>scala-maven-plugin</artifactId>    <version>3.2.2</version>    <executions>        <execution>            <goals>                <goal>compile</goal>                <goal>testCompile</goal>            </goals>        </execution>    </executions></plugin>

2、案例代码开发

读取指定地位的文件,并输入文件内容单词统计后果。

@RestControllerpublic class WordWeb implements Serializable {    @GetMapping("/word/web")    public String getWeb (){        // 1、创立Spark的配置对象        SparkConf sparkConf = new SparkConf().setAppName("LocalCount")                                             .setMaster("local[*]");        // 2、创立SparkContext对象        JavaSparkContext sc = new JavaSparkContext(sparkConf);        sc.setLogLevel("WARN");        // 3、读取测试文件        JavaRDD lineRdd = sc.textFile("/var/spark/test/word.txt");        // 4、行内容进行切分        JavaRDD wordsRdd = lineRdd.flatMap(new FlatMapFunction() {            @Override            public Iterator call(Object obj) throws Exception {                String value = String.valueOf(obj);                String[] words = value.split(",");                return Arrays.asList(words).iterator();            }        });        // 5、切分的单词进行标注        JavaPairRDD wordAndOneRdd = wordsRdd.mapToPair(new PairFunction() {            @Override            public Tuple2 call(Object obj) throws Exception {                //将单词进行标记:                return new Tuple2(String.valueOf(obj), 1);            }        });        // 6、统计单词呈现次数        JavaPairRDD wordAndCountRdd = wordAndOneRdd.reduceByKey(new Function2() {            @Override            public Object call(Object obj1, Object obj2) throws Exception {                return Integer.parseInt(obj1.toString()) + Integer.parseInt(obj2.toString());            }        });        // 7、排序        JavaPairRDD sortedRdd = wordAndCountRdd.sortByKey();        List<Tuple2> finalResult = sortedRdd.collect();        // 8、后果打印        for (Tuple2 tuple2 : finalResult) {            System.out.println(tuple2._1 + " ===> " + tuple2._2);        }        // 9、保留统计后果        sortedRdd.saveAsTextFile("/var/spark/output");        sc.stop();        return "success" ;    }}

打包执行后果:

查看文件输入:

[root@hop01 output]# vim /var/spark/output/part-00000

四、源代码地址

GitHub·地址https://github.com/cicadasmile/big-data-parentGitEE·地址https://gitee.com/cicadasmile/big-data-parent

浏览标签

【Java根底】【设计模式】【构造与算法】【Linux零碎】【数据库】

【分布式架构】【微服务】【大数据组件】【SpringBoot进阶】【Spring&Boot根底】

【数据分析】【技术导图】【 职场】

技术系列

OLAP引擎:Druid组件进行数据统计分析

OLAP引擎:Presto组件跨数据源剖析

OLAP引擎:ClickHouse高性能列式查问