从E-MapReduce-2.4.0(以下简称EMR) 版本开始,E-MapReduce支持统一元数据管理。在E-MapReduce-2.4.0版本之前,所有集群采用的是集群本地的Mysql数据库作为Hive元数据库;在E-MapReduce-2.4.0及之后的版本中, E-MapReduce支持统一的高可靠的Hive元数据库。

前提条件

确保创建集群时,元数据选择统一meta数据库。创建集群详情请参见创建集群

背景信息

当前元数据库需要使用公网IP来连接,所以集群必须要有公网IP,同时请不要随意的切换公网IP地址,防止对应的数据库白名单失效。

如果是本地的元数据库,目前还不支持在控制台页面上管理。可以使用集群上的Hue工具来进行管理。

E-MapReduce后台RDS统一管理元数据的方式,仅限小容量的用户使用。对于需要大容量建议您自建RDS作为统一元数据。默认限制为:

  • 总容量:200MiB。
  • 小时query数量限制:720000/h。
  • 小时update数量限制:144000/h。

介绍

hive元数据库

统一的元数据管理,可以实现:

  • 持久化的元数据存储。

    之前元数据都是在集群内部的Mysql数据库,元数据会随着集群的释放而丢失,特别是EMR提供了灵活按量模式,集群可以按需创建用完就释放。如果用户需要保留现有的元数据信息,必须登录集群手动将元数据信息导出。支持统一的元数据管理之后,不再存在该问题。

  • 更方便地实现计算存储分离。

    EMR上可以支持将数据存放在阿里云OSS中,在大数据量的情况下将数据存储在OSS上会大大降低使用的成本,EMR集群主要用来作为计算资源,在计算完成之后机器可以随时释放,数据在OSS上,同时也不用再考虑元数据迁移的问题。

  • 更方便地实现数据共享。
    使用统一的元数据库,如果用户的所有数据都存放在OSS之上,则不需要做任何元数据的迁移和重建,所有集群都是可以直接访问数据,这样每个EMR集群可以做不同的业务,但是可以很方便地实现数据的共享。
    说明 在支持统一元数据之前,元数据是存储在每个集群本地环境的Mysql数据库中,所以元数据会随着集群的释放而被清理。在支持统一元数据之后,释放集群不会清理元数据信息。所以,在任何时候删除OSS上或者集群HDFS上数据(包括释放集群操作)的时候,需要先确认该数据对应的元数据已经删除(即要删掉数据对应的表和数据库),否则元数据库中可能出现一些脏数据。

创建使用统一元数据的集群

  • 页面方式。

    创建集群时,在基础配置页面,选中统一meta数据库

  • API方式。

    参考API文档中的 CreateClusterV2定义,请指定此选项:useLocalMetaDb=false

表管理

详细请参见Hive元数据基本操作

查看元数据库信息

  1. 登录阿里云E-MapReduce控制台
  2. 在顶部菜单栏处,选择地域(Region)。
  3. 单击上方的元数据管理页签。
  4. 在左侧单击元数据库信息

    可以在元数据库信息页查看当前RDS的用量和使用限制,如需修改,请提交工单

    元数据信息

常见问题

  • Q:报错Wrong FS:oss://yourbucket/xxx/xxx/xxx或Wrong FS:hdfs://yourhost:9000/xxx/xxx/xxx。

    A:此问题是由于删除OSS上的表数据之前,没有删除数据表对应的元数据。导致表的Schema还在,但实际的数据已不存在或已移动到别的路径。可以先修改表的location为一个存在的路径,然后再删除表。

    alter table test set location 'oss://your_bucket/your_folder'
    说明 oss://your_bucket/your_folder必须是一个存在的OSS路径。
  • Q:删除hive database的时候出现:java.lang.IllegalArgumentException: java.net.UnknownHostException: xxxxxxx。

    A:此问题是因为在之前的集群之上创建了Hive的数据库,并且数据库的位置是落在之前集群的HDFS之上,但是在集群释放的时候,没有清理掉对应的hive database,导致新建集群之后,没法访问到之前已经释放集群的HDFS数据。所以如果是手动创建了在HDFS之上的数据库和表,在释放集群的时候请记得清理。

    解决方案:
    1. 通过命令行登录到集群master节点上,找到hive meta db的访问地址和用户名密码信息,在$HIVE_CONF_DIR/hive-site.xml中,找到对应属性。
      javax.jdo.option.ConnectionUserName //对应数据库用户名;
      javax.jdo.option.ConnectionPassword //对应数据库访问密码;
      javax.jdo.option.ConnectionURL //对应数据库访问地址和库名;
      delete_hive_database
    2. 在集群master节点上登录hive meta db。
      mysql -h ${DBConnectionURL} -u ${ConnectionUserName} -p [回车]
      [输入密码]${ConnectionPassword}
    3. 登录上hive meta db之后,修改对应hive database的location为该region真实存在的OSS路径即可。hive_meta_db