1.mapper数量
无论什么博客还是官网,一直强调控制写入ES的mapper数量,那怎么控制mapper的数量?
1)源表的分区数目
因为
mapred.min.split.size ,
mapred.max.split.size ,
dfs.block.size
splitSize = Math.max(minSize, Math.min(maxSize, blockSize));
所以可以调节这两个参数就行。
set mapred.min.split.size = 800000000;
set mapred.max.split.size = 1073741824;
当然需要打开mege合并参数
set hive.merge.mapfiles = true #在Map-only的任务结束时合并小文件
set hive.merge.mapredfiles = true #在Map-Reduce的任务结束时合并小文件
2)控制entries和size
es.index.entries的数量不能太大,不然运行一段时间就被ES reject了。
一般控制在1000条和1mb左右可以了。
3)导入JSON数据
导入JSON数据的关键,就是表示ES的临时表,一定只能有一个
字段,不然就会报错: only one field。
4)采用临时表的方式
采用临时表的方式,非常便于添加或者减少字段。如果采用外表,
一旦字段数量不匹配,hive就报错,非常不方便。使用临时表特别方便。