복붙노트

[HADOOP] 하둡 정렬 키와 키 값을 변경

HADOOP

하둡 정렬 키와 키 값을 변경

하둡에서, 맵퍼는 I 바이트 오프셋 생각 "0, 23, 45, 76, 123"과 같은 파일의 위치, 같은 키를 수신한다.

나는 (예를 들어, 라인 수, 측면에서. 400 개 라인) 같은 지역 파일이 동일한 키를 얻는 방식으로 분할해야 두 개의 큰 입력 파일이 있습니다. 오프셋 바이트는 명확하게위한 최상의 옵션이 아닙니다.

"1, 2, 3, 4, 5"대신에 "0, 23, 45, 76, 123"의 : 출력 키 수 있도록 정수에 키를 변경하는 방법이나 옵션이 있는지 궁금?

감사합니다!

해결법

  1. ==============================

    1.예. 그러나 항상. 당신이 (당신의 경우와 같이) TextInputFormat를 사용하는 경우 그것은 사실이다. 키와 값은 사용에 따라 변경 당신은 InputFormat의 유형에 따라 달라집니다.

    예. 그러나 항상. 당신이 (당신의 경우와 같이) TextInputFormat를 사용하는 경우 그것은 사실이다. 키와 값은 사용에 따라 변경 당신은 InputFormat의 유형에 따라 달라집니다.

    이 작업을 달성하기 위해 FileInputFormat의 하위 클래스를 만들어 맞춤형 InputFormat를 작성할 수 있습니다.

  2. ==============================

    2.당신은 매퍼에서 행 번호를 직접 추적 할 수 있습니다 :

    당신은 매퍼에서 행 번호를 직접 추적 할 수 있습니다 :

    protected int recNo = 0;
    
    protected void map(LongWritable key, Text value, Context context) {
        ++recNo;
    
        // mapper implementation
        // ...
    }
    

    하지만이 splitable 파일 (- 예를 들어 gzip 압축을 사용하지 않는 2 개 이상의 블록에 저장 splitable입니다 파일)을 고려하지 않습니다. 이 경우 모든 분할이 아니라 파일의 시작 부분에서 줄 번호보다 1 줄 번호와 번호가됩니다. 당신은 당신이 두 개의 큰 파일이 언급 - 그러니 당신이 그런에게 (파일 처리 당 하나의 작업을 강제로) 비 splitable 압축 코덱을 사용하여 파일을 파일의 크기보다 큰 입력 형식의 최소 분할 크기를 강제로 또는 압축해야합니다 GZIP있다.

  3. ==============================

    3.내가 색인 바로 다음 원하는 증가 순서로 모든 레코드를 얻고 경우 즉, 가능하다.

    내가 색인 바로 다음 원하는 증가 순서로 모든 레코드를 얻고 경우 즉, 가능하다.

    나는 그 일을했다. 당신은 프레임 워크를 활용할 수 있습니다. 우리는 GPU로 프로그래밍하는 방법이있다. 한 줄 간격의 저장 당신은 같은 수의 분할에 파일을 분할 할 수 있습니다 개요. 즉, 인덱스 특정 인덱스에 당신을 수 있습니다.   파일 분할 후 수식은

    ActualIndex = splitNubmer * Num_Of_record_Per_Split + record_Offset
    

    상세하게 갈 것입니다.   먼저 특정 분할에 인덱스 레코드 할 수 있습니다 NLineInputFormat와 분할을 만들 수 있습니다. 분할 + 실제 레코드 splitId + redordIndex 같은 키 Emmit 기록. 이제 우리는지도 상에 분할 색인을.   그럼 당신은 키 SplitId에 의해 중간 결과를 정렬 사용자 정의 SortComaprator를 사용해야합니다. 그런 의상 groupComarator하는 그룹 같은 SplitId 모든 키를.   이제 감속기에 당신은 공식 위에 사용할 수 있습니다. 인덱스 레코드.   그러나 문제는 우리가 오름차순으로 splitNumber를 확인하려면 어떻게해야합니다. 나는 의해 그 해결.   StartOffset + 길이 : 하둡은 file_HDFS_URL / FILE_NAME하여 파일을 분할

     example: hdfs://server:8020/file.txt:0+400, hdfs://server:8020/file.txt:400+700, and So on.
    

    나는 모든 startOffset 분할 기록 HDFS에 하나 개의 파일을 만들었습니다. 그런 다음 감속기에 그것을 사용할 수 있습니다.  이 방법의 사용은 완전히 병렬, 기록 색인을 사용할 수 있습니다.

  4. from https://stackoverflow.com/questions/17835954/hadoop-sort-the-key-and-change-the-key-value by cc-by-sa and MIT license