복붙노트

[HADOOP] HDFS에 다음 수로에 데이터를 작성하고

HADOOP

HDFS에 다음 수로에 데이터를 작성하고

나는 수로 1.5.0.1 및 하둡 2.4.1 수로에 문자열을 넣어 HDFS에 저장하려고 사용하고 있습니다. 다음과 같은 수로 구성 파일은 다음과 같습니다

    agentMe.channels = memory-channel
agentMe.sources = my-source AvroSource
agentMe.sinks = log-sink hdfs-sink

agentMe.sources.AvroSource.channels = memory-channel
agentMe.sources.AvroSource.type = avro
agentMe.sources.AvroSource.bind = 0.0.0.0 # i tried client ip as well
agentMe.sources.AvroSource.port = 41414

agentMe.channels.memory-channel.type = memory
agentMe.channels.memory-channel.capacity = 1000
agentMe.channels.memory-channel.transactionCapacity = 100

agentMe.sources.my-source.type = netcat
agentMe.sources.my-source.bind = 127.0.0.1 #If i use any other IP like the client from where the string is going to come from then i get unable to bind exception.
agentMe.sources.my-source.port = 9876
agentMe.sources.my-source.channels = memory-channel


# Define a sink that outputs to hdfs.
agentMe.sinks.hdfs-sink.channel = memory-channel
agentMe.sinks.hdfs-sink.type = hdfs
agentMe.sinks.hdfs-sink.hdfs.path = hdfs://localhost:54310/user/netlog/flume.txt
agentMe.sinks.hdfs-sink.hdfs.fileType = DataStream
agentMe.sinks.hdfs-sink.hdfs.batchSize = 2
agentMe.sinks.hdfs-sink.hdfs.rollCount = 0
agentMe.sinks.hdfs-sink.hdfs.inUsePrefix = tcptest-
agentMe.sinks.hdfs-sink.hdfs.inUseSuffix = .txt
agentMe.sinks.hdfs-sink.hdfs.rollSize = 0
agentMe.sinks.hdfs-sink.hdfs.rollInterval = 3
agentMe.sinks.hdfs-sink.hdfs.writeFormat = Text
agentMe.sinks.hdfs-sink.hdfs.path = /user/name/%y-%m-%d/%H%M/%S

난 이미 여기에 같은 질문을 뒀다

client.sendDataToFlume("hello world")

나는 수로가 실행중인 서버에 연결할 수 NettyAvroRpcClient이 수 없습니다 참조하십시오. 그러나 단순한 문자열 내가 무엇을 놓치고 보낸다.

전문가들은 친절 제안

해결법

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

    1.내가보기 당신이 NettyAvroRpcClient와 연결하려는 경우, 당신은 실제로 브로 RPC 소스를 설정해야합니다. 다음과 같이 샘플 설정은 다음과 같습니다

    내가보기 당신이 NettyAvroRpcClient와 연결하려는 경우, 당신은 실제로 브로 RPC 소스를 설정해야합니다. 다음과 같이 샘플 설정은 다음과 같습니다

    # Define an Avro source called AvroSource on SpoolAgent and tell it
    # to bind to 0.0.0.0:41414. Connect it to channel MemChannel.
    agentMe.sources.AvroSource.channels = MemChannel
    agentMe.sources.AvroSource.type = avro
    agentMe.sources.AvroSource.bind = 0.0.0.0
    agentMe.sources.AvroSource.port = 41414
    

    이 포트 41414에 AvroRPC 소스를 만듭니다.

  2. ==============================

    2.구성 그렇지 않으면 일이 밖으로 작동하지 않을 수 있습니다 정확해야합니다. 그래서 여기 수로로하고 HDFS에 데이터를 읽을 수있는 설정입니다.

    구성 그렇지 않으면 일이 밖으로 작동하지 않을 수 있습니다 정확해야합니다. 그래서 여기 수로로하고 HDFS에 데이터를 읽을 수있는 설정입니다.

    a1.sources = r1
    a1.sinks =  k2
    a1.channels = c1
    
    a1.channels.c1.type = memory
    
    a1.sources.r1.channels = c1
    a1.sources.r1.type = avro
    a1.sources.r1.bind = 0.0.0.0
    a1.sources.r1.port = 41414
    a1.sources.r1.interceptors = a
    a1.sources.r1.interceptors.a.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
    
    a1.sinks.k2.type = hdfs
    a1.sinks.k2.channel = c1
    a1.sinks.k2.hdfs.fileType = DataStream
    a1.sinks.k2.hdfs.batchSize = 10
    a1.sinks.k2.hdfs.rollCount = 10
    a1.sinks.k2.hdfs.rollSize = 10
    a1.sinks.k2.hdfs.rollInterval = 10
    a1.sinks.k2.hdfs.writeFormat = Text
    a1.sinks.k2.hdfs.path = /user/flume/%y-%m-%d/%H%M/
    
    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k2.channel = c1
    

    이 도움이 될 것입니다 :)

  3. from https://stackoverflow.com/questions/26928225/writing-data-into-flume-and-then-to-hdfs by cc-by-sa and MIT license