25th May 2010
Hadoop使用Java语言实现,编写具体的应用业务除了借助Hadoop的Java API外,还可以使用开发者所熟悉的Python或C++等其他语言编码。在Hadoop安装路径的/src/examples/目录中,给出了Python实现的分布式应用示例。除了将Python代码通过Jython运行时转换为jar包部署,还可借助Hadoop Streaming工具,利用可执行程序或脚本代码实现Map-Reduce中的Mapper或Reducer过程,借助标准输入输出交互数据而不需编写Java实现类。
如何以Pythonic的方式完成Hadoop经典的WordCount词频统计工作,来自德国的开发者Michael G.Noll在博客中撰文讲解了实现方法:在Python编码中,通过STDIN标准输入和STDOUT标准输在Map和Reduce代码之间传输数据。Python的sys.stdin方法读取输入数据,并通过sys.stdout打印输出数据,而数据的交互处理过程交由Hadoop Streaming来处理。以同样的方式,可借助Perl、Ruby或其他动态语言完成Map-Reduce处理过程。
在Hadoop API的Python封装方面,著名音乐站点Last.fm发布了基于Python的Dumbo(小飞象)项目,Dumbo能够帮助Python开发者更方便的编写Hadoop应用,并且Dumbo为MapReduce应用提供了灵活易用的Python API。Last.fm的开发者,同时也是Dumbo项目发起人Klaas Bosteels 认为,对于定制Hadoop应用,使用Python语言代替Java会让工作变得更有效率。
在基于Dumbo框架的应用实现中,不需模仿Michael G.Noll给出的代码将mapper和reducer存放于不同的文件中,而只需在程序中定义mapper和reducer函数,并通过语句dumbo.run(mapper,reducer)来启动执行过程。在作者给出的Dumbo示例中,能够将Hadoop原先60行Java源代码实现的WordCount示例,简化为Python实现的7行源代码来完成。此外,Dumbo还提供了一些易用的功能,包括向dumbo.run()执行操作传递第三方参数。并在Dumbo项目文档中,给出了从Apache访问日志文件中进行IP统计的完整示例,以及四个简短的应用示例。
另外一个相似的项目Happy,则为Jython开发者使用Hadoop框架提供了便利,Happy框架封装了Hadoop的复杂调用过程,让Map-Reduce开发变得更为容易。Happy中的Map-Reduce作业过程在子类happy.HappyJob中定义,当用户创建类实例后,设置作业任务的输入输出参数,然后调用run()方法即可启动分治规约处理,此时,Happy框架将序列化用户的作业实例,并将任务及相应依赖库拷贝到Hadoop集群执行。目前,Happy框架已被数据集成站点freebase.com采纳,用于进行站点的数据挖掘与分析工作。
Posted in JAVA魅力 | No Comments »
3rd February 2010
2008年夏末的傍晚,我和同事在昌黎黄金海岸遛弯时,接到了Sun中国社区经理Ada Li的电话。Ada在电话里聊起,计划在Sun开发者网站开辟一个新栏目,专门介绍那些有趣的Sun工程师的故事。
Sun公司聚集了众多IT精英,不少工程师都身怀绝技,这一点我早有耳闻。我一直很感兴趣Sun的技术,而且交稿准时,Ada便希望我能撰写这个专栏,我自然也乐意来做。
于是,Sun中国技术社区之星的写作计划就这样开始了。从2008年10月到2009年10月,恰好写了整整十二期栏目。起初我主动向Ada征询过动笔时预设的格式和内容要求,Ada的回复却很豪爽,说这是我负责的栏目,可以自己决定。
准备栏目文稿不需太多时间,被采访的工程师也都乐意配合我一起把内容做好。在此期间,接触到不少有趣的Sun员工,比如去M@x办公室拜访时,看见他工作台上摆放的神龛,里面供奉着Java的开源吉祥物Duke玩偶。撰写Alex Peng的介绍时,得知他是Solaris系统的铁杆粉丝,但凡有人说Solaris不好,他总会把对方辩到心服口服为止。如此的趣事很多,但无一不体现着工程师们对于Sun产品近乎偏执的热爱,以及对事业的责任感。
如今,Sun加入Oracle的计划已尘埃落定,很多在Sun中国工程研究院的工作的朋友也相继离开,当然,这也包括部分在社区之星栏目中介绍过的工程师。市场争夺总是弥漫着硝烟,但Sun公司一直恪守工程师文化和自由开源的精神,让每一个开发者因Sun的贡献而受益。
把这十二期栏目集结成文,一为留作纪念,同时也希望感兴趣Sun文化的朋友可借此管中一窥,了解Sun众多伟大产品背后,一群可爱工程师们的平凡故事。
Sun中国技术社区之星文章汇总(PDF:3M):http://www.gaoang.com/files/sun-sdn-star.pdf
Posted in JAVA魅力 | No Comments »
20th September 2009
Nimbus是网格中间件Globus旗下的开源云计算项目,Nimbus面向科学计算需求,通过一组开源工具来实现基础设施即服务(Infrastructure-as-a-Service,IaaS)的云计算解决方案。
Nimbus项目最初的名称为Virtual Workspace Service(VWS),其中Workspace Service是整个平台的核心模块。在Nimbus平台里,包含的组件有:Workspace Service节点管理器、基于WSRF的远程协议实现、基于EC2的远程协议实现、云计算客户端、Workspace Pilot整合虚拟机等面向不同层面的应用组件,Nimbus项目各个组件在设计上非常轻量化且具备自身完备性,可以通过多种异构方式进行组合,组件之间的连接关系如图所示。

在Nimbus支持下,客户端通过部署虚拟计算机(VMs)的方式租用远程资源。Nimbus的部署在服务节点上,运行环境仅需Java和bash,在管理节点上,还需要具备Python (2.3+)、以太网连接层桥接工具ebtables,DHCPd以及Xen虚拟化环境。
同样实现云计算基础平台的OpenNebula项目给出与Nimbus类似的开源数据中心实现,在在物理资源上实现虚拟机环境,但与OpenNebula不同的是,Nimbus以WSRF服务对外提供远程接口,同时具备安全控制机制。Nimbus的接口可以在后端同OpenNebula虚拟机管理器相结合。
在Nimbus的线路图里,包含缓存管理、网络传输、本地资源管理、细粒度执行、安全机制等各个方面的设计目标,功能强大。但研究类项目的易用性一直不太好,大多数配置工作都需要通过命令行完成,阻碍了项目的普及和推广,希望日后在可用性方面有所改进。
Posted in JAVA魅力 | 3 Comments »
8th September 2009
Hadoop Studio是基于Hadoop框架的MapReduce应用集成开发和部署环境。Hadoop Studio以NetBeans模块插件的方式使用,可在NetBeans插件中心获取。开发者可以通过Hadoop Studio的可视化界面,部署分布在不同节点的计算任务,并监控MapReduce处理过程中各阶段的输入、输出以及交互过程。
针对MapReduce任务执行过程的各要素,Hadoop Studio提供了HDFS、JobTracker以及Cluster节点的配置工具。使用Hadoop Studio配置之前,需要预先在目标机器上部署Hadoop作业执行环境,在Ubuntu Linux上的Hadoop配置过程,已有详尽教程(单节点,多节点)可供参考。
在Hadoop Studio中对作业节点配置,首先需要定义负责数据存储的Filesystems节点,可选节点包含本地磁盘访问、HDFS文件系统和Amazon S3连接三种方式。HDFS节点的配置,需要指定NameNode节点的地址、访问端口和登录用户名,其中登录用户名为可选项。对于目前最新的r0.20版本,Filesystems节点的端口配置由conf/hadoop-site.xml改为在conf/core-site.xml中设定。
在Hadoop Cluster配置部分,添加远程计算节点对应的JobTracker,指定节点的地址,并在下拉列表中选择之前添加的Filesystems节点,添加的节点则会出现在Hadoop可用节点的列表中。在主节点计算任务启动之后,包含DataNode、TaskTracker、JobTracker、NameNode、SecondaryNameNode进程。对于数据处理,集群中结点由一个NameNode和若干DataNode组成,Secondary NameNode为NameNode的备份。计算任务中,节点由一个JobTracker和若干TaskTracker组成,JobTracker负责任务调度,TaskTracker执行并行计算任务。TaskTracker须运行在DataNode上以获取用于计算的数据。
对于已编写的计算任务,Hadoop Studio提供了简化的作业部署流程。首先在Hadoop Jobs中添加生成好的jar包(如Hadoop自带的Hadoop-*-examples.jar示例),之后选择要执行的主类并添加依赖项,并选择执行任务的目标Cluster节点和目标Filesystems后即可启动计算任务。同时,Hadoop Studio提供了实时显示的MapReduce任务工作流视图,可显示任务执行过程中的作业类型、完成情况、执行状态、起止时间、报错信息以及输出结果等内容。
Hadoop应用开发方面,Hadoop Studio将Hadoop类库进行打包,可直接在项目中添加所有依赖项。编码过程中,Hadoop Studio为每种作业的提供了模板,并能够在代码编辑的同时自动对模板视图进行更新。
目前Hadoop Studio支持Hadoop 0.18.x版本的Client API和Hadoop 0.20.x的Client与Server的API,并且支持不同版本Hadoop的混合使用。但Hadoop Studio目前的文档比较简单,感兴趣的朋友可以在freshmeat.net的项目站点跟踪Hadoop Studio的最新信息。
Posted in JAVA魅力 | 3 Comments »
4th August 2009
JavaCC(Java Compiler Compiler)是Java实现的语法分析器,用以根据用户自定义规则进行上下文无关语法内容的分析工作,以简化编译器开发时编写涉及词法、语法、语义规则处理代码时的工程量。
较之C语言实现的简化编译构造程序LEX(Lexical Analyzers)和YACC(Yet Another Compiler Compiler),JavaCC使用递归下降的语法分析方法,定义的文法规则表达范围广泛。JavaCC不直接生成分析树或抽象语法树(AST),但提供建立分析树或AST生成的预处理器JJTree,JJTree采用压栈出栈的递归方法生成分析树,为JavaCC的输入进行预处理。
JavaCC在使用方面上手迅速,编译JavaCC生成的Java代码时,仅在标准JDK支持下,无需第三方JAR即可完成。首先,使用者按照JavaCC语法规范编写源文件,将标记(Token)、词法和语法规则、以及每个解析阶段中发生的行为定义在*.jj文件中。
之后,使用JavaCC编译器编译*.jj文件,可以生成Java代码实现的特定语言分析器。生成的源程序包含:*Parser.java(语法分析器)、*TokenManager.java(词法分析器)、TokenMgrError.java(错误处理程序)、Token. java (标记信息)、*Constants.java (分析器中使用的常量)、SimpleCharStream.java (字符流类)等源文件。在使用javac将源代码编译为class之后,就可以运行JavaCC生成的语法分析器来执行语法分析工作。
在JavaCC项目中,还提供了JJDOC工具,用以生成BNF范式表示的语法文档。同时,JavaCC项目为用户提供了可直接使用的语法库和实例代码,存放在examples目录中,其中包含文本邮件处理、JJTree示例、解释器实现等面向不同应用的示例。
在OGSA-DQP项目中,也使用了类似的查询编译器Polar*,来生成OQL对象查询树的语法解析结果,以解析分布式查询内容并绘制OQL查询树。
目前NetBeans IDE已提供了JavaCC编写和编译插件,支持*.jj文件的语法加亮和直接编译。在NetBeans IDE中借助JavaCC构建新语言的更多细节,请查看NetBeans Wiki中的详细教程。
Posted in JAVA魅力 | 1 Comment »
4th July 2009
Fuji项目是java.net上一个非常Cool的开源项目,作为Open ESB v3项目中的核心组件,Fuji为使用者提供了一个基于Web且具备良好用户界面的轻量级可拓展平台,来进行应用的组装开发。
Fuji的轻量级微内核基于JBI(JSR 208)和OSGi实现,其微内核可以安装在任何与OSGi R4相兼容的运行时之上,如GlassFish v3,以及OSGi的服务平台Apache Felix,Knopflerfish或Eclipse Equinox之上。
作为开源ESB组件,Fuji为使用者提供了基于Web的IDE界面进行服务组装和服务流程设计,在浏览器中使用简单的拖放和组装,让开发者从底层协议和通讯接口重复开发的工作中解脱出来,以可视化方式构建自己的业务流程并进行应用集成。
在Fuji的Web设计器中,预置了众多可定义的服务类型模板,包含数据库(Database),邮件服务(SMTP),文件传输(FTP),HTTP/SOAP适配器(Adaptor),POJO服务和JRuby服务等模板,以供用户直接拖拽添加到设计器中使用。
除此之外,Fuji定义了自有的领域特定语言IFL(Integration Flow Language),来表达多种强大的整合模式,开发者在IFL的支持下可以通过服务组合来构建业务流程,以快速生成集成应用。
Fuji所属的OpenESB项目,致力于创建遵循开放标准的ESB企业服务总线,将基于WSDL标准的WebService组成复合应用程序。尽管Fuji目前仍然属于实验性项目,但几个Milestone版本更新迅速,功能也在迅速完善,并计划成为OpenESB 3.0的一个标准模块。
感兴趣的开发者,可以关注Fuji项目站点上已提供的众多文档,视屏Demo和Fuji项目架构师Andreas的讲座Slide,同时,中文GlassFish社区也整理了不少OpenESB和GlassESB的相关文档,以供开发者参考使用。
Posted in JAVA魅力 | 2 Comments »
4th June 2009
事务处理性能委员会(TPC)是创建于1988年的非盈利组织,其宗旨是为了制定事务处理和数据库性能测试基准程序的Benchmark标准规范,目前被广泛用于计算机系统和数据库性能评估。
基准程序TPC-C用于测试联机事务处理(OLTP)的性能,规范的最新版本是5.10。测试过程模拟一个真实的货物管理环境,批发公司有N个仓库,每个仓库供应M个地区,在每个地区为上千名客户提供服务。在测试启动后,N×M个终端操作员向数据库发出新订单(New-Order)、付款(Payment)、订单状态(Order-Status)、库存级别(Stock-Level)、发货(Delivery)等5类事物请求,而性能指标tpmC则代表事务在满足响应时间要求的前题下,每分钟系统处理新订单(New-Order)的数目。
面向数据库系统的TPC-C基准测试,有多种程序实现,商用软件有QUEST公司的Benchmark Factory,以及HP的 LoadRunner,但用TPC-C标准测试数据库性能,也有小巧的开源工具来帮助我们完成这样的工作。
针对Oracle的性能测试,Java编写的SwingBench和Hammerora都是不错的选择。但对于Ingres和PostgreSQL等小众数据库的测试,需要其他基于JDBC驱动的通用数据库测试工具来完成。
Apache JMeter是基于Swing的系统性能和负载能力测试工具,同样也可以测试数据库的吞吐能力,并且JMeter在NetBeans 6.7中可以同Profiler工具集成使用,在IDE环境下创建并运行JMeter装载测试脚本。JMeter内置的数据库测试,可以在JMeter的多线程框架下,帮助用户分析数据库所能承载的并发用户数和负载能力,并提供图形化结果反馈,但这款功能全面的测试工具没有提供基于TPC-C基准的数据库测试功能。
作为专用的TPC-C测试工具,开源Java工具BenchmarkSQL更为适合,可以通过JDBC驱动添加各种数据源进行基准测试。工具里面内置了sqlTableCreates、sqlIndexCreates等SQL脚本,在推荐的测试条件下,使用预置脚本创建10个Warehouse,并在数据库中生成100万条测试数据,执行时间最小为1分钟,之后会生成包含5种不同操作的执行时间统计,以及最终tpmC值的结果报表。
感兴趣的用户还可以将默认的索引方式(如ISAM)更改为数据库支持的其他索引(如B树或R树索引),来比较不同索引方式下事务处理的性能差异。
Posted in JAVA魅力 | No Comments »
31st May 2009
使用Java语言开发的工作流执行工具并不少见,但由英国e-Science研究机构OMII-UK资助开发的Taverna项目在工作流处理方面却有其独到之处。
Taverna是myGrid网格项目旗下的开源工作流设计和执行引擎,其目标是提供一种语言和软件工具,方便在eScience中使用工作流和分布计算技术。
通过Taverna提供的可视化设计器,使用者可以组装社会化信息、高性能计算、地理生物等不同域内的Web服务,并在此基础上定制并执行工作流。
在Taverna Workbench启动同时,默认会加载Biomart、Soaplab定义的Web服务组件以及已有WSDL描述,共用户直接拖拽到设计器中进行工作流组装。
Taverna本身使用Scufl(Simple Conceptual Unified Flow language)格式的工作流描述语言。Scufl是基于XML的高抽象级数据流描述语言,定义了不同服务间数据交互的流程。Scufl在WSFL工作流描述语言的基础上,提供更简化、抽象级别更高的描述,适合科学工作流的语义定义。同时,Taverna也支持可识别XML格式定义的工作流。
在Taverna工作流描述中,包含的五种实体分别是:(1)输入集Inputs(2)输出集Outputs(3)服务组成的处理过程Processors(4)数据源到数据目的地的数据连接Data Links(5)协同约束条件和依赖规则Coordination Constraints。一个完整的工作流,在定义了上述五个部分之后,就可以在Taverna Workbench上执行。
目前已有专门的Taverna项目支持站点myExperiment,帮助使用者寻找或分享Taverna创建的各种工作流。对于Startup的用户,可以先下载用于获取每日的Dilbert漫画的工作流上手实例,来体验Taverna所提供的功能。另外,还有一份OMII的制作的Taverna培训教程,来帮助用户了解深入使用Taverna工作流的更多功能。
Posted in JAVA魅力 | No Comments »