flume日誌採集,hbase資料儲存,hive查詢輸出(簡單整合)
本文簡要介紹用flume做日誌採集,然後用hbase做資料儲存,最後通過hive查詢資料輸出檔案的一種過程模式。
流程如下圖:
假定:mysql已安裝並啟動,hadoop及zookeeper叢集已安裝部署並啟動。
一、flume 日誌採集
1. flume分散式安裝(略)
本文采用 apache-flume-1.9.0,一主兩從搭建,通過負載均衡方式將採集到的日誌輸入hbase儲存
2. 基本配置
(1) # master 通過exec 方式監聽日誌檔案輸出
[root@master conf]# cd /usr/local/apache-flume-1.9.0-bin
[root@master conf]# vim conf/flume-client.conf
# agent1 name
agent1.channels = c1
agent1.sources = r1
agent1.sinks = k1 k2
# set channel
agent1.channels.c1.type = memory
agent1.channels.c1.capacity = 1000
agent1.channels.c1.transactionCapacity = 100
# set source # exec監控command
agent1.sources.r1.channels = c1
agent1.sources.r1.type = exec
agent1.sources.r1.command = tail -F /usr/local/apache-flume-1.9.0-bin/data/test_cluster.log
# set sink1
agent1.sinks.k1.channel = c1
agent1.sinks.k1.type = avro
agent1.sinks.k1.hostname = slave1
agent1.sinks.k1.port = 52020
# set sink2
agent1.sinks.k2.channel = c1
agent1.sinks.k2.type = avro
agent1.sinks.k2.hostname = slave2
agent1.sinks.k2.port = 52020
# set sink group
agent1.sinkgroups = g1
agent1.sinkgroups.g1.sinks = k1 k2
# load balance
agent1.sinkgroups.g1.processor.type = load_balance
agent1.sinkgroups.g1.processor.selector = round_robin
# set failover
#agent1.sinkgroups.g1.processor.type = failover
#agent1.sinkgroups.g1.processor.k1 = 10
#agent1.sinkgroups.g1.processor.k2 = 1
#agent1.sinkgroups.g1.processor.maxpenalty = 10000
# 啟動master flume 節點
[root@master apache-flume-1.9.0-bin]# bin/flume-ng agent --conf conf --conf-file conf/flume-client.conf --name agent1 -Dflume.root.logger=INFO,console
(2) #slave1 節點配置
[root@slave1 home]# cd /usr/local/apache-flume-1.9.0-bin
[root@slave1 apache-flume-1.9.0-bin]# vim conf/flume-hbase.conf
# agent1 name
a1.channels = c1
a1.sources = r1
a1.sinks = k1
# set channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# other node, slave to master
a1.sources.r1.type = avro
a1.sources.r1.bind = slave1
a1.sources.r1.port = 52020
# set sink to hdfs
a1.sinks.k1.type = org.apache.flume.sink.hbase.HBaseSink
a1.sinks.k1.table = t_user
a1.sinks.k1.columnFamily = user_profile
a1.sinks.k1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer
a1.sinks.k1.serializer.regex = \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]
a1.sinks.k1.serializer.colNames = userId,gender,province,birthday,lastLoginTime
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
# 啟動slave1 flume 節點
[root@slave1 apache-flume-1.9.0-bin]# bin/flume-ng agent --conf conf --conf-file conf/flume-server.conf --name a1 -Dflume.root.logger=INFO,console
(3) #slave2 節點配置
[root@slave2 home]# cd /usr/local/apache-flume-1.9.0-bin
[root@slave2 apache-flume-1.9.0-bin]# vim conf/flume-hbase.conf
# agent1 name
a1.channels = c1
a1.sources = r1
a1.sinks = k1
# set channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# other node, slave to master
a1.sources.r1.type = avro
a1.sources.r1.bind = slave2
a1.sources.r1.port = 52020
# set sink to hdfs
a1.sinks.k1.type = org.apache.flume.sink.hbase.HBaseSink
a1.sinks.k1.table = t_user
a1.sinks.k1.columnFamily = user_profile
a1.sinks.k1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer
a1.sinks.k1.serializer.regex = \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]
a1.sinks.k1.serializer.colNames = userId,gender,province,birthday,lastLoginTime
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
# 啟動slave2 flume 節點
[root@slave2 apache-flume-1.9.0-bin]# bin/flume-ng agent --conf conf --conf-file conf/flume-server.conf --name a1 -Dflume.root.logger=INFO,console
二、hbase 資料儲存
1. hbase 叢集安裝部署(略)
2. shell終端啟動hbase,並建立表 t_user
3. 向表 t_user手動插入一些資料
4. 檢視錶 t_user資料
三、hive 查詢輸出
1. hive 叢集安裝部署(略)
2. 終端啟動hive
3. 建立hive到hbase的對映表
create external table t_user(id string, userId string, gender string, province string, birthday string, lastLoginTime string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" = ":key,user_profile:userId,user_profile:gender,user_profile:province,user_profile:birthday,user_profile:lastLoginTime")
TBLPROPERTIES("hbase.table.name" = "t_user");
4. 通過hive查詢表資料
5. 從master 節點模擬日誌檔案輸出
輸出日誌格式參考flume slave 節點正則匹配格式:
a1.sinks.k1.serializer.regex = \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]\\ \\[(.*?)\\]
6. hbase shell 終端檢視資料是否存入hbase
7. hive檢視是否同步hbase最新資料
8.寫指令碼提取資料檔案(可以寫crontab定時執行)
將空格分隔符替換為逗號
總結:以上即為一個日誌檔案採集到資料檔案輸出的簡單過程,後續還會持續更新,包括補充一些叢集部署步驟以及過程中容易踩到的一些坑。
相關文章
- 日誌採集框架Flume框架
- 大資料應用-Flume+HBase+Kafka整合資料採集/儲存/分發完整流程測試03.大資料Kafka
- Hbase、Hive、Impala資料同步簡單示例Hive
- 資料採集元件:Flume基礎用法和Kafka整合元件Kafka
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程
- Hive簡易教程 - 資料儲存Hive
- 簡單ELK配置實現生產級別的日誌採集和查詢實踐
- 大資料4.1 - Flume整合案例+Hive資料倉大資料Hive
- 大資料03-整合 Flume 和 Kafka 收集日誌大資料Kafka
- 資料儲存與輸出輸入
- 圖解大資料 | 海量資料庫查詢-Hive與HBase詳解圖解大資料資料庫Hive
- 雲原生環境下的日誌採集、儲存、分析實踐
- MySQL - 資料查詢 - 簡單查詢MySql
- 對 MySQL 慢查詢日誌的簡單分析MySql
- Hive之 資料儲存Hive
- 分散式資料恢復-hbase+hive分散式儲存資料恢復方案分散式資料恢復Hive
- HBase 資料儲存結構
- 遊戲日誌分析2:全方位資料採集遊戲
- 大資料01-Flume 日誌收集大資料
- 日誌採集/分析
- 掌握Hive資料儲存模型Hive模型
- 資料庫MySQL一般查詢日誌或者慢查詢日誌歷史資料的清理資料庫MySql
- Logtail:像查詢資料庫一樣查詢日誌AI資料庫
- C++簡單日誌/debug除錯資訊輸出C++除錯
- Hive的壓縮儲存和簡單優化Hive優化
- 大資料學習(hbase,hive,sqoop2對資料的簡單操作)大資料HiveOOP
- 資料的儲存和查詢分離不利查詢效能 - thenewstack
- 簡單分析oracle的資料儲存Oracle
- vivo大資料日誌採集Agent設計實踐大資料
- mysql 日誌之慢查詢日誌MySql
- 監控採集上報和儲存監控資料策略
- MySQL資料庫中的日誌檔案---(3)慢查詢日誌MySql資料庫
- MySQL資料庫中的日誌檔案---(2)普通查詢日誌MySql資料庫
- mysql 資料儲存檔案及6類日誌MySql
- Android 程式設計日誌之資料儲存Android程式設計
- SQL Server資料庫事務日誌儲存序列SQLServer資料庫
- Kubernetes日誌採集
- MySQL之資料的簡單查詢MySql