2012-05-04 2 views
0

일부 지구 물리학적인 데이터 (지진 데이터)가있는 파일을 가지고 있으며 로컬 파일 시스템에서이 파일을 읽고 HDFS에 Hadoop Sequential 파일로 저장하고 있습니다.Mapper 또는 Reducer에서 값 목록을 내보내려면 어떻게해야합니까?

이제이 Sequential 파일의 값을 읽고 HBase 테이블에 저장할 수있는 MapReduce 작업을 작성하려고합니다. 이 파일들은 단순히 플랫 파일이 아닙니다. 대신 그들은 많은 부분으로 구성되며 각 부분은 240 바이트의 블록이고 여러 필드가 있습니다. 각 필드는 짧거나 정수가 될 수 있습니다. 블록 번호를 키로 사용하고 Sequence 파일의 값으로 240 바이트 (모든 필드 포함)의 바이트 배열을 사용하고 있습니다. 따라서 각 순차 파일에는 모든 블록이 바이트 배열 및 블록 번호로 포함되어 있습니다.

내 질문에 이러한 파일을 처리하는 동안 각 240 바이트 블록을 읽고 개별 필드를 읽고 240 바이트 블록이 완료되면 한 번에 모든 필드를 내보낼 수 있습니까? 1000 블록이있는 파일이 있다고 가정합니다. 따라서 MapReduce 프로그램에서이 1000 개의 블록을 한 번에 하나씩 읽고 각 필드를 추출 (짧은 또는 int) 한지도의 결과로 모든 필드를 방출해야합니다.

관련하여 도움이 필요합니다.

답변

0

그냥 240 bytes 블록을 읽고, 블록 번호를 키로, 바이트 배열을 값으로 내 보냅니다. 기본 값인 SequenceFileInputFormat을 확장해야한다고 생각합니다. Sequence File이 어떻게 작동하는지, 또는 구조가 (죄송합니다) 어떤 것인지 모르겠지만 출력 값으로 내보내려는 파일의 전체 내용을 읽으려고했습니다. 그리고 내가 한 것은 FileInputFormat입니다. 아마도 SequenceFileInputFormat의 소스 코드를보고 InputSplit (데이터가 구조화되어있는 경우) 또는 일부 구분 기호로 240 bytes을 만들 수있는 방법이 있는지 알아보십시오.

희망이 도움이됩니다.

+0

Zhi An : 답장을 보내 주셔서 감사합니다. 사실 순차적 파일 (블록 번호는 전체 블록이 포함 된 240 바이트 배열) – Tariq

관련 문제