如何使用sqoop覆盖配置单元中的数据

时间:2016-03-28 15:26:45

标签: hadoop sqoop

我正在尝试通过mysql数据库中的sqoop将数据加载到hive中已存在的表中。我指的是以下指南供参考: - http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_importing_data_into_hive

--hive-import已成功通过测试。

我创建了一个hive表,如下所示: -

  1. create table sqoophive (id int, name string, location string) row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile;

  2. 根据需要加载数据。

  3. 我想使用--hive-overwrite选项覆盖上表中的内容。根据上面提到的指南 - “--hive-overwrite覆盖Hive表中的现有数据。”

  4. “如果Hive表已经存在,您可以指定--hive-overwrite选项以指示必须替换配置单元中的现有表。”

    所以我分别尝试了以下查询以获得结果: -

    sqoop import --connect jdbc:mysql://localhost/test --username root --password 'hr' --table sample --hive-import --hive-overwrite --hive-table sqoophive -m 1 --fields-terminated-by '\t' --lines-terminated-by '\n'

    sqoop import --connect jdbc:mysql://localhost/test --username root --password 'hr' --table sample --hive-overwrite --hive-table sqoophive -m 1 --fields-terminated-by '\t' --lines-terminated-by '\n'

    但不是替换现有表格中的内容,而是在下面的路径中创建了一个文件/user/<username>/<mysqltablename>

    有人可以解释一下我哪里出错了吗?

3 个答案:

答案 0 :(得分:1)

第一个查询应该可以正常工作。由于架构已经存在,我没有终止字段并终止行。

关键字--hive-import--hive-overwrite应该在那里。

如果只有--hive-overwrite,则不会将数据加载到表中。只是复制到hdfs。

答案 1 :(得分:0)

将_SUCCESS文件放在

/user/<username>/<mysqltablename>

你可以改变--warehouse-dir的位置 例如: - warehouse-dir / tmp

有人会认为hive-overwrite会处理这个问题,这意味着首先删除该目录。但有充分理由,Hive不想开始在HDFS中删除目录。如果有什么东西放在那里怎么办?

hive-overwrite说,“我要覆盖Hive中的行,而不仅仅是添加到表中。”因此,你不会有重复。

您必须先删除该目录和_SUCCESS文件;或者更好,在导入成功后。

 hadoop fs -rm -R /user/<username>/<mysqltablename>

答案 2 :(得分:0)

sqoop import没有--target-dir--warehouse-dir(对于--hive-import)将导入/user/<username>/<mysqltablename>

  

By default,Sqoop会将名为foo的表导入到名为的目录中   在HDFS中的主目录中foo。例如,如果您的用户名   是someuser,然后导入工具将写入   /user/someuser/foo/(files)。您可以调整的父目录   使用--warehouse-dir参数导入。

     

您还可以使用--target-dir param

显式选择目标目录

但是@hrobertv表示--hive-overwrite不会删除现有的dir但会覆盖hive表的HDFS数据位置。如果要将新数据保存在与源相同的位置,而不是先删除现有表dir,然后运行sqoop import,并为--target-dir指定--warehouse-dir--hive-overwrite来存储数据根据您的要求在特定地点......

相关问题