最近在做日志收集方面工作,在此之上也需要实现实时计算,由于以前也没做过这方面工作,从基础开始搭建demo,真实环境估计会有很大不同,可以先做测试验证。
计划搭建Flume -> Kafka -> Storm(Spark)的架构,其中Storm看来对我有难度,Spark有现成sample,先使用Spark
目标:
监控Nginx的日志,并将数据存储到hdfs上,同时使用storm(spark)做事实处理
计划步骤:
0.准备工作
1.安装Flume并配置
2.安装Kafka并配置
3.测试Flume和Kafka连通性
4.安装SparkStream并配置
5.测试SparkStream和Kafka连通性
6. web service的编写.总结启动命令
7.计数网页的制作
8.SparkStream调用web service生成计数
9.Flume连通hdfs并实际应用
10.Storm相关
11.下一步思考
使用安装文件:
JDK : 1.7
Flume:apache-flume-1.6.0-bin.tar.gz (http://flume.apache.org/download.html)
Kafka:kafka_2.11-0.8.2.2.tgz (http://kafka.apache.org/downloads.html)
Spark: spark-1.5.1-bin-hadoop2.6.tgz (http://spark.apache.org/downloads.html)
一些参考文档:
大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合(http://www.aboutyun.com/thread-6855-1-1.html)
SparkStream 使用(http://blog.csdn.net/escaflone/article/details/43341275)
Spark Streaming小结(http://www.aboutyun.com/thread-11276-1-1.html)
0.准备工作
准备JDK,安装在$HOME/jdk1.7.0_17
所有程序都安装在$HOME目录下
1.安装Flume并配置
解压apache-flume-1.6.0-bin.tar.gz 到$HOME/apache-flume-1.6.0-bin
设置JDK路径
cd $HOME/apache-flume-1.6.0-bin
修改 conf/flume-env.sh 增加export JAVA_HOME=$HOME/jdk1.7.0_17
修改 conf/flume.conf,内容如下:
agent1.sources = r1
agent1.sinks = k1
agent1.channels = c1
# Describe/configure the source
agent1.sources.r1.type = exec
agent1.sources.r1.command=tail -f $HOME/apache-flume-1.6.0-bin/testfolder/flumetest.log
# # Describe the sink
agent1.sinks.k1.type = logger
#
# Use a channel which buffers events in memory
agent1.channels.c1.type = memory
agent1.channels.c1.capacity = 1000
agent1.channels.c1.transactionCapacity = 100
#
# Bind the source and sink to the channel
agent1.sources.r1.channels = c1
agent1.sinks.k1.channel = c1
--启动
cd $HOME/apache-flume-1.6.0-bin
bin/flume-ng agent --conf conf/ -f conf/flume.conf -Dflume.root.logger=INFO,console -n agent1
--测试
date >> $HOME/apache-flume-1.6.0-bin/testfolder/flumetest.log
在consloe可见消息
2.安装kafka并验证
start参考文档见http://kafka.apache.org/documentation.html#quickstart
解压kafka_2.11-0.8.2.2.tgz 到$HOME/kafka_2.11-0.8.2.2
设置JDK路径
修改 bin/kafka-run-class.sh 增加export JAVA_HOME=/jdk/jdk1.7.0_17
--由于kafka需要zookeeper,启动kafka自带的zookeeper做测试
cd $HOME/kafka_2.11-0.8.2.2
bin/zookeeper-server-start.sh config/zookeeper.properties
--启动server
cd $HOME/kafka_2.11-0.8.2.2
bin/kafka-server-start.sh config/server.properties
--创建一个test topic
cd $HOME/kafka_2.11-0.8.2.2
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
We can now see that topic if we run the list topic command:
--测试一下,列出所有主题
bin/kafka-topics.sh --list --zookeeper localhost:2181
显示
test
3.配置flume和kafka集成
cd $HOME/apache-flume-1.6.0-bin
修改conf/flume_kafka.conf(其他内容同conf/flume.conf) 测试kafka sink 集成
--注意9092是brokerList的监听端口,不是 kafka test的运行端口
agent1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
agent1.sinks.k1.topic = test
agent1.sinks.k1.brokerList = localhost:9092
agent1.sinks.k1.requiredAcks = 1
agent1.sinks.k1.batchSize = 20
--启动flume
cd $HOME/apache-flume-1.6.0-bin
bin/flume-ng agent --conf conf/ -f conf/flume_kafka.conf -Dflume.root.logger=INFO,console -n agent1
开一个kafka自带的接受smaple
cd $HOME/kafka_2.11-0.8.2.2
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test
--bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
--测试,可以在kafka的consumer sample接受数据
date >> $HOME/apache-flume-1.6.0-bin/testfolder/flumetest.log
其他的明天继续了