大數據之 Flume 日志收集框架入門

      網友投稿 1041 2025-04-01

      Flume 日志收集框架入門

      一、 flume 簡介

      Apache Flume是一個分布式,可靠且可用的系統,用于有效地從許多不同的源收集,聚合和移動大量日志數據到集中式數據存儲。

      Apache Flume的使用不僅限于日志數據聚合。由于數據源是可定制的,因此Flume可用于傳輸大量事件數據,包括但不限于網絡流量數據,社交媒體生成的數據,電子郵件消息以及幾乎任何可能的數據源。

      Apache Flume是Apache Software Foundation的頂級項目。

      目前有兩種版本代碼行,版本0.9.x和1.x.

      系統要求:

      Java運行時環境 - Java 1.8或更高版本

      內存 - 源,通道或接收器使用的配置的足夠內存

      磁盤空間 - 通道或接收器使用的配置的足夠磁盤空間

      目錄權限 - 代理使用的目錄的讀/寫權限

      數據流模型

      Flume事件被定義為具有字節有效負載和可選字符串屬性集的數據流單元。Flume代理是一個(JVM)進程,它承載事件從外部源流向下一個目標(躍點)的組件。

      Flume源消耗由外部源(如Web服務器)傳遞給它的事件。外部源以目標Flume源識別的格式向Flume發送事件。例如,Avro Flume源可用于從Avro客戶端或從Avro接收器發送事件的流中的其他Flume代理接收Avro事件??梢允褂肨hrift Flume Source定義類似的流程,以接收來自Thrift Sink或Flume Thrift Rpc客戶端或Thrift客戶端的事件,這些客戶端使用Flume thrift協議生成的任何語言編寫。當Flume源接收事件時,它將其存儲到一個或多個頻道。該通道是一個被動存儲器,可以保持事件直到它被Flume接收器消耗。文件通道就是一個例子 - 它由本地文件系統支持。接收器從通道中移除事件并將其放入外部存儲庫(如HDFS(通過Flume HDFS接收器))或將其轉發到流中下一個Flume代理(下一跳)的Flume源。給定代理程序中的源和接收器與通道中暫存的事件異步運行。

      二、flume 下載 安裝 ,配置環境變量

      cdh 版本- http://archive.cloudera.com/cdh5/cdh/5/

      解壓? tar -zxvf flume-ng-1.6.0-cdh5.7.0.tar

      配置環境變量:

      事先配置好jdk1.8以上的JAVA_HOME

      配置FLUME_HOME

      export FLUME_HOME=/home/hadoop/app/apache-flume-1.6.0-cdh5.7.0-bin

      export PATH=${FLUME_HOME}/bin:$PATH

      修改 配置 文件:

      cd apache-flume-1.6.0-cdh5.7.0-bin/conf/

      cp flume-env.sh.template flume-env.sh

      vim flume-env.sh

      添加 一行

      export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64

      執行 flume-ng version 命令 可以在控制臺上看到版本號輸出說明安裝成功。

      三、flume 實戰(1)從指定的網絡端口采集數據輸出到控制臺

      使用 flume 的關鍵就是寫配置文件

      (a)配置source

      (b)配置channel

      (c)配置sink

      (d)把以上三個組件串起來

      類似于netcat的源,它偵聽給定端口并將每行文本轉換為事件。像nc?-k?-l?[host]?[port]這樣的行為。換句話說,它打開一個指定的端口并偵聽數據。期望提供的數據是換行符分隔的文本。每行文本都轉換為Flume事件,并通過連接的通道發送。

      示例配置文件? agent 的名稱為a1 ,sources 的名稱為 r1 ,sinks 的名稱為k1,channels 的名稱為 c1

      編寫 配置 example.conf 文件,放到 $FLUME_HOME/conf 目錄下:

      #example.conf:單節點Flume配置

      #為此代理命名組件

      a1.sources = r1

      a1.sinks = k1

      a1.channels = c1

      #描述/配置源

      a1.sources.r1.type = netcat

      a1.sources.r1.bind = localhost

      a1.sources.r1.port = 44444

      #描述接收器

      a1.sinks.k1.type = logger

      #使用緩沖內存中事件的通道

      a1.channels.c1.type = memory

      a1.channels.c1.capacity = 1000

      a1.channels.c1.transactionCapacity = 100

      #將源和接收器綁定到通道

      a1.sources.r1.channels = c1

      a1.sinks.k1.channel = c1

      啟動 一個 agent

      flume-ng? agent --name a1 --conf? $FLUME_HOME/conf --conf-file? $FLUME_HOME/conf/example.conf? -Dflume.root.logger

      =INFO,console

      使用 telnet 命名進行測試 telnet? hadoop000 44444

      輸入 任意字符串 ,可以看到 flume 的控制臺接收到了我們 輸入的 內容如下:

      [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 68 65 6C 6C 6F ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?hello world.}

      Event 是Flume 數據傳輸的基本單元

      四 、 fluem 實戰(2)監控一個文件實時采集新增的數據輸出到控制臺

      在/home/hadoop/目錄 下 創建一個 hello.txt文件 ,并向其中輸入內容

      編寫配置文件

      #example.conf:單節點Flume配置

      #為此代理命名組件

      a1.sources = r1

      a1.sinks = k1

      a1.channels = c1

      #描述/配置源

      a1.sources.r1.type = exec

      a1.sources.r1.command = tail -F /home/hadoop/hello.txt

      a1.sources.r1.shell = /bin/bash -c

      #描述接收器

      a1.sinks.k1.type = logger

      #使用緩沖內存中事件的通道

      a1.channels.c1.type = memory

      a1.channels.c1.capacity = 1000

      a1.channels.c1.transactionCapacity = 100

      #將源和接收器綁定到通道

      a1.sources.r1.channels = c1

      a1.sinks.k1.channel = c1

      啟動 agent:

      flume-ng? agent --name a1 --conf? $FLUME_HOME/conf --conf-file? $FLUME_HOME/conf/example.conf? -Dflume.root.logger

      =INFO,console

      執行 touch? hello world >> hello.txt 進行測試,看到 flume 控制臺接收到 數據即可。

      2018-12-25 18:28:21,386 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 68 65 6C 6C 6F 20 77 6F 72 6C 64 ? ? ? ? ? ? ? ?hello world }

      五、flume實戰(3)將A服務器上面的日志采集到B服務器上

      技術選型:exec? source? + memory channel +avro sink

      avro? source + memory channel + logger sink

      編寫 配置? exec-memory-avro.conf

      #為此代理命名組件

      exec-memory-avro.sources = exec-source

      exec-memory-avro.sinks = avro-sink

      exec-memory-avro.channels = memory-channel

      #描述/配置源

      exec-memory-avro.sources.exec-source.type = exec

      exec-memory-avro.sources.exec-source.command = tail -F /home/hadoop/hello.txt

      exec-memory-avro.sources.exec-source.shell = /bin/bash -c

      #描述接收器

      exec-memory-avro.sinks.avro-sink.type = avro

      exec-memory-avro.sinks.avro-sink.hostname = hadoop000

      exec-memory-avro.sinks.avro-sink.port = 44444

      #使用緩沖內存中事件的通道

      exec-memory-avro.channels.memory-channel.type = memory

      exec-memory-avro.channels.memory-channel.capacity = 1000

      exec-memory-avro.channels.memory-channel.transactionCapacity = 100

      #將源和接收器綁定到通道

      exec-memory-avro.sources.exec-source.channels = memory-channel

      exec-memory-avro.sinks.avro-sink.channel = memory-channel

      編寫 配置? avro-memory-logger.conf

      #為此代理命名組件

      avro-memory-logger.sources = avro-source

      avro-memory-logger.sinks = logger-sink

      avro-memory-logger.channels = memory-channel

      #描述/配置源

      avro-memory-logger.sources.avro-source.type = avro

      avro-memory-logger.sources.avro-source.bind = hadoop000

      avro-memory-logger.sources.avro-source.port = 44444

      #描述接收器

      avro-memory-logger.sinks.logger-sink.type = logger

      #使用緩沖內存中事件的通道

      avro-memory-logger.channels.memory-channel.type = memory

      avro-memory-logger.channels.memory-channel.capacity = 1000

      avro-memory-logger.channels.memory-channel.transactionCapacity = 100

      #將源和接收器綁定到通道

      avro-memory-logger.sources.avro-source.channels = memory-channel

      avro-memory-logger.sinks.logger-sink.channel = memory-channel

      日志收集過程:

      機器上A 上監控一個文件,當我們訪問主站時候會有用戶行為日志記錄到 access.log中

      avro sink把新產生的日志輸出到對應的avro source 指定的hostname? 和 port 上

      通過avro? source 對應的 agent 將我們的 日志輸出到控制臺或者(kafka)

      先啟動 B 服務器 agent

      大數據之 Flume 日志收集框架入門

      flume-ng ?agent --name avro-memory-logger --conf ?$FLUME_HOME/conf --conf-file ?$FLUME_HOME/conf/avro-memory-logger.conf ?-Dflume.root.logger=INFO,console

      在啟動A服務器 agent

      flume-ng ?agent --name exec-memory-avro ?--conf ?$FLUME_HOME/conf --conf-file ?$FLUME_HOME/conf/exec-memory-avro.conf ?-Dflume.root.logger=INFO,console

      向?/home/hadoop/hello.txt 文件中輸出內容, 即可 看到 B 服務器 flume 控制臺 上接收到A 服務器上面 sink 過來的內容。

      云日志服務 LTS 大數據

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps表格里面怎么打勾(wps表格里面怎么打勾勾)
      下一篇:wps2016裝訂線在哪里設置? wps裝訂線的設置方法
      相關文章
      国产精品亚洲lv粉色| 亚洲国产精品自在自线观看| 国产成人va亚洲电影| 亚洲精品一二三区| 精品久久亚洲中文无码| 91嫩草亚洲精品| 亚洲另类春色国产精品| 91亚洲自偷在线观看国产馆| 亚洲成a人片在线观看中文!!!| 亚洲欧洲自拍拍偷午夜色| 内射干少妇亚洲69XXX| 激情内射亚洲一区二区三区| 亚洲麻豆精品果冻传媒| 亚洲美女中文字幕| 亚洲日本在线免费观看| 亚洲a级片在线观看| 久久久国产亚洲精品| 亚洲人片在线观看天堂无码| 亚洲JIZZJIZZ妇女| 无码欧精品亚洲日韩一区夜夜嗨| 国产精品自拍亚洲| 亚洲精品视频在线看| 国产精品亚洲美女久久久| 国产午夜亚洲精品理论片不卡 | 亚洲色图视频在线观看| 亚洲字幕在线观看| 亚洲 欧洲 视频 伦小说| 亚洲熟女乱色一区二区三区| 鲁死你资源站亚洲av| 亚洲av无码乱码在线观看野外| 亚洲国产精品激情在线观看 | 亚洲精品成人久久久| 国产中文在线亚洲精品官网| 久久亚洲综合色一区二区三区| 亚洲高清视频在线观看| 亚洲成人网在线观看| 亚洲字幕AV一区二区三区四区| 亚洲另类自拍丝袜第五页 | 内射干少妇亚洲69XXX| 亚洲国产成人99精品激情在线| 亚洲狠狠色丁香婷婷综合|