Sqoop优化

1.怎么监控数据是否完全导入?

使用shell脚本去查询mysql中某表的数据。然后和hive中表的行数对比。

#!/bin/bash
cnt = ‘mysq1 -uroot -p123456 一e "select count(*) from hyk.dept"’
echo“u2 table of test total rows :${cnt}"

2.某表如果2G数据,设置多少个mapper合适?

建议128M(和块大小一致)一个mapper即可.

3.-m和split-by的优化

小量数据时(200M左右): 最好使用一个map,快且减少小文件。

大量数据时: 要特别考虑数据的特征,对于spit-by最完美的情况是有一个:均匀分布的数字(如自增列)或时间事段。且这个字段还有素引(最好字段是int. tinyin)。 这样在抽取时使得并发的每个sql处理相近的数据量,并且Sqoop附加的where条件可以使用索引。

split-by id,-m,数据量1-100,第一个mapper:(0,50],第二个mapper:(50, 100]。

对于m要综合考虑数据量、IO、源数据库的性能、集群的资理等等。一种简单的考虑是最大不超过yarn上分配给这个用户的vcore个数,最小“数据量/m”要够一个128MB的文件。如果条件允许可以先设置一个值跑着试试,然后观察源数据库负载,集群IO以及运行时长等,再进行相应调整。

4. --fetch-size n
一次去mysql中批量读取的数据条数。建议:

1.考虑一条数据的量。(如果2个字段和200个字段的–fetch-size不能一样)

2.考虑数据库的性能

3.考虑网络速度

4.最好的状态是一次–fetch-size能满足一个mapper

发布了59 篇原创文章 · 获赞 4 · 访问量 4484

猜你喜欢

转载自blog.csdn.net/weixin_45102492/article/details/104679803