Hive以EMR集群的方式处理OSS-HDFS服务中的数据

本文介绍Hive如何以EMR集群的方式处理OSS-HDFS服务中的数据。

前提条件

操作步骤

  1. 登录EMR集群。

    1. 登录EMR on ECS控制台

    2. 单击创建的EMR集群。

    3. 单击节点管理页签,然后单击节点组左侧的+

    4. 单击ECS ID。在ECS实例页面,单击实例ID右侧的远程连接

    如果您希望使用SSH方式(SSH密钥对或SSH密码)在Windows和Linux环境中登录集群,请参见登录集群

  2. 通过OSS-HDFS服务存储数据。
    创建数据库和表时,您可以通过以下两种方式指定OSS-HDFS服务路径,将数据库或表的数据保存到OSS-HDFS服务中。
    • 方式一:在命令示例中指定OSS-HDFS服务路径
      • 创建数据库时指定OSS-HDFS服务路径
        CREATE DATABASE db_on_oss1 LOCATION 'oss://bucket_name.endpoint_name/path/to/db1';
      • 创建表时指定OSS-HDFS服务路径
        CREATE TABLE db2.table_on_oss ... LOCATION 'oss://bucket_name.endpoint_name/path/to/db2/tablepath';
    • 方式二:在配置文件中指定OSS-HDFS服务路径

      您可以在Hive Metastore的hive-site.xml配置文件中设置hive.metastore.warehouse.dir到OSS-HDFS服务路径,然后重启Hive Metastore,后续创建的数据库和数据库下的表均默认存储于OSS-HDFS服务路径中。

      配置示例如下:

      <configuration>
      
          <property>
              <name>hive.metastore.warehouse.dir</name>
              <value>oss://bucket_name.endpoint_name/path/to/warehouse</value>
          </property>
      
      </configuration>
  3. 为已有表添加分区。
    您可以为已创建的表添加分区,从而将其分成较小的存储单元。根据查询条件,只扫描满足条件的分区而避免全表扫描,从而显著提升查询性能。
    • 命令格式
      ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...] LOCATION 'location';

      参数说明如下:

      参数是否可选说明
      table_name必选待添加分区的表名称。
      IF NOT EXISTS可选未指定IF NOT EXISTS时,如果同名的分区已存在,会执行失败并返回报错。
      pt_spec必选新增的分区,格式为(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)。其中,partition_col表示分区字段,partition_col_value表示分区值。分区字段不区分大小写,分区值区分大小写。
      location必选指定存储分区的OSS路径。
    • 使用示例

      以下示例用于为表sale_detail添加一个分区,用于存储2021年12月华东1(杭州)地域的销售记录,并将分区存储于指定的OSS路径。

      ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202112', region='hangzhou') LOCATION 'oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/path/2021/';