前期准备工作:
注意:如下命令如果权限不够,请在命令前面加sudo!!!
安装MySQL5.X版本
安装vim
安装Hadoop
安装Flume:
打开终端:
Ctrl+Alt+T
下载flume:
wget http://mirror.bit.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz
创建flume的安装目录:
mkdir -p /data/service/
解压到/data/service/目录中:
tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /data/service/
进入/data/service/目录中:
cd /data/service/
将文件名该为flume:
mv apache-flume-1.7.0-bin/ flume
创建并配置hello-world.properties文件:
sudo vim /data/service/flume/conf/hello-world.properties
按i进入编辑模式往hello-world.properties里面添加配置
agent.sources = s1
agent.channels = c1
agent.sinks = k1
agent.sources.s1.type = netcat
agent.sources.s1.channels = c1
agent.sources.s1.bind = 0.0.0.0
agent.sources.s1.port = 12345
agent.channels.c1.type = memory
agent.sinks.k1.type = logger
agent.sinks.k1.channel = c1
按Esc键退出编辑模式,进入一般模式,输入:wq(wq为保存并退出)
返回上一层:
cd ..(即/data/service/flume/)
启动http:
bin/flume-ng agent -n agent -c ./conf -f conf/hello-world.properties -Dflume.root.logger=INFO,console
如下图则启动成功:
再打开一个终端进行测试(前面终端为终端一,此终端为终端二):
Ctrl+Alt+T
终端二输入连接如下图:
telnet localhost 12345
终端二输入Hello word测试是否输出成功,成功如下图:
按Crrl+c则能退出flume模式
到这搭建Flume大体就成功了。
当我们启动flume的时候会产生一个进程如下图:12748 Application -n agent -f conf/hello-word.properties
bin/flume-ng agent -n agent -c ./conf -f conf/hello-world.properties -Dflume.root.logger=INFO,console
但是当我们退出flume模式的时候,flume进程也因此关闭了如下图:
如果需要,我们就要设置此进程在后台进行,退出flume模式该进程也会存在,在前面加上nohup以及在后面加上&符号即可:
nohup bin/flume-ng agent -n agent -c ./conf -f conf/hello-world.properties -Dflume.root.logger=INFO,console &
就会在终端一产生一个进程[2] 13466,并在终端二显示该进程。
只要进程存在,我们就可以继续可以在终端二进行Hello word测试。
不需要终端一就可以继续监视flume的输出信息:
tail -f /data/service/flume/nohup.out
强制关掉进程:kill -9 13466(进程ID)。
flume案例:
演示搭建HTTP Source接收JSON数据(http.properties演示):
用用于接收HTTP的GET或者POST请求事件数据,接收数据后需要会用用HTTPSourceHandler接口口对数据转化成事件。
创建要测试http.properties文件配置:
vim /data/service/flume/conf/http.properties
往http.properties里面添加数据如下图:
agent.sources=s1
agent.sinks=k1
agent.channels=c1
agent.sources.s1.type=http
agent.sources.s1.bind=0.0.0.0
agent.sources.s1.port=50000
agent.sources.s1.channels=c1
agent.sinks.k1.type=logger
agent.sinks.k1.channel=c1
agent.channels.c1.type=memory
agent.channels.c1.capacity=1000
agent.channels.c1.transactionCapacity=100
#bin/flume-ng agent -n agent -c conf -f ./conf/http.properties -Dflume.root.logger=INFO,console
#curl -X POST -d '[{"headers" :{"name":"lancer","level":"min"},"body":"text"}]' http://localhost:50000
进入/data/service/flume/目下中:
cd /data/service/flume/
终端一执行启动flume进程5076 Application:
bin/flume-ng agent -n agent -c conf -f ./conf/http.properties -Dflume.root.logger=INFO,console
终端二输入命令:
curl -X POST -d '[{"headers" :{"name":"lancer","level":"min"},"body":"text"}]' http://localhost:50000
如下图则测试成功:终端一输出Event:{headers:{name=lancer,level=min} body:74 65 78 74 text}
以下将演示搭建Spooling Directory Source(spooling.properties演示)接收本地目录数据,并输出:
source允许您通过将要提取的文文件放入入磁盘上的“spooling”目目录来提取数据。此源将监视指定目目录的新文文件,并在新文文件显示时解析新文文件中的 event。
event解析逻辑是可插入入的。在给定文文件被完全读入入channel之后,它被重命名以指示完成(或可选地被删除)。
source会使用用追踪器器持续化到磁盘,以定位每个文文件在哪个位置成功将事件写入入channel,即使agent出现异常也能重启后从这个位置恢复读取。
创建要测试spooling.properties文件配置:
vim /data/service/flume/conf/spooling.properties
往http.properties里面添加数据如下图:
agent.channels = c1
agent.sources = s1
agent.sinks = k1
agent.sources.s1.type = spooldir
agent.sources.s1.channels = c1
agent.sources.s1.spoolDir = /data/log/flume_spool
agent.sources.s1.fileHeader = true
agent.sources.s1.fileSuffix = .COMPLETED
agent.channels.c1.type = memory
agent.sinks.k1.type = logger
agent.sinks.k1.channel = c1
创建存放数据目录:
mkdir -p /data/log/flume_spool/
在/data/log/目录里面创建一个spool.data数据文本:
vim /data/log/spool.data
往spool.data里面添加数据如下图:
2015-01-02,1,100,lancer
2015-04-03,1,200,rider
2016-01-02,3,300,lancer
2016-01-06,2,58,berserker
2016-06-02,4,71,berserker
2016-09-02,2,41,saber
2017-04-02,1,45,berserker
2017-09-02,1,31,saber
2017-12-02,3,46,caster
2017-09-02,2,70,caster
2017-09-02,2,70,saber
进入/data/service/flume/目录中:
cd /data/service/flume/
终端一执行启动flume进程7134 Application:
bin/flume-ng agent -n agent -c conf -f ./conf/spooling.properties -Dflume.root.logger=INFO,console
终端二输入命令:
cp /data/log/spool.data /data/log/flume_spool/
如下图则测试成功:终端一输出Event,并在/data/log/flume_spool/目录下显示spool.data.COMPLETED:.COMPLETED后缀说明已读取完毕
以下将演示Flume搭建部署之写入HDFS(spooling-hdfs.properties演示):(写入HDFS之前,得确保本机安装了Hadoop)
先启动Hadoop:
创建Hadoop目录:
hdfs dfs -mkdir /flume
查看Hadoop目录,就可以看到刚才创建的/flume目录:
hdfs dfs -ls /
删除掉/data/log/flume_spool/目录下的所有文件:
rm /data/log/flume_sqool/*
终端一进入/data/service/flume/目录:
cd /data/service/flume/
终端一启动flume进程:
bin/flume-ng agent -n agent -c conf -f ./conf/spooling-hdfs.properties -Dflume.root.logger=INFO,console
终端二复制spool.data到/data/log/flume_spool/目录下:
cp /data/log/spool.data /data/log/flume_spool/
如下图则写入HDFS成功,会在终端一显示创建了文件 /flume/20171011/log_20171011_11.1507690888698.log如下图:
查看Hadoop里面的/flume目录如下图,显示已经创建20171011目录如下图:
hdfs dfs -ls /flume
查看HDFS里面的log_20171011_11.1507690888698.log日志数据如下图:
hdfs dfs -cat /flume/20171011/log_20171011_11.1507690888698.log
所学会的基础操作案例演示完毕!!!