真正的分布式计算实验需要好多台服务器,因此我暂时只在本机做了1和2两种模式,这里做个笔记,发表是最好 的记忆嘛。 apahce的网站上有hadoop的安装文档,非分布式计算安装文档说明:http://hadoop.apache.org/common/docs/current/single_node_setup.html
hadoop的运行模式有三种:
1 单节点模式
2 伪分布式模式
3 分布式模式
关于hadoop配置文件的使用说明和常用命令,这里有篇文章,是中文的哦:
http://www.iteye.com/topic/284849
关于平台的支持
hadoop对linux支持得非常好,但是对于win32,按照apache的说法,可以是开发环境,对于生产环境没有做很好的测试,因此我也是基于linux系统来做实践的,我装的是ubantu。
必须准备的软件
1:jdk1.6以上(包括1.6),必须的
2:ssh,如果没有安装,在ubantu环境下,只需要输入ssh,系统会提示你安装。或者直接执行以下两行命令
sudo apt-get install ssh
sudo apt-get install rsync
3:hadoop发行包,到http://hadoop.apache.org去下载,我下的是hadoop-0.20.2,下载到本地的文件是hadoop-0.20.2.tar.gz,我解压的目录是/home/james/devlopment/hadoop-0.20.2。
单机模式启动
在hadoop根目录依次执行以下命令
mkdir input
cp conf/*.xml input
bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
cat output/*
上面这几个命令的意思是:
第一行,在hadoop根目录新建一个input目录
第二行,将conf目录下的所有xml文件复制到刚才新建的input目录
第三行,执行hadoop命令,统计input目录包含正则表达式'dfs[a-z.]+'匹配的字符串数量,并将结果输出到output目录
第四行,打印出统计结果
单机模式不可能用在实际的分布式环境中,它一般被用来检验MapReduce程序是否有问题。这个比较简单,就不多说了。
执行单机模式的时候,必须保证hadoop的配置文件没有被修改过。
伪分布式启动
所谓伪分布式,其实是模拟分布式。在实际的分布式计算环境中,每个节点都是一台独立服务器,在伪分布式里,只是启动了多个java进程,模拟了几个必须的节点。
在hadoop根目录
修改conf/core-site.xml ,加入以下信息到<configuration>标签对里面:
<property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property>
加完之后如下:
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration>
修改conf/hdfs-site.xml为如下:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
修改conf/mapred-site.xml为如下:
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
设置没有密码验证的ssh
先测试下,在本机命令行下执行 ssh localhost,如果要求你输入密码,那就要设置没有密码验证的ssh,依次输入如下命令
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
启动
先格式化hdfs文件系统
bin/hadoop namenode -format
再启动hadoop进程
bin/start-all.sh
如果配置没什么问题,那么hadoop就启动了,启动过程中,有一些信息打印出来,告诉你日志的输出目录。下面做个测试,执行以下命令
bin/hadoop fs -put conf inpu
这个命令的意思是将当前目录下的conf目录的内容拷贝到hdfs文件系统的input目录
再执行这个命令
bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
再执行这个命令
bin/hadoop fs -get output output 这句意思是将hdfs文件系统的output目录你内容拷贝到本地的output目录
cat output/* 打印本地output目录内容,其实就是打印执行结果拉。
或者直接在hdfs文件系统上查看:
bin/hadoop fs -cat output/*
web界面
下面是默认地址和端口
NameNode http://localhost:50070/
JobTracker http://localhost:50030/
NameNode界面,主要显示以下信息:
启动时间
编译时间
版本
HDFS文件目录结构
NameNode日志信息
分布式集群节点信息,如果死亡的节点,活动的节点,HDFS空间大小和使用率以及存储状态
JobTracker界面,其实是一个MapReduce管理界面,里面描述了以下信息
分布式计算的任务调度信息
集群分布式计算信息
如 正在运行的计算
已经完成的计算
失败的计算
本地的日志