2011-02-17 3 views
0

일부 테라 바이트의 텍스트 파일을 HDFS의 시퀀스 파일로 업로드하는 유스 케이스가 있습니다.hadoop에 거대한 파일 : 메타 데이터를 저장하는 방법?

이 텍스트 파일은 32 - 62 열 (메타 데이터)의 레이아웃을 가지고 있습니다.

은 무엇 메타 데이터와 함께 이러한 파일을 업로드 할 수있는 좋은 방법이 될 것입니다 :

  1. 가 키를 생성, 텍스트 파일의 레이아웃에 따라 값 클래스 작성하고 시퀀스 파일로 업로드하는 데 사용할 수 있습니까?

  2. create SequenceFile.Metadata 헤더를 개별적으로 시퀀스 파일로 업로드 하시겠습니까?

모든 입력에 감사드립니다! 할

감사

답변

-1

가장 간단한 것은 SequenceFiles 텍스트의 키와 값을 확인하는 것입니다. 데이터에서 의미있는 필드를 선택하여 키를 만들고, 데이터 자체는 텍스트 값입니다. SequenceFile은 데이터가 SequenceFile을 사용하지 않는 경우 키/값 쌍을 저장하도록 설계되었습니다. 처리되지 않은 텍스트 파일을 업로드하여 Hadoop에 입력 할 수 있습니다.

최상의 성능을 위해 각 파일의 크기를 테라 바이트 단위로 지정하지 마십시오. Hadoop의 Map 단계는 입력 파일 하나당 하나의 작업을 실행합니다. Hadoop 클러스터에 CPU 코어보다 많은 파일을 갖고 싶습니다. 그렇지 않으면 하나의 CPU가 1TB의 작업을하고 많은 CPU가 유휴 상태가됩니다. 좋은 파일 크기는 64-128MB이지만 최상의 결과를 얻으려면 직접 측정해야합니다.

+2

맵 스테이지가 입력마다 하나의 파일만을 사용한다고하는 주장은 실제로 잘못되었습니다. HDFS는 각 입력 파일을 가져 와서 여러 데이터 노드 사이에서 분할되는 블록으로 분해합니다. 이것이 문제가되는 유일한 경우는 파일 압축을 풀기 위해 전체 파일 (텍스트 용, 어쨌든)을 필요로하므로 압축이 관련되는 경우입니다. 그러나 시퀀스 파일은 개별 레코드 나 구분 된 블록을 압축하여이 문제를 해결하므로 파일을 분할 할 수 있습니다. 맵 작업의 수는 입력 파일의 수와 관련이 없습니다. – tedivm

1

데이터를 메타 데이터로 저장 한 다음 메타 데이터 기반으로 디자인하는 것이 더 좋습니다. 메타 데이터를 업데이트하면 앱 업데이트가 필요하다는 것을 의미하는 메타 데이터가 응용 프로그램의 디자인이나 구현에 포함되는 것과 반대가됩니다. 물론 메타 데이터 기반 애플리케이션을 어느 정도로 사용할 수 있는지에 대한 한계가 있습니다.

JSON과 같은 인코딩 스키마를 사용하는 등의 방식으로 메타 데이터를 임베드하거나 SeqFile에 예약 된 태그를 사용하여 메타 데이터를 설명하는 레코드가있는 것처럼 메타 데이터를 가질 수 있습니다 지정된 메타 데이타에 실제의 데이터의 키에 의해 사용되는 이름 공간과는 다른 독자적인 이름 공간이되도록 (듯이)합니다.

이 파일을 별도의 Hadoop 파일로 패키징할지 여부에 대한 권장 사항은 Hadoop이 파일을 분할 설정 (맵 단계 입력)으로 구성 설정을 통해 지시 할 수 있음을 명심하십시오. 따라서 하나의 큰 SeqFile도 여러 맵 작업에 의해 병렬로 처리 될 수 있습니다. 단일 hdfs 파일을 갖는 이점은 원래 데이터의 포함 단위와 더 유사하다는 것입니다.

키 유형 (즉, 텍스트 대 바이너리 사용 여부)에 대한 권장 사항은 키가 다른 값과 비교 될 것이라고 생각하십시오. 키가 작을수록 비교가 빠릅니다. 따라서 키의 빽빽한 버전을 저장할 수 있다면 바람직 할 것입니다. 마찬가지로, 첫 번째 바이트가 일반적으로 같지 않도록 키 레이아웃을 구성 할 수 있다면 성능에 도움이됩니다. 예를 들어 자바 클래스를 키로 직렬화하는 것은 권장되지 않습니다. 왜냐하면 텍스트 스트림이 클래스의 패키지 이름으로 시작하여 다른 모든 클래스와 같아서 파일에 키가 있기 때문입니다.

0

데이터와 메타 데이터를 함께 묶으려면 AVRO 형식이 적합합니다. 스키마 진화도 가능합니다.

관련 문제