1. 程式人生 > >【Flume】Flume基礎之安裝與使用

【Flume】Flume基礎之安裝與使用

1、Flume簡介

​ (1) Flume提供一個分散式的,可靠的,對大資料量的日誌進行高效收集、聚集、移動的服務,Flume只能在Unix環境下執行。

​ (2) Flume基於流式架構,容錯性強,也很靈活簡單。

​ (3) Flume、Kafka用來實時進行資料收集,Spark、Flink用來實時處理資料,impala用來實時查詢。

2、Flume角色

2.1 Source

​ 用於採集資料,Source是產生資料流的地方,同時Source會將產生的資料流傳輸到Channel,這個有點類似於Java IO部分的Channel。

2.2 Channel

​ 用於橋接Sources和Sinks,類似於一個佇列。

2.3 Sink

​ 從Channel收集資料,將資料寫到目標源(可以是下一個Source,也可以是HDFS或者HBase)。

2.4 Event

​ 傳輸單元,Flume資料傳輸的基本單元,以事件的形式將資料從源頭送至目的地。

3、Flume傳輸過程

​ source監控某個檔案或資料流,資料來源產生新的資料,拿到該資料後,將資料封裝在一個Event中,並put到channel後commit提交,channel佇列先進先出,sink去channel佇列中拉取資料,然後寫入到HDFS或其他目標源中。

4、Flume安裝與部署

4.1 上傳包

​ 將flume的gz包上傳到/opt/soft/目錄下;

[root@bigdata111 conf]# rz

​ 若不支援rz命令,則用yum安裝lrzsz命令:

​ 查詢含有rz的yum源,由結果可見,yum源中含有lrzsz.x86_64包;

[root@bigdata111 soft]# yum search rzsz
已載入外掛:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
============================================================================================================================= N/S matched: rzsz ==============================================================================================================================
lrzsz.x86_64 : The lrz and lsz modem communications programs

  名稱和簡介匹配 only,使用“search all”試試。

​ 安裝rz命令

[root@bigdata111 soft]# yum -y install lrzsz

4.2 解壓包

​ 將flume解壓到/opt/module/目錄下,並改短名字flume-1.8.0:

[root@bigdata111 soft]# tar -zvxf apache-flume-1.8.0-bin.tar.gz -C /opt/module
[root@bigdata111 module]# mv apache-flume-1.8.0-bin flume-1.8.0

4.3 配置引數

​ 切換到/opt/module/flume-1.8.0/conf目錄,將flume-env.sh.template檔名改為:flume-env.sh

[root@bigdata111 module]# mv flume-env.sh.template flume-env.sh

​ 查詢JAVA_HOME的值;

[root@bigdata111 conf]# echo $JAVA_HOME
/opt/module/jdk1.8.0_144

​ 編輯flume-env.sh,將檔案內容中的JAVA_HOME的值修改為上面查到的;

export JAVA_HOME=/opt/module/jdk1.8.0_144

4.4 配置環境變數

​ 在/etc/profile末尾新增flume的家路徑

export FLUME_HOME=/opt/module/flume-1.8.0
export PATH=$PATH:$FLUME_HOME/bin

4.5 驗證flume成功與否

​ 在xshell客戶端下,輸入flu,按tab鍵,看是否能夠自動補全:flume-ng

​ 如果可以自動補全,則代表安裝flume成功,否則失敗。

[root@bigdata112 opt]# flume-ng
Error: Unknown or unspecified command ''

Usage: /opt/module/flume-1.8.0/bin/flume-ng <command> [options]...

commands:
  help                      display this help text
  agent                     run a Flume agent
  avro-client               run an avro Flume client
  version                   show Flume version info
............

4.6 配置其他兩臺機器

​ 利用scp命令,配置其他兩臺機器;

​ 首先,將flume目錄分發到bigdata112,bigdata113

[root@bigdata111 ~]# scp -r /opt/module/flume-1.8.0/ root@bigdata112:/opt/module/
[root@bigdata111 ~]# scp -r /opt/module/flume-1.8.0/ root@bigdata113:/opt/module/

​ 其次,將/etc/profile環境變數檔案分發到bigdata112,bigdata113

[root@bigdata111 ~]# scp -r /etc/profile root@bigdata112:/etc/
[root@bigdata111 ~]# scp -r /etc/profile root@bigdata113:/etc/

​ 最後,在bigdata112,bigdata113上分別重新整理環境變數

[root@bigdata112 opt]# source /etc/profile
[root@bigdata113 opt]# source /etc/profile

5、Flume案例

5.1 監控埠資料

​ 目標:Flume監控一端Console,另一端Console傳送訊息,使被監控端實時顯示。

5.1.1 安裝telnet命令

[root@bigdata111 conf]# yum -y install telnet

5.1.2 建立Agent配置檔案

​ 在flume根目錄下,新建一個myconf目錄,用於存放自定義conf配置檔案;

​ 新建flume-telnet.conf檔案,檔案內容如下:

# 定義agent
# <自定義agent名>.sources=<自定義source名稱>
a1.sources = r1
# <自定義agent名>.sinks=<自定義sink名稱>
a1.sinks = k1
# <自定義agent名>.channels=<自定義channel名稱>
a1.channels = c1

# 定義source
# <agent名>.sources.<source名稱>.type = 源型別
a1.sources.r1.type = netcat
# <agent名>.sources.<source名稱>.bind = 資料來源伺服器
a1.sources.r1.bind = bigdata111
# <agent名>.sources.<source名稱>.port = 自定義未被佔用的埠
a1.sources.r1.port = 44445

# 定義sink
# <agent名>.sinks.<sink名稱>.type = 下沉到目標源的型別
a1.sinks.k1.type = logger

# 定義channel
# <agent名>.channels.<channel名稱>.type = channel的型別
a1.channels.c1.type = memory
# <agent名>.channels.<channel名稱>.capacity = 最大容量
a1.channels.c1.capacity = 1000
# transactionCapacity<=capacity
a1.channels.c1.transactionCapacity = 1000                  

# 雙向連結
# <agent名>.sources.<source名稱>.channels = channel名稱
a1.sources.r1.channels = c1
# <agent名>.sinks.<sink名稱>.channel = channel名稱
a1.sinks.k1.channel = c1

5.1.3 啟動flume配置檔案

[root@bigdata111 conf]# flume-ng agent --conf /opt/module/flume-1.8.0/conf/ --name a1 --conf-file /opt/module/flume-1.8.0/conf/flume-telnet.conf -Dflume.root.logger==INFO,console

​ 可以簡寫為:

[root@bigdata111 conf]# flume-ng agent --c /opt/module/flume-1.8.0/conf/ --n a1 --f /opt/module/flume-1.8.0/conf/flume-telnet.conf -Dflume.root.logger==INFO,console

5.1.4 傳送測試資料

​ 通過其他機器向bigdata111的44445埠傳送資料

[root@bigdata112 ~]# telnet bigdata111 44445
Trying 192.168.1.111...
Connected to bigdata111.
Escape character is '^]'.
echo aaaa
OK
echo aaaa
OK
echo bbbbbbbbb
OK

執行結果如圖:

5.2 實時讀取本地檔案到HDFS

5.2.1 建立Agent配置檔案

​ 建立flume-hdfs配置檔案

# 1 agent  若同時執行兩個agent,則agent名字需要改變,比如下面a2
a2.sources = r2
a2.sinks = k2
a2.channels = c2

# 2 source 
# 因監控linux本地檔案,執行shell命令,所以type為exec;
a2.sources.r2.type = exec
# 監控的檔案路徑
a2.sources.r2.command = tail -F /opt/test.log
a2.sources.r2.shell = /bin/bash -c

# 3 sink
# 資料下沉到目標源hdfs
a2.sinks.k2.type = hdfs
# 如果叢集為HA模式,則路徑為active的namenode地址,普通分散式叢集,直接寫namenode所在地址即可。
a2.sinks.k2.hdfs.path = hdfs://bigdata111:9000/flume/%Y%m%d/%H
#上傳檔案的字首
a2.sinks.k2.hdfs.filePrefix = logs-
#是否按照時間滾動資料夾
a2.sinks.k2.hdfs.round = true
#多少時間單位建立一個新的資料夾
a2.sinks.k2.hdfs.roundValue = 1
#重新定義時間單位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地時間戳
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#積攢多少個Event才flush到HDFS一次
a2.sinks.k2.hdfs.batchSize = 1000
#設定檔案型別,可支援壓縮
a2.sinks.k2.hdfs.fileType = DataStream
#多久生成一個新的檔案
a2.sinks.k2.hdfs.rollInterval = 600
#設定每個檔案的滾動大小
a2.sinks.k2.hdfs.rollSize = 134217700
#檔案的滾動與Event數量無關
a2.sinks.k2.hdfs.rollCount = 0
#最小副本數
a2.sinks.k2.hdfs.minBlockReplicas = 1

# 定義channel
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 1000

# 雙向連結繫結
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2

5.2.2 啟動flume配置檔案

[root@bigdata111 flume-1.8.0]# flume-ng agent --conf /opt/module/flume-1.8.0/conf/ --name a2 --conf-file /opt/module/flume-1.8.0/myconf/flume-hdfs.conf 

5.2.3 傳送檔案內容

[root@bigdata111 opt]# echo kjalksdjglkajsdg2333333333333333asdgasdgasdg >> test.log
[root@bigdata111 opt]# echo kjalksdjglkajsdg2333333333333333asdgasdgasdg >> test.log
[root@bigdata111 opt]# echo kjalksdjglkajsdg2333333333333333asdgasdgasdg >> test.log
[root@bigdata111 opt]# echo kjalksdjglkajsdg2333333333333333asdgasdgasdg >> test.log

​ 執行結果:

5.3 實時讀取目錄檔案到HDFS

​ 目標:使用flume監聽整個目錄的檔案

5.3.1 建立Agent配置檔案

​ 建立agent配置檔案,命名為:flume-dir.conf,檔案內容如下:

#1 Agent
a3.sources = r3
a3.sinks = k3
a3.channels = c3

#2 source
#監控目錄的型別
a3.sources.r3.type = spooldir
#監控目錄的路徑
a3.sources.r3.spoolDir = /opt/module/flume1.8.0/upload
#哪個檔案上傳hdfs,然後給這個檔案新增一個字尾
a3.sources.r3.fileSuffix = .COMPLETED
a3.sources.r3.fileHeader = true
#忽略所有以.tmp結尾的檔案,不上傳(可選)
a3.sources.r3.ignorePattern = ([^ ]*\.tmp)

# 3 sink
a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://bigdata111:9000/flume/%H
#上傳檔案的字首
a3.sinks.k3.hdfs.filePrefix = upload-
#是否按照時間滾動資料夾
a3.sinks.k3.hdfs.round = true
#多少時間單位建立一個新的資料夾
a3.sinks.k3.hdfs.roundValue = 1
#重新定義時間單位
a3.sinks.k3.hdfs.roundUnit = hour
#是否使用本地時間戳
a3.sinks.k3.hdfs.useLocalTimeStamp = true
#積攢多少個Event才flush到HDFS一次
a3.sinks.k3.hdfs.batchSize = 100
#設定檔案型別,可支援壓縮
a3.sinks.k3.hdfs.fileType = DataStream
#多久生成一個新的檔案
a3.sinks.k3.hdfs.rollInterval = 600
#設定每個檔案的滾動大小大概是128M
a3.sinks.k3.hdfs.rollSize = 134217700
#檔案的滾動與Event數量無關
a3.sinks.k3.hdfs.rollCount = 0
#最小副本數
a3.sinks.k3.hdfs.minBlockReplicas = 1

# Use a channel which buffers events in memory
a3.channels.c3.type = memory
a3.channels.c3.capacity = 1000
a3.channels.c3.transactionCapacity = 100

# Bind the source and sink to the channel
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3

​ 溫馨提示:

​ 1) 不要在監控目錄中建立並持續修改檔案

​ 2) 上傳完成的檔案會以.COMPLETED結尾

​ 3) 被監控資料夾每500毫秒掃描一次檔案變動

5.3.2 啟動flume配置檔案

[root@bigdata111 myconf]# flume-ng agent --conf /opt/module/flume-1.8.0/conf/ --name a3 --conf-file /opt/module/flume-1.8.0/myconf/flume-dir.conf

5.3.3 上傳檔案到upload目錄

[root@bigdata111 opt]# mkdir upload
[root@bigdata111 opt]# ls
module  soft  test.log  upload
[root@bigdata111 opt]# mv test.log upload/
[root@bigdata111 opt]# ls
module  soft  upload
[root@bigdata111 opt]# vi test1.log
[root@bigdata111 opt]# mv test1.log upload/

​ 執行如圖:

5.4 扇出例子01

扇出:資料用於多個地方。(簡單理解:一個數據源對應多個channel,sink,並且輸出到多個目標源)

例子01示意圖:

目標:在flume1裡面接收資料,然後資料下沉到兩個不同目標源(控制檯和HDFS)

5.4.1 建立Agent配置檔案

​ 在myconf目錄下,新建一個flume-fanout1.conf檔案,內容配置如下:

# 定義agent
a1.sources=c1
a1.channels=k1 k2
a1.sinks=s1 s2

# 定義source
a1.sources.c1.type=exec
a1.sources.c1.command=tail -F /opt/test.log
a1.sources.c1.shell=/bin/bash -c

# 將資料流複製給多個channel
a1.sources.r1.selector.type=replicating

# 定義channel1
a1.channels.k1.type=memory
a1.channels.k1.capacity = 1000
a1.channels.k1.transactionCapacity=1000

# 定義channel2
a1.channels.k2.type=memory
a1.channels.k2.capacity = 1000
a1.channels.k2.transactionCapacity=1000

# 定義sink1
a1.sinks.s1.type=logger

# 定義sink2
a1.sinks.s2.type=hdfs
a1.sinks.s2.hdfs.path = hdfs://bigdata111:9000/flume/%Y%m%d/%H
# 上傳檔案的字首
a1.sinks.s2.hdfs.filePrefix = logs-
# 是否按照時間滾動資料夾
a1.sinks.s2.hdfs.round = true
# 多少時間單位建立一個新的資料夾
a1.sinks.s2.hdfs.roundValue = 1
# 重新定義時間單位
a1.sinks.s2.hdfs.roundUnit = hour
# 是否使用本地時間戳
a1.sinks.s2.hdfs.useLocalTimeStamp = true
# 積攢多少個Event才flush到HDFS一次
a1.sinks.s2.hdfs.batchSize = 1000
# 設定檔案型別,可支援壓縮
a1.sinks.s2.hdfs.fileType = DataStream
# 多久生成一個新的檔案
a1.sinks.s2.hdfs.rollInterval = 600
# 設定每個檔案的滾動大小
a1.sinks.s2.hdfs.rollSize = 134217700
# 檔案的滾動與Event數量無關
a1.sinks.s2.hdfs.rollCount = 0
# 最小副本數
a1.sinks.s2.hdfs.minBlockReplicas = 1

# 雙向連結
a1.sources.c1.channels = k1 k2
a1.sinks.s1.channel=k1
a1.sinks.s2.channel=k2

5.4.2 啟動flume配置檔案

[root@bigdata111 myconf]# flume-ng agent --conf /opt/module/flume-1.8.0/conf/ --name a1 --conf-file /opt/module/flume-1.8.0/myconf/flume-fanout1.conf -Dflume.root.logger==INFO,console

5.4.3 向檔案新增內容

​ 切換到/opt/目錄下,新建test.log檔案,然後動態新增內容,觀察控制檯輸出以及web的hdfs檔案

[root@bigdata111 opt]# touch test.log
[root@bigdata111 opt]# touch test.log
[root@bigdata111 opt]# echo 'china' >>test.log 
[root@bigdata111 opt]# echo 'hello world' >>test.log
[root@bigdata111 opt]# echo 'nihao' >> test.log

​ 控制檯輸出如下:

​ web頁面結果:

5.5 扇出例子02

目標:flume1監控檔案,然後將變動資料分別傳給flume2和flume3,flume2的資料下沉到HDFS;flume3的資料下沉到本地檔案;

5.5.1 建立flume1配置檔案

​ 在bigdata111上的myconf目錄下,新建agent配置檔案:flume-fanout1.conf;

​ flume1用於監控某檔案的變動,同時產生兩個channel和兩個sink,分別輸送給flume2,flume3;

​ 檔案內容如下:

# 配置agent
a1.sources = c1
a1.channels = k1 k2
a1.sinks = s1 s2

# 定義source
a1.sources.c1.type=exec
a1.sources.c1.command=tail -F /opt/test.log
a1.sources.c1.shell=/bin/bash -c

# 將資料流複製給多個channel
a1.sources.c1.selector.type=replicating

# 定義channel1
a1.channels.k1.type=memory
a1.channels.k1.capacity = 1000
a1.channels.k1.transactionCapacity=1000

# 定義channel2
a1.channels.k2.type=memory
a1.channels.k2.capacity = 1000
a1.channels.k2.transactionCapacity=1000

# 定義sink1
a1.sinks.s1.type = avro
a1.sinks.s1.hostname = bigdata112
a1.sinks.s1.port = 4402

# 定義sink2
a1.sinks.s2.type = avro
a1.sinks.s2.hostname = bigdata113
a1.sinks.s2.port = 4402

# 雙向連結
a1.sources.c1.channels = k1 k2
a1.sinks.s1.channel=k1
a1.sinks.s2.channel=k2

5.5.2 建立flume2配置檔案

​ 在bigdata112的myconf目錄下,新建agent配置檔案:flume-fanout2.conf

​ 接收flume1的event資料,然後產生一個channel和一個sink,最後將資料下沉到hdfs

​ 檔案內容如下:

# 配置agent 不同agent之間,agent名不相同,但是source,channel,sink名可以相同
a2.sources = c2
a2.channels = k2
a2.sinks = s2

# 定義source
a2.sources.c2.type=avro
a2.sources.c2.bind = bigdata112
a2.sources.c2.port = 4402

# 定義channel
a2.channels.k2.type=memory
a2.channels.k2.capacity = 1000
a2.channels.k2.transactionCapacity=1000

# 定義sink
a2.sinks.s2.type = hdfs
a2.sinks.s2.hdfs.path=hdfs://bigdata111:9000/flume2/%H
#上傳檔案的字首
a2.sinks.s2.hdfs.filePrefix = flume2-
#是否按照時間滾動資料夾
a2.sinks.s2.hdfs.round = true
#多少時間單位建立一個新的資料夾
a2.sinks.s2.hdfs.roundValue = 1
#重新定義時間單位
a2.sinks.s2.hdfs.roundUnit = hour
#是否使用本地時間戳
a2.sinks.s2.hdfs.useLocalTimeStamp = true
#積攢多少個Event才flush到HDFS一次
a2.sinks.s2.hdfs.batchSize = 100
#設定檔案型別,可支援壓縮
a2.sinks.s2.hdfs.fileType = DataStream
#多久生成一個新的檔案
a2.sinks.s2.hdfs.rollInterval = 600
#設定每個檔案的滾動大小大概是128M
a2.sinks.s2.hdfs.rollSize = 134217700
#檔案的滾動與Event數量無關
a2.sinks.s2.hdfs.rollCount = 0
#最小副本數
a2.sinks.s2.hdfs.minBlockReplicas = 1

# 雙向連結
a2.sources.c2.channels = k2
a2.sinks.s2.channel=k2

5.5.3 建立flume3配置檔案

​ 在bigdata113的myconf目錄下,新建agent配置檔案:flume-fanout3.conf

​ 接收flume1的event資料,然後產生一個channel和一個sink,最後將資料下沉到本地/opt/flume3

​ 檔案內容如下:

# 配置agent
a3.sources = c3
a3.channels = k3
a3.sinks = s3

# 定義source
a3.sources.c3.type=avro
a3.sources.c3.bind = bigdata113
a3.sources.c3.port = 4402

# 定義channel
a3.channels.k3.type=memory
a3.channels.k3.capacity = 1000
a3.channels.k3.transactionCapacity=1000

# 定義sink
a3.sinks.s3.type = file_roll
# 提示:本地此目錄必須先建好,程式不會自動建立該目錄
a3.sinks.s3.sink.directory=/opt/flume3

# 雙向連結
a3.sources.c3.channels = k3
a3.sinks.s3.channel=k3

5.5.4 啟動三臺機器配置檔案

bigdata111:

[root@bigdata111 myconf]# flume-ng agent --conf /opt/module/flume-1.8.0/conf/ --name a1 --conf-file /opt/module/flume-1.8.0/myconf/flume-fanout1.conf -Dflume.root.logger==INFO,console

bigdata112:

[root@bigdata112 myconf]# flume-ng agent --conf /opt/module/flume-1.8.0/conf/ --name a2 --conf-file /opt/module/flume-1.8.0/myconf/flume-fanout2.conf 

bigdata113:

[root@bigdata113 myconf]# flume-ng agent --conf /opt/module/flume-1.8.0/conf/ --name a3 --conf-file /opt/module/flume-1.8.0/myconf/flume-fanout3.conf 

​ 執行結果如圖:

​ bigdata112:

​ bigdata113:

5.6 扇入例子

5.6.1 建立flume1配置檔案

​ flume1(agent1)監控埠資料變化,將資料sink到flume3(agent3);

​ 在myconf目錄下新建agent檔案:flume-fanin-1.conf

​ 配置內容如下:

# 配置agent
a1.sources = c1
a1.channels = k1
a1.sinks = s1

# 配置source
a1.sources.c1.type = netcat
a1.sources.c1.bind = bigdata111
a1.sources.c1.port = 6666

# 配置sink
a1.sinks.s1.type=avro
a1.sinks.s1.hostname=bigdata113
a1.sinks.s1.port=5008

# 配置channel
a1.channels.k1.type=memory
a1.channels.k1.capacity=1000
a1.channels.k1.transactionCapacity=1000

# 雙向繫結
a1.sources.c1.channels = k1
a1.sinks.s1.channel = k1

5.6.2 建立flume2配置檔案

​ flume2(agent2)監控本地檔案變化,將資料sink到flume3(agent3);

​ 在myconf目錄下新建agent檔案:flume-fanin-2.conf

​ 配置內容如下:

# 配置agent
a2.sources = c1
a2.channels = k1
a2.sinks = s1

# 配置source
a2.sources.c1.type = exec
a2.sources.c1.command = tail -F /opt/ceshi.log
a2.sources.c1.shell=/bin/bash -c

# 配置sink
a2.sinks.s1.type=avro
a2.sinks.s1.hostname=bigdata113
a2.sinks.s1.port=5008

# 配置channel
a2.channels.k1.type=memory
a2.channels.k1.capacity=1000
a2.channels.k1.transactionCapacity=1000

# 雙向繫結
a2.sources.c1.channels = k1
a2.sinks.s1.channel = k1

5.6.3 建立flume3配置檔案

​ flume3(agent3)接收flume1和flume2的資料,將資料sink到HDFS ;

​ 在myconf目錄下新建agent檔案:flume-fanin-3.conf

​ 配置內容如下:

# 配置agent
a3.sources = c1
a3.channels = k1
a3.sinks = s1

# 配置source
a3.sources.c1.type = avro
a3.sources.c1.bind = bigdata113
a3.sources.c1.port = 5008

# 配置sink
a3.sinks.s1.type=hdfs
a3.sinks.s1.hdfs.path=hdfs://bigdata111:9000/flume3/%H
# 上傳檔案的字首
a3.sinks.s1.hdfs.filePrefix = flume3-
# 是否按照時間滾動資料夾
a3.sinks.s1.hdfs.round = true
# 多少時間單位建立一個新的資料夾
a3.sinks.s1.hdfs.roundValue = 1
# 重新定義時間單位
a3.sinks.s1.hdfs.roundUnit = hour
# 是否使用本地時間戳
a3.sinks.s1.hdfs.useLocalTimeStamp = true
# 積攢多少個Event才flush到HDFS一次
a3.sinks.s1.hdfs.batchSize = 1000
# 設定檔案型別,可支援壓縮
a3.sinks.s1.hdfs.fileType = DataStream
# 多久生成一個新的檔案
a3.sinks.s1.hdfs.rollInterval = 600
# 設定每個檔案的滾動大小大概是128M
a3.sinks.s1.hdfs.rollSize = 134217700
# 檔案的滾動與Event數量無關
a3.sinks.s1.hdfs.rollCount = 0
# 最小冗餘數
a3.sinks.s1.hdfs.minBlockReplicas = 1

# 配置channel
a3.channels.k1.type=memory
a3.channels.k1.capacity=1000
a3.channels.k1.transactionCapacity=1000

# 雙向繫結
a3.sources.c1.channels = k1
a3.sinks.s1.channel = k1

5.6.4 啟動三個flume配置檔案

flume1:

[root@bigdata111 myconf]# flume-ng agent -c ../conf/ -n a1 -f flume-fanout1.conf -Dflume.root.logger==INFO,console

flume2:

[root@bigdata112 myconf]# flume-ng agent -c ../conf/ -n a2 -f flume-fanout2.conf 

flume3:

[root@bigdata113 myconf]# flume-ng agent -c ../conf/ -n a3 -f flume-fanout3.conf 

5.6.5 操作埠與檔案

新開xshell選項卡,連結bigdata111伺服器,然後執行telnet命令:

[root@bigdata111 ~]# telnet bigdata111 6666
Trying 192.168.1.111...
Connected to bigdata111.
Escape character is '^]'.
english
OK
chinese
OK
hello
OK
.net
OK
php
OK
java
OK

新開xshell選項卡,連結bigdata112伺服器,然後向/opt/ceshi.log新增新內容:

[root@bigdata112 ~]# cd /opt/
[root@bigdata112 opt]# ls
ceshi.log  ha  module  soft  zookeeper.out
[root@bigdata112 opt]# cat ceshi.log
start-log-in
end-log
[root@bigdata112 opt]# echo `date` >> ceshi.log
[root@bigdata112 opt]# echo "end-log" >> ceshi.log
[root@bigdata112 opt]# cat ceshi.log 
start-log-in
end-log
2019年 09月 07日 星期六 23:36:03 CST
end-log

5.6.6 顯示執行結果

​ web頁面結果:

​ hdfs的檔案內容:

相關推薦

FlumeFlume基礎安裝使用

1、Flume簡介 ​ (1) Flume提供一個分散式的,可靠的,對大資料量的日誌進行高效收集、聚集、移動的服務,Flume只能在Unix環境下執行。 ​ (2) Flume基於流式架構,容錯性強,也很靈活簡單。 ​ (3) Flume、Kafka用來實時進行資料收集,Spark、Flink用來實時處理資料

原創Java基礎Session機制

mem wrap 增加 sha1 info 下載 head 返回 att Session機制 JSESSIONID是Session的標識,當客戶端請求服務器端的時候,服務器端會檢查是否已經給這個客戶端創建過Session,也就是看客戶端的請求中的header是否有Cooki

Python基礎運算子

python運算子 算術運算子、比較運算子、賦值運算子、邏輯運算子、位運算子、成員運算子、身份運算子、運算子優先順序 Python算術運算子 運算子 描述 例項 + 加 - 兩個物件相加 a + b 輸出結果 31 - 減 - 得到

elsticsearch 1.基礎環境安裝

安裝java-1.8環境 1.安裝java 1.8 # yum install java-1.8.0-openjdk 2.配置環境   JAVA_HOME=/usr/lib/jvm/jre-1.8.0 CLASSPATH=.:$JAVA_HOME/lib/rt.j

Oracle第0天 安裝配置

篇章概覽 前言 0、安裝與配置 第一天:Oracle使用者管理 1.1、使用者的建立與刪除 1.2、使用者許可權的授予與撤銷 1.3、使用者的口令管理 1.4、常用命令總結 第二天:Oracle基本用法 2.1、Oracle資料型別 2.2、Oracle基

專欄 - Linux常用軟體安裝配置

Linux常用軟體安裝與配置 Linux常用軟體,如Nginx,Memcached,PHP,Python,Mysql,Samba,Apache,TTserver,Redis,Gearman,svn等一些常用的軟體的安裝,配置以及使

Docker在Linux下安裝配置Docker環境

0x00 前言 沒有太多說的,這個可能也到處都有…… 每個人的方法大概也大同小異? 主要是自己第一次接觸docker,就當作簡單的做一個記錄與總結吧。 (注意:本篇和以前的環境配置不同,遇到的問題過多,而且最終不是自己獨立完成 (故主要著眼於出現問題的記錄與過程

redislinux上的安裝配置(詳細圖解)

1、下載 http://redis.io/download 2、解壓至任一目錄 tar xzf redis-2.8.17.tar.gz 3、編譯並安裝 cd redis-2.8.1

RabbitMQubuntu下RabbitMQ安裝簡單使用

參考連結:1、安裝:https://blog.csdn.net/a295277302/article/details/71246941 https://blog.csdn.net/junzhen_chen/article/details/784593832、使用:https:

原創Linux基礎後臺執行

linux伺服器通常都是遠端登入的,執行命令或者指令碼時,如果連線斷掉(執行時間較長或者網路不穩定時),那麼程序也就沒了,這時只能重新連線重新執行,這時可以使用後臺執行: 1 nohup 命令 nohup $command $args & 這時會生成一個nohup.out檔案,內容是

原創Linux基礎sudo

section systems 常用 username linux dde share col users sudo允許用戶以其他用戶的身份(比如root)執行命令,比如切換用戶、執行命令、讀寫文件等; 配置 sudo配置在:/etc/sudoers ## Sudoers

Java基礎—反射

value file ... 編譯錯誤 構造函數 prop ger pan 利用反射 本文章來源:https://blog.csdn.net/sinat_38259539/article/details/71799078。感謝敬業的小碼哥的總結。 反射是框架設計的靈魂(使用

原創Linux基礎iptables

target port tab tor 之前 con 一個 設置 man iptables 1.4.21 官方:https://www.netfilter.org/projects/iptables/index.html iptables is the user

原創Linux基礎keepalived

技術分享 proto lur software rac 自己的 lin bsp drop keepalived 2.0.12 官方:http://www.keepalived.org/ 一 簡介 Keepalived is a routing software wri

原創Linux基礎常用命令

查找 查看進程 cores mem 負載 http block phy -m 1 磁盤、cpu、內存相關 查看整體磁盤占用情況 # df -h 查看指定目錄磁盤占用情況,按照目錄匯總,深度為1 # du -h --max-depth=1 $path 在指定目錄查查找

dockerdocker registry的安裝啟動

docker registry是什麼? docker registry其實就是一個本地版本的docker hub,一個私有倉庫。 在使用docker的過程中,我們經常使用docker pull從雲端拉取image映象資源到本地,比如我現在需要一個to

原創Linux基礎命令行瀏覽器links

end base use bubuko element graph 技術 namenode name 有時服務器環境受限,比如在內網環境不能暴露端口從外網訪問,用curl看html代碼比較累,這時可以使用命令行瀏覽器來查看相關頁面 links 官方:http://lin

RedisRedis 持久化 RDB AOF 詳解

## Redis 持久化 我們知道Redis的資料是全部儲存在記憶體中的,如果機器突然GG,那麼資料就會全部丟失,因此需要有持久化機制來保證資料不會因為宕機而丟失。Redis 為我們提供了兩種持久化方案,一種是基於快照,另外一種是基於 AOF 日誌。接下來就來了解一下這兩種方案。 ### 作業系統與磁碟

轉載Flume學習路 (一)Flume基礎介紹

必須 4.3 bin tar.gz 開源 暴露 linu ror 失敗 討論QQ:1586558083目錄一、背景二、Flume的簡介三、Flume NG的介紹3.1 Flume特點3.2 Flume的一些核心概念3.3 Flume NG的體系結構3.4 Source3.5

NOI OpenJudge1.4程式設計基礎邏輯表示式條件分支

01:判斷數正負 #include<cstdio> #include<iostream> using namespace std; int main(){ int n; cin>>n; if(n > 0){