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

操作步骤

  1. 购买RDS实例,保证RDS可以和集群的master节点网络是通的;最好是跟E-MapReduce的ECS在同一个安全组,这样可以直接使用RDS的内网地址。
  2. 在RDS中创建一个database,名称为hivemeta,同时创建一个用户,把hivemeta的读写权限赋给这个用户。
  3. 导出统一元数据库的内容(只导出数据,不用导表结构)。
    1. 为保证数据的一致性, 在Hive服务页面停止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 -pPASSWORD > /tmp/metastore.sql
      说明 密码为上一步骤在配置页面获取的密码。
  4. 修改集群Master节点(如果是HA集群两个master都需要)上的/usr/local/emr/emr-agent/run/meta_db_info.json,把里面的use_local_meta_db设置为false,meta数据库的链接地址、用户名和密码换成RDS的信息。
    说明 对于无此文件的集群,直接忽略此步骤。
  5. 在Hive配置页面,把元数据库的链接地址、用户名和密码换成新RDS的信息。
    如果是老版本集群,修改$HIVE_CONF_DIR/hive-site.xml中对应的配置为需要连接的数据库。
  6. 在一台Master节点上,把hive-site.xml里面的元数据库链接地址、用户名和密码换成RDS的信息,然后执行init schema。
    cd /usr/lib/hive-current/bin
    ./schematool -initSchema -dbType mysql
  7. 把之前导出来的meta数据导入RDS。命令行登录MySQL。
    mysql -h {rds的url} -u {rds的用户名} -p

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

  8. 重启Hive所有组件

    验证Hive功能是否正常,可以在Master节点上,执行hive cli,确认数据是否和先前一样。

进入Hive服务页面

  1. 登录阿里云 E-MapReduce 控制台
  2. 单击上方的集群管理页签。
  3. 集群管理页面,单击相应集群所在行的详情
  4. 在左侧导航栏单击集群服务 > Hive

停止Hive的metastore服务

  1. 进入Hive服务页面
  2. 在Hive服务页面的组件列表区域,单击Hive MetaStore所在行的停止
    1. 执行集群操作对话框中,选择执行范围是否滚动执行失败处理策略,输入执行原因
    2. 单击确定

重启Hive所有组件

  1. 进入Hive服务页面
  2. 单击配置页签。
  3. 单击右上角的操作 > 重启 All Components
    1. 执行集群操作对话框中,选择执行范围是否滚动执行失败处理策略,输入执行原因
    2. 单击确定