hive.hiveimport:失败:semanticexception[错误10072]:数据库不存在:

kh212irz  于 2021-05-30  发布在  Hadoop
关注(0)|答案(4)|浏览(727)

我正在尝试将mysql数据库导入hive,以便根据blog分析大型mysql数据有几种方法可以做到这一点
非实时:sqoop
实时:hadoop applier for mysql
所以我决定采用“非实时”的方法,并且我已经用4节点、sqoop和hive设置了hadoop集群,它在以下版本中运行良好
名称版本
apache hadoop2.6.0版
apache配置单元-0.14.0
apache sqoopsqoop-1.4.5.bin\uhadoop-2.0.4-alpha
现在,当我尝试使用以下命令导入数据时
import命令

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文件系统web界面之后,我意识到db的所有者是不同的

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 user创建的。我尝试使用以下命令将所有previlage授予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
7kqas0il

7kqas0il1#

我在cloudera使用包模式的quickstart vm上遇到了完全相同的错误。
我将hive-site.xml复制到sqoop conf目录:

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

这个把戏解决了问题。

sbtkgmzw

sbtkgmzw2#

最后,我在阅读论坛上关于同一问题的讨论时,自己得到了答案。
问题在于配置单元元存储配置,有三种类型的配置单元元存储配置
嵌入式元存储(默认元存储部署模式)。
本地元存储。
远程元存储。
我的配置单元元存储配置是默认配置。正如cloudera文档中提到的配置hivemetastore,我将metastore配置从嵌入式(默认)更改为远程metastore,并开始为我工作。
有关metastore配置的更多信息,请使用以下cloudera文档。
配置配置单元元存储
sqoop命令

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

xpcnnkqh3#

sqoop导入所有表--verbose--connectjdbc:mysql://x.x.x.x/edgeowt--用户名root-p--配置单元导入--仓库目录/user/hive/warehouse--配置单元数据库edgeowt.db--配置单元覆盖
改变 --hive-database edgewot.db--hive-table edgewot.db ,在哪里 edgewot 是您的配置单元数据库名称和 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数据库选项。请参阅中第7.2.11节的表8配置单元参数http://sqoop.apache.org/docs/1.4.5/sqoopuserguide.html
--替代方法--
如果sqoop import all tables失败,请尝试以下步骤:
1创建一个名为 hivetables/usr/local (本地文件系统)。更改文件夹的权限 sudo chmod -R 777 /usr/local/hivetables .
2创建一个名为 sqoop-hive.sh/usr/local/hivetables 并更改此文件的权限 sudo chmod -R 777 /usr/local/hivetables/sqoop-hive.sh 三。将此粘贴到 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执行shell脚本 sh /usr/local/hivetables/sqoop-hive.sh MYSQLUSERNAME MYSQLPASSWORD MYSQLDATABASE HIVEDATABASE 注意:mysql命令将mysql数据库中的表名导出到文本文件中。for循环读取表文件并对每个表名执行sqoop命令。

ttvkxqim

ttvkxqim4#

是否在hive-env.sh中导出了hive\u conf\u dir
export hive\u conf\u dir=“/etc/hive/conf”--您需要配置配置路径

相关问题