【问题标题】:Set partition location in Qubole metastore using Spark使用 Spark 在 Qubole Metastore 中设置分区位置
【发布时间】:2018-09-21 08:01:07
【问题描述】:

如何在 Qubole Metastore 中为我的 Hive 表设置分区位置? 我知道这是 MySQL DB,但是如何访问它并使用 Spark 传递带有修复程序的 SQL 脚本?

UPD:问题在于 ALTER TABLE table_name [PARTITION (partition_spec)] SET LOCATION 对 >1000 个分区工作缓慢。你知道如何直接为 Qubole 更新 Metastore 吗?我想将位置批量传递给 Metastore 以提高性能。

【问题讨论】:

    标签: apache-spark hadoop hive qubole


    【解决方案1】:

    如果尚未设置,请在 Spark 配置中设置 Hive 元存储 uri。这可以在 Qubole 集群设置中完成。

    使用一些属性设置 SparkSession

    val spark: SparkSession =
        SparkSession
            .builder()
            .enableHiveSupport()
            .config("hive.exec.dynamic.partition", "true")
            .config("hive.exec.dynamic.partition.mode", "nonstrict")
            .getOrCreate()
    

    假设 AWS,使用 spark.sql 在 S3 上定义一个外部表

    CREATE EXTERNAL TABLE foo (...) PARTITIONED BY (...) LOCATION 's3a://bucket/path'
    

    根据该表架构生成您的数据框。

    为数据框注册一个临时表。我们就叫它tempTable

    对您的分区运行插入命令,再次使用spark.sql

    INSERT OVERWRITE TABLE foo PARTITION(part1, part2)
    SELECT x, y, z, part1, part2 from tempTable
    

    分区必须排在最后

    分区位置将放置在 S3 中的表位置内。

    如果您想使用外部分区,请查看 ALTER TABLE [PARTITION (spec)] 上接受 LOCATION 路径的 Hive 文档

    【讨论】:

    • 乔丹,这会覆盖数据。问题是 ALTER TABLE table_name [PARTITION (partition_spec)] SET LOCATION 对于 >1000 个分区工作缓慢。你知道如何直接为 Qubole 更新 Metastore 吗?我想将位置批量传递给 Metastore 以提高性能。
    • 如果您不想擦除任何数据,请删除 OVERWRITE。我个人不使用 Qubole 中的元存储。我只使用自安装的 RDS 数据库,例如在 AWS 中。它只是某个地方的云托管实例......因此,打开一个 ODBC/JDBC 端口,然后将必要的 INSERT 语句写入 Hive 元存储。我不知道您使用的是什么数据库,因此查询会因此而有所不同。
    猜你喜欢
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2013-10-22
    相关资源
    最近更新 更多