如何在所有可用节点中运行 Hive mapreduce 任务?

Posted

技术标签:

【中文标题】如何在所有可用节点中运行 Hive mapreduce 任务?【英文标题】:How to run Hive mapreduce tasks in all available nodes? 【发布时间】:2014-01-21 12:21:46 【问题描述】:

我是 Hadoop 和 Hive 世界的新手。

我编写了一个 Hive 查询,它正在处理 1.89 亿行(40 GB 文件)。在我执行查询时。 Hive 查询在单机上执行并生成许多 map 和 reduce 任务。这是预期的行为吗?

我读过很多文章 Hadoop 是分布式处理框架。我所理解的 Hadoop 会将您的工作拆分为多个任务并将这些任务分配到不同的节点,一旦任务完成,reducer 将加入输出。如果我错了,请纠正我。

我有 1 个主节点和 2 个从节点。我正在使用 Hadoop 2.2.0 和 Hive 0.12.0。

【问题讨论】:

【参考方案1】:

您对 hive 的理解是正确的 - hive 将您的查询转换为 hadoop 作业,该作业又被拆分为多个任务,分发到节点、映射 > 排序和随机播放 > 减少聚合 > 返回到 hive CLI。

【讨论】:

【参考方案2】:

如果您有 2 个从属节点,只要您的集群配置正确,Hive 会将其工作负载分摊到这两个节点上。

话虽如此,如果您的输入文件不可拆分(例如,它是一个 GZIP 压缩文件),Hadoop 将无法拆分/并行化工作,您将陷入单一输入拆分,因此单一映射器,将工作负载限制在单台机器上。

【讨论】:

【参考方案3】:

感谢大家的快速回复。

你们都纠正了我的工作被转换成不同的任务并分发到节点。

当我在第一级检查 Hadoop Web UI 时,它显示作业正在单个节点中运行。当我进一步深入研究时,它显示了 Mappers 和 Reducers 以及它们的运行位置。

谢谢:)

【讨论】:

以上是关于如何在所有可用节点中运行 Hive mapreduce 任务?的主要内容,如果未能解决你的问题,请参考以下文章

Hive优化总结

运行 sql 时配置单元 UDF 如何运行?

解决 hive maPredue转换hivesql出错Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.a

解决 hive maPredue转换hivesql出错Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.a

多个节点中的 Hive 表 - 处理

Hive上的小文件的性能问题