为了保证更稳定的大规模Hive元数据服务,您可以从原有的统一元数据库迁出到您自建的RDS实例。

前提条件

已购买RDS,详情请参见 创建RDS MySQL实例

使用限制

  • 建议选择MySQL的5.7版本;系列选择高可用版
  • RDS MySQL实例须与E-MapReduce的实例处于同一个安全组,以便RDS与E-MapReduce可以通过内网地址互通。

操作步骤

  1. 在RDS中创建一个database,名称为hivemeta,同时创建一个用户,把hivemeta的读写权限赋给这个用户,详情请参见配置独立RDS
  2. 导出统一元数据库的内容(只导出数据,不用导表结构)。
    1. 为保证数据的一致性, 在Hive服务页面停止Hive的MetaStore服务,保证导出期间不会有新的元数据变化,详情请参见停止Hive的MetaStore服务
    2. 在Hive服务页面,单击配置页签。
    3. 在配置页面,查找javax.jdo.option.ConnectionUserNamejavax.jdo.option.ConnectionPasswordjavax.jdo.option.ConnectionURL的值。
      说明
      • 如果是老版本集群,请在$HIVE_CONF_DIR/hive-site.xml中查找。
      • javax.jdo.option.ConnectionUserName表示对应数据库用户名;javax.jdo.option.ConnectionPassword表示对应数据库访问密码;javax.jdo.option.ConnectionURL对应数据库访问地址和库名。
    4. 进入集群Master节点,执行以下命令。
      mysqldump -t DATABASENAME -h HOST -P PORT -u USERNAME -p PASSWORD > /tmp/metastore.sql
      说明 密码为上一步骤在配置页面获取的密码。
  3. 修改集群Master节点上的/usr/local/emr/emr-agent/run/meta_db_info.json,把里面的use_local_meta_db设置为false,meta数据库的链接地址、用户名和密码换成RDS的信息。
    说明
    • 对于无此文件的集群,直接忽略此步骤。
    • 如果是HA集群,两个Master节点都需要进行操作。
  4. 在Hive配置页面,把元数据库的链接地址、用户名和密码换成新RDS的信息。
    如果是老版本集群,修改 $HIVE_CONF_DIR/hive-site.xml中对应的配置为需要连接的数据库。
  5. 在一台Master节点上,将hive-site.xml中的元数据库链接地址、用户名和密码换成RDS的信息,然后根据您集群的Hive版本初始化Schema。
    • 如果Hive是2.3.x版本时,请执行以下命令进行初始化。
      1. 使用ssh方式登录集群Master节点,详情请参见登录集群
      2. 执行以下命令,进入mysql目录。
        cd /usr/lib/hive-current/scripts/metastore/upgrade/mysql/
      3. 执行以下命令,登录MySQL数据库。
        mysql -h {RDS数据库内网或外网地址} -u{RDS用户名} -p{RDS密码}
      4. 执行以下命令,进行初始化。
        use {RDS数据库名称};
        source /usr/lib/hive-current/scripts/metastore/upgrade/mysql/hive-schema-2.3.0.mysql.sql;
      说明 {RDS数据库名称}步骤1中创建的数据库,例如hivemeta。
    • 其它Hive版本时,执行以下命令进行初始化。
      1. 使用ssh方式登录集群Master节点,详情请参见登录集群
      2. 执行以下命令,进入bin目录。
        cd /usr/lib/hive-current/bin
      3. 执行以下命令,登录MySQL数据库。
        ./schematool -initSchema -dbType mysql
  6. 把之前导出来的Meta数据导入RDS,您可以通过以下命令行登录MySQL。
    mysql -h {rds的url} -u {rds的用户名} -p

    进入MySQL的命令行之后,执行命令source /tmp/metastore.sql,正常情况下可以完全导入,不会报错。

  7. 重启Hive所有组件
    验证Hive功能是否正常,可以在Master节点上,执行 hive cli,确认数据是否和先前一样。

停止Hive的MetaStore服务

  1. 进入Hive服务页面。

    1. 在顶部菜单栏处,根据实际情况选择地域和资源组
    2. 单击上方的集群管理页签。
    3. 集群管理页面,单击相应集群所在行的详情
    4. 在左侧导航栏,选择集群服务 > Hive
  2. 在Hive服务页面的组件列表区域,单击Hive MetaStore所在行的停止
    1. 执行集群操作对话框中,选择执行范围是否滚动执行失败处理策略,输入执行原因
    2. 单击确定

重启Hive所有组件

  1. 进入Hive服务页面。

    1. 在顶部菜单栏处,根据实际情况选择地域和资源组
    2. 单击上方的集群管理页签。
    3. 集群管理页面,单击相应集群所在行的详情
    4. 在左侧导航栏,选择集群服务 > Hive
  2. 单击配置页签。
  3. 在右上角选择操作 > 重启 All Components
    1. 执行集群操作对话框中,选择执行范围是否滚动执行失败处理策略,输入执行原因
    2. 单击确定