2014-12-23 8 views
1

내 회사의 POC에 대해 작은 hado 클러스터를 구현 중입니다. Flume을 사용하여 파일을 HDFS로 가져 오려고합니다. 각각의 파일은이 (파일 당 1 "긴"라인) 같은 JSON 객체를 포함스풀링 디렉토리에서 flume을 사용하여 HDFS로 파일 이동

{ "objectType" : [ { JSON Object } , { JSON Object }, ... ] } 

"objectType의"는 유형 배열의 객체 (예 : 이벤트, 사용자, ...).

이러한 파일은 나중에 "objectType"에 따라 여러 가지 작업으로 처리됩니다.

spoolDir 소스와 HDFS 싱크를 사용하고 있습니다.

내 질문은 :

  • 인가 (그들은 타임 스탬프와 자신의 이름에 UUID가 들어 있으므로 파일 이름이 고유) HDFS에 수로 쓰기 할 때 원본 파일 이름을 유지하는 것이 가능 "높은 값을 설정하는 대신 무제한 값으로"deserializer.maxLineLength "를 설정하는 방법이 있습니까?

  • 정말 느슨한 데이터를 원합니다. 어떤 채널이 가장 좋은 JDBC 또는 File입니까?

내 제약 내가 수로를 사용해야한다는 것입니다 (I 높은 처리량 흐름이없는) 즉시 사용 가능한 (어떤 사용자 지정 요소).

도움 주셔서 감사합니다.

답변

1

(그들은 타임 스탬프와 자신의 이름에 UUID가 들어 있으므로 파일 이름이 고유)이 가능 HDFS에 수로 쓰기 원본 파일 이름을 유지하는 것입니다

예. spooldir 소스를 사용하여 fileheader 속성이 true로 설정되었는지 확인하십시오. 여기에는 레코드와 함께 파일 이름이 포함됩니다.

agent-1.sources.src-1.fileHeader = true 

싱크대의 경우 avro_event 시리얼 라이저를 사용하여 avro flume 이벤트 레코드의 헤더에있는 파일 이름을 캡처하십시오.

agent-1.sinks.snk-1.serializer = avro_event 

avro 레코드는이 스키마를 따릅니다. https://github.com/apache/flume/blob/trunk/flume-ng-core/src/main/java/org/apache/flume/serialization/FlumeEventAvroEventSerializer.java#L30

(대신에 높은 값을 설정) 무제한 값으로 "deserializer.maxLineLength"로 설정하는 방법이 있나요?

deserializer.maxLineLength에는 무제한 구성이 없습니다. https://github.com/apache/flume/blob/trunk/flume-ng-core/src/main/java/org/apache/flume/serialization/LineDeserializer.java#L143

은 정말 dn't 데이터를 잃어 버릴하고자합니다. 어떤 채널이 가장 좋은 JDBC 또는 File입니까?(높은 처리량의 흐름이 없음)

이것은 데이터베이스 또는 파일 시스템에 대한 복구 옵션에 따라 달라질 수 있습니다. 백업이있는 중복 데이터베이스가있는 경우 JDBC를 사용하십시오. 내구성이 강한 파일 시스템이 있다면 탄력적입니다.

관련 문제