CDH4 HDFS新特性

  1. NameNode HA
  2. NameNode Federation
  3. 新的HDFS append实现 HDFS-265
  4. WebHDFS HDFS的RESTful接口
  5. 支持符号链接 HDFS-245
  6. Domain Socket 当DFSClient和目标DataNode处于同一台机器上时,直接打开文件进行读取。HDFS-347
  7. 去除本地URI的DNS解析 HADOOP-9150
  8. FUSE 将HDFS挂载到本地 FUSE
  9. 在存放HDFS的副本时,可设置考虑上所剩磁盘空间容量这个因素 HDFS-1804
  10. 改善NameNode 健康报告的性能问题 HDFS-3990
  11. HDFS文件加密传输,Shuffle和Web UI可使用HTTPS。HDFS Encrypted Transport

Apache Flume介绍

之前折腾Apache Flume时做的一个slide,Apache Flume是一个开源的分布式日志收集系统,在可靠性和可拓展性方面实现的非常好,介绍如下:

几个开源的日志系统

最近在看几个日志系统,写下以备忘。感觉挺多都设计得挺类似的,比方说合并小文件以减少对文件系统的IO,或者说end-to-end等方式实现高可靠性等。当然也有一些实现细节上的不同与特殊之处。简单记录如下:

  • Chukwa

    • agent 收集数据
    • adaptor 预处理数据
    • collector 采集合并数据 agent会选择一个空闲的collector
    • demux 数据处理
    • archive 文件合并成Sequence File,去除重复内容
  • Kafka消息发布订阅系统,消息按topic组织,topic再按partition分区,使用zookeeper做负载均衡;

    • 无内存缓存;
    • 顺序append数据,积累到一定程度再删除;
    • 消息投递为客户端主动pull;
    • broker 使用zero-copy(DMA)提高速率
    • producer 两种接口,向broker发布,通过zookeeper注册listener及获取所有broker
    • consumer 两种接口,将消息写向中央存储
  • Scribe当后端存储系统crash时,scribe将数据写到本地磁盘,待正常后重新加载

    • agent 使用thrift client发送数据
    • collector 根据配置文件,将不同的topic发送到不同的对象
    • store 支持的类型丰富
  • Timetunnel使用zookeeper负责broker和client的状态同步

    • 使用thrift做通讯层
    • client 安全认证,发布,认证的API
    • router 访问入口;负责路由,安全认证,负载均衡;通过安全认证后,使client和broker建立正确的连接
    • broker 负责消息的存储转发
  • Flume agent三种级别的可靠性:end-to-end, Store on failure(类似Scribe), Best effort

    • agent, collector和storage均可水平拓展
    • agent和collector由master统一管理
    • agent 由source和sink组成,将数据源的数据发送给collector
    • collector 由source和sink组成,汇总agent的数据,存到storage
    • storage
    • master 管理协调agent和collector的配置等信息;分单点和多点模式,多点模式容错性好

总的感觉是,Kafka实现得很好,不过可能因为是Linkedin自己根据自己的一些场景来弄的。所以通用性可能不如Flume好。Flume现在应该是最通用和成熟的。目前这几个都是可以将日志记录到HDFS上,以便于使用Hadoop等进行进一步分析处理。

岁末总结

好久没写博客了,一方面是因为懒了,一方面是因为今年太tmd忙了。好吧,其实还是我太懒了。
过去一年,间或着各种杯洗具,大悲,小悲,小喜,大悲,小悲,大悲。好像就这么过来了。
往而不可追者,年也,去而不可见者,亲也;痛彻心扉后,终于明白勿负斯人。人面不知何处去,桃花依旧笑春风;纷飞四散后,终于明白天涯若比邻。不经一事,不长一智。

望各位亲人新年身体健康,万事顺意,各位机油新年新气象,更上一层楼。

黄浩松 谨祝

附淫诗一首:

是非成败转头空,青山依旧在,几度夕阳红。一壶浊酒喜相逢,古今多少事,皆付笑谈中。

(译)最流行的10个 Javascript MVC 框架之对比

在过去的数月中,我一直在寻找最完美的javascript MVC框架。出于对一个拥有恰当抽象和较完整功能的js框架的迫切需求,我亲手尝试了下面列出的所有javascript mvc框架。在这里,我列出一份对这些框架的简要介绍和对比。同时,我将会在结尾处告诉大家我最终的选择。

需要提前特别指出的是,下面列出的这四个特性对我来说非常重要:

  • UI绑定 - 这里我并不仅仅只是指前端模板级别的绑定,我更指当model层改变的时候,view层能随之自动更新。如果你曾经使用过支持UI绑定的框架(比方说Flex),你对这点将感到无法割舍。
  • 组合型的Views - 像大多数开发者一样,我喜欢编写模块化、可重用的代码。因为如果这样的话,我就能通过组合的方式来构建view层(尤其是指在写前端模板部分的代码的时候)。当然这需要有一个拥有丰富组件体系的框架来作为支撑。将会有一个与这点相关的例子,是一个分页的小插件,向大家更好的说明这点。
  • Web表现层 - 我们是在写web,最不想做的就是编写传统桌面UI组件之类的事。正因为如此,作为一个web框架,就不当由自己来实现只属于自己的一套布局管理。HTML和CSS本身就是表现布局和展示样式的最好方式,本来就应该用他们才对。作为一个web框架,必须以这点作为基本原则。
  • 与其他框架良好兼容 - 众所周知,jQuery漂亮得令人惊叹。我并不想要一个本身就已经内置包含了jQuery的框架,我更想要一个通过外部引用来链接jQuery的框架。

对比

这里给出了一个表格,可以清晰的看到各个框架对上面四个特性的支持情况。你可以通过点击框架的名字来查看更详细的信息。

框架UI绑定组合型ViewsWeb表现层与其他框架的兼容性
Backbone.js
SproutCore 1.x
Sammy.js
Spine.js
Cappuccino
Knockout.js
Javascript MVC
Google Web Toolkit
Google Closure
Ember.js
Angular.js
Batman.js

1. Backbone.js

Backbone.js 是最流行的js mvc框架。如果没听过它,你将寸步难行。因为有大量的开发者和应用正在使用着它。它也是我一个尝试使用的框架,我用它来为GroupTalent构建一些内部的管理功能。

优点: 强大的社区支持和良好的发展趋势。 Underscore.js(是backbone.js内部实现所极度依赖的js框架) 同样也是一个非常优秀的框架。
确点: 需要更良好的封装,同时很多迫切需要的功能暂未实现。整个框架相当轻量简单以至于它必须通过引用其他外部的库来实现未实现的功能。如果一个项目足够复杂的话,Backbone就显得有些力不从心了。

2. SproutCore 1.x

尽管名字看上去挺讨人厌,但实际上它的设计非常优秀。同时,它也是体积最大的几个框架之一。

优点: 支持UI绑定,良好的社区支持,大量的功能特性。
缺点: 侵入性过大。对于不需要的功能,无法定制。强迫使用原生应用似的规范。对于不直接使用html来作为布局管理的框架,我一向不感冒。

3. Sammy.js

Sammy.js是一个小框架,在我使用它的时候,经常遇到各种小状况。它太简单了,很多功能都没有实现。它最核心的功能就是提供一个route层以便应用通过AJAX来加载数据。

优点: 易于上手,很容易整合到现有的服务端应用。
缺点: 太简单了,不适合大型的应用程序。

4. Spine.js

由名字来看,Spine.js 应该深受backbone影响。像backbone一样,它非常轻量而且有着相似的model层。Spine.js

优点: 轻量而且文档齐全。
缺点:其设计本质上具有缺陷。Spine核心观念之一就是“是异步的UI。用一句话来说,就是UI应该都是非阻塞的。”我在过去曾做过一个对实时和非阻塞要求非常高的应用,我可以负责任地说这是完全不现实的,除非后台有一些类似operational transformation(Google Wave所设计的一个并发控制框架就实现了operational transformation)的东西。

5. Cappuccino

Cappuccino是一个非常特别的框架,特别在它拥有自己的语言Objective-J。Cappuccino想要在浏览器端模拟Cocoa。

优点:设计缜密,良好的社区支持,强大的继承模型。
缺点:假如让我选择使用javascript来模拟其他任何一种语言的话,Objective-C或许是我最不可能作出的决定。这是一个来自于iOS开发者的观点。 我无法赞同在浏览器中运行Object-J。

给HCI新手的培训资料(工具篇)

好吧,有些事情终归要做的,不过不知道能坚持多久。本来今天想通过YY给一些童鞋讲的,但好像太多人去编程马拉松了,而且YY一定要开个windows,这点让我很大意见。所以自己第一次录视频,感觉其实那个软件挺好的,但好像我表达能力还是太烂了,平常太少和人沟通了,特别这几个月来了这里,大家经常说鸟语,我就更少说话了,表达能力不行,希望接下来几次能逐步改善。。。。好像准备的几个笑话最终都紧张到忘了讲。。。。而且录完之后发现忘记讲下chrome的调试工具如何使用,只能下次再补上了。

此次培训只是试下软件的效果,应该在本学期结束前我会继续瞎扯下Hadoop的生态圈、虚拟化技术、数据挖掘,其中有些部分要拆成两次或三次来讲。总之,这次只是试下这个软件效果如何,内容的质量只是乱吹水而已,各位HCI的童鞋见谅。

视频如下:

幻灯片如下: