내 Hadoop 프로그램의 매핑 단계는 많은 수의 고유 키를 생성합니다 (한 데이터 세트의 경우 200K 키, 다른 데이터 세트의 경우 900K). 각 키는 60 자의 숫자가 포함 된 문자열 값입니다. My Hadoop 프로그램의 정렬/셔플 단계가 너무 오래 걸립니다. 그런 엄청난 수의 키에 대해 정렬/셔플 링 단계를 더 효율적으로 만들 수있는 방법이 있습니까?Hadoop 프로그램에서 많은 수의 매퍼 키를 처리하는 방법은 무엇입니까?
답변
감속기로 전송 된 "지도 위상"출력을 결합하여 네트워크 과열을 줄이기 위해 결합기를 사용해야합니다.
WritableComparator에 관해서는 당신이 옳습니다. 구현 단계에서 두 객체를 비교하는 방법은 한 번 (객체의 출력 (매퍼에서 출력), Hadoop을 순서대로) 주고 받고 순서를 정하고 비 직렬화해야하므로 "비 직렬화 단계"를 피하고 바이트 단위로 비교하는 것이 훨씬 낫습니다.
편집
: 제대로 나는GrepCode
에서 말하는 겁니다 방법을 그것을 할 매우 어려울 수 있기 때문에
당신은, WritableComparable
에서 방법 compare
를 오버라이드 (override)에 조심해야
MapReduce의 성능을 향상시키는 데 유용한 정보를 얻으 려합니다.
http://blog.cloudera.com/blog/2009/12/7-tips-for-improving-mapreduce-performance/
조합 키는 많은 고유 키가 있고 그룹이 작을 때별로 도움이되지 않습니다. –
이미 결합기가 있습니다. –
키를 텍스트에서 IntWritable 도움말과 같은 다른 데이터 유형으로 변경합니까? –
맞춤 키 유형을 만들어야합니다.
- 숫자 (이진) 키를 가짐으로써, 당신은 속도 증가
- 을 허용, 텍스트 대신 바이트를 비교하는
Comparable<BinaryComparable>
을 구현할 수 있습니다 당신은 키 쓰기 등을 할 수 있습니다 : 여기에는 몇 가지 이유가 있습니다 이진 형식은 키를 전송하고 읽을 때 시간을 절약합니다. 핵심 클래스를 작성한다면BytesWritable
을 확장 할 수 있습니다. 이는 이미 첫 번째 글 머리에서 언급 한 인터페이스를 구현합니다.
조정해야 할 작업 매개 변수가 있습니다. 예를 들어 작업 내에서 io.sort
옵션을 조정하는 것이 좋습니다. 고유 한 값이 많기 때문에 Hadoop은 메모리에서 모두 정렬 할 수는 없으므로 디스크로 스필되어야합니다. 이 경우 데이터를 다시 읽고 다시 정렬해야 셔플이 느려집니다. 유출 기록이 있기 때문에 로그를 통해 누출이 발생했는지 알 수 있습니다. 튜닝에 관한 팁은 http://www.slideshare.net/cloudera/mr-perf
- 1. Hadoop 많은 매퍼
- 2. 동시에 더 많은 키를 처리하는 방법은 무엇입니까?
- 3. Hadoop 1.0.4에서 매퍼/감속기를 연결하는 방법은 무엇입니까?
- 4. 많은 수의 파일을 처리하는 rubyj
- 5. 많은 수의 스레드를 처리하는 파이썬?
- 6. hadoop 설정 방법 매퍼
- 7. 네이티브 앱이 뷰에서 많은 수의 노드를 처리하는 방법은 무엇입니까?
- 8. 많은 수의 파일 설명자를 가장 효율적으로 처리하는 방법은 무엇입니까?
- 9. listview에서 많은 수의 항목을 처리하는 가장 좋은 방법은 무엇입니까?
- 10. 매우 많은 수의 근접 경고를 처리하는 방법은 무엇입니까?
- 11. 많은 수의 아약스 요청을 처리하는 방법
- 12. 매퍼 (Hadoop)에서 MATLAB 코드를 사용하는 방법은 무엇입니까?
- 13. Android에서 많은 수의 이미지를 제공하는 방법은 무엇입니까?
- 14. PHP에서 많은 수의 데이터를 처리하는 방법
- 15. 스왑 키와 값 매퍼 hadoop
- 16. Hadoop 매퍼 생성자, 언제 어떻게?
- 17. 커널에서 다양한 수의 알고리즘을 처리하는 방법은 무엇입니까?
- 18. .net 응용 프로그램에서 많은 응용 프로그램 자원을 처리하는 방법은 무엇입니까?
- 19. .net에서 MsAccess에서 많은 수의 행을 가져옵니다.
- 20. Asp.net에서 많은 수의 문서를 인쇄하는 방법은 무엇입니까?
- 21. OpenMP에서 많은 수의 스레드를 포크하는 방법은 무엇입니까?
- 22. 많은 수의 ngram을 효율적으로 저장하는 방법은 무엇입니까?
- 23. Hadoop 매퍼 태스크 세부 실행 시간
- 24. 파이썬에서 많은 수의 객체를 처리하는 가장 좋은 방법
- 25. 많은 수의 이미지 미리로드
- 26. Hadoop Streaming에서 실행중인 매퍼 수 제한
- 27. 많은 수의
- 28. 템플릿 생성 많은 수의
- 29. 많은 양의 헤더 파일을 처리하는 방법은 무엇입니까?
- 30. 많은 수의 업데이트
실제로 당신의 키에'String' 값을 사용하고 있습니까? Comparable을 구현하는 숫자 형을 사용 해본 적이 있습니까? –
bstempi
예, 텍스트를 매퍼의 키 유형으로 사용하고 있습니다. 나는 그것을 IntWritable로 바꿀 수 있는데,이 경우에는 "Comparable''을 구현해야합니까? IntWritable이 바이트 단위로 비교를한다고 믿기 때문에 그렇습니까? –
Comparable을 구현할 필요가 없으므로 키를 좀 더 "compact"유형으로 변경할 수 있다면 괜찮습니다. 'VIntWritable' 또는'VLongWritable'을 고려해보십시오. 둘 다 정수에 메모리 할당 공간을 저장합니다. –