Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何知道火花群中的机器';参与';这是一份工作_Apache Spark_Hadoop_Autoscaling - Fatal编程技术网

Apache spark 如何知道火花群中的机器';参与';这是一份工作

Apache spark 如何知道火花群中的机器';参与';这是一份工作,apache-spark,hadoop,autoscaling,Apache Spark,Hadoop,Autoscaling,我想知道什么时候从集群的机器上删除节点是安全的 我的假设是,如果机器没有任何容器,并且没有存储任何有用的数据,那么移除机器是安全的 通过上的API,我们可以 GET http://<rm http address:port>/ws/v1/cluster/nodes GEThttp:///ws/v1/cluster/nodes 获取每个节点的信息,如 <node> <rack>/default-rack</rack> <s

我想知道什么时候从集群的机器上删除节点是安全的

我的假设是,如果机器没有任何容器,并且没有存储任何有用的数据,那么移除机器是安全的

通过上的API,我们可以

 GET http://<rm http address:port>/ws/v1/cluster/nodes
GEThttp:///ws/v1/cluster/nodes
获取每个节点的信息,如

<node>
    <rack>/default-rack</rack>
    <state>RUNNING</state>
    <id>host1.domain.com:54158</id>
    <nodeHostName>host1.domain.com</nodeHostName>
    <nodeHTTPAddress>host1.domain.com:8042</nodeHTTPAddress>
    <lastHealthUpdate>1476995346399</lastHealthUpdate>
    <version>3.0.0-SNAPSHOT</version>
    <healthReport></healthReport>
    <numContainers>0</numContainers>
    <usedMemoryMB>0</usedMemoryMB>
    <availMemoryMB>8192</availMemoryMB>
    <usedVirtualCores>0</usedVirtualCores>
    <availableVirtualCores>8</availableVirtualCores>
    <resourceUtilization>
        <nodePhysicalMemoryMB>1027</nodePhysicalMemoryMB>
        <nodeVirtualMemoryMB>1027</nodeVirtualMemoryMB>
        <nodeCPUUsage>0.006664445623755455</nodeCPUUsage>
        <aggregatedContainersPhysicalMemoryMB>0</aggregatedContainersPhysicalMemoryMB>
        <aggregatedContainersVirtualMemoryMB>0</aggregatedContainersVirtualMemoryMB>
        <containersCPUUsage>0.0</containersCPUUsage>
    </resourceUtilization>
  </node>

/默认机架
跑步
host1.domain.com:54158
host1.domain.com
host1.domain.com:8042
1476995346399
3.0.0-SNAPSHOT
0
0
8192
0
8.
1027
1027
0.006664445623755455
0
0
0
如果numContainers为0,我假设它不运行容器。然而,它还能在磁盘上存储其他下游任务可以读取的数据吗

我不知道Spark是否让我们知道这一点。我假设,如果一台机器仍然存储一些对正在运行的作业有用的数据,那么该机器可能会使用Spark驱动程序或某个中央控制器保持心跳?我们可以通过扫描tcp或udp连接来检查这一点吗


是否有其他方法可以检查Spark群集中的机器是否参与作业?

我不确定您是否只想知道某个节点是否正在运行任何任务(这就是您所说的“参与”的意思),还是想知道从Spark群集中删除某个节点是否安全

我将试图解释后一点

Spark能够从故障中恢复,这也适用于从集群中移除的任何节点。 移除的节点可以是执行器或应用程序主节点

  • 如果删除应用程序主机,则整个作业将失败。但是,如果您正在使用Thread作为资源管理器,则会重试该作业,Thread将提供一个新的应用程序主控程序。在中配置了重试次数:
  • warn.resourcemanager.am.max-tests

    默认情况下,此值为2

  • 如果删除了正在运行任务的节点,则资源管理器(由Thread处理)将停止从该节点获取心跳。应用程序主机将知道它应该重新安排失败的作业,因为它将不再从上一个节点接收进度状态。然后,它将请求资源管理器提供资源,然后重新安排作业
  • 就这些节点上的数据而言,您需要了解任务及其输出是如何处理的。每个节点都有自己的本地存储,用于存储在其上运行的任务的输出。任务成功运行后,
    OutputCommitter
    将输出从本地存储器移动到作业的共享存储器(HDFS),从中为作业的下一步提取数据。 当任务失败时(可能是因为运行此作业的节点失败或被删除),将在另一个可用节点上重新运行该任务


    事实上,应用程序主机还将在此节点上重新运行成功运行的任务,因为其存储在节点本地存储上的输出将不再可用。

    我的目标是删除空闲节点,而不引入更多重试,因为重试会使运行变慢。听起来好像OutputCommitter之后,下游节点不再需要从节点读取数据,所以我们可以删除节点。我们知道节点是否可以运行OutputCommitter吗?在节点运行OutputCommitter期间,节点是否显示“0”?我想知道我们什么时候知道可以删除节点。