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

sh cca175-problem-5-step-5-sqoop-job.sh

sh cca175-problem-5-step-6-sqoop-import.sh