从hadoop更新mysql记录

时间:2014-06-06 11:23:45

标签: mysql hadoop hadoop-streaming hadoop-plugins hadoop-partitioning

我完成了一个读取iTunes EPF文件并将这些记录插入mysql数据库表的过程。

其中插入之前我需要检查给定记录是否存在于数据库中如果记录不存在那么我将插入记录。但如果记录已存在于数据库中,那么我需要更新mysql中的相应记录。

如何检查mysql中是否存在记录。是否可以在Mapper或Reducer类中完成此检查。?同样,如果记录存在如何更新记录。

2 个答案:

答案 0 :(得分:0)

使用登台表来整合来自不同平台的数据的更强大的解决方案。在地图阶段为每个记录查询数据库不是一个好方法,也不能提供数据加载的一致性。所以,

  1. 像目标表一样创建表格(添加2个fieds:' load_ts', ' update_ts')在mysql中的STG模式(或类似),
  2. 从MapRed Job(或Sqoop,...)填充它,
  3. 使用merge子句(或模拟,如果不存在)填充目标 mysql表

答案 1 :(得分:0)

使用sqoop

首先应该有表的主键或唯一键 - update-key 用于更新的锚列。如果有多个列

,请使用逗号分隔的列列表
sqoop export --connect jdbc:mysql://localhost/test --username root --password root --table tempo --export-dir /input_test_files/sqoop_col -m 1 --update-key "unique_key_column" --update-mode allowinsert

- udate-mode 指定在数据库中找到包含非匹配键的新行时如何执行更新。
法律价值观是:
updateonly :仅更新数据库中存在的行,如果不存在则忽略。
allowinsert :如果行已存在于数据库中,则更新行;如果行不存在则插入行。