2012-03-07 3 views
3

맵 함수 안에 스레드가 있습니까? 스레드가 정말 도움이 될 수있는 작업이 있습니다. 모든 입력 행에 대해 해시 맵에 값을 동시에 추가해야합니다. 내 입력 줄은 문자열 배열이되고이 배열의 모든 값에 대해 해시 맵에 추가해야합니다. 나중에 정리 함수에서이 해시 맵을 사용합니다.Hadoop : 맵 함수 안에 스레드가 있습니다.

for 루프를 사용하여이 작업을 수행하고 있는데 이것이 내 프로젝트의 병목 현상 인 것 같습니다. 그래서 나는 동시 해시 맵을 사용하고 문자열 배열을 몇 개의 더 작은 배열로 분할하는 것을 고려했다. 따라서 모든 스레드는 해시 맵 내부에 해당 "더 작은"배열을 추가해야합니다. 것은 로컬 자바 애플 리케이션에서 그것을 구현하고 그것이 작동한다는 것입니다. 내가 hadoop 내부에서 사용할 때, 결과는 기대 한 것이 아닙니다. 모든 스레드에 대해 Thread.join()을 사용하고 있으므로 모든 줄의 입력에 대해 스레드가 다음 줄 전에 끝났는지 확인해야합니다. 그게 내가 생각했던 것입니다. hadoop은 스레드를 특별한 방법으로 처리합니까?

edits for duffymo 

다음은 구글 인용 http://research.google.com/pubs/pub36296.html입니다.

알고리즘 2는 내가 말하는 부분입니다. 보시다시피 모든 속성에 대해 for 루프가 있으며 모든 속성에 대해 메모리 구조를 업데이트해야합니다. 그들은 그들의 접근법 (단 하나의 레이블 학습)에서 하나의 가치를 예측할 수밖에 없었고, 나는 많은 가치를 예측할 수있었습니다 (다중 레이블 학습). 그래서 구글은 y 값을 말합니다. 그것들은 3 값 배열입니다. 나를 위해 그것은 수천까지일지도 모른다. 두 개의 3 차원 벡터를 집계하는 것은 두 개의 10000 차원 벡터를 집계하는 것보다 훨씬 빠릅니다.

알고리즘에 단 하나의 레이블 만 넣어도 전혀 문제가 없습니다. 내가 언급 한 45 초는 5 초 이하로 줄어 들었습니다. 그래서 예, 그것은 한 라벨에 대해서만 올바르게 작동하고 있습니다.

내가 언급 한 45 초는 for-loop 전용입니다. 나는 파싱과 다른 모든 것들을 세지 않았다. for 루프는 병목 현상입니다. 왜냐하면이 작업 만이 타이밍이고 약 45 초가 걸리는 반면, 전체 작업은 약 1 분 (작업 초기화 및 기타 여러 작업 포함)이 소요됩니다. 나는 for-loop를 2 ~ 3 개의 작은 for 루프로 제동하고 동시에 처리하려고 노력하고 싶다. 노력한다는 것은 작동 할 수도 있고 작동하지 않을 수도 있음을 의미합니다. 내가 언급 한 것과 같은 때로는 미친 물건이 필요할 수도 있습니다. 잘 존경받는 프로그래머가 hadoop에 관한 이전의 내 스레드에서 내게 말했다.

지도 기능 내에서 hadoop 및 스레드에 대한 의견을 원한다고 생각했기 때문에 이전에 이러한 많은 세부 정보를 제공하지 않았습니다. 누군가 제게 너무 많이 질문 할 것이라고 생각하지 않았습니다 : P.

+0

"동시"는 "많은 일이 동시에 발생할 수 있음"을 의미하지 않는다고 생각합니다. –

+0

그렇다면 무엇을 의미합니까? – jojoba

답변

3

Hadoop을 이해하고 map/reduce를 제대로 이해하면 스레드가 필요하지 않습니다.

한 줄의 입력을 구문 분석하면 프로젝트에서 병목 현상이 발생한다고 생각합니까? 문제가 있다고 생각하거나 증명할 데이터가 있습니까?

업데이트 : 인용 해 주셔서 감사합니다. 그것은 분명히 나와 다른 사람들에 의해 소화되어야 할 것이기 때문에 단기간에 어떤 조언도하지 않을 것입니다. 그러나 나는 표창장과 인내심을 대단히 감사합니다.

+1

Google 용지에 따라 구현 중이므로지도/축소가 정확합니다. 모든 행마다 해시 맵에 수천 개의 삽입이있을 수 있습니다. 네, 증명할 데이터가 있습니다. 약 1800 줄의 입력과 2500 가지 속성의 경우 맵 작업에는 약 45 초가 걸립니다. 그래서 내가 동시에 삽입하는 것과 같은 다른 것을 시도하고 싶습니다. 새로운 일을 시도하는 것은 연구가 어떻게 작동하는지, 누군가 반드시 잘못된 일을한다는 것을 의미하지는 않습니다. 그래서지도 함수 내부의 스레드에 몇 가지 팁을 제공하여 나를 도울 수 있습니까? – jojoba

+1

인용문을 Google 논문에 제공하십시오. 죄송합니다, 귀하의 결론이 정확하다고 생각하지 않습니다. 문제는 구문 분석이며지도에 삽입하지 않을 것입니다. 내가 여러 종류의 아이템을 어떤 종류의지도에 삽입 할 때 벤치마킹을했다면 45 초가 걸리지 않을 것입니다. 어쩌면 코드를 프로파일 링하고 시간이 소비되는 곳을 확인해야합니다. – duffymo

+0

내 편집 두피모보기. 너무 많은 세부 사항을 제공하지 않아서 미안하지만 필요하지 않을 것이라고 생각했습니다. 글쎄 그들은 내 질문에 필요하지 않았지만 계속 많이 질문했다. 관심을 가져 주셔서 감사합니다. – jojoba

4

하둡은 자체적으로 병렬 처리를 수행하도록 만들어졌습니다. 그러나 그것은 매우 조잡한 방식으로하고 있습니다. Hadoop 병렬성은 데이터 집합이 큰 경우에 적합하며 개별적으로 또는 개별적으로 처리되는 여러 하위 집합으로 나눌 수 있습니다 (예 : 단순화를 위해지도 단계 만 언급 함). 예를 들어 텍스트의 한 패턴을 검색합니다.
이제 다음과 같은 경우를 고려해 볼 수 있습니다. 우리는 많은 양의 데이터를 가지고 있으며이 텍스트에서 1000 가지 패턴을 검색하려고합니다.이제 우리는 멀티 코어 CPU를 활용하는 두 가지 방법을 선택했습니다.
1. 단일 스레드에서 별도의 매퍼를 사용하여 각 파일을 처리하고 노드 당 여러 매퍼가 있습니다.
2. 노드마다 하나의 매퍼를 정의하고 모든 코어별로 하나의 파일을 처리합니다.
두 번째 방법은 훨씬 캐시 친화적 일 수 있으며 더 효율적입니다.
결론 - 미세한 멀티 코어 친숙한 병렬 처리가 처리의 성격으로 정당화되는 경우 매퍼 내에서 멀티 스레딩을 사용하면 이점이 있습니다.

+0

네, 두 번째 해결책은 저에게 도움이 될만한 것이라고 생각합니다. 나는 솔직히 그것을 생각하고 그것을 달성하기 위해 설정 파일을 설정하는 방법을 물어볼 것입니다,하지만 우선지도 함수 내에서 쓰레드를 사용하는 방법을 알아야합니다. 이미 로컬 Java 응용 프로그램에서 동시 해시 맵 내부에 요소를 추가하기 위해 스레드를 사용할 수 있다고 언급했지만 hadoop에서는 예상 결과가 아닙니다. 쓰레드와 hadoop에 대해 알아야 할 것이 있습니까? 감사합니다 :) – jojoba

+0

내 지식은 hadoop은 매퍼 또는 감속기 내에서 spown 수도 스레드와 어떤 식 으로든 방해하지 않습니다. –

+0

흠 .. 어쩌면 다시 한 번 고마워. 내가 뭔가 잘못하고있어. – jojoba

관련 문제