这次需要将hadoop mr的计算结果导入到mysql中,虽然是mr的结果导入db中,为了保险起见,还是存在hdfs上,之后读取hdfs上的结果导入db中,读取失败可重新执行单个读取导入过程。
一般先动手前,有个思路,再百度看看是否有更好的实现,大略搜了一下,发现sqoop貌似实现了hdfs和各种dc之间的读取写入。这里,因为业务简单,都是insert语句不涉及事务,只是连接一个db,不涉及mr等操作,so我只是借鉴sqoop的思想,没有使用sqoop。
一般实现的思路就是,读取hdfs文件,生成对应的insert语句,导入mysql就好了。
其中需要详细考虑的几个问题如下:
1、批量导入insert,一般的数据量设置多大好些?
2、执行一般失败后重新导入数据,对于已经导入的数据如何处理?
这里的话,当然批量导入会好些,但是也要考虑hdfs的reader是一个个读取数据,如果批量导入的size太大,需要存储数据的变量占用的内存大,会导致oom。
一般批量insert的量不超过1000条就好了,我这边的话,每天的量也就2000条,so我设置成500条了。
执行一般失败后重新导入数据,感觉要先删除已有导入的数据,再次导入。因为我这边每天导入一次,根据日期做delete就行了。对于不同场景,需要自己操作了。
如果是mysql数据库的话,不用自己删除了。