外部系统定时向 MySQL 中插入数据,每 5 分钟插入一次,每次大约 20 万条。 需要把 MySQL 中的数据实时导入到 HDFS 中存储
#### 思路
- 从 MySQL 读取数据到 HDFS使用 jdbc 访问 MySQL,结果保存在 ResultSet 中。
- 如何判断新增数据
每一次读取数据插入到 HDFS 后,新的数据又插入到 MySQL 中。如何判断新 增加的数据哪?
- 如果有自增的 id 或者时间戳,可以保存每一次读取的所有记录中最后的 id 或者 时间戳。建议保持到 redis 中。因为 redis 负责持久化,读写效率高。
- 如果没有自增的 id 或者时间戳,可以使用 sql 中的 limit m,n。在这里,m 表示从 表中开头跳过 m 行,n 表示一次读取多少行。在这里,每一次读取的记录条数累 加到 m 中,保存到 redis 中。下一次查询的时候,m 就是原来已经读取过的记录 条数。n 取多少合适?因为不知道新插入的记录有多少条,就假设无限大,设定 为 999999999。
- 定时执行 使用 crontab 定时执行。 设定格式 */3 * * * * shell 脚本