복붙노트

[HADOOP] Flume - Flume에서 전체 파일을 이벤트로 간주 할 수 있습니까?

HADOOP

Flume - Flume에서 전체 파일을 이벤트로 간주 할 수 있습니까?

필자는 디렉토리에서 HDFS로 파일을 가져와야하는 유스 케이스가 있습니다. POC로서, 나는 소스, 싱크 및 채널을 지정한 Flume에서 간단한 디렉토리 스풀링을 사용했으며 정상적으로 작동합니다. 단점은 파일 크기 및 기타 매개 변수를보다 잘 제어하기 위해 고유 한 폴더로 이동하는 여러 파일 형식에 대해 여러 디렉터리를 유지해야한다는 것입니다. 구성을 반복하면서도 쉽지만 간단합니다.

대안으로 여러 파일이 단일 디렉토리에 있고 파일의 문자열을 기반으로 HDFS의 특정 디렉토리로 라우팅되는 regex 인터셉터를 사용하는 것이 좋습니다. 내가 기대하고있는 파일의 종류는 첫 번째 줄이 머리글이고 그 다음 줄이 쉼표로 구분 된 CSV 파일입니다.

이를 염두에두고 몇 가지 질문이 있습니다.

저에게 알려주세요. 감사!

해결법

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

    1.처음에는 flume이 파일처럼 작동하지 않지만 이벤트라고 불리는 것에 적용됩니다. 이벤트는 무엇이든 포함 할 수있는 Avro 구조체입니다. 보통 한 줄이지만, 경우에 따라 전체 파일 일 수 있습니다.

    처음에는 flume이 파일처럼 작동하지 않지만 이벤트라고 불리는 것에 적용됩니다. 이벤트는 무엇이든 포함 할 수있는 Avro 구조체입니다. 보통 한 줄이지만, 경우에 따라 전체 파일 일 수 있습니다.

    인터셉터는 이벤트의 정보를 추출하여 해당 이벤트의 헤더에 추가하는 기능을 제공합니다. 후자는 traget 디렉토리 구조를 구성하는 데 사용될 수 있습니다.

    특정 경우에는 이벤트의 내용을 분석하고 헤더 값을 설정하는 파서를 코딩해야합니다 (예 : 하위 경로 :

    if (line.contains("Address")) {
        event.getHeaders().put("subpath", "address");
    else if (line.contains("ID")) {
        event.getHeaders().put("subpath", "id");
    }
    

    그런 다음 다음과 같이 hdfs-sink 구성에서이를 참조 할 수 있습니다.

    hdfs-a1.sinks.hdfs-sink.hdfs.path = hdfs://cluster/path/%{subpath}
    

    귀하의 질문에 관해서는 여러 파일이 이벤트를 구성 할 수 있는지 여부에 따라 : 예, 가능하지만 스풀 원본이 아닙니다. 구성된 Avro 소스와 통신하는 클라이언트 클래스를 구현해야합니다. 파일을 이벤트로 파이프하여 보내야합니다. 인터셉터를 사용하는 대신 헤더를 설정할 수도 있습니다.

  2. from https://stackoverflow.com/questions/27805936/flume-can-an-entire-file-be-considered-an-event-in-flume by cc-by-sa and MIT license