2017-12-29 38 views
0

두 개의 다른 지역에있는 두 인스턴스 사이에 Spark 클러스터를 만들려고합니다. 동일한 VPC/보안 그룹에 속하지 않으므로 한 영역에서 다른 영역의 종속 장치로 마스터를 연결하는 데 문제가 있습니다 (반대의 경우도 마찬가지 임). 지금까지 나는 다음과 같은 짓을 : 마스터 및 슬레이브의 공용 IP를 추가 할 수Amazon EC2에서 공용 IP를 스파크 노드에 바인딩하는 방법은 무엇입니까?

  1. 편집/etc/hosts 파일을

    54.208.204.190 master 13.113.105.113 slave01

  2. $ SPARK_HOME/conf의/슬레이브 파일에

    추가 된 slave01

    01,237,286,723,826,863,211,492,512,321 : $ SPARK_HOME에서

  3. 는/conf의는/spark-env.sh는 다음과 같은 추가 0

    master의 공용 IP 할당이 작동하지 않아 SPARK_MASTER_HOST에서 master의 Public DNS를 할당했습니다.

    MasterUI' could not bind on port 8080.

그래서, 위의 구성이 나를 위해 일한 내가 성공적으로 마스터에 등록 slave01 볼 수 있고, 의도 한대로 스파크 UI를 한 노동자는 보여주는데 : 그것은 나에게 다음과 같은 오류를 표시했다. 하지만 SparkPi 예제를 실행하려고하면 실행 프로그램을 추가 할 수 없습니다. slave01의 로그에서 다음을 찾았습니다.

`Caused by: java.io.IOException: Failed to connect to /172-31-23-69:48441` 

172-31-23-69는 마스터의 개인 IP입니다. 내 이해에서, slave01은 master의이 개인 IP에 의해 master에 연결하려고했지만 동일한 vpc에 있지 않기 때문에 slave01은 master에 연결하지 못했습니다. 나는 왜 slave01이 spark-env.sh와 hosts 파일에서 마스터의 Public DNS와 IP를 모두 주었기 때문에 master의 사설 IP를 사용하려고하는지 잘 모르겠습니다. 또한, slave01이 마스터의 개인 IP를 알게 된 또 다른 흥미로운 질문입니다.

두 인스턴스에서 각각 SPARK_LOCAL_IP 변수를 공용 IP로 설정하려고 시도했지만 작동하지 않습니다. 누군가가 저에게 어떤 종류의 방향을 보여줄 수 있다면 저는 매우 감사 할 것입니다. 미리 감사드립니다.

+1

공용 IP 정적으로 인터넷 게이트웨이에 의해 사설 IP에 NAT-ED 때문에 당신은 EC2 인스턴스의 공용 IP로 소켓을 바인딩 할 수 없습니다. ('ifconfig'의 출력을 보라 - 공용 IP는 존재하지 않으며 거기에 있지 않아야한다.) 두 개의 VPC를 피어싱하여 컴퓨터에 개인 연결을 제공 할 수 있습니까? [VPC는 이제 교차 지역 피어링을 지원합니다.] (https://aws.amazon.com/about-aws/whats-new/2017/11/announcing-support-for-inter-region-vpc-peering/) –

+0

당신의 제안이 효과가있었습니다. 사용할 수있는 영역은 4 개 뿐이지 만 시작일뿐입니다. 친절한 도움을 주셔서 감사합니다. 당신은 내가 그것을 확인할 수 있도록 대답으로 당신의 의견을 넣을 수 있습니다. 다시 한번 감사드립니다. – user3086871

답변

1

EC2 인스턴스에 공용 IPv4 주소가 연결되어있는 경우 공용 IP 주소를 EC2에서 처리하는 방식 때문에 소켓을 공용 IP 주소에 바인딩 할 수 없습니다.

공용 IP가 인터넷 게이트웨이에 의해 개인 IP에 정적으로 NAT - 인스턴스 자체가 공용 IP 주소를 인식하지 못합니다.

(공용 IP는 없으며 개인 IP 만 있음).

VPC 피어링을 사용하면 여러 VPC의 네트워크를 서로 연결하여 인스턴스가 계정 경계와 AWS 영역 경계를 넘어서 서로 액세스 할 수 있습니다.

현재하고있는 일에 맞는 대안이있을 수 있지만 개인 IP 공간의 경계 내에서 트래픽을 모두 유지하는 것이 좋은 해결 방법 및 모범 사례처럼 보입니다.

상호 연결된 VPC에는 고유 한 중복되지 않는 CIDR 블록이 있어야합니다.피어링은 전이 적이 지 않으므로 VPC A에서 B로 피어 올린 다음 VPC B에서 C로 피어링하면 VPC A 및 C가 통신 할 수 없습니다. 통신해야 할 인스턴스가있는 두 개의 VPC는 ​​직접 피어링되어야합니다.

https://docs.aws.amazon.com/AmazonVPC/latest/PeeringGuide/Welcome.html