当前位置:网站首页>实时计算框架:Spark集群搭建与入门案例
实时计算框架:Spark集群搭建与入门案例
2022-06-24 00:33:00 【知了一笑】
一、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环境
安装包管理
[[email protected] opt]# tar -zxvf scala-2.12.2.tgz
[[email protected] opt]# mv scala-2.12.2 scala2.12
配置变量
[ro[email protected] opt]# vim /etc/profile
export SCALA_HOME=/opt/scala2.12
export PATH=$PATH:$SCALA_HOME/bin
[[email protected] opt]# source /etc/profile
版本查看
[[email protected] opt]# scala -version
Scala环境需要部署在Spark运行的相关服务节点上。
2、Spark基础环境
安装包管理
[[email protected] opt]# tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz
[[email protected] opt]# mv spark-2.1.1-bin-hadoop2.7 spark2.1
配置变量
[[email protected] opt]# vim /etc/profile
export SPARK_HOME=/opt/spark2.1
export PATH=$PATH:$SPARK_HOME/bin
[[email protected] opt]# source /etc/profile
版本查看
[[email protected] opt]# spark-shell

3、Spark集群配置
服务节点
[[email protected] opt]# cd /opt/spark2.1/conf/
[[email protected] conf]# cp slaves.template slaves
[[email protected] conf]# vim slaves
hop01
hop02
hop03
环境配置
[[email protected] conf]# cp spark-env.sh.template spark-env.sh
[[email protected] conf]# vim spark-env.sh
export JAVA_HOME=/opt/jdk1.8
export SCALA_HOME=/opt/scala2.12
export SPARK_MASTER_IP=hop01
export SPARK_LOCAL_IP=安装节点IP
export SPARK_WORKER_MEMORY=1g
export 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/

运行基础案例:
[[email protected] spark2.1]# cd /opt/spark2.1/
[[email protected] 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、案例代码开发
读取指定位置的文件,并输出文件内容单词统计结果。
@RestController
public 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" ;
}
}
打包执行结果:

查看文件输出:
[[email protected] output]# vim /var/spark/output/part-00000
四、源代码地址
GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent

阅读标签
【Java基础】【设计模式】【结构与算法】【Linux系统】【数据库】
【分布式架构】【微服务】【大数据组件】【SpringBoot进阶】【Spring&Boot基础】
技术系列
边栏推荐
- 【ICPR 2021】遥感图中的密集小目标检测:Tiny Object Detection in Aerial Images
- Security | warm tips: security incidents on the cloud have intensified recently. Please do a good job in backup monitoring of cloud security protection!
- Android 3年外包工面试笔记,有机会还是要去大厂学习提升,android开发实习面试题
- 【osg】OSG开发(04)—创建多个场景视图
- Jeecgboot old version 2 x 3. X how to integrate building block reports?
- 使用worker报错:Uncaught DOMException: Failed to construct ‘Worker’: Script at***
- 股票网上开户安全吗?需要满足什么条件?
- [Hongke case] how can 3D data become operable information Object detection and tracking
- C language: sorting with custom functions
- Mip-NeRF:抗混叠的多尺度神经辐射场ICCV2021
猜你喜欢

抖音实战~手机号密码一键注册登录流程(限制手机终端登录)

使用递归形成多级目录树结构,附带可能是全网最详细注释。

Andorid 开发艺术探索笔记(2),跨平台小程序开发框架

Superscalar processor design yaoyongbin Chapter 3 virtual memory -- Excerpt from subsection 3.1~3.2

Windows10 security mode entry cycle blue screen repair

Mip-NeRF:抗混叠的多尺度神经辐射场ICCV2021

Usage of go in SQL Server

数据管理:业务数据清洗,落地实现方案
![[image detection saliency map] calculation of fish eye saliency map based on MATLAB distortion prompt [including Matlab source code 1903]](/img/36/134c573c2198ca6c88a7c179189f1a.jpg)
[image detection saliency map] calculation of fish eye saliency map based on MATLAB distortion prompt [including Matlab source code 1903]

C language: structure array implementation to find the lowest student record
随机推荐
setfacl命令的基本用法
毕业设计-论文写作笔记【毕设题目类型、论文写作细节、毕设资料】
Social recruitment interview is indispensable -- 1000 interview questions for Android engineers from Internet companies
抓取开机logcat
C language: how to solve the problem of hundreds of horses and loads
What is the difference between overload and override?
规律/原理/规则/法则/定理/公理/本质/定律
钟珊珊:被爆锤后的工程师会起飞|OneFlow U
Android 7,2021最新Android面试笔试题目分享
Do280openshift access control -- manage projects and accounts
Android 72021 latest Android interview written test questions sharing
9次Android面试经验总结,已收字节,阿里,高级android面试答案
C语言:递归实现N的阶乘
numpy.linalg.lstsq(a,b,rcond=-1)解析
阿里巴巴面试题:多线程相关
杂乱的知识点
[technique of planting grass] spit blood and clean up, and take you to collect goose feathers in a fancy way! Do not spread!!!
【CVPR 2020】会议版本:A Physics-based Noise Formation Model for Extreme Low-light Raw Denoising
股票网上开户安全吗?需要满足什么条件?
[applet] realize the effect of double column commodities