2010-11-21 2 views
2

Google Nexus에서 mapreduce를 성공적으로 실행 한 사람들에 대해 들어 봤습니다. 안드로이드에서 전체 클러스터 된 mapreduce를 실행하는 성능에 대한 더 이상의 정보는 없습니다.휴대용 장치에서 mapreduce 실행

비교적 적은 양의 데이터가 클러스터 된 모드에서 내 전화에서 mapreduce를 실행하고 싶습니다. 완전히 hadoop을 사용할 가치가 있습니까? 어디서나 사용할 수있는 버전이 있습니까? 어떤 대안?

답변

6

map reduce와 같은 프로세스 사용의 전체 요점은 여러 컴퓨터에 작업 부하를 분할하여 동시에 현재 컴퓨터에서 동시성을 구현할 수 없게하는 것입니다. 여러 안드로이드 장치를 연합 할 계획이 없다면 hadoop과 같은 것을 사용할 필요가 거의 없습니다.

기기에있는 모든 데이터를로드 할 수 있다면 (즉, 할 수있는 말). 병렬로 알고리즘을 실행하는 데 가장 가까운 것은 다중 스레드를 사용하고 데이터 세트를 분할하는 것입니다. 병렬 프로그래밍의 이점을 얻으려면 맵 축소 스타일 프로그래밍을 할 필요가 없으며 단지 알고리즘을 제작자/소비자 모델로 개발하는 것이 더 쉽습니다. 그러나, 만약 당신이 그것을 가지고 있다면 여기에 그것을 할 수있는 방법이 있습니다.

두 개의 BlockingQueues (in-queue 및 out-queue)와 파일 (예 : Producer)에서 데이터를 읽는 스레드로 시작합니다. in-queue에서 읽고 out-queue에 쓸 스레드 풀을 만듭니다. 각 스레드는 하나의 입력 (즉, 소비자)에 대한 계산을 수행하고 결과를 출력 대기열에 게시하여 생산자가 결과를 수신 할 수 있도록합니다. 인 큐 및 아웃 큐를 한 번 통과하면 맵 축소 프로세스의 절반이 수행됩니다. 이것은 일반적으로 생산자/소비자라고합니다. 그 스타일 아키텍처로 많은 것을 할 수 있습니다.

전체 맵 축소를 수행하려면 축소 단계가 병렬로 실행되도록 프로세스를 반복하십시오. 생산자는지도 단계의 모든 결과를 키별로 수집하여 다시 대기열로 공급합니다. 이제 각 소비자는 줄이기 단계를 수행하고 결과를 아웃 큐에 게시합니다. 여기서 생산자는 최종 정렬을 수행하고 결과를 UI에 표시합니다.

  1. 입력 파일을 구문 분석하고, 인 - 큐에 드롭 작업 부하를 만듭니다

    따라서 생산자의 전체 상태 전이가 될 것입니다.
  2. 모든 맵 프로세스가 완료 될 때까지 대기열의 결과를 읽습니다.
  3. 키별로 결과를 결합하십시오.
  4. 동일한 키가있는 모든 결과를 하나의 작업 단위로 대기열에 씁니다. 받은 모든 고유 한 키에 대해 반복하십시오.
  5. 출력 대기열에서 다시 나오는 모든 결과를 읽습니다.

소비자 상태 전환은 다음과 같습니다

  1. 은 작업 단위를 읽기에 - 큐.
  2. 해당 작업 단위 (UOW)에서 맵 논리를 수행하십시오.
  3. 출력 + 키를 출력 대기열에 씁니다.
  4. 대기열에서 작업 단위 (UOW)를 읽으십시오.
  5. 해당 작업 단위 (UOW)에서 감소 논리를 수행하십시오.
  6. 아웃 큐에 결과를 씁니다.

비올라지도 안드로이드의 스타일 프레임 워크를 줄입니다.