元数据管理常见问题

更新时间:
复制 MD 格式

本文汇总了使用E-MapReduce的元数据管理时的常见问题。

报错提示“oss://yourbucket/*/*/*”或“hdfs://yourhost:9000/*/*/*”路径不存在,该如何处理?

问题分析:由于删除OSS上的表数据之前,没有删除数据表对应的元数据,导致表的Schema还存在,但实际的数据已经不存在或已经移动到别的路径。

解决方法:可以先修改表的Location为一个存在的路径,然后再删除表。
alter table test set location 'oss://your_bucket/your_folder'
说明 oss://your_bucket/your_folder必须是一个存在的OSS路径。

删除Hive Database时提示“java.lang.IllegalArgumentException: java.net.UnknownHostException: *****”

问题分析:由于在之前的集群上创建了Hive的数据库,并且数据库的位置是落在之前集群的HDFS之上,但是在集群释放的时候,没有清理掉对应的Hive Database,导致新建集群之后,无法访问到之前已经释放集群的HDFS数据。如果在HDFS上的数据库和表是手动创建的,在释放集群时候需要清理。

解决方法:
  1. 登录集群的Master节点,在$HIVE_CONF_DIR/hivemetastore-site.xml中,找到对应数据库的访问地址和用户名密码信息。
    javax.jdo.option.ConnectionUserName //对应数据库用户名;
    javax.jdo.option.ConnectionPassword //对应数据库访问密码;
    javax.jdo.option.ConnectionURL //对应数据库访问地址和库名;
    <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>root</value>
    </property>
    <property>
      <name>hive.metastore.server.min.threads</name>
      <value>200</value>
    </property>
    <property>
      <name>hive.service.metrics.file.frequency</name>
      <value>30000</value>
    </property>
    <property>
      <name>hive.service.metrics.file.location</name>
      <value>/tmp/hivemetastore_metric.json</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>EMxxx</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://emxxx/xxx?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
    </property>
  2. 在集群Master节点上输入以下命令,并根据提示信息输入密码登录创建的Hive数据库。
    mysql -h ${DBConnectionURL} -u ${ConnectionUserName} -p
  3. 登录Hive数据库后,修改Location为该Region真实存在的OSS路径即可。
    mysql> show databases;
    +--------------------------------------------+
    | Database                                   |
    +--------------------------------------------+
    | information_schema                         |
    | xxxxxxxxx77ac43c3bd0efae77e0bf1947d45fb4c896fb99 |
    +--------------------------------------------+
    mysql> use xxxxxxxxx77ac43c3bd0efae77e0bf1947d45fb4c896fb99;
    mysql> select * from dbs;
    +-------+------------------------+----------------------------------------+-----------+------------+------------+
    | DB_ID | DESC                   | DB_LOCATION_URI                        | NAME      | OWNER_NAME | OWNER_TYPE |
    +-------+------------------------+----------------------------------------+-----------+------------+------------+
    |     1 | Default Hive database  | oss://mybucket/hive/warehouse          | default   | public     | ROLE       |
    |     6 | NULL                   | hdfs://dirty-hostname/warehouse        | dirty_db  | NULL       | USER       |
    +-------+------------------------+----------------------------------------+-----------+------------+------------+
    mysql> update dbs set DB_LOCATION_URI = 'oss://your-bucket/your-db-folder' where DB_ID = 6;

如何登录内置的MySQL?

  1. 通过SSH方式连接集群。

    详情请参见登录集群

  2. 执行以下命令,登录内置的MySQL。
    mysql -uroot -pEMRroot1234

    内置MySQL登录的用户名为root,密码为EMRroot1234。