hive.HiveImport:FAILED:SemanticException [错误10072]:数据库不存在:

时间:2015-04-16 09:38:23

标签: mysql hadoop hive sqoop hadoop2

我正在尝试将MySQL数据库导入Hive,根据 Blog 分析大型MySQL数据有几种方法可以做到这一点

  1. 非实时:Sqoop
  2. 实时:适用于MySQL的Hadoop Applier
  3. 所以我决定选择' 非实时'方法,我已经设置了Hadoop集群,其中包含4个节点,Sqoop和Hive,可以正常使用以下版本

    名称 版本

    Apache Hadoop 2.6.0

    Apache Hive hive-0.14.0

    Apache Sqoop sqoop-1.4.5.bin__hadoop-2.0.4-alpha

    现在,当我尝试使用以下命令导入数据时

    导入命令

    sqoop-import-all-tables --verbose --connect jdbc:mysql://X.X.X.X/edgeowt --username root -P --hive-import --warehouse-dir /user/hive/warehouse --hive-database edgeowt.db  --hive-overwrite
    

    然后我收到以下错误

    错误

    INFO hive.HiveImport: FAILED: SemanticException [Error 10072]: Database does not exist: edgeowt.db
    15/04/16 13:32:09 ERROR tool.ImportAllTablesTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 88
    

    我使用Hiveserver2登录并检查数据库,但我能够看到给定的数据库

    $HIVE_HOME/bin>beeline
    beeline> !connect jdbc:hive2://localhost:10000 scott tiger org.apache.hive.jdbc.HiveDriver
    0: jdbc:hive2://localhost:10000> show databases;
    +----------------+--+
    | database_name  |
    +----------------+--+
    | default        |
    | edgeowt        |
    +----------------+--+
    

    查看 HDFS文件系统网页界面后,我发现数据库的 所有者不同

    Permission  Owner   Group       Size    Replication Block Size  Name
    drwxr-xr-x  hduser  supergroup  0 B 0       0 B     candidate
    drwxr-xr-x  scott   supergroup  0 B 0       0 B     edgeowt.db
    drwxr-xr-x  scott   supergroup  0 B 0       0 B     hd_temperature
    

    因为我尝试使用 hduser 导入数据,并且使用 scott 用户创建数据库。 我尝试使用以下命令 edgeowt.db 所有优先级授予 hduser

    0: jdbc:hive2://localhost:10000>GRANT ALL ON DATABASE edgeowt TO USER hduser;
    

    并检查

    0: jdbc:hive2://localhost:10000> SHOW GRANT ON DATABASE edgeowt;
    +-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+--+
    | database  | table  | partition  | column  | principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
    +-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+--+
    | edgeowt   |        |            |         | admin           | ROLE            | ALL        | false         | 1429170366000  | scott    |
    | edgeowt   |        |            |         | hduser          | USER            | ALL        | false         | 1429170906000  | scott    |
    +-----------+--------+------------+---------+-----------------+-----------------+------------+---------------+----------------+----------+--+
    

    但无法解决错误,那么我该如何解决这个问题呢?或者任何解决这个问题的方法都会有所帮助。

    〜/ .bashrc中

    # Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)
    export JAVA_HOME=/usr/lib/jvm/java-7-oracle
    # Set Hadoop-related environment variables
    export HADOOP_INSTALL=/opt/hadoop
    export PATH=$PATH:$HADOOP_INSTALL/bin
    export PATH=$PATH:$HADOOP_INSTALL/sbin
    export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
    export HADOOP_COMMON_HOME=$HADOOP_INSTALL
    export HADOOP_HDFS_HOME=$HADOOP_INSTALL
    export YARN_HOME=$HADOOP_INSTALL
    export HADOOP_HOME=$HADOOP_INSTALL
    
    # Set hive home 
    export HIVE_HOME=/opt/hive
    export PATH=$PATH:$HIVE_HOME/bin
    
    # Set HCatlog home 
    export HCAT_HOME=$HIVE_HOME/hcatalog
    export PATH=$PATH:$HCAT_HOME/bin
    
    # Set Sqoop home
    export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
    export SQOOP_HOME=/opt/sqoop
    export SQOOP_CONF_DIR="$SQOOP_HOME/conf"
    export SQOOP_CLASSPATH="$SQOOP_CONF_DIR"
    export PATH=$PATH:$SQOOP_HOME/bin
    

    修改

    尝试使用以下命令仍然具有相同的错误

    sqoop-import-all-tables --verbose --connect jdbc:mysql://X.X.X.X/edgeowt --username root -P --hive-import --warehouse-dir /user/hive/warehouse --hive-database edgeowt --hive-overwrite
    

4 个答案:

答案 0 :(得分:2)

最后,在阅读有关同一问题 here 的论坛讨论时,我自己得到了答案。

问题在于Hive Metastore配置 ,有三种类型的Hive Metastore配置

  1. 嵌入式Metastore(默认Metastore部署模式)。
  2. Locall Metastore。
  3. 远程Metastore。
  4. 我的Hive Metastore配置是默认配置。正如cloudera文档中提到的 Configuring the Hive Metastore , 我将Metastore配置从嵌入(默认)更改为 远程Metastore ,并开始为我工作。

    有关Metastore配置的更多信息,请使用以下Cloudera文档。

    <强> Configuring the Hive Metastore

    Sqoop Command

    sqoop-import-all-tables --connect jdbc:mysql://X.X.X.X/edgeowt --username root -P --hive-import --hive-database edgeowt --hive-overwrite -m 4
    

答案 1 :(得分:1)

  

sqoop-import-all-tables --verbose --connect jdbc:mysql:// XXXX / edgeowt --username root -P --hive-import --warehouse-dir / user / hive / warehouse --hive-database edgeowt.db --hive-overwrite

--hive-database edgewot.db更改为--hive-table edgewot.db,其中edgewot是您的hive数据库名称,db是您的hive表名。

sqoop-import-all-tables --verbose --connect jdbc:mysql://X.X.X.X/edgeowt --username root -P --hive-import --warehouse-dir /user/hive/warehouse --hive-table edgeowt.db  --hive-overwrite
  

注意: sqoop-1.4.5中没有--hive-database选项。请参阅http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html

中第7.2.11节的表8 Hive Arguments

- 替代方法 -

如果sqoop import-all-tables失败,请尝试以下步骤:

1。hivetables(本地文件系统)中创建名为/usr/local的文件夹。更改文件夹sudo chmod -R 777 /usr/local/hivetables的权限。

2。sqoop-hive.sh中创建名为/usr/local/hivetables的shell脚本,并更改​​此文件的权限sudo chmod -R 777 /usr/local/hivetables/sqoop-hive.sh

3. 将其粘贴到sqoop-hive.sh文件中:

#!/bin/sh
#tabfold="/usr/local/hivetables"
#cd $tabfold
mysql -u $1 -p$2 -N information_schema -e "select table_name from tables where table_schema = '$3'" > /usr/local/hivetables/tables.txt
HOSTFILE="/usr/local/hivetables/tables.txt"
for host in $(cat $HOSTFILE)
do
   $SQOOP_HOME/bin/sqoop import --connect jdbc:mysql://localhost:3306/$3 --table $host --username $1 --password $2 --hive-import --hive-table $4.$host --warehouse-dir /user/hive/warehouse
done

4. sh /usr/local/hivetables/sqoop-hive.sh MYSQLUSERNAME MYSQLPASSWORD MYSQLDATABASE HIVEDATABASE

执行shell脚本
  

注意: mysql 命令将mysql数据库中的表名导出到文本文件中。 对于循环读取表文件并为每个表名执行sqoop命令。

答案 2 :(得分:0)

你是否在hive-env.sh中导出了hive_conf_dir

导出HIVE_CONF_DIR =“/ etc / hive / conf”---你的配置路径

答案 3 :(得分:0)

在使用启动模式的cloudera上,我在quickstart VM上出现了完全相同的错误。

我将hive-site.xml复制到sqoop conf目录:

sudo cp /etc/hive/conf/hive-site.xml /etc/sqoop/conf/

那个技巧解决了这个问题。