您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据挖掘与识别 > 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
个人观点:大数据我们都知道hadoop,但并不都是hadoop.我们该如何构建大数据库项目。对于离线处理,hadoop还是比较适合的,但是对于实时性比较强的,数据量比较大的,我们可以采用Storm,那么Storm和什么技术搭配,才能够做一个适合自己的项目。下面给大家可以参考。可以带着下面问题来阅读本文章:1.一个好的项目架构应该具备什么特点?2.本项目架构是如何保证数据准确性的?3.什么是Kafka?4.flume+kafka如何整合?5.使用什么脚本可以查看flume有没有往Kafka传输数据做软件开发的都知道模块化思想,这样设计的原因有两方面:一方面是可以模块化,功能划分更加清晰,从“数据采集--数据接入--流失计算--数据输出/存储”1).数据采集负责从各节点上实时采集数据,选用cloudera的flume来实现2).数据接入由于采集数据的速度和数据处理的速度不一定同步,因此添加一个消息中间件来作为缓冲,选用apache的kafka3).流式计算对采集到的数据进行实时分析,选用apache的storm4).数据输出对分析后的结果持久化,暂定用mysql另一方面是模块化之后,假如当Storm挂掉了之后,数据采集和数据接入还是继续在跑着,数据不会丢失,storm起来之后可以继续进行流式计算;那么接下来我们来看下整体的架构图详细介绍各个组件及安装配置:操作系统:ubuntuFlumeFlume是Cloudera提供的一个分布式、可靠、和高可用的海量日志采集、聚合和传输的日志收集系统,支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。下图为flume典型的体系结构:Flume数据源以及输出方式:Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIXtail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力,在我们的系统中目前使用exec方式进行日志采集。Flume的数据接受方,可以是console(控制台)、text(文件)、dfs(HDFS文件)、RPC(Thrift-RPC)和syslogTCP(TCPsyslog日志系统)等。在我们系统中由kafka来接收。Flume下载及文档:安装:1.$tarzxvfapache-flume-1.4.0-bin.tar.gz/usr/local复制代码Flume启动命令:1.$bin/flume-ngagent--confconf--conf-fileconf/flume-conf.properties--nameproducer-Dflume.root.logger=INFO,console复制代码Kafkakafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性:通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。支持通过kafka服务器和消费机集群来分区消息。支持Hadoop并行数据加载。kafka的目的是提供一个发布订阅解决方案,它可以处理消费者规模的网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。kafka分布式订阅架构如下图:--取自Kafka官网罗宝兄弟文章上的架构图是这样的其实两者没有太大区别,官网的架构图只是把Kafka简洁的表示成一个KafkaCluster,而上面架构图就相对详细一些;Kafka版本:0.8.0Kafka下载及文档:安装:1.tarxzfkafka-VERSION.tgz2.cdkafka-VERSION3../sbtupdate4../sbtpackage5../sbtassembly-package-dependency复制代码启动及测试命令:(1)startserver1.bin/zookeeper-server-start.shconfig/zookeeper.properties2.bin/kafka-server-start.shconfig/server.properties复制代码这里是官网上的教程,kafka本身有内置zookeeper,但是我自己在实际部署中是使用单独的zookeeper集群,所以第一行命令我就没执行,这里只是些出来给大家看下。配置独立的zookeeper集群需要配置server.properties文件,讲zookeeper.connect修改为独立集群的IP和端口1.zookeeper.connect=nutch1:2181复制代码(2)Createatopic1.bin/kafka-create-topic.sh--zookeeperlocalhost:2181--replica1--partition1--topictest2.bin/kafka-list-topic.sh--zookeeperlocalhost:2181复制代码(3)Sendsomemessages1.bin/kafka-console-producer.sh--broker-listlocalhost:9092--topictest复制代码(4)Startaconsumer1.bin/kafka-console-consumer.sh--zookeeperlocalhost:2181--topictest--from-beginning复制代码kafka-console-producer.sh和kafka-console-cousumer.sh只是系统提供的命令行工具。这里启动是为了测试是否能正常生产消费;验证流程正确性在实际开发中还是要自行开发自己的生产者与消费者;kafka的安装也可以参考我之前写的文章:将Storm正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循EclipsePublicLicense1.0。Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。GitHub上的最新版本是Storm0.5.2,基本是用Clojure写的。Storm的主要特点如下:1.简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。2.可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。3.容错性。Storm会管理工作进程和节点的故障。4.水平扩展。计算是在多个线程、进程和服务器之间并行进行的。5.可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。6.快速。系统的设计保证了消息能得到快速的处理,使用ØMQ作为其底层消息队列。(0.9.0.1版本支持ØMQ和netty两种模式)7.本地模式。Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。由于篇幅问题,具体的安装步骤可以参考:Storm-0.9.0.1安装部署指导接下来重头戏开始拉!那就是框架之间的整合啦flume和kafka整合1.下载flume-kafka-plus:提取插件中的flume-conf.properties文件修改该文件:#sourcesectionproducer.sources.s.type=execproducer.sources.s.command=tail-f-n+1/mnt/hgfs/vmshare/test.logproducer.sources.s.channels=c修改所有topic的值改为test将改后的配置文件放进flume/conf目录下在该项目中提取以下jar包放入环境中flume的lib下:注:这里的flumeng-kafka-plugin.jar这个包,后面在github项目中已经移动到package目录了。找不到的童鞋可以到package目录获取。完成上面的步骤之后,我们来测试下flume+kafka这个流程有没有走通;我们先启动flume,然后再启动kafka,启动步骤按之前的步骤执行;接下来我们使用kafka的kafka-console-consumer.sh脚本查看是否有flume有没有往Kafka传输数据;以上这个是我的test.log文件通过flume抓取传到kafka的数据;说明我们的flume和kafka流程走通了;大家还记得刚开始我们的流程图么,其中有一步是通过flume到kafka,还有一步是到hdfs的;而我们这边还没有提到如何存入kafka且同时存如hdfs;flume是支持数据同步复制,同步复制流程图如下,取自于flume官网,官网用户指南地址:怎么设置同步复制呢,看下面的配置:1.#2个channel和2个sink的配置文件这里我们可以设置两个sink,一个是kafka的,一个是hdfs的;2.a1.sources=r13.a1.sinks=k1k24.a1.channels=c1c2复制代码具体配置大伙根据自己的需求去设置,这里就不具体举例了kafka和storm的整合1.下载kafka-storm0.8插件:使用mavenpackage进行编译,得到storm-kafka-0.8-plus-0.3.0-SNAPSHOT.jar包--有转载的童鞋注意下,这里的包名之前写错了,现在改正确了!不好意思!3.将该jar包及kafka_2.9.2-0.8.0-beta1.jar、metrics-core-2.2.0.jar、scala-library-2.9.2.jar(这三个jar包在kafka项目中能找到)备注:如果开发的项目需要其他jar,记得也要放进storm的Lib中比如用到了mysql就要添加mysql-connector-java-5.1.22-bin.jar到storm的lib下那么接下来我们把storm也重启下;完成以上步骤之后,我们还有一件事情要做,就是使用kafka-storm0.8插件,写一个自己的Storm程序;这里我给大伙附上一个我弄的storm程序,百度网盘分享地址:链接:密码:9arq先稍微看下程序的创建Topology代码数据操作主要在WordCounter类中,这里只是使用简单JDBC进行插入处理这里只需要输入一个参数作为Topology名称就可以了!我们这里使用本地模式,所以不输入参数,直接看流程是否走通;1.storm-0.9.0.1/bin/stormjarstorm-start-demo-0.0.1-SNAPSHOT.j
本文标题:大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
链接地址:https://www.777doc.com/doc-5910688 .html