大数据计算引擎的发展
HDFS 是大数据常用分布式存储,
Hive 提供 HiveQL,不存储业务数据,数据存放于 HDFS
第一代计算引擎:MapReduce:用廉价机器实现分布式大数据处理
第二代计算引擎:Tez:基于MR优化了DAG,性能比MR快一些
第三代计算引擎:Spark:优先使用内存式计算引擎 ,国内目前主要应用的离线计算引擎
第四代计算引擎:Flink:实时流式计算引擎 , 国内目前最主流实时计算引擎
计算引擎:你的车的发动机 、计算机中的 CPU
Spark简介 [火花]
定义:基于内存式计算的分布式的统一化的数据分析引擎。
发展历程
2009年,Spark诞生于伯克利AMPLab,伯克利大学的研究性项目。
2014年2月成为Apache顶级项目,同年5月发布Spark 1.0正式版本
2018年Spark2.4.0发布,成为全球最大的开源项目,目前是Apache中的顶级项目之一。
2020年6月Spark发布3.0.0正式版,目前学习的就是3.x
DataBricks官网:https://databricks.com/spark/about
spark的诞生其实是因为MR计算引擎太慢了。
MR计算是基于磁盘的,Spark计算是基于内存的。
Spark能做什么
实现离线数据批处理:类似MapReduce、Pandas,写代码做处理:代码类的离线数据处理
实现交互式即时数据查询:类似于Hive、Presto、Impala,使 用SQL做即席查询分析:SQL类的离线数据处理
实现实时数据处理:类似于Storm、Flink实现分布式的实时计算:代码类实时计算或者SQL类的实时计算
实现机器学习的开发:代替传统一些机器学习工具
Spark有哪些部分组成?
Hadoop的组成部分:common、MapReduce、Hdfs、Yarn
Spark Core:Spark最核心的模块,可以基于多种语言实现代码类的离线开发 【类似于MR】
Spark SQL:类似于Hive,基于SQL进行开发,SQL会转换为SparkCore离线程序 【类似Hive】
Struct Streaming:基于SparkSQL之上构建了结构化实时计算模块
Spark ML lib:机器学习算法库,提供各种机器学习算法工具,可以基于SparkCore或者SparkSQL实现开发。
Spark 为什么要 on Hive?
Hive 的优势是:可以存储数据 (创建一个表,把数据存储到表中)
Spark 的优势: 基于内存的计算引擎,sql 速度特别快
Spark On Hive !
Spark的安装和部署
下载安装包
我们使用的是Hive3.1.3版本,安装Spark3.5.9
国内镜像(下载速度快,生产首选)
- 清华 TUNA 镜像 Index of /apache/spark
- 阿里镜像 apache-spark安装包下载-开源镜像站-阿里云
标准完整版,预打包 Hadoop3 客户端 jar,包含 spark-shell、spark-sql、pyspark、SparkR,可直接对接 HDFS/YARN/Hive。解压后就是完整 Spark 集群部署包,绝大多数生产环境选这个
上传、解压、重命名
tar -zxf spark-3.5.9-bin-hadoop3.tgz -C /opt/installscd /opt/installs mv spark-3.5.9-bin-hadoop3/ spark3.5.9配置环境变量
vim /etc/profile.d/myenv.shexport SPARK_HOME=/opt/installs/spark3.5.9 export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbinsource /etc/profile测试安装成功
Spark Python Shell 是一个交互工具,可以启动spark中的交互工具,里面可以写代码
pyspark --master local[2]退出测试
exit()Spark On Hive 模式
Hive中可以使用Beeline或者Dbeaver连接HiveServer2进行测试,那SparkSQL中如何实现?
ThriftServer
- 功能:类似于HiveServer2,负责解析客户端提交的SQL语句,转换成Spark的任务进行执行
- 本质:Spark中的一个特殊的程序,利用程序的资源运行所有SQL,该程序除非手动关闭,否则一直运行
在hive的hive-site.xml添加如下配置
vim hive-site.xml<property> <name>hive.metastore.schema.verification</name> <value>false</value> </property>将hive-site.xml 复制到 spark的conf 下
cp /opt/installs/hive3.1.3/conf/hive-site.xml /opt/installs/spark3.5.9/conf修改spark下的hive-site.xml,将之前的 10000 端口,修改为 10001 端口
cd /opt/installs/spark3.5.9/confvim hive-site.xml<property> <name>hive.server2.thrift.port</name> <value>10001</value> </property>新增环境变量
vim /etc/profile.d/myenv.shexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoopsource /etc/profile记得每次先启动 metastore 服务!!!然后在启动thrift服务
start-stop.sh
hive-server-manager.sh stop
start-all.sh
hive-server-manager.sh start
停止spark服务
/opt/installs/spark3.5.9/sbin/stop-thriftserver.sh启动spark服务
/opt/installs/spark3.5.9/sbin/start-thriftserver.sh \ --hiveconf hive.server2.thrift.port=10001 \ --hiveconf hive.server2.thrift.bind.host=bigdata001 \ --master yarn \ --conf spark.sql.shuffle.partitions=2可查看到如下进程,该服务不会停止,一直在后台启动,假如启动不了,记得查看日志。
当我们把 thrift 服务已停止,这些都瞬间消失了。
连接测试
编写一个远程服务脚本
在/usr/local/bin 下创建一个脚本:spark-server-manager.sh
#!/bin/bash # 使用方式: spark-server-manager.sh [start|stop|] help_info() { echo "参数异常,请重新输入" exit -1 } # 获取操作命令 op=$1 # 检查参数是否正确 if [ ! $op ]; then help_info elif [ $op != "start" -a $op != "stop" ]; then help_info fi # 开启服务 start_thrift() { /opt/installs/spark3.5.9/sbin/start-thriftserver.sh \ --hiveconf hive.server2.thrift.port=10001 \ --hiveconf hive.server2.thrift.bind.host=bigdata001 \ --master yarn \ --conf spark.sql.shuffle.partitions=2 } # 停止服务 stop_thrift() { sh /opt/installs/spark3.5.9/sbin/stop-thriftserver.sh } # 控制操作 ${op}_thriftchmod 777 spark-server-manager.sh
spark-server-manager.sh start
spark-server-manager.sh stop