복붙노트

[HADOOP] Hadoop에서 글로벌 순차 번호 생성기를 공유하는 방법은 무엇입니까?

HADOOP

Hadoop에서 글로벌 순차 번호 생성기를 공유하는 방법은 무엇입니까?

이제 Hadoop을 사용하여 최종적으로 동일한 테이블에로드 될 데이터를 처리하고 있습니다. 각 행의 ID를 생성하려면 공유 순차 번호 생성기가 필요합니다. 이제 다음 방법을 사용하여 고유 번호를 생성합니다.

1) 현재 순차 번호를 저장할 텍스트 파일 (예 : test.seq)을 HDFS로 작성하십시오.

2) 잠금 파일 ".lock"을 사용하여 동시성을 제어합니다. 데이터를 병렬로 처리하는 두 가지 작업이 있다고 가정합니다. task1이 번호를 얻으려면 잠금 파일이 있는지 확인합니다. 그렇다면, task2가 test.seq에서 번호에 액세스하고 있음을 의미하며, task1은 기다려야합니다. task2가 숫자를 획득하면 반환 될 때 1을 증가시켜 이전 숫자를 겹쳐 쓰고 잠금 파일 ".lock"을 삭제합니다. task1에서 .lock이 사라지면 task1은 먼저 ".lock"파일을 작성한 다음 동일한 방법으로 순번을 가져옵니다.

그러나이 접근법이 실용적인지 확실하지 않습니다. .lock 및 test.seq 파일을 HDFS에 유지하기 때문에 test.seq의 내용이 작업 1에 의해 변경 되었더라도 task2에서 즉시 인식하지 못할 수 있습니다. 다른 작업에서 HDFS의 데이터에 대한 정보는 namenode를 통해 가져옵니다. 따라서 데이터 노드는 먼저 이름 노드의 변경 사항을 알리고 다른 작업에 변경 사항을 알립니다. 맞습니까?

또 다른 아이디어는 마스터에서 실행되는 트로이 목마 프로그램을 만드는 것입니다. 따라서 작업은 순차적 번호를 얻는 것이 RPC 트로이 목마 프로그램입니다. 그러나 마스터 프로그램에서 Torjan 프로그램을 실행하는 방법은 무엇입니까?

아무도 나에게 조언을 해줄 수 있습니까? 감사!

해결법

  1. ==============================

    1.주요 문제는 수평 확장 성 속성으로 인해 hadoop을 선택한다는 것입니다. 중심점에서 조정해야하는 것을 포함하면 모든 형태의 수평 확장 성이 크게 손상됩니다.

    주요 문제는 수평 확장 성 속성으로 인해 hadoop을 선택한다는 것입니다. 중심점에서 조정해야하는 것을 포함하면 모든 형태의 수평 확장 성이 크게 손상됩니다.

    따라서 두 가지 옵션이 있습니다.

    나는 후자가 당신의 목적에 충분한 지 보려고 노력할 것입니다. 이러한 솔루션 중 하나는 현재 추적기 인스턴스의 ID를 가져와 로컬 카운터 값을 추가하는 것입니다. 이런 식으로이 값은 트래커마다 고유하고 동일한 작업을 여러 번 실행하지만 작업 내에는 없습니다.

  2. ==============================

    2.HDFS가 빠르게 변화하는 데이터를 일관되게 볼 수는 없다는 것이 맞습니다. 이 접근 방식은 많은 트래픽으로 인해 네임 노드에 부담을 줄 수 있습니다.

    HDFS가 빠르게 변화하는 데이터를 일관되게 볼 수는 없다는 것이 맞습니다. 이 접근 방식은 많은 트래픽으로 인해 네임 노드에 부담을 줄 수 있습니다.

    ZooKeeper 배포에 노력할 것을 강력히 권장합니다. 독립적 인 서비스로 구축되었지만 Hadoop으로 글로벌 상태 추적을 위해 설계되었습니다. 좋은 물건.

    문제를 해결하려면 ZooKeeper가 오름차순 값으로 할당 할 디렉토리에 노드를 작성하십시오. 확장 성, 내결함성 및 모든 좋은 것들입니다.

  3. ==============================

    3.시간순으로 항목을 가져야하는 경우 ID 대신 타임 스탬프를 저장하십시오.

    시간순으로 항목을 가져야하는 경우 ID 대신 타임 스탬프를 저장하십시오.

  4. from https://stackoverflow.com/questions/7929485/how-to-share-global-sequential-number-generator-in-hadoop by cc-by-sa and MIT license