【问题标题】:How to automatically sync a MySQL table with a Hive external table using Sqoop?如何使用 Sqoop 自动将 MySQL 表与 Hive 外部表同步?
【发布时间】:2017-07-18 13:33:42
【问题描述】:

我已经在我的本地计算机 (Linux) 中拥有一个 MySQL 表,并且我有一个与 MySQL 表具有相同架构的 Hive 外部表。

我正在尝试将数据从 MySQL 表导入到我的 Hive 外部表中,为此我正在使用 Sqoop。

但问题是,每当向 MySQL 表添加新记录时,它不会自动更新 Hive 外部表?

这是我正在使用的 Sqoop 导入命令:

sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root -P --split-by id --columns id,name,age,salary --table customer --target-dir /user/chamith/mysqlhivetest/ --fields-terminated-by ","  --hive-import --hive-table test.customers

我在这里错过了什么吗?或者如何做到这一点?

任何帮助都将不胜感激。

【问题讨论】:

  • 使用增量加载方式..
  • 添加一个样本,比如添加了什么新记录..是变异数据还是附加数据?
  • @TKHN 这绝对是一个新行,所有列都有值。增量加载方法?如果你能对此有所了解?谢谢!

标签: mysql hadoop hive sqoop


【解决方案1】:

在您的情况下,表中附加了一个新行。 所以你需要使用增量追加方法。

什么时候使用追加模式?

  • 适用于随时间递增的数值数据,例如 自动递增键
  • 在导入不断添加新行的表时 随着行 ID 值的增加

现在你需要在命令中添加什么

-check-column 指定在确定要导入哪些行时要检查的列。

--incremental 指定 Sqoop 如何确定哪些行是新的。

--last-value 指定上次导入检查列的最大值

执行此操作的理想方法是使用 sqoop 作业,因为在这种情况下,sqoop Metastore 会自动记住最后一个值

第 1 步:使用普通导入命令初步加载数据。

第二步:

sqoop job --create incrementalImportJob -- import \
--connect jdbc:mysql://localhost:3306/sqoop 
--username root 
-P 
--split-by id 
--columns id,name,age,salary 
--table customer 
 --incremental append \
 --check-column id \
 --last-value 5
--fields-terminated-by ","  
--target-dir hdfs://ip:8020/path/to/table/;

希望这会有所帮助..

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多