hive on spark与sparkSQl共存

博客围绕使用spark脚本读写hive数据展开。介绍了版本依赖,包括hive 2.3.3、spark 2.1.0等。指出使用sparksql读写hive数据时,使用预编译包和非预编译包存在矛盾问题。最后给出解决方法,在hive运行节点用spark - without - hadoop包,yarn nodemanager节点用spark预编译包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

需要使用spark脚本读写hive数据
又需要让hive mr引擎使用spark,从而从kettle入口触发hive交互时hive能够用到spark性能

版本依赖

原生apache :

hive 2.3.3
spark 2.1.0
spark 2.1.0-without-hadoop
hadoop 2.6.5

问题所在

因为sparksql使用hive仓库需使用到完整的hive,hdfs依赖包,因此需要使用apache预编译好的hadoop整合包,否则无论在spark-shell环境还是spark-submit提交作业都会报出hive类异常之类的错误

Caused by: java.lang.IllegalArgumentException: Unable to instantiate SparkSession with Hive support
Unable to instantiate SparkSession with Hive support because Hive classes are not found

而使用预编译包,在hive中使用spark引擎的话,又会发生

java.lang.NoSuchFieldError: SPARK_RPC_SERVER_ADDRESS

的错误,这个时候需要非预编译hive的spark工程,相当矛盾。

解决方法

利用spark在driver运行节点classpath下获取相关jars的原理,在hive运行节点使用spark-without-hadoop包。而在yarn nodemanager节点使用spark预编译包,sparksql提交的脚本driver也运行于这几个节点。

节点名称节点功能使用部署包运行说明
master1主节点spark-2.1.0-bin-without-hadoop.tgz
hive-2.3.3.tar
yarn resourcemanager,hive
master2主节点备用spark-2.1.0-bin-without-hadoop.tgz
hive-2.3.3.tar
yarn resourcemanager,hive
slave1运算节点1spark-2.1.0-bin-hadoop2.6.tgzyarn nodemanager,
使用spark shell/submit
slave2运算节点2spark-2.1.0-bin-hadoop2.6.tgzyarn nodemanager,
使用spark shell/submit
slave3运算节点3spark-2.1.0-bin-hadoop2.6.tgzyarn nodemanager,
使用spark shell/submit
### 比较 Hive on SparkSparkSQL #### 区别 Hive on Spark 是一种允许 Hive 使用 Spark 作为其执行引擎的方式,而不是默认的 MapReduce 执行引擎。这种方式使得 Hive 可以利用 Spark 更高效的内存管理和并行处理机制来提升查询性能[^1]。 另一方面,SparkSQL 提供了一个更全面的数据处理框架,它不仅能够读取和写入 Hive 表,还可以支持多种其他数据源,并提供了丰富的 API 来操作结构化数据。此外,SparkSQL 还引入了自己的优化器 Catalyst,这有助于进一步提高查询效率[^2]。 #### 性能差异 当涉及到性能方面时,在大多数情况下,由于 Spark 的内存计算特性,无论是 Hive on Spark 或者纯 SparkSQL 查询都比传统的基于 MapReduce 的 Hive 查询要快得多。然而,两者之间的相对表现取决于具体的使用案例: - 对于简单的 SQL 查询,如果这些查询可以直接映射到 HiveQL 而不需要额外的功能,则 Hive on Spark 可能会显示出更好的兼容性和相似甚至稍好的性能。 - 当涉及复杂分析任务或需要更多高级功能(如窗口函数、UDF 用户定义函数等),则 SparkSQL 往往表现出更强的能力,因为它拥有更加灵活且强大的API集合以及内置的支持[^3]。 #### 应用场景 选择哪一个解决方案应该依据实际需求考虑如下因素: - **现有基础设施**:如果你已经有了成熟的 Hive 生态环境并且希望最小化迁移成本,那么可以选择 Hive on Spark;反之,如果没有特别的历史包袱或者正在构建新的应用,则可以优先考虑 SparkSQL[^4]。 - **查询复杂度**:对于较为复杂的ETL流程或是数据分析工作负载来说,SparkSQL 凭借着更为先进的特性和更高的灵活性通常是更好的选项。 - **社区和支持**:考虑到长期维护和技术演进的角度出发,Apache Spark 社区非常活跃,这意味着 SparkSQL 将持续获得改进和发展,相比之下,虽然 Hive on Spark 同样得到了一定关注,但在某些特定领域内可能不如前者那样具有优势。 ```sql -- 示例 Hive on Spark 查询语句 SELECT * FROM table_name WHERE condition; -- 示例 SparkSQL 查询语句 spark.sql("SELECT * FROM table_name WHERE condition") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值