CCA175 的 Sqoop / Hive:获取表 AlreadyExistsException
Posted
技术标签:
【中文标题】CCA175 的 Sqoop / Hive:获取表 AlreadyExistsException【英文标题】:Sqoop / Hive for CCA175: getting table AlreadyExistsException 【发布时间】:2016-12-30 16:40:26 【问题描述】:我正在准备我的 CCA175 考试。我正在尝试将 mysql 数据库 retail_db
导入到 hive
但收到此错误。我尝试了几次,还从这些文件夹中删除了目录/文件;
/user/hive/warehouse
/user/cloudera
在运行 sqoop
作业后,我仍然收到以下错误:
sqoop import-all-tables \
--num-mappers 1 \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username=retail_dba \
--password=cloudera \
--hive-import \
--hive-overwrite \
--create-hive-table \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \
--outdir java_files
使用配置初始化日志记录 jar:文件:/usr/jars/hive-common-1.1.0-cdh5.7.0.jar!/hive-log4j.properties 失败:执行错误,返回代码 1 从 org.apache.hadoop.hive.ql.exec.DDLTask。 AlreadyExistsException(message:Table categories已经存在)
我们将不胜感激。
【问题讨论】:
在命令末尾添加--verbose
,并告诉我在此错误之前生成的 hive create table 命令。理想情况下,它应该在使用覆盖时删除 Hive 表
【参考方案1】:
您似乎已经在 hive 的默认数据库中有类别表。您需要从 Hive 中删除表。以下是步骤:
登录mysql并检查retail_db包含多少个表 的。
mysql> use retail_db;
mysql> show tables;
登录hive并检查retail_dba(mysql)的哪些表确实存在? 删除 hive 中存在的表。在你的情况下,它的类别
hive> show tables;
hive> drop table categories;
导航到 cloudera 主页并检查您是否已经 有与这些表对应的目录。因为作为一部分 Sqoop 导入 Hive,数据在移动到 Hive 仓库位置之前临时复制到 /user/cloudera/ 下的 HDFS 上。为了 例如,检查类别目录。
[cloudera@quickstart /]$ hadoop fs -ls /user/cloudera/categories
【讨论】:
从 hive 中的默认数据库中删除表或在 hive 中创建新数据库并在 sqoop 作业中使用--hive-database <new-db-name>
导入特定 hive 数据库中的表!【参考方案2】:
从 sqoop 命令中删除 --create-hive-table。
根据 sqoop 文档,如果同名表已经存在,则作业将失败。
--create-hive-table 如果设置,那么如果目标 hive 则作业将失败 表退出。默认情况下,此属性为 false
【讨论】:
以上是关于CCA175 的 Sqoop / Hive:获取表 AlreadyExistsException的主要内容,如果未能解决你的问题,请参考以下文章
sh cca175-problem-5-step-1-sqoop-import.sh
sh cca175-problem-5-step-2-sqoop-import.sh
sh cca175-problem-5-step-3-sqoop-import.sh
sh cca175-problem-5-step-4-sqoop-merge.sh