[HADOOP] 한 번에 여러 행을 읽는 Hadoop
HADOOP한 번에 여러 행을 읽는 Hadoop
나는 4 줄마다 한 세트가 기록을 나타내는 파일을 가지고있다.
예를 들어 처음 네 줄은 레코드 1을 나타내고, 다음 네 줄은 레코드 2를 나타냅니다.
Mapper가이 4 줄을 한 번에 입력하도록하려면 어떻게합니까?
또한, Hadoop에서 파일 분할이 레코드 경계에서 발생하기를 원합니다 (행 번호는 4의 배수 여야 함). 따라서 레코드는 여러 개의 분할 파일에 걸쳐 스팬을 갖지 않습니다.
어떻게 할 수 있습니까?
해결법
-
==============================
1.다른 접근 방식보다 약간 더러운 접근 방식
다른 접근 방식보다 약간 더러운 접근 방식
옳은 길
자신의 RecordReader, InputSplit 및 InputFormat을 정의해야 할 수 있습니다. 정확히 무엇을하려고 하느냐에 따라 위의 세 가지 중 기존의 것을 재사용 할 수 있습니다. 키 / 값 쌍을 정의하기 위해 자신 만의 RecordReader를 작성해야하며 경계를 정의하는 데 도움이되는 고유 한 InputSplit을 작성해야 할 것입니다.
가능한 또 다른 올바른 방법입니다.
위의 작업은 상당히 어렵습니다. 데이터 세트를 제어 할 수 있습니까? 어느정도 (사전에 들어 오거나 쉬는 동안) 사전 처리 할 수 있습니까? 그렇다면 Hadoop의 상자에서 읽는 것이 더 쉬운 무언가를 데이터 세트 int로 변환하는 것을 강력히 고려해야합니다.
같은 것 :
ALine1 ALine2 ALine1;Aline2;Aline3;Aline4 ALine3 ALine4 -> BLine1 BLine2 BLine1;Bline2;Bline3;Bline4; BLine3 BLine4
아래로 그리고 더러운
데이터의 파일 크기를 제어 할 수 있습니까? 블록 경계에서 수동으로 데이터를 분리한다면, Hadoop은 스플릿을 스패닝하는 레코드를 신경 쓰지 않아도됩니다. 예를 들어, 블록 크기가 64MB이면 파일을 60MB 청크에 씁니다.
입력 분할에 대해 걱정하지 않고 더러운 작업을 수행 할 수 있습니다.지도 함수에서 새 키 / 값 쌍을 목록 객체에 추가합니다. 목록 개체에 항목이 4 개있는 경우 처리하고 무언가를 내 보낸 다음 목록을 지 웁니다. 그렇지 않으면 아무 것도하지 않고 아무 것도 방출하지 말라.
데이터를 수동으로 분할해야하는 이유는 4 행 레코드 전체가 동일한 맵 작업에 제공된다는 것을 보증하지 않기 때문입니다.
-
==============================
2.다른 방법 (쉽지만 효율적이지 않을 수도 있음)은 FileInputFormat # isSplitable ()을 구현하는 것입니다. 그런 다음 입력 파일은 분할되지 않고지도 당 하나씩 처리됩니다.
다른 방법 (쉽지만 효율적이지 않을 수도 있음)은 FileInputFormat # isSplitable ()을 구현하는 것입니다. 그런 다음 입력 파일은 분할되지 않고지도 당 하나씩 처리됩니다.
import org.apache.hadoop.fs.*; import org.apache.hadoop.mapred.TextInputFormat; public class NonSplittableTextInputFormat extends TextInputFormat { @Override protected boolean isSplitable(FileSystem fs, Path file) { return false; } }
그리고 오렌지 옥토퍼스가 말했듯이
지도 함수에서 새 키 / 값 쌍을 목록 객체에 추가합니다. 목록 개체에 항목이 4 개있는 경우 처리하고 무언가를 내 보낸 다음 목록을 지 웁니다. 그렇지 않으면 아무 것도하지 않고 아무 것도 방출하지 말라.
이것은 다음과 같은 이유로 오버 헤드가 있습니다.
** 위의 코드는 Hadoop에서 온 것입니다 : The Definitive Guide
from https://stackoverflow.com/questions/8140416/hadoop-read-multiple-lines-at-a-time by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] newAPIHadoopFile에 대한 파티션 수를 설정하는 방법은 무엇입니까? (0) | 2019.07.08 |
---|---|
[HADOOP] 스파크 스트리밍 출력 지속 (0) | 2019.07.08 |
[HADOOP] hadoop 대 teradata 차이점은 무엇입니까? (0) | 2019.07.08 |
[HADOOP] Hadoop : 매퍼와 감속기의 수 (0) | 2019.07.08 |
[HADOOP] Hadoop MapReduce : 하나의 하프 직업 클래스에 두 개의 매퍼와 리듀서를 정의 할 수 있습니까? (0) | 2019.07.08 |