月度归档:2014年10月

flume-ng+Kafka+Storm+HDFS 实时系统搭建

一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边我会做修正;内容应该说绝大部分引用罗宝的文章的,这里要谢谢罗宝兄弟,还有写这篇文章@晨色星空J2EE也给了我很大帮助,这里也谢谢@晨色星空J2EE

之前在弄这个的时候,跟群里的一些人讨论过,有的人说,直接用storm不就可以做实时处理了,用不着那么麻烦;其实不然,做软件开发的都知道模块化思想,这样设计的原因有两方面:

一方面是可以模块化,功能划分更加清晰,从“数据采集--数据接入--流失计算--数据输出/存储”

1).数据采集

负责从各节点上实时采集数据,选用cloudera的flume来实现

2).数据接入

由于采集数据的速度和数据处理的速度不一定同步,因此添加一个消息中间件来作为缓冲,选用apache的kafka

3).流式计算

对采集到的数据进行实时分析,选用apache的storm

4).数据输出

对分析后的结果持久化,暂定用mysql

另一方面是模块化之后,加入当Storm挂掉了之后,数据采集和数据接入还是继续在跑着,数据不会丢失,storm起来之后可以继续进行流式计算;

那么接下来我们来看下整体的架构图

详细介绍各个组件及安装配置:

操作系统:ubuntu

Flume

Flume是Cloudera提供的一个分布式、可靠、和高可用的海量日志采集、聚合和传输的日志收集系统,支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

下图为flume典型的体系结构:

Flume数据源以及输出方式:

Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力,在我们的系统中目前使用exec方式进行日志采集。

Flume的数据接受方,可以是console(控制台)、text(文件)、dfs(HDFS文件)、RPC(Thrift-RPC)和syslogTCP(TCP syslog日志系统)等。在我们系统中由kafka来接收。

Flume下载及文档:

http://flume.apache.org/

Flume安装:

  1. $tar zxvf apache-flume-1.4.0-bin.tar.gz/usr/local

Flume启动命令:

  1. $bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name producer -Dflume.root.logger=INFO,console

Kafka

kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性:

  • 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
  • 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。
  • 支持通过kafka服务器和消费机集群来分区消息。
  • 支持Hadoop并行数据加载。

kafka的 目的是提供一个发布订阅解决方案,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社 会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要 求实时处理的限制,这是一个可行的解决方案。kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实 时的消费。

kafka分布式订阅架构如下图:--取自Kafka官网

罗宝兄弟文章上的架构图是这样的

其实两者没有太大区别,官网的架构图只是把Kafka简洁的表示成一个Kafka Cluster,而罗宝兄弟的架构图就相对详细一些;

其实两者没有太大区别,官网的架构图只是把Kafka简洁的表示成一个Kafka Cluster,而罗宝兄弟的架构图就相对详细一些;

Kafka版本:0.8.0

Kafka下载及文档:http://kafka.apache.org/

Kafka安装:

  1. > tar xzf kafka-<VERSION>.tgz
  2. > cd kafka-<VERSION>
  3. > ./sbt update
  4. > ./sbt package
  5. > ./sbt assembly-package-dependency

启动及测试命令:

(1) start server

  1. > bin/zookeeper-server-start.shconfig/zookeeper.properties
  2. > bin/kafka-server-start.shconfig/server.properties

这里是官网上的教程,kafka本身有内置zookeeper,但是我自己在实际部署中是使用单独的zookeeper集群,所以第一行命令我就没执行,这里只是些出来给大家看下。

配置独立的zookeeper集群需要配置server.properties文件,讲zookeeper.connect修改为独立集群的IP和端口

  1. zookeeper.connect=nutch1:2181

(2)Create a topic

  1. > bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test
  2. > bin/kafka-list-topic.sh --zookeeperlocalhost:2181

(3)Send some messages

  1. > bin/kafka-console-producer.sh--broker-list localhost:9092 --topic test

(4)Start a consumer

  1. > bin/kafka-console-consumer.sh--zookeeper localhost:2181 --topic test --from-beginning

kafka-console-producer.sh和kafka-console-cousumer.sh只是系统提供的命令行工具。这里启动是为了测试是否能正常生产消费;验证流程正确性

在实际开发中还是要自行开发自己的生产者与消费者;

kafka的安装也可以参考我之前写的文章:http://blog.csdn.net/weijonathan/article/details/18075967

Storm

Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。GitHub上的最新版本是Storm 0.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集群。这让你可以快速进行开发和单元测试。

由于篇幅问题,具体的安装步骤可以参考我之前写的文章:http://blog.csdn.net/weijonathan/article/details/17762477

接下来重头戏开始拉!那就是框架之间的整合啦

flume和kafka整合

1.下载flume-kafka-plus:https://github.com/beyondj2ee/flumeng-kafka-plugin

2.提取插件中的flume-conf.properties文件

修改该文件:#source section

producer.sources.s.type = exec
producer.sources.s.command = tail -f -n+1 /mnt/hgfs/vmshare/test.log
producer.sources.s.channels = c

修改所有topic的值改为test

将改后的配置文件放进flume/conf目录下

在该项目中提取以下jar包放入环境中flume的lib下:

完成上面的步骤之后,我们来测试下flume+kafka这个流程有没有走通;

我们先启动flume,然后再启动kafka,启动步骤按之前的步骤执行;接下来我们使用kafka的kafka-console-consumer.sh脚本查看是否有flume有没有往Kafka传输数据;

以上这个是我的test.log文件通过flume抓取传到kafka的数据;说明我们的flume和kafka流程走通了;

大家还记得刚开始我们的流程图么,其中有一步是通过flume到kafka,还有一步是到hdfs的;而我们这边还没有提到如何存入kafka且同时存如hdfs;

flume是支持数据同步复制,同步复制流程图如下,取自于flume官网,官网用户指南地址:http://flume.apache.org/FlumeUserGuide.html

怎么设置同步复制呢,看下面的配置:

  1. #2个channel和2个sink的配置文件 这里我们可以设置两个sink,一个是kafka的,一个是hdfs的;
  2. a1.sources = r1
  3. a1.sinks = k1 k2
  4. a1.channels = c1 c2

具体配置大伙根据自己的需求去设置,这里就不具体举例了

kafka和storm的整合

1.下载kafka-storm0.8插件:https://github.com/wurstmeister/storm-kafka-0.8-plus

2.使用maven package进行编译,得到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程序,百度网盘分享地址:http://pan.baidu.com/s/1bnEdgh5;

先稍微看下程序的创建Topology代码

数据操作主要在WordCounter类中,这里只是使用简单JDBC进行插入处理

这里只需要输入一个参数作为Topology名称就可以了!我们这里使用本地模式,所以不输入参数,直接看流程是否走通;

  1. storm-0.9.0.1/bin/storm jar storm-start-demo-0.0.1-SNAPSHOT.jar com.storm.topology.MyTopology

先看下日志,这里打印出来了往数据库里面插入数据了

然后我们查看下数据库;插入成功了!


到这里我们的整个整合就完成了!

但是这里还有一个问题,不知道大伙有没有发现。这个也是@晨色星空J2EE跟我说的,其实我也应该想到的;

由于我们使用storm进行分布式流式计算,那么分布式最需要注意的是数据一致性以及避免脏数据的产生;所以我提供的测试项目只能用于测试,正式开发不能这样处理;

@晨色星空J2EE给的建议是建立一个zookeeper的分布式全局锁,保证数据一致性,避免脏数据录入!

zookeeper客户端框架大伙可以使用Netflix Curator来完成,由于这块我还没去看,所以只能写到这里了!

这里在一次谢谢罗宝和@晨色星空!

转载的话请注明来源地址:http://blog.csdn.net/weijonathan/article/details/18301321 和 http://www.51studyit.com/html/notes/20140312/14.html

Windows下使用SBT构建Scala程序

上一篇简单介绍了学习Scala编程入手时的环境构建,本文专门说明下专为Scala而生的一个Build tool的用法。

SBT, 做为一种build tool,相对于Make,Ant,Maven等来说,算是新鲜事物了。虽然它主要是配合Scala而使用,不过它的功能还是比较全面的,所以它的名称不 是Scala Build Tool,而是Simple Build Tool,即它的目标是做为一种通用的build tool。虽然名字里有Simple,其实它一点也不简单。

相关信息参见: http://www.scala-sbt.org/release/tutorial/zh-cn/index.html  里面有详细的介绍, 本文是从网络搜集的一些介绍供参考。

http://www.scala-sbt.org/0.13/tutorial/zh-cn/Basic-Def.html  介绍sbt的使用方法等

不过SBT毕竟属于小众的tool,本文并不打算事无巨细的说明它的全部用法。本文可以看作是对它的官网的阅读导引和注解,以及它的简单用法、还有与后文相关的内容。

本文以及本系列其他文中,SBT和sbt混用。

开始


1,访问https://github.com/sbt/sbt    这是主站,访问下方的README.md,按照Setup中的说明,可以了解从安装到使用的完整用法。应该先大致浏览一遍。入手使用,本文后面会介绍。

不过我觉得这里才是大纲。进入Setup的页面后,点击右上的Documentation或者Contents进入。

clipboard[1]

下图红色框中的内容,讲到了SBT的core concepts。

clipboard[2]

通览之后,会发现SBT可以用Scala语言来编写项目管理的配置文件!这个我觉得可以为做为Scala也是一种适合DSL语言的佐证了。

2,获取MSI版本安装。本文使用0.12.2。

clipboard[3]

再次检查环境变量的配置。MSI安装应该已经把SBT目录加入Path,上图是我自己的配置。

3,开启cygwin,在上篇的示例目录下直接运行sbt,进入它的交互运行方式:

clipboard[4]

也可以在shell下可以直接运行sbt compile/run/clean 等命令,是等价的。

clipboard[5]

运行完sbt的命令,就会多出来一个target字目录,其中有生成的class文件,其内容较多,这里不再说明。

要 注意一点的是,上图不是首次运行sbt时的demo。初次运行,会自动下载和配置一些内容,所以要保证联网。在Windows XP下,默认是会在C:\Documents and Settings\YOUR_NAME\下生成一个.sbt和一个.ivy目录,当然也可以自己修改。当再次运行sbt,就如上图所示了。若你删除 了".sbt"和".ivy",再次运行sbt,就会重新生成。

可见,SBT在使用上可以很简单,只要安装和配置好路径,在写有Scala代码的目录下,就可以直接运行看结果了。这种方式还是主要针对初学阶段的练手,若做一个真正完整的项目,还应该按照更加正规的做法。

为什么要说明下SBT的基本用法,因为后面说明IntelliJ IDEA下的配置时,会用到SBT。

4,根据SBT的文档,建立项目文件结构:(此小节开始的内容是独立的,后面只是说明下,实际不大会用到。)

clipboard[6]

其中必须有一个子目录被命名为“project”,build.properties和plugins.sbt要放在其中,所以这个子目录可以理解为存放于项目管理相关的配置文件用的。另外,sbt的配置文件中二行之间要空一行的,上面提到sbt的配置文件也可以用scala语言来写,但这种配置文件没有必须空一行的要求。

这里我们关注那个plugins.sbt。其中我加了2个plugins: sbt-android-pluginsbt-idea。它们的官方网是:

https://github.com/jberkel/android-plugin

https://github.com/mpeltonen/sbt-idea

是怎么知道它们的呢?线索来自google,查找“scala on android”可以查到下面的一些链接:

http://stackoverflow.com/questions/4433388/intellij-idea-android-scala-application

http://nevercertain.com/2011/02/03/scala-android-intellij-win-part-1-prerequisites.html

http://nevercertain.com/2011/02/03/scala-android-intellij-win-part-2-simple-build-tool.html

http://nevercertain.com/2011/02/18/scala-android-intellij-win-part-3.html

在第一个stackoverflow中,可知一些线索。然后是比较全面的3篇博文,介绍scala on android的配置。

不过,遗憾的是,内容已经不够新了。其中提到的sbt-android-plugin中的create_project,在它最新的版本中已经不存在了,只有0.5.1(含)之前的tag中才能找到。

sbt-android-plugin的作用是为sbt提供一些可以操作android的命令的命令,包括创建android项目、启动android emulator、打包等等。

在最新的说明中,开始使用g8等工具创建android项目。我在windows下配置失败。参考链接:

https://github.com/jberkel/android-plugin/wiki/Projects-using-sbt-android-plugin

其中是一些使用了这个插件的项目,可以参考下那个Android scala installer项目的源代码,看看实际使用sbt管理的项目结构和配置文件是怎样的。

而sbt-idea的作用是为sbt提供创建IDEA项目文件的命令,用来创建IDEA的项目文件,然后可以用IDEA直接打开一个已存在的IDEA项目。实践证明,若项目中只有scala源代码,IDEA(12.0)是无法通过扫描源代码来创建scala项目的,这说明现在IDEA的scala插件还不支持

clipboard[7]

clipboard[8]

上2张图演示了下这个插件的使用,中间省略了一些内容。和上面运行之前的目录结构相比,多出了一些目录,还有很多的文件,这里不用细说。

其实对于sbt-android-plugin,还有一个替代者:sbt-android-sdk-plugin,官网是:

https://github.com/pfn/android-sdk-plugin

其中也有说明它跟sbt-android-plugin的比较。其用法,也是在plugins.sbt中增加一些内容,然后需要联网下载使用。

5,接下来,就有了一些问题:

1)为什么不用android自带的工具来创建android项目呢?要用sbt的插件?

2)就算IDEA无法直接导入已存在的源代码,为什么不用IDEA直接创建Scala项目呢?sbt-idea插件创建的IDEA项目文件也不一定更跟得上IDEA的更新。

我觉得这些插件存在的意义,是在sbt这个框架下。显然,使用Android自带的工具以及直接使用IDE导入/创建,要比这些插件更有保证。其实更进一步说,我们后面没有必要直接使用SBT这个工具。

既然实际用不上,为何本文还要说明下呢?因为在IDEA中,还是有赖于它的,后面关于使用IDEA的文章中会看到,所以做为后文的一个基础,才有了本文。

原创:曹磊(Leo Cao) Email: leo.l.cao@gmail.com。若转载,请标明出处。

http://www.cnblogs.com/leolcao/archive/2013/03/07/2949044.html

12个最好的 WordPress Bootstrap 插件

来源: http://www.open-open.com/news/view/1254cca
Twitter Bootstrap是最被经常使用的前端框架之一,由Twitter使用HTML, CSS 和 JavaScript语言开发。在这篇文章中,我们已经收集了12个可在WordPress网站中使用的最好 WordPress Bootstrap 插件。

Best WordPress Bootstrap Plugins

Bootstrap Shortcodes

12个最好的 WordPress Bootstrap 插件

This Bootstrap Shortcodes plugin will embed different Twitter based Bootstrap components on the website and the entire implementation of components onto the website is done through TinyMCE rich editor. Users can quickly add the shortcodes to the website.

Easy Bootstrap Shortcode

12个最好的 WordPress Bootstrap 插件

Another really useful WordPress Bootstrap plugins, easy Bootstrap shortcode is bootstrap 3.0.3 compatible plugin which add icons to WordPress editor (tinyMCE Shortcode Buttons) and one can add bootstrap style to their website just by clicking on tinyMCE editor icon.

Epic Bootstrap Buttons

12个最好的 WordPress Bootstrap 插件

The Epic Bootstrap Buttons WordPress plugin allows you to add bootstrap buttons to any theme and use the awesome buttons easily.

FH Mega Menu

12个最好的 WordPress Bootstrap 插件

Another super awesome WordPress Bootstrap plugins, The FH Mega Menu is a jQuery based Bootstrap 3.0+ mega menu plugin compatible with all mobile devices and modern web browsers. It provides you number of options to play around with your site’s menu.

WordPress Twitter Bootstrap CSS

12个最好的 WordPress Bootstrap 插件

WordPress Twitter Bootstrap CSS lets you include the latest Twitter Bootstrap CSS and Javascript libraries in your WordPress site.

WP Bootstrap Menu

12个最好的 WordPress Bootstrap 插件

This WordPress Bootstrap menu plugin will easily convert the traditional navigation menu to the Twitter powered Bootstrap style. The plugin is adaptable with advanced version such as Bootstrap 2.2.2 and it even supports sub menu.

WP Bootstrap Carousel

12个最好的 WordPress Bootstrap 插件

A simple, straightforward implementation of the Twitter Bootstrap Carousel in WordPress. This plugin allows you to display images attached to a post or page as a Bootstrap Carousel using the [carousel] shortcode.

Bootstrap Admin – WordPress Bootstrap Plugins

12个最好的 WordPress Bootstrap 插件

This Bootstrap Admin plugin will revamp your administration area to maximum extent and it will quickly adjust with any kind of WordPress theme that carry a clean, style and minimalistic theme. To completely rebrand your WordPress administration area, install this striking WordPress plugin.

Bootstrap Lightbox

12个最好的 WordPress Bootstrap 插件

Bootstrap Lightbox is a simple Lightbox plugin created with Bootstrap, it is a really easy to use plugin, just add the required HTML to the page, and you get a pretty and responsive lightbox with an optional caption.

WP Bootstrap Gallery

12个最好的 WordPress Bootstrap 插件

WP Boootstrap Gallery is the ultra responsive image gallery plugin for WordPress which works seamlessly on every device. This plugin uses the power of Twitter Bootstrap Using this plugin you can easily create multiple image gallery and add them to any post,page or custom post type. The plugin comes with a simple one click installation.

Bootslider – WordPress Bootstrap Plugins

12个最好的 WordPress Bootstrap 插件

If you are looking for a high quality WordPress Bootstrap slider plugin, Bootslider plugin is for you. A great quality slider plugin for WordPress offering the capability to combine the beauty of Bootstrap with the power of a full featured content slider with layer possibility.

Strapslide – Bootstrap Slider Plugin

12个最好的 WordPress Bootstrap 插件

Strapslide is the ultimate premium Bootstrap Slider Plugin offering the capability to show images, videos, HTML markup and captions paired with simple, modern and fancy 3D transitions. Even more important, it is fully responsive and mobile optimized and can take on any dimensions.