맵리 듀스 구현 프로세스와 프로세스 셔플

이 절 하둡 MapReduce에서의 작동 메커니즘은 주로 MapReduce의 잡 실행 프로세스 및 프로세스 셔플 양태에서 설명한 도입 설명한다. 맵리 듀스의 작동 메커니즘을 더 잘 이해함으로써, 개발자는 프로그램의 실질적인 문제를 해결하기보다 합리적인 사용의 맵리 듀스 수 있습니다.

하둡 맵리 듀스 작업 실행 과정

도 1에 도시 하둡 MapReduce의 전체 작업 실행 과정은 10 단계로 나누어진다.

의 하둡 맵리 듀스 작업 실행 과정
도 1 하둡 MapReduce의 작업 실행 방법.

1. 작업 제출

클라이언트는 JobTracker에에 작업을 제출합니다. 첫째, 당신은 필요에 따라 구성 할 수있는 모든 매개 변수를 구성해야합니다. 작업이 제출 후에는 자동 실행을 입력합니다. 이 과정에서 사용자는 작업 프로그램의 이행을 감시하고 중단을 강요하지만, 개입의 작업이 아니라 실행 할 수 있습니다. 작업을 제출할 다음과 같이 기본 프로세스입니다.

1) Runjob () 메소드를 통해 클라이언트는 작업 제출 프로세스를 시작합니다.

2) 클라이언트가 JobTracker에 getNewJobId하여 새 작업 ID를 요청한다 ().

3) 예외 발생의 문제가있을 경우 출력 설명 클라이언트 검사 조작 입력 슬라이스 피어 컴퓨팅 동작은, 통상의 경우, 자원을 실행한다 (예를 들면, 작업 JAR 파일, 작업에 필요한 구성 파일, 계산 입력 등)의 슬라이스는 디렉토리라는 이름의 작업 ID에 복사합니다.

4) () 메소드는 작업을 알려주는 JobTracker에의 submitjob를 호출하여 실행할 준비가되어 있습니다.

2. 작업을 초기화

메모리에 데이터 구조의 일련의 설립을 포함하여 초기화 작업을 시작 JobTracker에 말에 JobTracker에이 작업의 작업을 기록합니다.

1) 그 JobTracker에 submitJob () 메소드에 대한 호출을 수신 한 후, 호출 큐 내부에 투입되고, 작업 스케쥴러 스케줄 언급. 초기화 주요 대상은 작업의 상태 및 진행 상황을 추적하기 위해 작업을 실행하는 수단을 만드는 것입니다.

2) 작업 실행 목록을 만들려면 작업 스케줄러는 먼저 입력 정보의 HDFS 좋은 슬라이스 계산 JobClient를 획득 한 다음 각 조각에 대한 MapTask를 만들고 ReduceTask을 만듭니다.

3. 지정 작업

JobTracker를 내부 노드있는이 파일의 관련 데이터가 흩어져 네임 노드 내부의 HDFS 파일을 요청합니다. JobTracker를이 원칙에 따라 작업을 할당해야 "가장 가까운 실행됩니다."

TaskTracker는 정기적으로 주로 아직 살아 JobTracker에 있는지 자신을 알리고, 새로운 작업 등 실행 준비가되었는지 여부를하려면 "하트 비트"를 통해 JobTracker에와 통신합니다.

JobTracker에 하트 비트 메시지가 나타나면 작업이 분배 될 경우, 그것은 반환 하트 비트 통신 TaskTracker 값 할당 정보 패키지 작업 TaskTracker, 반환 할당됩니다.

지도 작업의 경우, JobTracker에 보통 줄 작업에 대한 최근의 TaskTracker 입력에서 슬라이스를 선택, JobTracker에는 지역화 된 데이터로 간주 될 수 없다.

4. 작업을 수행

1) TaskTracker가 작업에 할당 한 후, 같은 시간에, 응용 프로그램에 필요한 TaskTracker 모든 문서를 로컬 디스크에 분산 캐시에서 복사, 파일 시스템에 HDFS 항아리 TaskTracker 작업을 통해 파일을 복사합니다. TaskTracker 작업은 새 로컬 작업 디렉토리를 생성하고, JAR 파일의 내용을이 폴더로 추출 하였다.

2) TaskTracker)는지도 업무를 포함하여 각 작업 (실행 및 작업을 줄일 수있는 새로운 JVM을 시작하므로, 맵리 듀스의 JobClient는 TaskTracker 데몬에 영향을주지 않습니다. 작업이 완료 될 때까지 자식 프로세스 작업은 몇 초마다 부모 프로세스에게 진행 상황을 알려줍니다.

5. 공정 업데이트 및 상태

그리고 작업 또는 작업의 진행의 작동 상태를 포함하여 각 작업의 상태 인 작업,지도 및 작업 작업, 카운터 값, 상태 메시지 또는 설명을 줄입니다. 런타임 작업은 진행 상황을 추적.

이 집계 TaskTracker ChildJVM에 메시지, 그리고 다시 JobTracker를 일정 시간 간격으로 수렴. 모든 작업과 작업 상태의 글로벌 뷰를 실행하는 쇼를 생산 JobTracker에, 사용자는 웹 UI를 통해 볼 수 있습니다. JobClient는 콘솔에 최신 상태 문의 초당 JobTracker에,과 출력을 얻을 수 있습니다.

작업을 완료 6.

JobTracker에이 과제를받은 마지막 작업이 완료되면, 그것은 작업 상태가 "성공"으로 변경됩니다. JobClient는 작업의 상태에 도착하면 작업이 성공적으로 완료 알고, 다음 사용자 정보 JobClient 인쇄 작업이 성공적으로 Runjob에서 마지막 () 메소드가 리턴을 종료 알려줍니다.

무대 셔플을 HadoopMapReduce

하둡 MapReduce의 수단 스테이지 선별 시스템을 수행하고, 처리 입력으로지도를 줄이기 위해 출력을 전송하는 단계를 더 포함하고,지도의 출력을 시작 셔플.

단계를 정렬하는 종료 출력 키지도 정렬하는 과정을 말합니다. 출력 동일한 키를 수도 다른지도는, 키가 같은 최종 처리를 줄 동일로 전송해야합니다. 셔플 단계는 단계 셔플 셔플 단계로 나누어지도의 끝의 끝을 절감 할 수있다. 도에 나타내는 바와 같이 스테이지 프로세스 작업 셔플.

최종 단계 셔플 1.지도

1) 각 입력 슬라이스지도는 기본적으로 프로세스에 작업을, HDFS의 블록의 크기 (기본값은 슬라이스 64MB의)입니다. 지도 기능은 자주 디스크 작업의 심각한 성능 저하가 발생합니다 때문에 시작이 단순히 디스크에 데이터를 기록 할 출력을 생성합니다. 이 데이터는 먼저 메모리 버퍼에 기록하고 효율을 개선하기 위해 어떤 프리 정렬의 순서로 수행되는 처리한다.

셔플의 하둡 맵리 듀스 단계
셔플도 2 하둡 MapReduce의 스테이지

2) 각각의 태스크는 상기 버퍼 내의 데이터의 양이 특정 임계 값 (기본 80 %)에 도달 할 때, (기본 사이즈 100메가바이트 인) 순환 버퍼 메모리의 출력 데이터를 기록하기위한 맵이 시스템이 시작됩니다 배경 스레드는 버퍼의 내용을 디스크 (즉, 유출 단)에 기록된다. 디스크에 기록하는 과정에서,지도 출력은 버퍼에 기록이 계속하지만 프로세스가 디스크에 쓰기 완료 될 때까지 버퍼가 채워지면 그 사이에,지도 작업이 차단됩니다.

3) 제 스레드는 결국 태스크에 전달되는 데이터를 디스크에 기록하기 전에있어서 적절한 파티션 (파티션)에 데이터를 줄인다. 각 지구에서 백그라운드 스레드는 결합기가있는 경우, 정렬 된 출력을 실행, 키를 기준으로 정렬합니다.

4) 메모리 버퍼 오버 플로우 쓰기 임계 값에 도달되면, 오버 플로우 쓰기 파일을 만들 것이다, 그래서지도는 작업 마지막 출력 기록을 완료 한 후, 여러 오버플로 쓰기 파일이있을 것이다. 작업이 완료되기 전에지도, 오버 플로우 쓰기 파일은 하나 개의 인덱스 및 데이터 파일 (여러 병합 정렬) (정렬 단계)에 결합된다.

5) ) 유출 쓰기 파일 병합이 완료되면,지도 작업은 모든 임시 파일 오버 플로우 기록을 삭제하고 한지도 작업이 완료되면, 출력 (복사 단계 복사를 시작합니다 작업을 줄이고, 완료 한 TaskTracker 작업을 말한다.

6)Map 任务的输出文件放置在运行 Map 任务的 TaskTracker 的本地磁盘上,它是运行 Reduce 任务的 TaskTracker 所需要的输入数据。

2. Reduce 端的 Shuffle 阶段

1)Reduce 进程启动一些数据复制线程,请求 Map 任务所在的 TaskTracker 以获取输出文件(Copy 阶段)。

2)将 Map 端复制过来的数据先放入内存缓冲区中,Merge 有 3 种形式,分别是内存到内存,内存到磁盘,磁盘到磁盘。默认情况下,第一种形式不启用,第二种形式一直在运行(Spill 阶段),直到结束,第三种形式生成最终的文件(Merge 阶段)。

3)最终文件可能存在于磁盘中,也可能存在于内存中,但是默认情况下是位于磁盘中的。当 Reduce 的输入文件已定,整个 Shuffle 阶段就结束了,然后就是 Reduce 执行,把结果放到 HDFS 中(Reduce 阶段)。

Hadoop MapReduce的主要特点

MapReduce 在设计上具有的主要技术特点如下。

1. 向“外”横向扩展,而非向“上”纵向扩展

MapReduce 集群的构建完全选用价格便宜、易于扩展的低端商用服务器,而非价格昂贵、不易扩展的高端服务器。

对于大规模数据处理,由于有大量数据存储的需要,因此,基于低端服务器的集群远比基于高端服务器的集群优越,这就是 MapReduce 并行计算集群会基于低端服务器实现的原因。

2. 失效被认为是常态

MapReduce 集群中使用大量的低端服务器,因此,结点硬件失效和软件出错是常态,因而一个设计良好、具有高容错性的并行计算系统不能因为结点失效而影响计算服务的质量。

任何结点失效都不应当导致结果的不一致或不确定性,任何一个结点失效时,其他结点要能够无缝接管失效结点的计算任务,当失效结点恢复后应能自动无缝加入集群,而不需要管理员人工进行系统配置。

MapReduce 并行计算软件框架使用了多种有效的错误检测和恢复机制,如结点自动重启技术,使集群和计算框架具有对付结点失效的健壮性,能有效处理失效结点的检测和恢复。

3. 把处理向数据迁移

传统高性能计算系统通常有很多处理器结点与一些外存储器结点相连,如用存储区域网络连接的磁盘阵列,因此,大规模数据处理时,外存文件数据 I/O 访问会成为一个制约系统性能的瓶颈。

为了减少大规模数据并行计算系统中的数据通信开销,不应把数据传送到处理结点,而应当考虑将处理向数据靠拢和迁移。MapReduce 采用了数据/代码互定位的技术方法,计算结点将首先尽量负责计算其本地存储的数据,以发挥数据本地化特点,仅当结点无法处理本地数据时,再采用就近原则寻找其他可用计算结点,并把数据传送到该可用计算结点。

4. 顺序处理数据,避免随机访问数据

大规模数据处理的特点决定了大量的数据记录难以全部存放在内存中,而通常只能放在外存中进行处理。由于磁盘的顺序访问要远比随机访问快得多,因此 MapReduce 主要设计为面向顺序式大规模数据的磁盘访问处理。

为了实现高吞吐量的并行处理,MapReduce 可以利用集群中的大量数据存储结点同时访问数据,以此利用分布集群中大量结点上的磁盘集合提供高带宽的数据访问和传输。

5. 为应用幵发者隐藏系统层细节

专业程序员之所以写程序困难,是因为程序员需要记住太多的编程细节,这对大脑记忆是一个巨大的认知负担,需要高度集中注意力,而并行程序编写有更多困难。

例如,需要考虑多线程中诸如同步等复杂繁琐的细节。由于并发执行中的不可预测性,程序的调试查错也十分困难,而且,大规模数据处理时程序员需要考虑诸如数据分布存储管理、数据分发、数据通信和同步、计算结果收集等诸多细节问题。

MapReduce를는 추상화 메커니즘을 제공 프로그래머 만 프레임 처리를 수행하기 위해 시스템을 계산하는 방법을 설명하고, 구체적으로 언급 될 필요한 것을 계산 상세를 분리 할 수있다 시스템 프로그래머 층 시스템 프로그래머가되도록 해방, 알고리즘 디자인의 세부 사항을 레이어 자체 응용 컴퓨팅 문제에 최선을 다하고 있습니다.

6. 부드럽고 원활한 확장 성

여기서 두 감각의 확장을 포함하는 확장 성 시스템의 확장 성 및 데이터 사이즈.

효과를 보여 계속하는 것은, 성능 저하의 정도가 아니라 여러 데이터의 규모를 확장해야 클러스터 크기에, 요구 사항이 노드의 수와 알고리즘의 성능을 계산할 수 있어야한다 동안 이상적인 소프트웨어 알고리즘은 데이터의 확장을 확장 할 수 있어야한다 성장의 정도에 선형에 가까운 증가를 유지.

기존의 독립 알고리즘의 대부분은 상기 이상적인 조건보다 낮은 메모리 단일 알고리즘에서 유지 중간 결과 데이터가 곧 대규모 데이터를 처리하는 클러스터에 하나의 행에서 컴퓨팅 평행에 기초 할 때 실패 근본적으로 완전히 다른 알고리즘 디자인을 필요로한다.

그러나, 많은 경우에서의 MapReduce 이상에서 MapReduce는 대략 직선 보유 증가 노드의 수에 따라 증가 할 수있다 계산 성능에 기초하여, 다수의 계산을위한 팽창 특성을 통해 얻어진다.

. 하둡 맵리 듀스 워크 플로우
. 맵리 듀스 사례 연구 : 단어 수
. 하둡 맵리 듀스 메커니즘

추천

출처blog.csdn.net/yuidsd/article/details/92170050