Linux下hadoop完全分布式配置总结

来源:互联网 发布:埃里克戈登数据 编辑:程序博客网 时间:2024/06/07 06:13

    这段时间一直在配置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无密码登陆时就会出错。


 

 

 

 

原创粉丝点击