赶集的网站怎么做,温州专业营销网站费用,微信营销软件,胖哥网站的建设目标文章目录 集成hive metastoreSQL测试spark-sql 语法SQL执行流程两种数仓架构的选择hive on spark数仓配置经验 spark-sql没有元数据管理功能#xff0c;只有sql 到RDD的解释翻译功能#xff0c;所以需要和hive的metastore服务集成在一起使用。
集成hive metastore
在spark安… 文章目录 集成hive metastoreSQL测试spark-sql 语法SQL执行流程两种数仓架构的选择hive on spark数仓配置经验 spark-sql没有元数据管理功能只有sql 到RDD的解释翻译功能所以需要和hive的metastore服务集成在一起使用。
集成hive metastore
在spark安装目录conf下新增hive-site.xml配置文件内容如下
configuration!-- 指定存储元数据metastore要连接的地址 --propertynamehive.metastore.uris/namevaluethrift://127.0.0.1:9083/valuedescriptionURI for client to connect to metastore server/description/property!--配置数据表数据存储目录--propertynamehive.metastore.warehouse.dir/namevalue/home/datahouse/hive/warehouse/value/property
/configuration然后就是要保证hive hadoop的数仓已能正常运行。因为spark需要使用hive的metastore服务所以hive的相关服务得正常运行。可以参考 【数据仓库】hive hadoop数仓搭建实践文章。
集成完成后就可以开始启动spark-sql了。
SQL测试
到spark 的bin目录执行
./spark-sql如下
[rootyd-ss bin]# ./spark-sql
24/12/27 14:49:53 WARN Utils: Your hostname, yd-ss resolves to a loopback address: 127.0.0.1; using XX.XX.XX.XX instead (on interface bond0)
24/12/27 14:49:53 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Sparks default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to WARN.
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
24/12/27 14:49:54 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Spark master: local[*], Application Id: local-1735282198034
spark-sql 执行如下脚本
show database;输出
spark-sql show databases;
db_msg
default
test
Time taken: 6.644 seconds, Fetched 3 row(s)可以看到之前在hivehadoop数仓下建的库都可以通过spark-sql 查出来了因为两者共用了一个metastore服务元数据是一样的数仓地址也是一样的。
spark-sql 语法
由于spark-sql 使用的元数据管理是hive的元数据服务所以spark-sql的语法可以理解为和hive SQL是一样的。
SQL执行流程 上图是hive sql 和 spark sql的执行流程图及框架图。可以看出
1 hive 偏重的是 hive sql 解释 和 元数据管理分布式计算和存储依赖于hadoop的MR和HDFS;
2 spark 偏重的是spark sql 解释 和 RDD分布式计算元数据管理和分布式存储依赖于hive 的 metastore服务和hadoop的HDFS
3 提供两种数仓数据分析工具 hive sql 和 spark sql都可以使用数据库客户端工具去连接访问。
两种数仓架构的选择
上图体现了两种数仓的架构。
hive hadoop 数仓分布式计算使用MR性能计算很慢在BI数据集配置时经常会超时
spark hive (metastore) hadoop(HDFS)数仓分布式计算使用spark RDD ,性能计算快但还要维护hive 架构较复杂
如果基于hive hadoop 数仓将MR分布式计算框架换成 Spark RDD的计算框架是不是就很完美了强强联合。
hive on spark数仓配置
hive sql 会被解释为Spark RDD 计算执行。
一开始也是怀着激动的心来的因为hive on MR 实在是太慢了spark又非常快两者强强联合岂不是最佳实践。网上也搜到了很多教程但都是对于hive的低版本的。但是现实却发生了变化。
在进行该配置之前需要了解下hive和spark的匹配关系。
hive 4.0 版本的源码pom中已经看不到引用的spark版本了有可能在4.0版本放弃了spark的支持。
经过查找4.0版本的官方文档可以看到
https://hive.apache.org/docs/latest/overview-of-major-changes_283118379/ 可以看到直接就是移除了spark还不是废弃。最新的版本hive4.0已经不支持spark集成了。这也是为什么在hive sql 会话下执行
set hive.execution.enginespark;会报错
[42000][1] Error while processing statement: SET hive.execution.enginespark FAILED in validation : Invalid value.. expects one of [mr, tez].如果想继续使用hive on spark 架构就只能使用hive 4.0 以前的版本了。
在hive4.0之前的版本hive3.1.3中依赖的spark 版本为2.3.0太旧了。
但是可以尝试基于hive3.1.3的源码修改saprk的版本为新版本重新编译。这里不再往下探究。
毕竟hive4.0 已经移除了spark数仓搭建技术还是以hive为主因为它稳定。官方提供了Tez的执行引擎替代MR。也能提高hive的执行效率。
经验
1 hive 4.0移除了saprk支持只能使用MR和Tez,意味着往后版本hive on spark就不存在了若想使用需要将hive换到4,0以前的版本
2 spark on hive可以继续使用但这个是以spark为主利用hive的元数据服务但总是感觉没有hive专业
3 hive4.0往后当数仓使用需要集成TEz引擎以提升效率。