복붙노트

[HADOOP] 파일을 날짜로 분할하여 kafka에서 hdfs로 가장 효율적으로 작성하는 방법은 무엇입니까?

HADOOP

파일을 날짜로 분할하여 kafka에서 hdfs로 가장 효율적으로 작성하는 방법은 무엇입니까?

저는 kafka를 통해 hdfs에 작성해야하는 프로젝트에 참여하고 있습니다. 카프카에 메시지를 쓰는 온라인 서버가 있다고 가정합니다. 각 메시지에는 타임 스탬프가 포함됩니다.  출력이 메시지의 타임 스탬프에 따라 파일 / 파일이 될 작업을 만들고 싶습니다. 예를 들어 카프카의 데이터가

 {"ts":"01-07-2013 15:25:35.994", "data": ...}
 ...    
 {"ts":"01-07-2013 16:25:35.994", "data": ...}
 ... 
 {"ts":"01-07-2013 17:25:35.994", "data": ...}

출력으로 3 파일을 가져오고 싶습니다.

  kafka_file_2013-07-01_15.json
  kafka_file_2013-07-01_16.json
  kafka_file_2013-07-01_17.json 

물론이 작업을 다시 실행하면 대기열에 새 메시지가 있습니다.

 {"ts":"01-07-2013 17:25:35.994", "data": ...}

파일을 만들어야합니다.

  kafka_file_2013-07-01_17_2.json // second  chunk of hour 17

오픈 소스를 보았지만 대부분 카프카에서 일부 hdfs 폴더로 읽습니다. 이 문제에 가장 적합한 솔루션 / 디자인 / 오픈 소스는 무엇입니까?

해결법

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

    1.당신은 확실히 linkedIn에서 Camus API 구현을 체크 아웃해야합니다. Camus는 LinkedIn의 Kafka-> HDFS 파이프 라인입니다. Kafka에서 분산 된 데이터로드를 수행하는 mapreduce 작업입니다. 트위터 스트림에서 가져 와서 트윗 타임 스탬프를 기반으로 HDFS에 쓰는 간단한 예제를 작성한이 게시물을 확인하십시오.

    당신은 확실히 linkedIn에서 Camus API 구현을 체크 아웃해야합니다. Camus는 LinkedIn의 Kafka-> HDFS 파이프 라인입니다. Kafka에서 분산 된 데이터로드를 수행하는 mapreduce 작업입니다. 트위터 스트림에서 가져 와서 트윗 타임 스탬프를 기반으로 HDFS에 쓰는 간단한 예제를 작성한이 게시물을 확인하십시오.

    프로젝트는 github - https://github.com/linkedin/camus에서 이용 가능합니다.

    Camus는 Kafka의 데이터를 읽고 디코딩하고 HDFS에 데이터를 쓰는 데 두 가지 주요 구성 요소가 필요합니다.

    Camus에는 Kafka에서 오는 메시지를 해독하는 데 도움이되는 디코더 집합이 있습니다. 디코더는 기본적으로 타임 스탬프에 따라 데이터를 분할하는 논리를 구현하는 com.linkedin.camus.coders.MessageDecoder를 확장합니다. 미리 정의 된 디코더 집합이이 디렉토리에 있으며,이 디코더를 기반으로 자신 만의 디코더를 작성할 수 있습니다. camus / camus-kafka-coders / src / main / java / com / linkedin / camus / etl / kafka / 코더 /

    Camus에는 Camus에게 HDFS에 기록되어야하는 페이로드를 알려주는 com.linkedin.camus.etl.RecordWriterProvider를 확장하는 RecordWriterProvider 클래스 세트가 필요합니다. 미리 정의 된 RecordWriterProvider 세트가이 디렉토리에 있으며 사용자가 직접 작성할 수 있습니다 이들.

    camus-etl-kafka/src/main/java/com/linkedin/camus/etl/kafka/common
    
  2. ==============================

    2.좀 더 실시간 접근 방식을 찾고 있다면 StreamSets Data Collector를 확인해야합니다. 또한 아파치 라이선스 오픈 소스 도구로 섭취합니다.

    좀 더 실시간 접근 방식을 찾고 있다면 StreamSets Data Collector를 확인해야합니다. 또한 아파치 라이선스 오픈 소스 도구로 섭취합니다.

    HDFS 대상은 지정한 템플릿을 기반으로 시간 기반 디렉토리에 쓸 수 있도록 구성 할 수 있습니다. 또한 메시지를 작성해야하는 시간을 결정하는 데 사용할 수신 메시지의 필드를 지정하는 방법이 이미 포함되어 있습니다. config는 "Time Basis"라고 불리며 $ {record : value ( "/ ts")}와 같은 것을 지정할 수 있습니다.

    * 전체 공개 나는이 도구를 다루는 엔지니어이다.

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

    3.Kafka에서 HDFS 로의 지속적인 섭취에 대해 확인하십시오. 아파치 에이펙스 (Apex Apex)에 의존하기 때문에, 에이펙스가 제공한다는 보장이있다.

    Kafka에서 HDFS 로의 지속적인 섭취에 대해 확인하십시오. 아파치 에이펙스 (Apex Apex)에 의존하기 때문에, 에이펙스가 제공한다는 보장이있다.

    https://www.datatorrent.com/apphub/kafka-to-hdfs-sync/

  4. ==============================

    4.Apache Kafka 0.9 이상을 사용하는 경우 Kafka Connect API를 사용할 수 있습니다.

    Apache Kafka 0.9 이상을 사용하는 경우 Kafka Connect API를 사용할 수 있습니다.

    https://github.com/confluentinc/kafka-connect-hdfs를 확인하십시오.

    이것은 Kafka와 HDFS간에 데이터를 복사하기위한 Kafka 커넥터입니다.

  5. ==============================

    5.Checkout Camus : https://github.com/linkedin/camus

    Checkout Camus : https://github.com/linkedin/camus

    그래도 Avro 형식으로 데이터를 쓸 것입니다 ... 다른 RecordWriter는 플러그 방식입니다.

  6. from https://stackoverflow.com/questions/17426771/what-is-most-efficient-way-to-write-from-kafka-to-hdfs-with-files-partitioning-i by cc-by-sa and MIT license