如何使用Sqoop自动将MySQL表与Hive外部表同步?

时间:2017-07-17 12:05:43

标签: mysql hadoop hive sqoop

我已经在我的本地机器(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

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

任何帮助都可以得到赞赏。

1 个答案:

答案 0 :(得分:3)

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

何时使用追加模式?

  • 适用于随时间递增的数字数据,例如 自动增量键
  • 导入连续添加新行的表时 增加行id值

现在需要在命令中添加

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

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

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

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

步骤1:使用正常导入命令初始加载数据。

第2步:

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/;

希望这会有所帮助..