Hadoop HBase HFiles大小生成

Hadoop HBase HFiles大小生成,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,我正在使用一个包含28个区域服务器的HBase群集 我有一个表,它使用宽表定义。行键是一个十六进制字符串,而每行正好有一个列族,这又有80个限定符。 每个限定符名称都是一个从1到80的整数,每个值都是一个长整数。 使用HBase手册中定义的经典getHexSplits方法,该表已预分为28个区域 我有一个创建表的Map Reduce作业,必须在其中加载大约1.8 TB的数据 我正在使用HFileOutputStream创建HFiles。问题是,尽管作业配置了28个减缩器,并且hbase.hreg

我正在使用一个包含28个区域服务器的HBase群集

我有一个表,它使用宽表定义。行键是一个十六进制字符串,而每行正好有一个列族,这又有80个限定符。 每个限定符名称都是一个从1到80的整数,每个值都是一个长整数。 使用HBase手册中定义的经典getHexSplits方法,该表已预分为28个区域

我有一个创建表的Map Reduce作业,必须在其中加载大约1.8 TB的数据

我正在使用HFileOutputStream创建HFiles。问题是,尽管作业配置了28个减缩器,并且hbase.hregion.max.filesize设置为默认10GB,但我得到的每个减缩器大约有1149个1.61 GB!我期望的文件

问题是,一旦创建了表,并且加载了HFiles,表就会立即启动主压缩和次压缩,这会触发大量I/O,并影响我的下一个Map Reduce作业,该作业会从表中读取数据。我想这是因为每个区域有多个HFiles,HBase会尝试压缩它们以优化读取

如何确保获得较少数量的HFiles,以避免压缩?设置表的区域数最理想的方法是什么?我可以设置哪些其他参数来确保没有压缩?
我的表只写一次,然后仅用于读取。

你是说每个减速机生成多个HFile~41个每个减速机?是的,Map Reduce作业使用28个减速机运行,但我得到了1100多个输出hfiles。我没有配置减缩器的数量,但我认为HFileOutputFormat.configureIncrementalLoad通过查看表预裂区域的数量来配置减缩器。