HDP 2.6.5(Spark 2.3.0)下使用HWC读取ACID Hive表方法咨询
使用Hive Warehouse Connector(HWC)读取ACID Hive表的步骤及版本支持说明
我来帮你梳理清楚使用HWC读取ACID Hive表的具体操作步骤,以及你关心的版本支持问题:
一、使用HWC读取ACID Hive表的详细步骤
1. 先搞定环境准备
- 首先确保你的Spark集群已经集成了HWC:如果是HDP环境,通常默认会配置好HWC的jar包;如果是手动部署,得把对应版本的
hive-warehouse-connector-assembly-<version>.jar放到Spark的classpath里,比如启动Spark时通过--jars参数指定,或者在spark-defaults.conf中配置spark.jars参数。 - 确认Hive Metastore服务正常运行,而且你的ACID表是ORC格式——HWC只支持ORC格式的ACID表哦。
2. 配置Spark会话
启动Spark应用时需要添加专属配置来启用HWC,这里给你两种方式:
方式一:通过命令行参数启动spark-shell
spark-shell \ --master yarn \ --deploy-mode client \ --jars /path/to/hive-warehouse-connector-assembly-<version>.jar \ --conf spark.sql.hive.hwc.execution.mode=spark \ --conf spark.datasource.hive.warehouse.load.staging.dir=/tmp/hwc-staging \ --conf spark.sql.extensions=com.hortonworks.spark.sql.hive.HiveWarehouseSessionExtension
方式二:在代码中配置SparkSession(以Scala为例)
import com.hortonworks.hwc.HiveWarehouseSession import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .appName("Read Hive ACID Table via HWC") .config("spark.sql.hive.hwc.execution.mode", "spark") .config("spark.datasource.hive.warehouse.load.staging.dir", "/tmp/hwc-staging") .config("spark.sql.extensions", "com.hortonworks.spark.sql.hive.HiveWarehouseSessionExtension") .enableHiveSupport() .getOrCreate() // 创建HWC会话实例 val hive = HiveWarehouseSession.session(spark).build()
3. 读取ACID表数据
这里有两种常用的读取方式,任选其一即可:
方式一:使用HWC的API执行SQL查询
// 执行查询并读取结果为DataFrame val acidTableDF = hive.executeQuery("SELECT * FROM your_acid_db.your_acid_table").read() // 查看数据 acidTableDF.show()
方式二:使用Spark DataSource API加载表
val acidTableDF = spark.read .format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector") .option("database", "your_acid_db") .option("table", "your_acid_table") .load() acidTableDF.show()
4. 一些关键注意事项
- 一定要保证HWC版本和你的HDP/Hive版本兼容,比如HDP 3.x对应HWC 1.x系列,版本不匹配容易出各种问题。
- 读取ACID表不需要强制开启Hive LLAP服务,但如果想提升查询性能,可以配置LLAP相关参数。
- 千万别用Spark原生的Hive数据源去读ACID表,肯定会报错的,必须用HWC才行。
二、HWC是否仅支持HDP 3版本?
答案是否定的,HWC的版本和Hortonworks的不同发行版是对应的:
- HDP 2.x:有早期的HWC版本(比如0.x系列),不过功能受限,只能支持部分ACID表的读取操作,稳定性也不如HDP 3.x的版本。
- HDP 3.x:这是HWC功能最完善的适配版本(对应HWC 1.x系列),支持ACID表的读写、事务操作等完整功能,也是官方推荐使用的版本。
- CDP(Cloudera Data Platform):后续HWC被整合到CDP中,不同的CDP版本也有对应的适配HWC版本,还支持更多新特性。
简单来说,HDP 3是HWC体验最好的版本,但不是唯一支持的版本,HDP 2.x也能用上早期版本,只是功能和稳定性稍弱。
内容的提问来源于stack exchange,提问作者varadharaj
相关产品推荐
相关产品推荐

