【问题标题】:How can we import all tables in RDBMS into a Hive custom database?我们如何将 RDBMS 中的所有表导入 Hive 自定义数据库?
【发布时间】:2016-08-30 17:24:41
【问题描述】:

我想使用 sqoop 从 mysql “导入所有表”到 Hive 自定义数据库(不是 Hive 默认数据库)

尝试的步骤:

  1. 在“/user/hive/warehouse/Custom.db”下的 hive 中创建自定义数据库
  2. 为此目录分配了所有权限,因此 sqoop 在写入此目录时不会出现任何问题。
  3. 在 CDH5.7 VM 上使用带有选项“--hive-database”选项的命令:

    sqoop import-all-tables 
    --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" 
    --username retail_dba 
    --password cloudera 
    --hive-database "/user/hive/warehouse/sqoop_import_retail.db"
    

仅在 hive default 数据库中创建的表,在这种情况下不在自定义数据库中:“sqoop_import_retail.db

否则它会尝试在之前的 HDFS 目录 (/user/cloudera/categories) 中创建表,并且错误指出表已存在:

16/08/30 00:07:14 WARN security.UserGroupInformation: PriviledgedActionException as:cloudera (auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://quickstart.cloudera:8020/user/cloudera/categories already exists
16/08/30 00:07:14 ERROR tool.ImportAllTablesTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://quickstart.cloudera:8020/user/cloudera/categories already exists
[cloudera@quickstart etc]$

如何解决这个问题?
1.在hive自定义DB中创建表
2. 使用 Sqoop 刷新以前的目录引用。

【问题讨论】:

    标签: sqoop


    【解决方案1】:

    您没有在命令中提及--hive-import。因此,在您的情况下,它将在/user/cloudera/ 下将其导入HDFS。

    您正在再次执行查询。这就是为什么会出现异常

    Output directory hdfs://quickstart.cloudera:8020/user/cloudera/categories already exists
    

    修改导入命令:

    sqoop import-all-tables --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" --username retail_dba --password cloudera --hive-database custom --hive-import

    它会从 MySQL 的retail_db 获取所有表,并在 hive 中创建与custom 数据库对应的表。

    【讨论】:

    • 我仍然遇到选项 --hive-import 的错误。我和其他成员 Durga 进行了讨论,了解了 sqoop 是如何导入数据的。它首先将数据复制到暂存区域(在本例中为 /user/cloudera),然后最终将其移动到目标目录(hive-warehouse / hive-database)。因此,在失败的情况下,这些表由于某种原因存在于 /user/cloudera 上,它们充当下一次运行的孤儿 - 并使其过早失败。从位置 /user/cloudera 中删除文件并运行工作..
    • Refer@ Load comand 16/08/30 03:47:47 DEBUG hive.TableDefWriter: Create statement: CREATE TABLE IF NOT EXISTS /user/hive/warehouse/sqoop_import_retail.db.categories (category_id INT, @987654330 @ INT, category_name STRING) COMMENT 'Imported by sqoop on 2016/08/30 03:47:47' ROW FORMATED DELIMITED FIELDS TERMINATED by '\001' LINES TERMINATED BY '\012' 存储为 TEXTFILE 16/08/30 03:47:47 DEBUG hive.TableDefWriter: 加载语句: LOAD DATA INPATH 'hdfs://quickstart.cloudera:8020/user/cloudera/categories' INTO TABLE /user/hive/warehouse/sqoop_import_retail.db.categories
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多