하나의 마스터와 3 명의 직원이있는 Spark 클러스터를 설정했습니다. Spark는 CentOS VM에 설치되어 있습니다. 로컬 VM에서 Spark 셸을 실행하여 마스터에 연결하고 간단한 스칼라 코드를 실행할 수있게하려고합니다. 그래서, 다음은 내 로컬 VM에서 실행하는 명령입니다.어떻게 Apache Spark 쉘을 원격으로 실행할 수 있습니까?
bin/spark-shell --master spark://spark01:7077
쉘은 스칼라 코드를 입력 할 수있는 지점까지 실행됩니다. 유언 집행관은 (각 근로자 당 3 명씩) 허가를 받았다고합니다. 마스터 UI를 들여다 보면 하나의 실행중인 애플리케이션 인 스파크 쉘을 볼 수 있습니다. 모든 작업자는 2/2 코어를 사용하고 응용 프로그램에 512MB (5GB 중)를 할당했습니다. 따라서 다음 스칼라 코드를 실행하려고합니다.
sc.parallelize(1 to 100).count
불행히도 명령이 작동하지 않습니다. 쉘은 단지 끝없이 같은 경고를 출력 할 것이다 :
INFO SparkContext: Starting job: count at <console>:13
INFO DAGScheduler: Got job 0 (count at <console>:13) with 2 output partitions (allowLocal=false)
INFO DAGScheduler: Final stage: Stage 0(count at <console>:13) with 2 output partitions (allowLocal=false)
INFO DAGScheduler: Parents of final stage: List()
INFO DAGScheduler: Missing parents: List()
INFO DAGScheduler: Submitting Stage 0 (Parallel CollectionRDD[0] at parallelize at <console>:13), which has no missing parents
INFO DAGScheduler: Submitting 2 missing tasts from Stage 0 (ParallelCollectionRDD[0] at parallelize at <console>:13)
INFO TaskSchedulerImpl: Adding task set 0.0 with 2 tasks
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory
WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory
문제에 대한 내 연구에 따라, 나는 내가 사용하고있는 마스터 URL은 웹 UI에있는 것과 동일 있음을 확인했다. 두 가지 방법으로 ping 및 ssh를 수행 할 수 있습니다 (클러스터를 로컬 VM에 적용하고 그 반대의 경우도 가능). 또한 executor-memory 매개 변수 (메모리를 증가 시키거나 감소시키는 매개 변수)를 사용하여 아무런 효과가 없습니다. 마지막으로 양쪽에서 방화벽 (iptables)을 사용하지 못하게 시도했지만 동일한 오류가 계속 발생합니다. Spark 1.0.2를 사용하고 있습니다.
TL : DR Apache Spark 쉘을 원격으로 실행할 수 있습니까? (본래 응용 프로그램을 원격으로 제출할 수 있습니까?) 그렇다면 무엇을 놓치고 있습니까?
편집 : 나는 작업자 로그를 살펴했고 노동자 문제가 발견 스파크 남겼 :
ERROR org.apache.spark.deploy.worker.ExecutorRunner: Error running executor
java.io.IOException: Cannot run program "/usr/bin/spark-1.0.2/bin/compute-classpath.sh" (in directory "."): error=2, No such file or directory
...
스파크는 클러스터보다는 내 로컬 VM에 다른 디렉토리에 설치됩니다. 작업자가 찾으려고하는 경로는 로컬 VM에있는 경로입니다. 이 경로를 지정하는 방법이 있습니까? 또는 그들이 어디에나 동일해야합니까?
당분간이 오류를 피하기 위해 디렉토리를 조정했습니다. 카운트 명령 (Master removed our application: FAILED
)을 입력 할 수있게되기 전에 내 스파크 셸이 실패합니다. 모든 직원의 오류는 같습니다.
ERROR akka.remote.EndpointWriter: AssociationError [akka.tcp://[email protected]:7078] -> [akka.tcp://[email protected]:53633]:
Error [Association failed with [akka.tcp://[email protected]:53633]]
[akka.remote.EndpointAssociationException: Association failed with [akka.tcp://[email protected]:53633]
Caused by: akka.remote.transport.netty.NettyTransport$$anonfun$associate$1$$annon2: Connection refused: spark02/192.168.64.2:53633
의심되는 것으로, 네트워크 문제가 있습니다. 지금 무엇을 봐야합니까?
다음 두 가지를 시도해주세요. 1. 마스터가 실행중인 노드에서 마스터에 연결을 시도하십시오. 2. 호스트 이름을 "모든 곳"의 IP로 대체하십시오. –
원격 시스템에서 Spark 클러스터에 연결할 수 있습니다. 스파크 셸은 클러스터에서 실행되는 또 다른 Scala 프로그램입니다. –
예, 가능하며 작동해야합니다. 네트워크 문제가 의심됩니다. 내 머리 꼭대기에서 잘 모르겠지만, 노동자들이 일부 포트에서 로컬 컴퓨터에 연결을 시도 할 것입니다. 증상에서 나는 그것이 효과가 없다고 생각합니다. 어쩌면 작업자 로그에서 더 많은 정보를 찾을 수 있습니다! –