我正在尝试将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
4条答案
按热度按时间7kqas0il1#
我在cloudera使用包模式的quickstart vm上遇到了完全相同的错误。
我将hive-site.xml复制到sqoop conf目录:
这个把戏解决了问题。
sbtkgmzw2#
最后,我在阅读论坛上关于同一问题的讨论时,自己得到了答案。
问题在于配置单元元存储配置,有三种类型的配置单元元存储配置
嵌入式元存储(默认元存储部署模式)。
本地元存储。
远程元存储。
我的配置单元元存储配置是默认配置。正如cloudera文档中提到的配置hivemetastore,我将metastore配置从嵌入式(默认)更改为远程metastore,并开始为我工作。
有关metastore配置的更多信息,请使用以下cloudera文档。
配置配置单元元存储
sqoop命令
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-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
文件:4执行shell脚本
sh /usr/local/hivetables/sqoop-hive.sh MYSQLUSERNAME MYSQLPASSWORD MYSQLDATABASE HIVEDATABASE
注意:mysql命令将mysql数据库中的表名导出到文本文件中。for循环读取表文件并对每个表名执行sqoop命令。ttvkxqim4#
是否在hive-env.sh中导出了hive\u conf\u dir
export hive\u conf\u dir=“/etc/hive/conf”--您需要配置配置路径