本节和大家一起学习一下Hadoop方面的知识,主要包括Hadoop的概念和两种模式实现Hadoop分布式并行程序等,希望通过本节的介绍大家对Hadoop有新的认识。
Hadoop初体验
Hadoop支持Linux及Windows操作系统,但其官方网站声明Hadoop的分布式操作在Windows上未做严格测试,建议只把Windows作为Hadoop的开发平台。在Windows环境上的安装步骤如下(Linux平台类似,且更简单一些):
(1)在Windows下,需要先安装Cgywin,安装Cgywin时注意一定要选择安装openssh(在Netcategory)。安装完成之后,把Cgywin的安装目录如c:\cygwin\bin加到系统环境变量PATH中,这是因为运行Hadoop要执行一些linux环境下的脚本和命令。
(2)安装Java1.5.x,并将JAVA_HOME环境变量设置为Java的安装根目录如C:\ProgramFiles\Java\jdk1.5.0_01。
(3)到Hadoop官方网站http://hadoop.apache.org下载HadoopCore,最新的稳定版本是0.16.0.将下载后的安装包解压到一个目录,本文假定解压到c:\hadoop-0.16.0。
4)修改conf/hadoop-env.sh文件,在其中设置JAVA_HOME环境变量:exportJAVA_HOME="C:\ProgramFiles\Java\jdk1.5.0_01”(因为路径中ProgramFiles中间有空格,一定要用双引号将路径引起来)
至此,一切就绪,可以运行Hadoop了。以下的运行过程,需要启动cygwin,进入模拟Linux环境。在下载的HadoopCore包中,带有几个示例程序并且已经打包成了hadoop-0.16.0-examples.jar。其中有一个WordCount程序,功能是统计一批文本文件中各个单词出现的次数,我们先来看看怎么运行这个程序。Hadoop共有三种运行模式:单机(非分布式)模式,伪分布式运行模式,分布式运行模式,其中前两种运行模式体现不了Hadoop分布式计算的优势,并没有什么实际意义,但对程序的测试及调试很有帮助,我们先从这两种模式入手,了解基于Hadoop的分布式并行程序是如何编写和运行的。
单机(非分布式)模式
这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。
注意事项:运行bin/hadoopjarhadoop-0.16.0-examples.jarwordcounttest-intest-out时,务必注意第一个参数是jar,不是-jar,当你用-jar时,不会告诉你是参数错了,报告出来的错误信息是:Exceptioninthread"main"java.lang.NoClassDefFoundError:org/apache/hadoop/util/ProgramDriver,笔者当时以为是classpath的设置问题,浪费了不少时间。通过分析bin/hadoop脚本可知,-jar并不是bin/hadoop脚本定义的参数,此脚本会把-jar作为Java的参数,Java的-jar参数表示执行一个Jar文件(这个Jar文件必须是一个可执行的Jar,即在MANIFEST中定义了主类),此时外部定义的classpath是不起作用的,因而会抛出java.lang.NoClassDefFoundError异常。而jar是bin/hadoop脚本定义的参数,会调用Hadoop自己的一个工具类RunJar,这个工具类也能够执行一个Jar文件,并且外部定义的classpath有效。
伪分布式运行模式
这种模式也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点(NameNode,DataNode,JobTracker,TaskTracker,SecondaryNameNode),请注意分布式运行中的这几个结点的区别:从分布式存储的角度来说,集群中的结点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。从分布式应用的角度来说,集群中的结点由一个JobTracker和若干个TaskTracker组成,JobTracker负责任务的调度,TaskTracker负责并行执行任务。TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。
【编辑推荐】