这段时间一直在配置hadoop系统,搞了半个多月,昨天听凯子说他配成功过,然后给我推荐了他的写的博客,今天按照他配置的过程,终于配置成功了,首先感谢凯子帅哥,以后要注意多和朋友们交流,这样就可以少走很多弯路。
凯子帅哥的博客地址(http://www.zhenv5.com/?s=hadoop&x=0&y=0),可以到他的zhenv5网站查看原文。
下面将我的配置过程,和配置不成功的原因进行一下总结:
一 配置的过程介绍
(1)硬件环境准备(我的三台服务器没有修改机器名,而且机器名都是相同的,这可能是hadoop不能正常配置的一个原因):
准备三台机器,机器名分别为 irlabone、irlabtwo、irlabthree,均安装 CentOS5.5 (其它 Linux 发行版亦可), 确保各台机器之间网络畅通,机器名与 IP 地址之间解析正确,从任一台机器都可以ping通其它机器的机器名。如有机器名的解析问题,可通过设置/etc/hosts 文件解决,当然更好的解决方法是在你的网络中配置 DNS 服务器。此外,需要在三台机器上创建相同的用户帐号,如:irlab。
注:
修改主机名
更改/etc/sysconfig/network文件中的HOSTNAME=irlabone,
之后更改/etc/hosts对应的名称,
即127.0.0.1 localhost
211.87.235.191 irlabone
211.87.235.192 irlabtwo
211.87.235.193 irlabthree
修改完成后重启机器,即可ping通IP地址和主机名
此时需注意,主机名避免含有“_”,这个符号在hdfs中不被识别;
其次,127.0.0.1之后不要写上主机名,一定要写localhost,不然会
出现Server not available的错误
我们将使用irlabone作为分布式文件系统HDFS的Name Node及
MapReduce运行过程中的 Job Tracker 结点,我们将irlabone称之
为主结点。其它两台机器 (irlabtwo、irlabthree) 作为 HDFS 的 Data Node
以及 MapReduce 运行过程中的 Task Tracker 结点,这些结点可统称为
从结点。如你需要部署更多的机器,也是很容易的,将新加入的机器
作为 Data Node 以及 Task Tracker 结点即可,其配置过程在您看完
本文后就会了。
(2)ssh无密码登陆设置
见另外一篇文章:http://www.zhenv5.com/?p=807
另外推荐一篇不错的博客(我的ssh就是看这篇博客搞定的)http://jiajun.iteye.com/blog/621309
(3)hadoop部署配置
3.1系统环境配置
java环境配置:http://www.zhenv5.com/?p=810
hadoop环境配置配置:
与jdk配置类似,终端依次输入(具体位置因人而异):
export HADOOP_HOME=/home/irlab/HadoopInstall/hadoop0.20.203.0
export HADOOP_CONF_DIR=$HADOOP_HOME/conf
export HADOOP_LOG_DIR=$HADOOP_HOME/log
而后运行:
$ source ~/.profile或 $ source ~/.bashrc 使新添加的环境变量生效。
然后进入 Hadoop 的配置文件目录
3.2 hadoop配置文件配置(这里配置的属性比较多,这也与我开始配置的时候有差别,前面我配置的时候,只是配置了一些必要的属性,可能这是配置不成功的另一个原因)
进入 Hadoop 的配置文件目录
$ cd hadoop0.20.203.0/conf
3.2.1 修改 hadoop-env.sh 中的 JAVA_HOME,添加export JAVA_HOME=/usr/local/jdk(备注:指定java路径)
3.2.2 配置core-site.xml配置文件
在<configuration></configuration> 之间添加:
<property>
<name>fs.default.name</name>
<value>hdfs://irlabone:9000</value>
<description>specify namenode and the default filesystem</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/irlab/HadoopInstall/hadoopfs/ namenode</value>
<description>for namenode to store metadata</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/irlab/HadoopInstall/hadoopfs/ datanode</value>
<description>for datanode to store blocks </description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/irlab/HadoopInstall/hadoopfs/ tmp</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/home/irlab/HadoopInstall/hadoopfs/ sec_namenode</value>
<description>for secondary namenode to store checkpointed filesystem images </description>
</property>
<property>
<name>dfs.datanode.ipc.address</name>
<value>0.0.0.0:50020</value>
<description>the datanode's RPC server address and port</description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>local</value>
<description>when set to a hostname and port, this property specifies the jobtracker's RPC server address and port. common port is 8021 </description>
</property>
<property>
<name>mapred.job.tracker.http.address</name>
<value>0.0.0.0:50030</value>
<description>the jobtracker's http server address and port</description>
</property>
<property>
<name>mapred.task.tracker.http.address</name>
<value>0.0.0.0:50060</value>
<description>the tasktracker's http server address and port</description>
</property>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
<description>the namenode's http server address and port</description>
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>0.0.0.0:50075</value>
<description>the datanode's http server address and port</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>0.0.0.0:50090</value>
<description>the secondary namenode's http server address and port</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
<description>function as the name says, unit is Byte</description>
</property>
3.2.3配置mapred-site.xml配置文件
<property>
<name>mapred.job.tracker</name>
<value>irlabone:9001</value>
<description>jobtracker</description>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/irlab/HadoopInstall/hadoopfs/ mapred_tmp</value >
<description>store the temporary data and be cleared when the job is done</description>
</property><property>
<name>mapred.system.dir</name>
<value>/home/irlab/HadoopInstall/hadoopfs/ shared</value>
<description>store shared files for tasktracker </description>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>3</value>
<description>number of map run on per tasktracker at any one time</description>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>2</value>
<description>number of reduce run on per tasktracker at any one time</description>
</property>
3.2.4配置hdfs-site.xml配置文件
<property>
<name>dfs.replication</name>
<value>1</value>
<description>replication factor</description>
</property>
<property>
<name>dfs.block.size</name>
<value>67108864</value>
<description>block size, unit is Byte, default is 64MB</description>
</property>
3.2.5修改masters配置文件(该配置文件指定了主节点),将原来内容删除,加入主机名labone
修改slaves配置文件(改配置文件指定了从节点),将原来内容删除,加入其它两台机器的主机名:labtwo和labThree
3.3 将hadoop程序复制到其它两台机器上去
scp -r /hadoop所在路径/hadoop文件夹名称 目标机器名:/hadoop目标机器所在路径/
示例:scp -r /root/hadoop-0.20.2 labone:/root/
3.4 格式化hadoop文件系统
./bin/hadoop namenode -format
3.5 启动守护进程
./bin/start-all.sh
(4)运行wordcount程序对hadoop进行测试
mkdir test-in
echo “hello word” > file1.txt
echo “hello hadoop” > file2.txt
bin/hadoop dfs –put test-in input
bin/hadoop jar hadoop-0.18.2-examples.jar wordcount input output
bin/hadoop dfs –get output result
cat result/*最后会看到对单词的统计信息:
二 总结:
配置hadoop系统的时候遇到了很多问题,通过上网和请教高人的方式得到了解决
(1)hadoop配置文件中的端口要注意不能重复,例如我上次用的9000端口,下次再用是就出现了无法连接到服务器问题(包java.io.EOFException)。
(2)linux系统配置前要关闭防火墙,否则在配置ssh无密码登陆时就会出错。