【问题标题】:Hadoop: High CPU load on client side after committing jobsHadoop:提交作业后客户端的高 CPU 负载
【发布时间】:2023-04-04 14:36:01
【问题描述】:

在筛选一些 Hadoop 指南时,我找不到问题的答案:我通过客户端计算机上的 shell 脚本一次性提交各种 Hadoop 作业(最多 200 个)。每个作业都通过一个 JAR(相当大;大约 150 MB)启动。提交作业后,客户端计算机的 CPU 负载非常高(每个内核都在 100% 上),并且 RAM 很快就满了。这样,客户端不再可用。我以为每个作业的计算完全在Hadoop框架内完成,作业运行时集群和客户端之间只交换一些状态信息。

那么,为什么客户端会完全拉伸?我是否以错误的方式提交 Hadoop 作业?每个 JAR 是否太大?

提前致谢。

【问题讨论】:

    标签: client hadoop jobs cpu-usage


    【解决方案1】:

    这与罐子无关。客户端正在计算InputSplits。 因此,当每个作业有大量输入文件时,客户端机器可能会承受大量负载。 但我想在提交 200 个作业时,jobtracker 上的 RPC 处理程序会出现一些问题。 jobtracker 上有多少 RPC 处理程序处于活动状态?

    无论如何,我一次最多可以批量提交 10 或 20 个作业,然后等待它们完成。我猜你有默认的 FIFO 调度程序?因此,一次提交所有 200 个作业也不会让您受益。

    【讨论】:

    • 我不知道 jobtracker 的 RPC 处理程序的配置。 mapred-site.xml 中的值设置为 40。我正在使用 FairScheduler。
    • 嗯,你可以增加一点。但是计算输入拆分的内存使用量仍然存在。
    • 另外,jar 文件必须复制到 HDFS。 200 个作业 * 150 MB ~ 30 GB 从客户端到 HDFS。此外,mapred.submit.replication 默认为 10(因此 30 GB 必须在 HDFS 中复制 10 次)。文档说这种复制应该是节点数的平方根。不确定减少这种复制是否会使事情变得更快。
    • @PraveenSripati 感谢您的见解。实际上,mapred.submit.replication 值仍然设置为默认值。我的集群中有大约 40 个节点,所以我会尝试将值减小到 6。此外,我会尽量减少我的 JAR 的大小,因为复制和网络流量造成的影响非常高。
    • @Thomas - I guess you're having the default FIFO scheduler? So you won't benefit from submitting all 200 jobs at a time either. - 只是好奇这有什么关系?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多