spark笔记
spark简介
saprk 有六个核心组件:
SparkCore、SparkSQL、SparkStreaming、StructedStreaming、MLlib,Graphx
SparkCore
相当于Hadoop中的MapReduce,用于大规模离线批处理计算
SparkSQL
相当于Hive(稍微类似),用于交互式计算
注意:
1.交互式计算:用户界面中的查询条件进行过滤查询,然后交给SparkSQL进行处理,产生输出数据。速度比较快
2.交互式计算框架:Presto、Impala、Kylin、Druid等
SparkStreaming
相当于storm,用于实时流式计算。(准实时)
实时流式计算
1.实时:处理速度快,秒级别或毫秒级别
2.流式:处理数据比较少,但是是持续不断的,作业job不能停止。
StructedStreaming
类似SparkStreaming,不同点在于StructedStreaming基于SparkSQL,而SparkStreaming基于SpringCore。
Mllib
类似scikit-learning,Hadoop中的Mahout,用于分布式的机器学习算法
Graphx
用于图计算,主要适用于神经网络,图遍历之类的场景。
spark基本概念
application
应用程序,可以有多个job
job
一个作业,可以有多个stage阶段
stage
一个阶段,可以有多个task任务
task
一个任务,执行逻辑计算
clustermanager
集群管理器,譬如yarn、mesos、k8s、standalone等。
1.master
主节点,比如Yarn中的ResourceManager(RM)
2.worker
从节点,比如Yarn中的NodeManager(NM)
executor
1.执行器,一个运行某个stage中的各个task的进程。类似Yarn中的Container。
2.Yarn中的Container运行的一个task,task运行后就杀死进程。executor运行一个stage钟的所有taskset,整个stage阶段完成后就杀死进程。executor中有个线程池,每个线程运行一个task
driver
1.驱动器,有一部分功能类似于Yarn中的ApplicationMaster。
2.Driver功能:
a)将一个job中的各个 RDD串联起来,成为一个DAG(有向无环图)调度图
b)将DAG图拆分成各个Stage阶段(DAGScheduler)
c)类似于ApplicationMaster,任务申请与调度。(TaskScheduler)
spark分布式环境
配置
修改conf目录下的slaves、spark-default.conf、spark-env.sh
slaves:
slave1、slave2
spark-default.conf
spark.master spark://master:7077 (没有Ip映射写主机ip地址)
spark-env.sh
JAVA_HOME=xxxx (本机jdk目录)
启动
sbin/start-all.sh
访问
<master主机名/ip>:8080
说明
端口号:
7077:master rpc端口号
8080:master http端口号
注:rpc(remote process call)远程过程调用
启动流程
【start-all.sh】-> 加载【spark-config.sh】->调用
【start-master.sh】及【start-slaves.sh】->加载【spark-config.sh】及【load-spark-env.sh】->调用【spark-daemon.sh】->调用【spark-class.sh】或(【spark-submit.sh】->【spark-class.sh】)
运行模式
local、local-cluster、standalone、yarn、mesos
注:https://www.iteblog.com/archives/1223.html (yarn-client与yarn-cluster区别)
入门实例
单词统计
sc.textFile("/home/hduser/app/spark/README.md").flatMap(line=>line.split(" ")).map(word => (word,1)).reduceByKey((x,y) => x+y).collect()
RDD 概念
RDD:弹性分布式数据集,spark的第一个数据结构。只读的。
RDD特性
a)RDD是各个分区的集合,包含多个分区Partition
b)RDD的分区使用多种算子操作进行计算
c)RDD之间存在依赖关系
根据是否经过shuffle流程拆分成窄依赖和宽依赖
d)<k,v>形式的RDD需要重新分区,可指定分区器Partitioner,默认是HashPartitioner
单值形式的RDD中的分区数,依赖于父RDD中的分区数
e)数据本地性(RDD中的分区优先加载本地的数据)
创建RDD
集合并行化
val list = List(1,2,3,4,5)
val rdd = sc.parallelize(list)
rdd.collect
读取外部数据源
val rdd = sc.textFile(README.md)
rdd.collect
算子操作
rdd算子根据生成的数据类型分成transformation(转换)和action(动作)
tarnsformation
从RDD转换为另一个RDD
ation
将RDD中的数据进行输出
简单案例
开发工具
IDEA + maven
Manven简介
功能
maven:自动化构建工具
1.依赖包管理
2.自动构建(编译->测试->打包->安装->发布->运行)
安装配置
配置conf/setttings.xml
<!—本地仓库位置-->
<localRepository>D:/repository</localRepository>
<!—配置中央仓库与远程仓库的镜像,主要原因是仓库访问比较慢,使用镜像快 mirrorOf如果是*,这个镜像是所有中央仓库和远程仓库的镜像;
mirrorOf如果是central,只是中央仓库的镜像
-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
配置环境变量
【计算机】->【高级系统设置】->【高级】->【环境变量】
MAVEN_HOME=D:apache-maven
path=xxx;%MAVEN_HOME%in
测试
命令行中执行 mvn –v
正确显示
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: C:Program Filesapache-maven-3.6.0in..
Java version: 12, vendor: Oracle Corporation, runtime: C:Program FilesJavajdk-12
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"