在Azure Synapse中调用POST livy批处理API时,Spark请求的核心数超过请求的核心数

jogvjijk  于 2023-10-23  发布在  Apache
关注(0)|答案(2)|浏览(173)

我有一个azure synapse spark集群,有3个节点,每个节点有4个vCores和32 GB内存。我试图使用azure synapse Livy批处理API提交一个spark作业。请求看起来像这样,

curl --location --request POST 'https://<synapse-workspace>.dev.azuresynapse.net/livyApi/versions/2019-11-01-preview/sparkPools/<pool-name>/batches?detailed=true' `
--header 'cache-control: no-cache' `
--header 'Authorization: Bearer <Token>' `
--header 'Content-Type: application/json' `
--data-raw '{
    "name": "T1",
    "file": "folder/file.py",
    "driverMemory": "1g",
    "driverCores": 1,
    "executorMemory": "1g",
    "executorCores":1,
    "numExecutors": 3
}'

我得到的回应是,

{
    "TraceId": "<some-guid>",
    "Message": "Your Spark job requested 16 vcores. However, the pool has a 12 core limit. Try reducing the numbers of vcores requested or increasing your pool size."
}

我想不通为什么要16核,不是应该是4(3 * 1 + 1)核吗?

更新:我尝试将节点池大小更改为3个节点,每个节点8个vCore,64 GB内存。使用此配置,

{
    "name": "T1",
    "file": "folder/file.py",
    "driverMemory": "1g",
    "driverCores": 1,
    "executorMemory": "1g",
    "executorCores": 1,
    "numExecutors": 6
}

它请求28个核心(即使是executorCores 2,3,4)。如果我将executorCores更改为5,6,7或8,它将请求56个核心。

mitkmikd

mitkmikd1#

Livy用于计算vcore使用的逻辑与yarn中的逻辑不同。Livy似乎在没有告诉我们的情况下将driverCores和executorCores“四舍五入”为4或8的倍数。这种意外行为似乎是一个bug,每当客户遇到它时。
虽然YARN集群管理器可以接受较小的作业,但较小的作业无法通过定制Livy实现的大门(它都是来自Synapse-Spark团队的本地代码)。
在2023年9月27日,我收到了来自CSS的以下更新。我希望我能分享ICM #或BUG #,但这些都很难获得。我相信这里提到的“PG”是指Synapse Spark团队中的“jobs-service”工程师。

**“我们从PG团队那里得到了一个更新,负责将核心舍入到最接近的可用大小的微服务已经被修改,以适应更小的容器大小,我们还部署了新的位,目前该版本已经到达美国东部地区,所以它将很快完成,你将能够看到改进。

长话短说,Livy在提交任意大小的执行程序和驱动程序的作业时,可能会开始表现得更好。(via Yarn). I am not holding hold my breath,直到我自己看到它发生。希望这是有意义的。我会尝试更新我的答案后,我的部署和测试完成。

t2a7ltrp

t2a7ltrp2#

从门户没有办法做你想做的事。
但是,您仍然可以通过指定驱动程序(核心和内存)和执行程序(核心和内存)来提交Spark作业。
使用上面的代码,我可以在3个节点Medium示例中提交9个并发作业(1个驱动程序和1个执行器,都消耗一个内核)(每个示例8个内核,但只有7个可用,因为1个是为Hadoop守护进程保留的)。

相关问题