Spark
1、Spark起源
在MapReduce出现:写复杂的程序来实现并且不能实时处理且交互式处理慢的现状和伴着内存日渐实惠的情况下Spark就是成为产生对象。Spark的三种处理场景:批处理、交互式、实时处理。所以,在加利福尼亚大学伯克利分学校在2009年AMPLab开创了Spark。2010年开源发布,2013年项目被捐赠给Apache软件基金会。2014年Spark成为Apache的顶级项目并刷新数据排序世界记录。2017年发布Spark2.2.0,成为一个新的里程碑。
2、Spark架构
先介绍架构中各个组件:
ClusterManager:
在Standalone模式中即为Master(主节点),控制整个集群,控制Worker;在YARN模式中为资源管理器
Worker:
从节点,负责控制计算节点,启动Executer或Driver。在YARN模式中为NodeManager,负责计算节点的控制(提供场地)
Driver:
运行Application的main()函数并创建SparkContext
Executor:
执行器。在Workernode 上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组 Executors
SparkContext:
整个应用的上下文,控制应用的生命周期
RDD:
ResilientDistributed Datasets,Spark基本计算单元,一组RDD可形成执行的有向无环RDD Graph
DAG Scheduler:
根据作业(job)构建基于Stage的DAG,并提交Stage给TaskScheduler
TaskScheduler:
将任务(Tack)分发给Executor执行
SparkEnv:
线程级别的上下文,存储运行时的重要组件引用
再介绍架构:
Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。Master作为整个集群的控制器,负责整个集群的正常运行Worker相当于是计算节点,接受主节点命令与进行状态汇报。Executor负责任务执行。Client提交应用,Driver控制应用执行。
整体流程:Client发送一个请求给ClusterManager(Master)去启动一个Work,再由Work去某台机器上启一个Driver,Driver启动后向ClusterManager(Master)或者资源管理器申请资源,得到资源后首先创建SparkContext,之后生成RDD DAG(弹性的、分布式的、数据集。最小力度的数据的图)。再由DAGScheduler去生成Task的有向无关图。并提交给TaskScheduler,由TaskScheduler分配Task给Worker也就是不同的Slave节点,在Slave节点上启动Exector(一个运行环境,执行单元 )。再由Executor启动相应的Task或者Stage
3、Spark-sql练习
4、总结Hive和Spark对SQL的支持程度(支持T,不支持F)
其中的index,是按照正则字符串()的位置正则表达式解析函数:regexp_extract
语法: regexp_extract(string subject, string pattern, int index)
返回值: string
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。注意,在有些情况下要使用转义字符
举例:
hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 1) from dual;
the
hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) from dual;
bar
hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 0) from dual;
foothebar