[t:/]$ 지식_

리듀서가 생성한 파일 크기의 균질성

2016/10/13

하둡 스트리밍 MR에서 리듀서가 생성한 파일 크기들의 균질성을 관찰하는 것은 중요한 일이다. 리듀서를 100개로 정하고 100개의 파일 크기 편차가 작다면 키의 산포가 균질하다는 의미다. 편차가 크다면 어떤 특징을 갖고 있는 키가 뭉쳐있다고 예상할 수 있다. 예를 들어 키 분포가 1 1 1 1 2 3 4 5이고, 각 숫자에 대응하여 리듀서가 배정됐다면, 1번 키를 처리하는 리듀서가 과도한 부하를 갖게 된다.

특히 버그성 키가 들어가면 그쪽 키로 집중적으로 바이어스 될 가능성이 있다. 버그성 키는 공백, 널 값, 0, 1, 이런 류의 값이다. 이런 경우 리듀스 과정이 100% 인근에서 하염없이 늘어질 수 있다. 특정 job이 과도하게 일을 처리하고 있는 것이다.

검색을 위해 즉시 사용할 키가 아닌 중간 연산에서 사용하는 키라면 키에 prefix, postfix를 랜덤하게 붙일 수가 있다. 이렇게 하면 키의 해시값 분포가 노말라이즈 될 것이라고 예상할 수 있다. 이렇게 추가한 노말라이즈용 값들은 다음 연산에서 제거하면 된다.

여담이지만 스타크래프트에서는 노는 scv 가 없도록 하라는 원칙이 있다. 멀티쓰레드를 사용할 때도 마찬가지다. 쓰레드 갯수 한도가 정해져 있고, 루프를 돌면서 쓰레드들이 계속 업무를 처리하게 해야 할 때에는 pthread_try_join을 쓰면 간편하다. 이는 gcc std 설정에 따라 지원하지 않을 수도 있으니 유의한다. pthread_try_join을 사용할 수 없다면 모든 쓰레드를 detach 시키되, 쓰레드 종료를 감시하여 카운트를 관리해야 하는데, 귀찮고 복잡한 일이다.









[t:/] is not "technology - root". dawnsea, rss