我们如何将RDBMS中的所有表导入Hive自定义数据库?

时间:2016-08-30 07:07:06

标签: sqoop

我想" import-all-tables"使用从mysql的sqoop到Hive自定义数据库(非Hive默认数据库)

尝试了一些步骤:

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

    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"
    
  5. 仅在配置单元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.在配置单元自定义数据库中创建表格 2.使用Sqoop刷新以前的目录引用。

1 个答案:

答案 0 :(得分:0)

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

您再次查询问题。这就是获得Exception的原因

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数据库创建相应的表。