Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Flume:数据传输到服务器_Hadoop_Cloud_Cloudera_Flume - Fatal编程技术网

Hadoop Flume:数据传输到服务器

Hadoop Flume:数据传输到服务器,hadoop,cloud,cloudera,flume,Hadoop,Cloud,Cloudera,Flume,我对Flume ng是新手。我必须写一个程序,它可以传输一个文本文件到其他程序(代理)。我知道我们必须了解代理,即主机ip、端口号等。然后应定义源、接收器和通道。我只想将日志文件传输到服务器。我的客户代码如下。 公共类MyRpcClientFacade{ public class MyClient{ private RpcClient client; private String hostname; private int port; public void init(Str

我对Flume ng是新手。我必须写一个程序,它可以传输一个文本文件到其他程序(代理)。我知道我们必须了解代理,即主机ip、端口号等。然后应定义源、接收器和通道。我只想将日志文件传输到服务器。我的客户代码如下。 公共类MyRpcClientFacade{

public class MyClient{

  private RpcClient client;
  private String hostname;
  private int port;

  public void init(String hostname, int port) {
        this.hostname = hostname;
        this.port = port;
        this.client = RpcClientFactory.getDefaultInstance(hostname, port);

      }

      public void sendDataToFlume(String data) {
        Event event = EventBuilder.withBody(data, Charset.forName("UTF-8"));
        try {
          client.append(event);
        } catch (EventDeliveryException e) {
          client.close();
          client = null;
          client = RpcClientFactory.getDefaultInstance(hostname, port);
        }
      }

      public void cleanUp() {
        client.close();
      }
}

上面的代码只能将
字符串
数据发送到指定的进程。但我必须发送文件。此外,请告诉我是否必须将
源、通道和接收器
写入服务器?如果是,如何配置和写入这三个。请帮助我。实际提供一个
源、接收器和通道

的小示例您只需在每个节点上获取flume客户端,然后提供一个配置文件,提供有关其行为的信息。 例如,如果您的节点读取一个文件(读取每一个新行并将它们作为事件发送到通道),并通过RPC套接字发送文件内容。您的配置如下所示:

  # sources/sinks/channels list
  <Agent>.sources = <Name Source1>
  <Agent>.sinks = <Name Sink1>
  <Agent>.channels = <Name Channel1> 
  # Channel attribution to a source
  <Agent>.sources.<Name Source1>.channels = <Name Channel1>
  # Channel attribution to sink
  <Agent>.sinks.<Name Sink1>.channels = <Name Channel1>
  # Configuration (sources,channels and sinks)
  # Source properties : <Name Source1>
  <Agent>.sources.<Name Source1>.type = exec
  <Agent>.sources.<Name Source1>.command = tail -F test
  <Agent>.sources.<Name Source1>.channels = <Name Channel1>
  # Channel properties : <Name Channel1>
  <Agent>.channels.<Name Channel1>.type = memory
  <Agent>.channels.<Name Channel1>.capacity = 1000
  <Agent>.channels.<Name Channel1>.transactionCapacity = 1000
  # Sink properties : <Name Sink1>
  <Agent>.sinks.<Nom Sink1>.type = avro
  <Agent>.sinks.<Nom Sink1>.channel = <Nom Channel1>
  <Agent>.sinks.<Nom Sink1>.hostname = <HOST NAME or IP>
  <Agent>.sinks.<Nom Sink1>.port = <PORT NUMBER>
#源/汇/通道列表
.来源=
.汇=
。频道=
#源的频道属性
.sources..channels=
#信道归属于接收器
.sinks..channels=
#配置(源、通道和接收器)
#源属性:
.sources..type=exec
.sources..command=tail-F测试
.sources..channels=
#通道属性:
.channels..type=内存
.信道..容量=1000
.channels..transactionCapacity=1000
#接收器属性:
.sinks..type=avro
.sinks..channel=
.sinks..hostname=
.sinks..port=
然后,您必须设置一个代理,该代理将读取同一端口上的avro源,并以您希望存储它们的方式处理事件。 我希望这有帮助;)