2012-02-17 3 views
6

나는 hadoop으로 놀기 시작했다. (그러나 클러스터에 액세스 할 수는 없으므로 독립 실행 형으로 놀고있다.) 내 질문은 일단 클러스터 설정에서 어떻게 작업을 배포하고 코드베이스를 새 노드로 전송할 수 있습니까?Hadoop은 작업과 코드베이스를 배포 할 수 있습니까?

이상적으로는 대규모 일괄 처리 작업을 실행하고 클러스터에 새 노드를 추가해야하지만 같은 코드를 복사해야 할 지 모르겠다. 배치 작업이 실행되는 동안 용량을 추가 할 수 있습니다. HDFS에 코드베이스를 저장하고 필요할 때마다 실행되도록 로컬로 가져 왔지만 서버에 초기 스크립트가 필요하다는 것을 의미하므로 수동으로 먼저 실행해야합니다.

가능하다면 어떤 제안이나 조언을 부탁드립니다.

감사합니다.

답변

7

hadoop jar 명령을 사용하여 mapreduce 작업을 예약하면 jobtracker가 작업을 실행하는 데 필요한 매퍼 수를 결정합니다. 이는 일반적으로 입력 파일의 블록 수에 의해 결정되며 사용자가 보유한 작업자 노드의 수와 관계없이이 수는 고정되어 있습니다. 그런 다음 작업을 실행하기 위해 하나 이상의 작업 추적자를 등록합니다.

응용 프로그램 jar는 (-libjars 인수를 사용하여 지정된 다른 jar와 함께) jar를 실행하는 데 사용되는 tasktrackers를 실행하는 모든 시스템에 자동으로 복사됩니다. 이 모든 것은 Hadoop 인프라에 의해 처리됩니다.

추가로 tasktrackers를 추가하면 아직 예약되지 않은지도 작업이 있다고 가정하여 작업 병렬 처리가 향상됩니다 ().지도 용량을 추가로 병렬화하기 위해 자동으로 입력을 다시 분할합니다. 따라서 24 개의지도 용량 (4 개의 데이터 노드 각각에 6 개의 매퍼가 있다고 가정)이 있고 처음 24 회의 실행으로 100 개의지도 작업이 있고 다른 데이터 노드를 추가하면 몇 가지 추가 속도가 발생합니다. 12 개의지도 작업 만있는 경우 기계를 추가해도 도움이되지 않습니다.

마지막으로 데이터 참조 지역을 알아야합니다. 처음에 데이터를 저장하는 동일한 시스템에서 데이터를 처리해야하는 것이 이상적이므로 새 작업 추적기를 추가해도 데이터가 처음에는 해당 노드에서 로컬이 아니며 네트워크를 통해 복사해야하므로 비례 처리 속도가 반드시 추가되지는 않습니다.

+0

고맙습니다. 훌륭한 답변입니다. 그것은 자바와 의미가 있지만이 또한 파이썬 스트리밍을 사용하여 사실입니까? – Lostsoul

+2

http://hadoop.apache.org/common/docs/r0.15.2/streaming.html#Package+Files+With+Job+Submissions : "실행 파일을 매퍼 및/또는 감속기로 지정할 수 있습니다. 실행 파일은 클러스터의 컴퓨터에 미리 존재할 필요는 없지만 그렇지 않은 경우 "-file"옵션을 사용하여 실행 파일을 작업 제출의 일부로 묶도록 프레임 워크에 지시해야합니다. " tasktrackers 추가에 관한 위의 모든 내용은 스트리밍에도 적용됩니다. –

0

Hadoop 클러스터를 만들기 전에 Amazon's Elastic MapReduce을 사용하여 Hadoop을 사용하는 것이 좋습니다.

해결하려는 문제와 관련하여 Hadoop이 적합한 지 확신하지 못합니다. Hadoop은 매우 병렬 적으로 배치 작업을 수행하는 데 유용합니다. 천분의 일 (또는 그 이상)의 문서 분석, 정렬, 데이터 버켓팅). 하둡 스트리밍을 사용하면 원하는 언어를 사용하여 맵퍼 및 감속기를 만들 수 있지만 입력 및 출력은 고정 된 형식이어야합니다. 많은 용도가 있지만 제 생각에는 프로세스 제어가 설계 목표 중 하나가 아니 었습니다.

[편집] 아마도 ZooKeeper과 (과) 가까운 것이 좋습니다.

+0

예정입니다. 아마존을 지불하기 전에 그 과정을 이해하고 싶을뿐입니다. – Lostsoul

+0

아마존의 가격은 다소 혼란 스러울 수 있습니다. 저는 작은지도를 그곳에서 (작은 데이터 세트, 몇 개의 노드) 작업을 줄였으며 각각의 실행은 $ 0.25 USD 정도였습니다. – Frank

0

원하는 경우 배치 작업에 용량을 추가 할 수 있지만 코드베이스에 가능성을 제시해야합니다. 예를 들어, 여러 노드를 할당하려는 입력 집합을 포함하는 매퍼가있는 경우이를 수행 할 수 있습니다. 이 모든 작업을 수행 할 수 있지만 기본 Hadoop 설치에서는 수행 할 수 없습니다.

현재 Hadoop 코드베이스를 확장하는 Nested Map-Reduce 프레임 워크에서 작업 중이며 매퍼 또는 축소 기가 가져 오는 입력을 기반으로 더 많은 노드를 생성 할 수 있습니다. 관심이 있으시면 저에게 줄을 긋고 더 설명하겠습니다.

또한 -libjars 옵션은 작업 작성자가 지정한 작업 추적자가 지정한 노드에서만 작동합니다. 따라서 10 개의 매퍼를 지정하면 -libjar가 코드를 복사합니다. 10으로 시작하고 싶지만 길을가는 경우 추가하는 노드에는 코드가 없습니다.

가장 쉬운 방법은 hadoop-env.sh 스크립트의 클래스 경로에 항아리를 추가하는 것입니다. 그것은 클러스터가 알고있는 모든 노드에 jar 파일을 복사 할 때 항상 시작됩니다.

1

나는 다니엘의 대답에 동의하지 않습니다. "작업 시작시 클러스터가 알고있는 모든 노드에 jar 코드가 복사됩니다"가 true이면 100 개의 매퍼를 사용하고 1000 개의 노드가 있더라도 모든 작업의 ​​코드가 항상 복사되므로 모든 노드. 말도 안 돼.

대신 Chris Shain의 대답은 JobTracker의 JobScheduler가 실행할 작업을 선택하고 특정 데이터 노드가 실행할 작업을 식별 할 때마다 어떻게 든 코드베이스를 복사 할 위치에서 tasktracker를 전달한다는 의미가 더 큽니다.

초기 (mapreduce 작업 시작 전) 코드베이스는 mapred.submit.replication 매개 변수에 정의 된대로 여러 위치에 복사되었습니다. 따라서 tasktracker는 jobtracker가 목록을 전송할 수있는 여러 위치에서 코드베이스를 복사 할 수 있습니다.

관련 문제