我已经对纱线结构和火花结构有所了解,但是当我试图一起理解它们时(发生了什么) 当apark作业在Hadoop群集上在YARN上作为主服务器运行时,我陷入了一些混乱。 引起我的困惑
说我有一些复制因子在HDFS上存储了一个文件“订单项”。 现在,我通过将此文件读入Spark RDD(例如,用于计算订单收入)来处理数据。 我已经编写了代码,并按如下所示配置了spark提交
spark-submit \
--master yarn \
--conf spark.ui.port=21888 \
--num-executors 2 \
--executor-memory 512M \
src/main/python/order_revenue.py
让我们假设我创建的RDD的分区为5,并且我是在yarn-client模式下执行的。
现在,据我了解,一旦我在YARN上提交了Spark作业,
由于我已在客户端模式下提交,因此驱动程序将在我的边缘节点/网关节点上运行。 我提供了num-executors为2和executor内存为512 mb
我还为RDD提供了5个分区,这意味着它将创建5个读取数据的分区 并分布在5个节点上。
现在,我对此有一些困惑
我已经阅读了用户指南,rdd的分区将分配到不同的节点。这些节点是否与 HDFS群集的“数据节点”?我的意思是这里有5个分区 这意味着它在5个数据节点中?
我提到num-executors为2.因此这5个数据分区将使用2个executors(CPU)。所以我的下一个问题是 这2个执行器(CPU)将被选中?我的意思是5个分区位于5个节点中 对,这2个执行器也位于这些节点中的任何一个吗?
- 调度程序负责根据容量限制将资源分配给各种正在运行的应用程序, 队列等。容器也是Linux控制组 允许用户分配的Linux内核功能 用户进程的CPU,内存,磁盘I / O和带宽。所以我的最后 问题是容器实际上是由“调度程序”提供的吗?
我在这里很困惑。我已经提到了架构,发布文档和一些视频,然后搞砸了。
期望在这里伸出援手。
答案 0 :(得分:1)
首先要回答您的问题:
1)很简单,Executor是spark的worker节点,driver是manager节点,与hadoop节点无关。假定执行者是处理单元(在这里说2),repartition(5)将数据分成5个块,由这2个执行者组成,并且在某些基础上,这些数据块将在2个执行者之间分配。分区数据不会创建节点
火花群集体系结构:
有关其他详细信息,您可以阅读博客文章https://sujithjay.com/2018/07/24/Understanding-Apache-Spark-on-YARN/