分享

从mysql导入hive,大量的mysql的数据源导入一个hive中,性能及效率问题

aurae 发表于 2015-9-21 12:02:14 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 20343
目前有5000个mysql的数据库,每个库中有10个表,每个mysql的10个表的对应的表结构都是一致的。10个表,其中有两个表数据量较大,有几十、上百万的数据。
当前需要把mysql中的数据导入hive,并做定时任务的增量更新。
我使用sqoop命令将数据导入mysql,但是执行效率很慢,一晚上执行了200+个库。

当前分析影响效率原因:
1.每个库的每个表的数据同步,执行一个sqoop命令。也就是说执行一轮至少执行5000*10=50000次的sqoop的命令。而不管数据量多大,执行sqoop的每次耗时,至少有个30秒+。
2.使用多个shell脚本执行sqoop,分别执行不同表的同步操作。但是发现不同的sh在执行过程中,hive的sql转换为mapreduce时,在同一时间内,执行执行一个mapreduce。类似下方的日志信息。
2015-09-21 09:48:46,311 Stage-1 map = 0%,  reduce = 0%
2015-09-21 09:48:57,628 Stage-1 map = 1%,  reduce = 0%, Cumulative CPU 7.01 sec
2015-09-21 09:49:01,272 Stage-1 map = 14%,  reduce = 0%, Cumulative CPU 15.17 sec
2015-09-21 09:49:05,257 Stage-1 map = 30%,  reduce = 0%, Cumulative CPU 18.77 sec
2015-09-21 09:49:12,676 Stage-1 map = 32%,  reduce = 0%, Cumulative CPU 31.75 sec


想根据以上两点进行优化,第1点通过每次执行增加为每次执行10个数据库的sql进行union all,应该会加快效率。但是第二点,增加hive的并发执行效率(当前好像不能并发),还不知道怎么优化,请大神们指点一下,或者有其他的提高效率的方法,请赐教!

已有(1)人评论

跳转到指定楼层
bob007 发表于 2015-9-21 14:46:27


楼主可以看看并发的概念

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
来源百度百科。

至于优化,这方面资料还是不多的。如果 设置-m 200  那么就会有200个数据库连接,而且在MAP全工作完毕后 又一起向HIVE 元数据数据库申请连接,因此会给数据库造成压力。因此不宜过多 。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条