使用JMock测试MapReduce程序
2008-03-24 16:29 分类:Hadoop, MapReduce
Hadoop的MapReduce框架提供setMapDebugScript(String)/setReduceDebugScript(String)的方法对MapReduce程序提供调试方法,并且提供IsolationRunner工具调试MapReduce程序。但是这种方法适合生产环境中应用,在Hadoop的集群里启动一个MapReduce的Job,我们才能调试程序。也无法在开发时对程序进行单元测试。幸运的是,现在我们能够使用JMock ,不用启动Hadoop集群进行单元测试。下面是一个简单的实例,让我们轻松地调试我们的程序。注意:JMock使用JUnit 4.4版本,我曾经使用eclipse中默认的JUnit 4.3版本,但是在@RunWith(JMock.class)收到表达式错误的警告,最后仔细看了jmock.org的网站后才发现要使用JUnit 4.4版本。
[More...]
雅虎架构师Doug Cutting谈MapReduce和Hadoop的未来
2008-03-21 10:07 分类:Hadoop, MapReduce
Hadoop是一个开源的分布式计算平台,它主要由MapReduce的算法执行和一个分布式的文件系统等两部分组成。InfoQ曾经刊登过一篇Jeremy Zawodny写的有关Hadoop速度提升的综述性文章。这次InfoQ的资深Java编辑Scott Delap和Hadoop项目负责人Doug Cutting进行了一次专访。在这次InfoQ的专访中,Cutting论述了Hadoop是如何在Yahoo中被使用的,以及Hadoop发展中遇到的挑战和Hadoop项目未来的发展方向。
[More...]
Thrift跨语言的通讯协议
2008-03-13 14:45 分类:Relative
Facebook开源项目Thrift看起来非常有意思,许多开源软件使用它来进行RPC通讯,比如HBase,ThruDB。一直以来相信Google有这样一个项目Google’s protocol buffers能让它的三个官方语言(c++,java,python)进行通讯(在Sawzall中提到)。现在Thrift提供更多语言c++,java,python,php,ruby,perl,Erlang所编写的服务进行无缝的通讯连接。
奇怪的是在C++中的String和Java中的String是不一样的概念,因为java中String都是UTF-8编码。我相信一定有一种类型未在其文档中描述提过。在这个页面我终于找到了这段描述:On the Facebook Thrift mailing list this week, I discovered that there exists an undocumented binary data type. This would be quite useful for sending raw strings, images or any other sort of binary data blobs across the wire. Just use binary as the type and generate your stubs as usual. The generated code will use byte arrays for the binary parameters.
KFS,一个克隆GFS的文件系统
2008-03-13 12:21 分类:Relative
Google两个共同创始人的两个大学同窗(印度人)Anand Rajaraman和Venky Harinarayan,创立的一个新的搜索引擎Kosmix最近捐献了一个克隆GFS的文件系统KFS项目。Hadoop和Hypertable这两个项目也开始支持KFS来做底层的存储。KFS是用C++写的,但是其client支持C++,Java和Python。那么KFS到底有什么特性呢?
- 支持存储扩充(添加新的chunckserver,系统自动感知)
- 有效性(复制机制保证文件有效性)
- 负载平衡(系统周期地检查chunkservers的磁盘利用,并重新平衡chunkservers的磁盘利用,HDFS现在还没有支持)
- 数据完整性(当要读取数据时检查数据的完整性,如果检验出错使用另外的备份覆盖当前的数据)
- 支持FUSE(HDFS也有工具支持FUSE)
- 使用契约(保证Client缓存的数据和文件系统中的文件保持一致性)
HDFS未支持的高级特性:
- 支持同一文件多次写入和Append,不像HDFS支持一次写入多次读取和不支持Append(最近要增加Append,但是遇到许多问题)。
- 文件及时有效,当应用程序创建一个文件时,文件名在系统马上有效。不像HDFS文件只当输入流关闭时才在系统中有效,因此,如果应用程序在关闭前出现异常导致没有关闭输入流,数据将会丢失。
Yahoo首次举办Hadoop高级会议
2008-03-07 15:09 分类:Hadoop
Yahoo将在3月25在加州的塞涅维尔举行首次Hadoop高级会议。Hadoop现在已经开始在一些大型的环境中应用,比如Yahoo的搜索集群Webmap,Facebook ,The New York Tim , Joost, Google,IBM Blue Cloud Computing Clusters等。看会议日程安排这次会议演讲的基本上都是一些跟Hadoop相关的项目。Pig一个和Google的Sawzall 相似的解释型的数据分析语言 .JAQL JSON查询语言(可以用来操作HDFS,MapReduce,HBase),Zookeeper分布式的LockServer像Google的Chubby,Hbase一个模仿Google的BigTable 的分布式结构化数据存储,Hive一个Fecebook开发的一个数据仓库框架(正在计划开源)。
Nutch中MapReduce的分析
2008-03-06 20:12 分类:MapReduce
Nutch是最早用MapReduce的项目 (Hadoop其实原来是Nutch的一部分),Nutch的plugin机制吸取了eclipse的plugin设计思路。在Nutch中 MapReduce编程方式占据了其核心的结构大部分。从插入url列表(Inject),生成抓取列表(Generate),抓取内容(Fetch), 分析处理内容(Parse),更新Crawl DB库(Update ),转化链接(Invert Links)一直到建立索引(Index)都是采用MapReduce来完成的。查看Nutch的源代码我们能够学到更多的 如何用MapReduce来处理我们编程中所遇到的问题。
Nutch从获取下载列表到建立索引的过程:
插入url列表到Crawl DB,引导下面的抓取程序 循环: – 从Crawl DB生成一些url列表; – 抓取内容; – 分析处理抓取的内容; – 更新Crawl DB库. 转化每个页面中外部对它的链接 建立索引
在HBase里使用MapReduce例子
2008-03-05 19:42 分类:MapReduce
我在Hadoop的用户邮件列表中看到一些国内的用户在讯问一些关于如何操作的HBase的问题,还看到了HBase中没有Example。觉得有必要跟大家分享自己的经验。
在下面的例子中我们分析Apache的log并把这些log进行分析并把分析完的结果按用户IP为ROW,把log中用户的访问时间,请求方法,用户请求的协议,用户的浏览器,服务状态等写到HBase的表中。
如何在Hadoop中使用Streaming编写MapReduce
2008-03-05 12:35 分类:Hadoop, MapReduce
Michael G. Noll在他的Blog中提到如何在Hadoop中用Python编写MapReduce程序,韩国的gogamza在其Bolg中也提到如何用C编写MapReduce程序(我稍微修改了一下原程序,因为他的Map对单词切分使用tab键)。我合并他们两人的文章,也让国内的Hadoop用户能够使用别的语言来编写MapReduce程序。
首先您得配好您的Hadoop集群,这方面的介绍网上比较多,这儿给个链接(Hadoop学习笔记二 安装部署)。Hadoop Streaming帮助我们用非Java的编程语言使用MapReduce,Streaming用STDIN (标准输入)和STDOUT (标准输出)来和我们编写的Map和Reduce进行数据的交换数据。任何能够使用STDIN和STDOUT都可以用来编写MapReduce程序,比如我们用Python的sys.stdin和sys.stdout,或者是C中的stdin和stdout。
我们还是使用Hadoop的例子WordCount来做示范如何编写MapReduce,在WordCount的例子中我们要解决计算在一批文档中每一个单词的出现频率。首先我们在Map程序中会接受到这批文档每一行的数据,然后我们编写的Map程序把这一行按空格切开成一个数组。并对这个数组遍历按"<word> 1"用标准的输出输出来,代表这个单词出现了一次。在Reduce中我们来统计单词的出现频率。