如何在所有可用节点中运行 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 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