bbs.hadoopor.com--------hadoop技术论坛--------------------------------------------------------------------------------------------创刊号2010年1月-1-技术论坛总编辑易剑(一见)副总编辑代志远(国宝)王磊(beyi)本期主编皮冰锋(若冰)编辑皮冰锋(若冰)易剑(一见)贺湘辉(小米)王磊(beyi)代志远(国宝)柏传杰(飞鸿雪泥)何忠育(Spork)秘中凯陈炬美工/封面设计易剑(一见)网址@foxmail.com刊首语刊首语刊首语刊首语2010年1月,《Hadoop开发者》沐着2010年的第一缕春光诞生了。正是有了DougCutting这样的大师级开源者,正是有了无数个为Hadoop贡献力量的开源者们的共同努力,才有了Hadoop自诞生时的倍受关注到现在的倍受瞩目。Hadoop从单一应用发展到目前的HadoopEcosystem,自成一格的技术体系,叩开了信息爆炸时代的海量数据处理的大门,开辟了海量数据存储与计算及其应用的新领地,《Hadoop开发者》正是在这样的背景下应运而生。Hadoop技术交流群自创建起,短短的几个月时间里就形成了2个超级大群,Hadoop技术体系深蒙面向各行各业应用的开发者们的厚爱,可以预见Hadoop应用前景广阔。但时下稍显稚嫩,需要广大的爱好者共同尝试、探索,发掘应用的同时帮助改进。《Hadoop开发者》是Hadoop交流群的几位志愿者们自发创建的,希望它的出现能为您的学习和探索铺路,同时也期盼能分享您的Hadoop之旅。在分享中,《hadoop开发者》将与您一路同行,共同进步。分享、自由、开放,《Hadoop开发者》将秉承这一开源社区的血脉和传统,传承“百家争鸣”,在思想交流和技术的切磋中促进hadoop社区的发展,期待Hadoop这一尚待开垦的田野里“百花齐放”。最后,感谢《Hadoop开发者》编辑组所有同仁们,彼此素未蒙面的爱好者能聚到一起,为了一个共同的爱好策划这本杂志,这本身就是Hadoop魅力的体现。当然,也要感谢大师DougCutting和Hadoop社区的开源者们,因为有了您,这里才变得如此精彩!《Hadoop开发者》编辑组2010-1-27目录1Hadoop介绍2Hadoop在国内应用情况3Hadoop源代码eclipse编译教程7在Windows上安装Hadoop教程13在Linux上安装Hadoop教程19在Windows上使用eclipse编写Hadoop应用程序24在Windows中使用Cygwin安装HBase28Nutch与Hadoop的整合与部署31在Windowseclipse上单步调试Hive教程38Hive应用介绍42Hive执行计划解析50MapReduce中的Shuffle和Sort分析53海量数据存储和计算平台的调试器研究56探讨MapReduce模型的改进58运行eclipse编译出的Hadoop框架59表关联在MapReduce上的实现63Hadoop计算平台和Hadoop数据仓库的区别bbs.hadoopor.com--------hadoop技术论坛--------------------------------------------------------------------------------------------创刊号2010年1月-1-HadoopHadoopHadoopHadoop介绍介绍介绍介绍Hadoop是Apache下的一个项目,由HDFS、MapReduce、HBase、Hive和ZooKeeper等成员组成。其中,HDFS和MapReduce是两个最基础最重要的成员。HDFS是GoogleGFS的开源版本,一个高度容错的分布式文件系统,它能够提供高吞吐量的数据访问,适合存储海量(PB级)的大文件(通常超过64M),其原理如下图所示:采用Master/Slave结构。NameNode维护集群内的元数据,对外提供创建、打开、删除和重命名文件或目录的功能。DatanNode存储数据,并提负责处理数据的读写请求。DataNode定期向NameNode上报心跳,NameNode通过响应心跳来控制DataNode。InfoWord将MapReduce评为2009年十大新兴技术的冠军。MapReduce是大规模数据(TB级)计算的利器,Map和Reduce是它的主要思想,来源于函数式编程语言,它的原理如下图所示:Map负责将数据打散,Reduce负责对数据进行聚集,用户只需要实现map和reduce两个接口,即可完成TB级数据的计算,常见的应用包括:日志分析和数据挖掘等数据分析应用。另外,还可用于科学数据计算,如圆周率PI的计算等。HadoopMapReduce的实现也采用了Master/Slave结构。Master叫做JobTracker,而Slave叫做TaskTracker。用户提交的计算叫做Job,每一个Job会被划分成若干个Tasks。JobTracker负责Job和Tasks的调度,而TaskTracker负责执行Tasks。bbs.hadoopor.com--------hadoop技术论坛--------------------------------------------------------------------------------------------创刊号2010年1月-2-HadoopHadoopHadoopHadoop在国内应用情况在国内应用情况在国内应用情况在国内应用情况主要公司主要公司主要公司主要公司更多的数据请浏览:地域分布地域分布地域分布地域分布下面的数据由Hadoop技术论坛提供,数据的绝对值参考意义不大,主要是看各城市间的相对数据。北京、深圳和杭州位列前三甲,分析主要原因是:北京有淘宝和百度,深圳有腾讯,杭州有网易等。互联网公司是Hadoop在国内的主要使用力量。淘宝是在国内最先使用Hadoop的公司之一,而百度赞助了HyperTable的开发,加上北京研究Hadoop的高校多,所以北京是Hadoop方面研究和应用需求最高的城市。位于北京的中科院研究所,在2009年度还举办过几次Hadoop技术大会,加速了Hadoop在国内的发展。bbs.hadoopor.com--------hadoop技术论坛--------------------------------------------------------------------------------------------创刊号2010年1月-3-HadoopHadoopHadoopHadoop源代码源代码源代码源代码eclipseeclipseeclipseeclipse编译教程编译教程编译教程编译教程作者:一见1.1.1.1.下载HadoopHadoopHadoopHadoop源代码Hadoop各成员源代码下载地址:,请使用SVN下载,在SVN浏览器中将trunk目录下的源代码check-out出来即可。请注意只check-out出SVN上的trunk目录下的内容,如:,而不是,原因是目录下包括了很多非源代码文件,很庞大,导致需要很长的check-out时间。2.2.2.2.准备编译环境2.1.2.1.2.1.2.1.HadoopHadoopHadoopHadoop代码版本本教程所采用的Hadoop是北京时间2009-8-26日上午下载的源代码,和hadoop-0.19.x版本的差异可能较大。2.2.2.2.2.2.2.2.联网编译Hadoop会依赖很多第三方库,但编译工具Ant会自动从网上下载缺少的库,所以必须保证机器能够访问Internet。2.3.2.3.2.3.2.3.javajavajavajava编译Hadoop要用JDK1.6以上,网址:。安装好之后,请设置好JAVA_HOME环境变量。2.4.2.4.2.4.2.4.AntAntAntAnt和CygwinCygwinCygwinCygwin需要使用Ant工具来编译Hadoop,而Ant需要使用到Cygwin提供的一些工具,如sed等,可以从:下载Ant,从下载Cygwin(Cygwin的安装,请参考《在Windows上安装Hadoop教程》一文)。安装好之后,需要将Ant和Cygwin的bin目录加入到环境变量PATH中,如下图所示:注意:在安装Cygwin时,建议将SVN安装上,因为在Ant编译过程中会通过SVN下载些文件,但这个不是必须的,下载不成功时,并未见出错,编译仍然可以成功。2.5.2.5.2.5.2.5.EclipseEclipseEclipseEclipsebbs.hadoopor.com--------hadoop技术论坛--------------------------------------------------------------------------------------------创刊号2010年1月-4-Eclipse则可以从上下载。3.3.3.3.编译HadoopHadoopHadoopHadoop在这里,我们以编译Hadoop家庭成员common为例,对Hadoop其它成员的编译方法是类似的。3.1.3.1.3.1.3.1.编译commoncommoncommoncommon成员步骤1)在Elipse的Package视图中单击右键,选择New-JavaProject,如下图所示:步骤2)选择源代码目录,设置Project名。在上图所示的对话框中,点击Browse按钮,选择common源代码目录,并设置Projectname为common。工程导入完成后,进入Eclipse主界面,可以看到common已经导入进来,但可以看到common上有红叉叉,是因为Elipse默认使用了JavaBuilder,而不是AntBuilder,所以下一步就是设置使用AntBuilder。步骤3)设置Builder为Ant:右键common-Properties-Builders:在上图所示的界面中,点击New按钮,在弹出的对话框中选中AntBuilder,确定之后会弹出如下对话框:bbs.hadoopor.com--------hadoop技术论坛--------------------------------------------------------------------------------------------创刊号2010年1月-5-点击BrowseFileSystem按钮,选择common源代码目录下的build.xml文件,并设置Name为common_Builder(Name可以改成其它的,但建议使用common_Builder,因为这样名副其实),操作结果如下图所示:除上图所示的设置外,还需要设置如下图所示的Targe