使用Spark

时间:2018-04-11 12:20:35

标签: apache-spark hadoop hive qubole

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

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

1 个答案:

答案 0 :(得分:0)

如果尚未设置,请在Spark配置中设置Hive Metastore uris。这可以在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命令
INSERT OVERWRITE TABLE foo PARTITION(part1, part2)
SELECT x, y, z, part1, part2 from tempTable

分区必须在选择中排在最后

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

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