五分钟学会写storm代码: jstorm/storm编码原理与普通java程序的区别
运行机制topology里spout/bolt的整体结构不再细讲,主要说说storm/jstorm topology运行时与传统java程序可能存在的区别。其实区别非常少,主要也体现在初始化上,本文的目的在于帮助开发人员在无需了解storm内核原理的情况下,排查topology程序可能出现的问题。 1个topology会包含多个spout线程和bolt线程,分散运行在数个worker(进程)中。同一个worker中可能同时运行多个bolt/spout的数个线程。 与普通java程序的区别main方法main方法只在启动时运行在nimbus中,因此除了storm本身的配置项外,其他程序相关的配置,如spring配置等,配置在main方法中不会起作用。 boltbolt 的主体结构包含prepare, excute, cleanup 三部分。 其中,prepare在初始化时执行一次,cleanup在退出前执行一次,excute每条消息执行。 一些配置,包括加密,spring加载等,建议都放到prepare中。多个bolt都需要加载spring时,建议使...
activemq web console的权限配置
activemq的web console是基于jetty实现,其权限管理也是基于jetty. 根据需求,可以给不同的用户赋予不同的权限。jetty的权限管理还算灵活,虽然配起来比较麻烦,可以分别设定某个角色(role)下的用户是否有对某个页面的访问权限。 下面简要介绍一下配置方法,只需要修改/conf 下的 jetty.xml, jetty-realm.properties 1. jetty-realm.properties 这里面配置了所有用户的用户名,密码和所属角色,按照如下格式: username: password [,rolename ...] 2\. jetty.xml 首先对每个角色配置一个Constraint 类,其中roles及对应 jetty-realm.properties中的rolename <bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint"&...
storm ui 中一些关键属性的含义
Storm UI对于排查storm使用过程中遇到的问题会很有帮助,但是有些属性的含义不是很明确,虽然都是很简单的概念,如果不知道的话也会很难受。 先说一点,鼠标只到UI上的标题栏时,是可以看到这一属性的具体属性的,几篇google rank很高的文章,其实就是把这个信息整理了下来。 其实大部分属性都是很直白的,看到名字就知道是什么意思,我在这儿之把一些可能造成困扰的属性列一下,方便大家查问题。 emitted和transfered: emitted,就是发射出的数据条数,也就是调用OutputCollector的emit方法的次数。transferred则是实际tuple发送到下一个task的数目。乍一看是一样的对吗。其实一般情况下也确实是一样的。但是,比如,一个bolt 发射了数据,但是下游并没有其他bolt取这个数,这个bolt的transfer数就会是0\. 又比如,如果一个bolt A使用all group的方式(每一个bolt都要接收到)向bolt B发射tuple,那么transfered就会是emitted的数倍。 excute latency和pro...
activemq 5.6 连接池的内存泄露问题
最近在使用activemq 的连接池时,发现它存在很严重的内存泄露问题。 通过jmap监控,可以看到java.util.concurrent.locks.ReentrantLock, org.apache.activemq.pool.PooledConnection这两个类占用的空间非常大,而且增长速度也很快。 网上查了一下,正好找到activemq的bug 报告.:https://issues.apache.org/jira/browse/AMQ-3997 这个bug 在5.7中已经修复,可以通过升级版本解决。 同时,也有另一种解决方式,就是使用spring带的连接池替换activemq自带的连接池,配置如下: <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="vm://205-amq-brok...
关于apache camel的消息转发效率
公司使用activemq和camel做消息的分发,之前数据量不是很大,所以一直没怎么考虑效率问题,对camel的工作原理研究也不深。单是最近随着业务量的增加,camel的效率逐渐成了瓶颈,所以根据日志大概了解了camel的工作原理。虽然camel是被嵌入到activemq中,但在工作过程中,camel和activemq其实还是相对独立的。我们在camel中会配置一个到activemq的连接. http://camel.apache.org/activemq.html 关于vm这种传输方式,参考http://activemq.apache.org/vm-transport-reference.html 看了下日志,发现这种配置下camel会有一个很严重的问题: camel每次执行转发操作时,都会新建一个到activemq的连接,之后再将其关闭。这严重拖慢了转发效率,因为事实上每次转发都可以使用同一个连接。 因此查了一下camel文档,找到了 http://camel.apache.org/activemq.html 。 里边有关于线程池的配置: <pre...
一篇不错的lda模型入门文档
转自http://leyew.blog.51cto.com/5043877/860255#559183-tsina-1-46862-ed0973a0c870156ed15f06a6573c8bf0 前几天开始学习lda,走了不少弯路,对lda仍然是一头雾水。看了这篇文档以后总算明白lda是干啥的了 LDA(Latent Dirichlet Allocation)学习笔记最近在看LDA算法,经过了几天挣扎,总算大致了解了这个算法的整体框架和流程。 示例LDA要干的事情简单来说就是为一堆文档进行聚类(所以是非监督学习),一种topic就是一类,要聚成的topic数目是事先指定的。聚类的结果是一个概率,而不是布尔型的100%属于某个类。国外有个博客[1]上有一个清晰的例子,直接引用: Suppose you have the following set of sentences: I like to eat broccoli and bananas. I ate a banana and spinach smoothie for breakfast. Chinchil...
wordcount代码
参考http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input....
hadoop基本的学习资料
http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html wordcount运行过程详解 http://www.cnblogs.com/gpcuster/archive/2010/06/04/1751538.html hdfs命令介绍 http://hi.baidu.com/gkf8605/item/d6b8af09c3463512eafe38b1 hdfs命令 http://www.cnblogs.com/forfuture1978/archive/2010/11/14/1877086.html mapreduce入门 http://hadoop.apache.org/docs/r0.20.2/api/index.html hadoop0.20.2 api