[spark]spark/hive配置metastore为postgresql

SparkSQL配置PostgreSQL作为Metastore
本文介绍如何将SparkSQL使用的Hive Metastore从默认的Derby更换为PostgreSQL,包括创建用户和数据库、配置hive-site.xml、导入表等步骤。

看文档可以知道,Spark SQL复用了hive的sql解析器/metastore管理。而hive的默认的metastore为derby,它有两个弊端:

1.metastore一次仅允许一个客户端连接

2.每个客户端进行sql操作时,都会在本进程所在的文件夹内新建metastore

所以,在产品的开发中,至少应该将metastore配为postgresql的

步骤如下:

1.在postgresql中新建一个用户nsc,并为它新建一个数据库metastore;并允许远程访问

2.新建/home/pijing/spark/conf/hive-site.xml文件,配置如下:

3.我用的spark版本为1.3.0,它所用的hive版本为0.12.0;所以下载一个hive的包,在它的: scripts\metastore\upgrade\postgres目录下,找到hive-schema-0.12.0.postgres.sql

运行命令:

psql –U nsc metastore<c:\hive\scripts\metastore\upgrade\postgres\hive-schema-0.12.0.postgres.sql

将表导入pg的metastore库中。

4.接着,再运行/home/pijing/spark/sbin/start-thriftserver.sh即可


经过以上步骤,metastore就被配置为了postgresql中的metastore数据库。



配置 Spark SQL 与 Hive 集成时,需要确保 Spark 能够正确读取 Hive 的元数据、执行 HiveQL 查询,并在必要时将数据写入 Hive 表。以下是主要的配置参数及其说明。 ### 配置步骤与参数 #### 1. 配置 Hive 元数据存储 Spark SQL 通过 Hive 的元数据(Metastore)访问 Hive 表结构信息。需要在 `spark-defaults.conf` 或提交任务时通过 `--conf` 指定以下参数: - `spark.sql.catalogImplementation=hive` 指定使用 Hive Metastore 来管理表元数据。 - `spark.sql.hive.metastore.uris=thrift://<host>:<port>` 设置 Hive Metastore 的 Thrift 服务地址。例如:`thrift://localhost:9083`[^1]。 - `spark.sql.hive.metastore.jars` 指定 Hive Metastore 的 JAR 包路径。可以是本地路径,也可以是 Maven 依赖。例如: ``` spark.sql.hive.metastore.jars=lib/*,mysql-connector-java-8.0.28.jar ``` 其中 `mysql-connector-java` 是 Hive Metastore 使用 MySQL 作为元数据库时所需的驱动[^2]。 #### 2. 配置 Hive 兼容性 Spark SQL 支持与不同版本的 Hive 兼容,需指定兼容版本: - `spark.sql.hive.version=1.2.1` 指定 Spark 使用的 Hive 版本,确保与 Hive Metastore 的兼容性。例如 1.2.1 或 3.1.2 等[^2]。 #### 3. 配置 Hive 执行引擎为 Spark Hive 可以使用 Spark 作为底层执行引擎,需在 `hive-site.xml` 中添加以下配置: - `hive.execution.engine=spark` 启用 Spark 作为 Hive 的执行引擎。 - `spark.home=/path/to/spark` 指定 Spark 安装目录。 - `hive.spark.client.server.address=spark-master-host` 设置 Spark Master 地址。 - `hive.spark.client.port=7077` 设置 Spark Master 的端口。 #### 4. 配置 Spark 提交模式 在提交 Spark 任务时,建议使用以下配置以确保 Hive 表访问的稳定性: - `--master yarn` 使用 YARN 作为集群管理器。 - `--deploy-mode cluster` 在 YARN 集群模式下运行任务。 - `--conf spark.sql.warehouse.dir=hdfs://<path>` 设置 Spark SQL 的默认仓库路径,与 Hive 的 `hive.metastore.warehouse.dir` 一致[^4]。 #### 5. 示例配置文件 以下是一个完整的 `spark-defaults.conf` 示例: ```properties spark.sql.catalogImplementation hive spark.sql.hive.metastore.uris thrift://hive-metastore-host:9083 spark.sql.hive.version 3.1.2 spark.sql.hive.metastore.jars /opt/hive/lib/*,/opt/spark/jars/mysql-connector-java-8.0.28.jar spark.sql.warehouse.dir hdfs://namenode:8020/user/hive/warehouse ``` #### 6. 示例 Spark 提交命令 ```bash spark-submit \ --master yarn \ --deploy-mode cluster \ --conf spark.sql.catalogImplementation=hive \ --conf spark.sql.hive.metastore.uris=thrift://hive-metastore-host:9083 \ --conf spark.sql.warehouse.dir=hdfs://namenode:8020/user/hive/warehouse \ --jars /opt/spark/jars/mysql-connector-java-8.0.28.jar \ your_spark_application.jar ``` #### 7. 注意事项 - **Hive Metastore 服务必须运行正常**,否则 Spark 将无法读取 Hive 表结构。 - **JDBC 驱动必须正确配置**,尤其是 Hive 使用 MySQL 或 PostgreSQL 作为元数据库时。 - **版本兼容性**:确保 SparkHive 的版本兼容,参考官方文档中的版本对照表[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值