hadoop使用spark在qubole元存储中设置分区位置

ttcibm8c  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(244)

如何在qubole metastore中为我的配置单元表设置分区位置?我知道这是mysql数据库,但是如何访问它并使用spark传递带有修复的sql脚本呢?
upd:问题是alter table table\u name[partition(partition\u spec)]set location对于大于1000个分区工作缓慢。你知道如何直接为qubole更新metastore吗?我希望将批处理中的位置传递给metastore以提高性能。

23c0lvtd

23c0lvtd1#

如果尚未设置,请在spark配置中设置配置单元元存储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 ```
CREATE EXTERNAL TABLE foo (...) PARTITIONED BY (...) LOCATION 's3a://bucket/path'

根据表模式生成Dataframe。
为Dataframe注册临时表。我们就叫它吧 `tempTable` 对分区运行insert命令,再次使用 `spark.sql` ```
INSERT OVERWRITE TABLE foo PARTITION(part1, part2)
SELECT x, y, z, part1, part2 from tempTable

分区必须排在选择的最后
分区位置将放在s3中的表位置中。
如果要使用外部分区,请查看上的配置单元文档 ALTER TABLE [PARTITION (spec)] 接受一个 LOCATION 路径

相关问题