2016-09-25 128 views
0

我想从MySql数据库导入一个表格到配置单元表,以了解如何配置单元导入工作。表名是我已经在HDFS的主目录HDFS中导入的设备。我使用下面的语句在配置单元中创建了一个表。Sqoop Hive导入

create table device_hive (device_num int,device_name varchar(255)); 

现在我执行以下sqoop import语句从device表中获取的数据在MySQL数据库撵

sqoop import --connect jdbc:mysql://localhost/loudacre --table device 
--username training --password training --hive-import --hive-table device_hive 
--hive-database hadoopexam --hive-table device_hive --fields-terminated-by '\001' 
--table device --columns "device_num,device_name" 

它的失败,说明输出目录中的设备已经在错误信息exists.The位置指向我之前使用sqoop导入的HDFS中的device文件夹。

我的问题是为什么sqoop将基地目录和检查该文件夹。这是一个配置单元导入,所以不应该sqoop只是去蜂巢/仓库目录?我从HDFS删除该文件夹,它工作正常。有什么建议么。

回答

0

按照documentation

默认情况下,进口到一个新的目标位置。如果目标 目录已经存在于HDFS中,Sqoop将拒绝导入,并且 覆盖该目录的内容。

因此,如果您已经将表导入HDFS,device目录已存在的错误将是正常行为。当您添加--hive-import命令时,Sqoop将数据复制到HDFS(在您的案例中,位于device目录中),并使用数据的布局更新Hive Metastore。

您可以使用选项,以告诉Sqoop覆盖表:

如果蜂巢表已经存在,你可以指定--hive覆写 选项,以表明在现有的表必须更换配置单元。

我希望这会有所帮助。

+0

它的工作。感谢很多。 –

+0

不客气:-) –

0

您需要了解Sqoop如何导入到配置单元中。

它工作在3个步骤:

  • 将数据导入HDFS (HOME_DIRECTORY/TABLE_NAME)
  • CREATE TABLE HIVE ....
  • LOAD DATA INPATH ...

按照docs

将数据导入HDFS或省略此步骤后,Sqoop将生成一个Hive脚本,其中包含使用Hive类型定义列的CREATE TABLE操作以及用于将数据文件移入Hive仓库目录的LOAD DATA INPATH语句。

在你的情况下,它在第一步失败。

+0

谢谢你帮助我。 –

0

使用导入控制参数--delete-target-dir。它将删除导入目标目录(如果存在)。