Sqoop中2个命令之间的区别

时间:2015-07-26 11:58:55

标签: hive sqoop

请告诉我下面两个命令之间有什么区别

sqoop import --connect jdbc:mysql://localhost:3306/db1 
 --username root --password password 
 --table tableName --hive-table tableName --create-hive-table --hive-import;

sqoop create-hive-table --connect jdbc:mysql://localhost:3306/db1 
 --username root --password password;

使用--create-hive-table&有什么区别?两个命令中只有create-hive-table

2 个答案:

答案 0 :(得分:1)

考虑两个问题:

1)当使用--create-hive-table时,RDBMS表的内容将被复制到--target-dir(HDFS位置)所提到的位置。这将检查表格sqoop.emp是否存在于Hive中。 如果Hive中的表不存在,则来自HDFS位置的数据将移动到配置单表,一切顺利。 如果表(sqoop.emp)已存在于Hive中,则会引发错误:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. AlreadyExistsException(message:Table emp already exists)

示例:

sqoop import \
--connect jdbc:mysql://jclient.ambari.org/sqoop \
--username hdfs -P \
--table employee \
--target-dir /user/hive/sqoop/employee \
--delete-target-dir \
--hive-import \
--hive-table sqoophive.emp \
--create-hive-table \
--fields-terminated-by ',' \
--num-mappers 3

2)在没有create-hive-table的情况下使用hive-import时 获取swoop.employee(在RDBMS中)的模式,并使用该表在hive(default.employee)中的默认数据库下创建。但没有数据传输。

示例(书中给出的修改形式(Tom White的Hadoop权威指南):

sqoop create-hive-table \
--connect jdbc:mysql://jclient.ambari.org/sqoop \
--username hdfs -P \
--table employee \
--fields-terminated-by ','

现在的问题是,何时使用什么。如果RDBMS中不存在任何数据,则使用前者,我们不仅需要一次创建,而且还要在Hive中填充表。 当必须在Hive中创建表但不填充表时使用后者。或者,如果数据已经存在于HDFS中,并且它将用于填充配置单元表。

答案 1 :(得分:0)

sqoop-import --connect jdbc:mysql://localhost:3306/db1 
     >-username root -password password 
     >--table tableName --hive-table tableName --create-hive-table --hive-import;

上面的命令将使用hive默认设置将数据从db导入到hive中,如果表尚未存在,它将在Hive中创建一个具有与DB中相同的模式的表。

sqoop create-hive-table --connect jdbc:mysql://localhost:3306/db1 
      >-username root -password password;

create-hive-table工具将在Hive Metastore中创建一个表,其中包含一个基于先前导入HDFS的数据库表的表定义,或者计划导入的表(它将从sqoop作业中选取)。 这有效地执行了" - hive-import" sqoop-import的步​​骤,而不运行先前的导入。

例如,考虑使用sqoop将db1中的table1导入hdfs。如果您接下来执行create-hive-table,它将在hive Metastore中创建一个表,其中包含来自table1的db1的表模式。因此,将来在需要时将数据加载到此表中将非常有用。