Hive数据导入ES的各种坑

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就报错,非常不方便。使用临时表特别方便。

你可能感兴趣的:(hive,elasticsearch)