Chinaunix首页 | 论坛 | 博客
  • 博客访问: 598133
  • 博文数量: 129
  • 博客积分: 6240
  • 博客等级: 准将
  • 技术积分: 1765
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-18 15:42
文章分类

全部博文(129)

文章存档

2015年(1)

2012年(3)

2011年(6)

2010年(14)

2009年(105)

我的朋友

分类: 系统运维

2009-04-03 15:05:03

Hadoop 支持 Linux Windows 操作系, 但其官方网站声明 Hadoop 的分布式操作在 Windows 上未做测试,建只把 Windows Hadoop 开发平台。在 Windows 境上的安装步骤如下( Linux 平台似,且更简单一些):

(1) Windows 下,需要先安装 Cgywin, 安装 Cgywin 注意一定要选择安装 openssh ( Net category )。安装完成之后,把 Cgywin 的安装目 c:\cygwin\bin 加到系统环 PATH 中,是因运行 Hadoop 行一些 linux 境下的脚本和命令。

(2)安装 Java 1.5.x,并将 JAVA_HOME Java 的安装根目 C:\Program Files\Java\jdk1.5.0_01

(3) Hadoop 官方网站 Hadoop Core, 最新的定版本是 0.16.0. 将下后的安装包解到一个目,本文假定解 c:\hadoop-0.16.0

4)修改 conf/hadoop-env.sh 文件,在其中 JAVA_HOME 量: export JAVA_HOME="C:\Program Files\Java\jdk1.5.0_01” (路径中 Program Files 有空格,一定要用双引号将路径引起来)

至此,一切就,可以运行 Hadoop 了。以下的运行程,需要启 cygwin, 入模 Linux 境。在下 Hadoop Core 包中,有几个示例程序并且已打包成了 hadoop-0.16.0-examples.jar。其中有一个 WordCount 程序,功能是统计一批文本文件中各个单词的次数,我先来看看怎运行个程序。Hadoop 共有三运行模式: (非分布式)模式,分布式运行模式,分布式运行模式,其中前两运行模式体不了 Hadoop 分布式算的优势,并没有什么实际,但程序的测试调试很有帮助,我先从模式入手,了解基于 Hadoop 的分布式并行程序是如何写和运行的。

(非分布式)模式

这种模式在一台机上运行,没有分布式文件系,而是直接写本地操作系的文件系


1

               

$ cd /cygdrive/c/hadoop-0.16.0

$ mkdir test-in 

$ cd test-in

# test-in 建两个文本文件, WordCount 程序将统计其中各个单词次数

$ echo "hello world bye world" >file1.txt  

$ echo "hello hadoop goodbye hadoop" >file2.txt

$ cd ..

$ bin/hadoop jar hadoop-0.16.0-examples.jar wordcount test-in test-out

#行完,下面果:

$ cd test-out

$ cat part-00000

bye     1

goodbye  1

hadoop  2

hello    2

world   2

 

注意事:运行 bin/hadoop jar hadoop-0.16.0-examples.jar wordcount test-in test-out 必注意第一个参数是 jar, 不是 -jar, 当你用 -jar ,不会告你是参数了,告出来的错误信息是:Exception in thread "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, Secondary NameNode )注意分布式运行中的几个点的区

从分布式存的角度来,集群中的点由一个 NameNode 和若干个 DataNode , 另有一个 Secondary NameNode NameNode 份。 从分布式用的角度来,集群中的点由一个 JobTracker 和若干个 TaskTracker 成,JobTracker 负责度,TaskTracker 负责并行行任TaskTracker 运行在 DataNode 上,这样便于数据的本地算。JobTracker NameNode 在同一台机器上。

(1) 按代2修改 conf/hadoop-site.xml。注意 conf/hadoop-default.xml 中是 Hadoop 缺省的参数,你可以通过读此文件了解 Hadoop 中有哪些参数可供配置,但不要修改此文件。可通修改 conf/hadoop-site.xml 缺省参数,此文件中置的参数会覆盖 conf/hadoop-default.xml 的同名参数。


2

               

 

    fs.default.name

    localhost:9000

 

 

    mapred.job.tracker

    localhost:9001

 

 

    dfs.replication

    1

 

 

参数 fs.default.name 指定 NameNode IP 地址和端口号。缺省 file:///, 表示使用本地文件系, 用于机非分布式模式。此指定使用运行于本机 localhost 上的 NameNode

参数 mapred.job.tracker 指定 JobTracker IP 地址和端口号。缺省 local, 表示在本地同一 Java 程内 JobTracker TaskTracker, 用于机非分布式模式。此指定使用运行于本机 localhost 上的 JobTracker ( 用一个独的 Java 程做 JobTracker )

参数 dfs.replication 指定 HDFS Block 制的次数,起数据冗余份的作用。 在典型的生中,个数常常3

(2)配置 SSH,如代3所示:


3

               

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

 

配置完后,行一下 ssh localhost, 你的机器可以用 SSH 接,并且不需要手工入密

(3)格式化一个新的分布式文件系, 如代4所示:


4

               

$ cd /cygdrive/c/hadoop-0.16.0

$ bin/hadoop namenode –format

 

(4) hadoop , 如代5所示。控制台上的出信息应该显示启 namenode, datanode, secondary namenode, jobtracker, tasktracker。启完成之后,通 ps –ef 应该可以看到启5个新的 java 程。


5

               

$ bin/start-all.sh 

$ ps –ef

 

(5) 运行 wordcount , 如代6所示:


6

               

$ bin/hadoop dfs -put ./test-in input 

#将本地文件系上的 ./test-in 拷到 HDFS 的根目上,目名改 input

# bin/hadoop dfs –help 可以学 HDFS 命令的使用。

$ bin/hadoop jar hadoop-0.16.0-examples.jar wordcount input output

#:

#将文件从 HDFS 拷到本地文件系中再看:

$ bin/hadoop dfs -get output output

$ cat output/*

#也可以直接

$ bin/hadoop dfs -cat output/*

$ bin/stop-all.sh #停止 hadoop

 

故障

(1) $ bin/start-all.sh Hadoop 程后,会启5 java , 会在 /tmp 建五个 pid 文件记录这 ID 号。通过这五个文件,可以得知 namenode, datanode, secondary namenode, jobtracker, tasktracker 别对应于哪一个 Java 程。当你 Hadoop 工作不正常,可以首先5 java 程是否在正常运行。

(2) 使用 web 接口。访问 可以 JobTracker 的运行状访问 可以 TaskTracker 的运行状访问 可以 NameNode 以及整个分布式文件系的状浏览分布式文件系中的文件以及 log 等。

(3) ${HADOOP_HOME}/logs 下的 log 文件,namenode, datanode, secondary namenode, jobtracker, tasktracker 各有一个对应 log 文件,一次运行的算任也有对应 log 文件。分析 log 文件有助于找到故障原因。

在,你已了解了 MapReduce 算模型,分布式文件系 HDFS,分布式并行算等的基本原理, 并且有了一个可以运行的 Hadoop 境,运行了一个基于 Hadoop 的并行程序。在下一篇文章中,你将了解到如何针对一个具体的算任,基于 Hadoop 写自己的分布式并行程序并将其部署运行等内容。

 

2 部分

程序例与分析

先来看看 Hadoop 的示例程序 WordCount个程序用于统计一批文本文件中单词率,完整的代可在下 Hadoop 安装包中得到( src/examples )

1.实现Map

1类实现 Mapper 接口中的 map 方法,入参数中的 value 是文本文件中的一行,利用 StringTokenizer 个字符串拆成单词,然后将 <单词,1> 写入到 org.apache.hadoop.mapred.OutputCollector 中。OutputCollector Hadoop 框架提供, 负责收集 Mapper Reducer 出数据,实现 map 函数和 reduce 函数,只需要简单地将其出的 OutputCollector 中一即可,剩余的事框架自会帮你理好。

LongWritable, IntWritable, Text 均是 Hadoop 实现的用于封装 Java 数据型的都能被串行化从而便于在分布式境中行数据交,你可以将它别视为 long, int, String 的替代品。Reporter 可用于告整个用的运行度,本例中未使用。


阅读(1220) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~