2016-06-02 3 views
2

나는 아파치 스파크를 사용하기 시작했다. 클러스터 모드 (master, slave1, slave2)를 사용 중이며 Hadoop (hdfs)에 보관되어있는 큰 파일을 처리하려고합니다. SparkContext에서 textFile 메서드를 사용하고 있습니다. 파일이 처리되는 동안 노드를 모니터링하면 slave2가 작동 중임을 알 수 있습니다. 처리 후 slave2에는 작업이 있지만 slave1에는 작업이 없습니다. hdfs를 사용하는 대신 로컬 파일을 사용하는 경우 두 슬레이브가 동시에 작동합니다. 나는 왜 이런 행동을하지 않습니다. 제발, 아무도 내게 단서를 줄 수 있니?스파크 : hdfs 클러스터 모드

답변

2

이 동작의 주된 이유는 데이터 지역의 개념입니다. Spark의 응용 프로그램 마스터가 새로운 실행 프로그램 작성을 요청하면 데이터가있는 동일한 노드에 할당하려고 시도합니다.

e.e. 귀하의 경우, HDFS는 동일한 노드에 파일의 모든 블록을 작성한 것 같습니다. 따라서 Spark은 해당 노드에서 집행자를 인스턴스화합니다. 대신 로컬 파일을 사용하면 모든 노드에 파일이 있으므로 데이터 위치가 더 이상 문제가되지 않습니다.

+0

감사합니다. @ mark91. 따라서 HDFS를 사용하고 모든 노드를 작동시키는 방법은 없습니다. – chufabit

+0

Spark에서 모든 클러스터 리소스를 사용하는 것이 HDFS가 슬레이브에 데이터를 배포하는 방법이라고 생각하지 않습니다. 이를 수행하는 주요 방법은 실행 프로그램의 수와 Spark에서 사용하는 파티션 수를 제어하는 ​​것입니다. 이를 늘리면 클러스터에서 더 많은 리소스를 활용하게됩니다. 어쨌든, 집행자가 클러스터간에 어떻게 퍼져 있는지 염려한다면 HDFS의 복제 요소를 고려해야합니다. 3 복제본 요소를 가짐으로써 노드 3 개가 똑같은 분할을 갖게되어 모든 노드가 자격을 갖추게됩니다. – mgaido

+0

대단히 고맙습니다. @ mark91 – chufabit

관련 문제