程序员的自我修养
Home » 文章归档 » 2014年七月

Apache Storm初探

0条评论3,037次浏览

Storm简介

Storm,一个由Twitter发起的开源项目。Storm是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流,常被称为“实时的Hadoop”。

若把Hadoop理解成将一大桶水(大量的数据)倒入锅中煮(计算),煮完了就收工;那么Storm则可以理解成为一根水管连接到锅中,水持续的进入锅中,而锅持续的煮水,直到人为的把锅端掉。Storm的官网上的一张图很好的诠释了这个含义:
topology

上图中的水龙头就是数据的输入源Spout,而闪电图标的节点则是Blot节点,用来对数据进行加工处理。

Storm的特性

Storm最大的特性毫无疑问就是实时的数据流处理。Storm有很多使用场景:如实时分析,在线机器学习,持续计算,分布式RPC,ETL等等。其主要特性如下:

  • 低延迟,实时响应。Hadoop在批处理上无人能及,Storm在实时流数据处理上无人可比。
  • 高性能。用到了集群要是性能还说不过去都不好意思说自己是集群处理。其底层消息队列采用了ZeroMQ, 保证消息能快速被处理(0.9版本后不在采用)。
  • 可轻松扩展。和Hadoop一样,可以横向扩展来提高集群的处理能力;同样的,还能方便的扩展每台机器上的工作线程。
  • 高可靠性。Storm是记录级容错,保证每条消息都被处理。
  • 方便开发。Storm同MapReduce一样也有一些编程模型,且Storm除了Java以外还支持大量的编程语言。

阅读全文>>

分类:Apache Storm
标签:

HBase Filter – Decorating Filters

0条评论1,718次浏览

接着上一篇HBase Filter – Dedicated Filters继续进行HBase Filter的学习和了解。Decorating Filters,装饰性过滤器,其自身不产生任何作用,需要结合其它过滤器来产生效果。

数据准备和代码准备同HBase Filter – Comparision Filters

Decorating Filters(装饰性过滤器)

SkipFilter

SkipFilter,跳转过滤器,目前只能作用于ValueFilter。ValueFilter用于输出满足条件的行和对应的列(该行中也有1至N列满足),当加上SkipFilter后,若某行中有不满足ValueFilter的列存在,则整行都不会输出(即,只要某行中有一列不满足ValueFilter,则其它满足的列也不会输出)。

代码示例

输出结果为空,因为没有哪一行的所有列的值全部以100开头。

阅读全文>>

分类:Apache HBase
标签:

Java并发编程学习笔记(4)——线程池

0条评论1,523次浏览

从Java5开始,JDK并发API提供了ThreadPoolExecutor类,用来创建线程池。合理的使用线程池,有以下三个好处:

  • 降低资源消耗
  • 提高响应速度
  • 提高线程的可管理性

ThreadPoolExecutor

构造方法

基本构造方法

创建大小固定的线程池

创建大小为1的线程池

常用方法

  • void executeTask(Runnable command),执行Runnable任务
  • void shutdown(),关闭线程池
  • int getPoolSize(),获取线程池大小
  • int getActiveCount(),获取正在运行的线程数量
  • long getCompletedTaskCount(),获取已完成的任务数量
  • Future<T> submit(Callable<T> task),执行Callable任务
  • T invokeAny(Collection<? extends Callable<T>> tasks),执行一组Callable任务,只获取第一个返回结果
  • List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks),执行一组Callable任务,获取全部返回结果

阅读全文>>

标签:,

Java并发编程学习笔记(3)——线程同步进阶

0条评论1,264次浏览

Semaphore

Semaphore是一个控制访问多个共享资源的计数器。当计数器值大于0,代表还有可用资源,线程可以继续访问和使用资源;当计数器的值等于0,代表暂无可用资源,线程必须等待资源的释放。

一个典型的例子就是,有多台打印机,当新的打印任务来时,将检测是否还有可用的打印机,若有则使用,并将可用打印机数量减1;若无则等待;当使用完毕后,释放打印机,将可用打印机数量加1。

使用示例

  • 同Lock一样,Semaphore也可开启公平机制,Semaphore(int permits, boolean fair)
  • acquireUninterruptibly(),与acquire()的区别是:线程中断不会抛出异常
  • tryAcquire(),尝试获取semaphore。如果成功,返回true。如果不成功,返回false值,并不会被阻塞和等待semaphore的释放。

阅读全文>>

标签:,

Java并发编程学习笔记(2)——线程同步基础

0条评论1,142次浏览

synchronized

synchronized关键字用来控制并发访问。每个方法声明为synchronized关键字是一个临界区,Java只允许一个对象执行其中的一个临界区。当synchronized加在静态方法时,代表只有一个执行线程能访问被synchronized关键字声明的静态方法。

synchronized关键字不利于应用程序的性能,所以必须仅在修改共享数据的并发环境下的方法上使用它。应当尽量使用synchronized来保护访问共享数据的代码块,以使得临界区尽可能短。

  • 对于同步方法,锁是当前实例对象
  • 对于静态同步方法,锁是当前对象的Class对象
  • 对于同步方法块,锁是synchronized括号里配置的对象,通常来说会用this;当使用其它对象引用时,代表可以并行的访问。

wait()、notify()、notifyAll()

wait()必须出现在synchronized内,否则会抛出IllegalMonitorStateException异常。当调用wait()后,该线程会睡眠,直到相同对象保护的synchronized代码块中调用notify()或notifyAll()方法才会醒来。在此期间其它线程可以访问synchronized代码块。通常wait()需要配合while循环检查边界条件,否则,当线程唤醒后就会继续执行,而此时可能并不满足线程执行的条件。

阅读全文>>

标签:,

Java并发编程学习笔记(1)——线程基础

0条评论1,158次浏览

写在前面

发现现在学Java的,要是对IO、多线程、并发不熟悉都不好意思出去找工作。现在的新技术日新月异,一味的追求新技术不但沉淀不下多少东西,还得迟早累死。当然不是说不用学新技术,能快速掌握新技术毫无疑问可以增加自己的竞争力,但我觉得打好基础才能以不变应万变,也能更加快速的掌握新技术。其实很多新技术,如Hadoop、HBase等都是前人结合自己的经验写出的框架,真正底层的还是那些基础的东西。

IO、多线程、并发毫无疑问是Java基础中的基础。回想自己做过的项目和产品,要么用的SSH架构,要么是Hadoop这样产品,做开发也快3年了,却一直对IO、多线程、并发不了解,现在开始学习并发编程,并写下学习笔记。

线程基础

创建线程

继承Thread父类

阅读全文>>

标签:,

HBase Filter - Dedicated Filters

0条评论1,813次浏览

接着上一篇HBase Filter – Comparision Filters继续进行HBase Filter的学习和了解。Dedicated Filters,专用过滤器,其实现的功能大部分可以通过对Comparision Filters进行一层包装来实现。

数据准备和代码准备同HBase Filter – Comparision Filters

Dedicated Filters(专用过滤器)

SingleColumnValueFilter

代码示例

阅读全文>>

分类:Apache HBase
标签:

HBase Filter - Comparision Filters

0条评论2,194次浏览

HBase的Get和Scan实例可以调用setFilter()来设置过滤器,HBase的过滤器种类繁多,以满足不同的过滤需求。Filter作用于各个RegionServer,通过使用过滤器可以高效的获取数据。HBase Filter主要分为三大类,用户也可以通过继承FilterBase或实现Filter接口来自定义Filter。若需要多个Filter结合使用,可以通过FilterList来满足。

以下主要对各个Filter进行简单的了解。

数据准备

rowkey cf1:col1 cf1:col2 cf2:col1 cf2:col2
101 10086 qwe1 1352288xxxx wer1
102 10000 sdf2 1820160xxxx ert2
103 10001 cxv3 1531308xxxx mnb3
104 12306 jhg4 1387223xxxx kji4
105 12580 nju5 1580101xxxx nbv5

阅读全文>>

分类:Apache HBase
标签:
11
profile
  • 文章总数:81篇
  • 评论总数:241条
  • 分类总数:32个
  • 标签总数:45个
  • 运行时间:1253天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • Anonymous: :?: :razz: :sad:
  • Anonymous: 牛
  • Anonymous: 楼主你好,我偶尔也会 遇到Reconnect due to socket error: java.nio.channels.ClosedCha...
  • Anonymous: sdfs
  • Anonymous: :arrow: :neutral: :cry:
  • Anonymous: java.io.NotSerializableExcepti on: DStream checkpointing has been enabled but the DStreams with their...
  • wick: HI,请问一下,U,S,V得到 ,怎么得到近似矩阵 (用spark java),谢谢。
  • Michael Whitaker: Thank you for this blog, it was very helpful in troubleshooting my own issues. It seems that no...
  • Anonymous: :mad:
  • Anonymous: :???:
  • Anonymous: :mad: :mad: :mad:
  • 洋流: 哥们,我问个问题,你 把testOnborrow去掉了。。 如果得到的jedis资源...
  • 洋流: 哥们,我问个问题,你 把testOnborrow去掉了。。 如果得到的jedis资源...
  • Anonymous: :razz: :evil: :grin:
  • 张瑞昌: 有很多,比较常见的是 Jacob迭代法,一次迭代O (n^3),迭代次数不清楚 ...
  • Anonymous: :mrgreen:
  • lc277: 你好 我想问下一般删除节点 要多久,要删除的datano de大概用了1t,解除...
  • Anonymous: 你好 我想问下一般删除节点 要多久,要删除的datano de大概用了1t,解除...
  • Anonymous: :smile: :grin: :eek:
  • 李雪璇: 想要完整代码,可以帮 忙发给我吗