Hadoop 코드 분석(3)
2034 단어 hadoop
public boolean nextKeyValue() throws IOException {
if (key == null) {
key = new LongWritable();
}
key.set(pos);
if (value == null) {
value = new Text();
}
int newSize = 0;
while (pos < end) {
newSize = in.readLine(value, maxLineLength,
Math.max((int)Math.min(Integer.MAX_VALUE, end-pos),
maxLineLength));
if (newSize == 0) {
break;
}
pos += newSize;
if (newSize < maxLineLength) {
break;
}
// line too long. try again
LOG.info("Skipped line of size " + newSize + " at pos " +
(pos - newSize));
}
if (newSize == 0) {
key = null;
value = null;
return false;
} else {
return true;
}
}
키에 있습니다.set(pos)에서 pos는 이 라인의 위치이고value는 이 라인의 내용입니다. 하나의 예는 권위 있는 안내서의 것입니다.
On the top of the Crumpetty Tree
The Quangle Wangle sat,
But his face you could not see,
On account of his Beaver Hat.
이 레코드는 LINERecordReader에서 4개의 K/V 쌍으로 처리됩니다.
(0, On the top of the Crumpetty Tree)
(33, The Quangle Wangle sat,)
(57, But his face you could not see,)
(89, On account of his Beaver Hat.)
wordcount의 예와 결합하여 매번 마퍼가 처리하는 K/V는value를 처리하고StringTokenizer itr = new StringTokenizer(value.tostring()))는value를 하나하나의 표시로 나누어 마퍼의 처리를 거친다.다음과 같은 형식의 중간체를 생성합니다.
(On,1),(the,1),(top,1),(of,1).....다시 job에서 이 중간체를 Reducer에 전달하여 정렬하고 집합하기;
그래서 job의 input이 입력에서 마퍼로 출력하는 것은 대략 다음과 같다.
FIleInputFormat에서inputPath(args)는 input을 File InputFormat의 get Split()에 제출하여 블록을 나눈다. 이 예에서 Text IputFormat는 줄마다 데이터를 가져오는 Line Record Reader를 사용하고 Line Record로 K/V 쌍을 읽는다. Line Record는 사실 리더와 같다. 구체적인 입력 흐름에서 데이터를 읽는 작업은 마퍼에게 맡긴다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Azure HDInsight + Microsoft R Server에서 연산 처리 분산Microsoft Azure HDInsight는 Microsoft가 제공하는 Hadoop의 PaaS 서비스로 인프라 주변의 구축 노하우를 몰라도 훌륭한 Hadoop 클러스터를 구축할 수 있는 훌륭한 서비스입니다. 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.