맵 함수 안에 스레드가 있습니까? 스레드가 정말 도움이 될 수있는 작업이 있습니다. 모든 입력 행에 대해 해시 맵에 값을 동시에 추가해야합니다. 내 입력 줄은 문자열 배열이되고이 배열의 모든 값에 대해 해시 맵에 추가해야합니다. 나중에 정리 함수에서이 해시 맵을 사용합니다.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.
"동시"는 "많은 일이 동시에 발생할 수 있음"을 의미하지 않는다고 생각합니다. –
그렇다면 무엇을 의미합니까? – jojoba