如何将hive并发映射器增加到4个以上?

时间:2017-04-12 12:53:44

标签: hadoop hive mapreduce

摘要

当我从hive中的表查询运行一个简单的select count(*)时,我的大型集群中只有两个节点用于映射。我想使用整个集群。

详细

我正在使用一个运行hdfs和Hive 1.2.1(IBM-12)的稍大的集群(每个超过200 GB RAM的数十个节点)。

我有几十亿行的表。当我表演一个简单的

select count(*) from mytable;

hive创建了数百个map任务,但只有4个同时运行。

这意味着我的群集在查询期间大部分处于空闲状态,这看起来很浪费。我已经尝试过ssh'ing到正在使用的节点,他们没有完全利用CPU或内存。我们的集群由Infiniband网络和Isilon文件存储提供支持,这两种存储看起来都不是很重要。

我们使用mapreduce作为引擎。我已经尝试删除我可以找到的资源的任何限制,但它并没有改变只使用两个节点的事实(4个并发映射器)。

内存设置如下:

yarn.nodemanager.resource.memory-mb     188928  MB
yarn.scheduler.minimum-allocation-mb    20992   MB
yarn.scheduler.maximum-allocation-mb    188928  MB
yarn.app.mapreduce.am.resource.mb       20992   MB
mapreduce.map.memory.mb                 20992   MB
mapreduce.reduce.memory.mb              20992   MB

我们正在运行41个节点。根据我的计算,我应该能够得到41 * 188928/20992 = 369 map / reduce任务。相反,我得到了4。

Vcor​​e设置:

yarn.nodemanager.resource.cpu-vcores       24
yarn.scheduler.minimum-allocation-vcores   1
yarn.scheduler.maximum-allocation-vcores   24
yarn.app.mapreduce.am.resource.cpu-vcores  1
mapreduce.map.cpu.vcores                   1
mapreduce.reduce.cpu.vcores                1
  • 是否有办法让hive / mapreduce使用更多我的群集?
  • 如何弄清楚瓶颈?
  • 可能是Yarn没有足够快地分配任务吗?

我想使用tez可以提高性能,但我仍然对资源利用率如此有限(而且我们没有安装ATM)感兴趣。

1 个答案:

答案 0 :(得分:0)

运行并行任务取决于您在纱线中的记忆设置 例如,如果您有4个数据节点,并且您的纱线存储器属性定义如下

yarn.nodemanager.resource.memory-mb 1 GB
yarn.scheduler.minimum-allocation-mb    1 GB
yarn.scheduler.maximum-allocation-mb    1 GB
yarn.app.mapreduce.am.resource.mb   1 GB
mapreduce.map.memory.mb 1 GB
mapreduce.reduce.memory.mb  1 GB

根据此设置,您有4个数据节点,因此总 yarn.nodemanager.resource.memory-mb 将是4 GB,您可以使用它来启动容器 并且由于容器可以占用1 GB内存,因此在任何给定的时间点都可以启动4个容器,一个将由应用程序主机使用,因此您可以在应用程序的任何给定时间点运行最多3个映射器或减速器任务master,mapper和reducer各使用1 GB内存

所以你需要增加 yarn.nodemanager.resource.memory-mb 来增加map / reduce任务的数量

P.S。 - 这里我们正在考虑可以启动的最大任务,它可能比这还要少