Hadoop建立Cluster实例

原文地址:http://book.51cto.com/art/201211/363795.htm

queue的有效性很依赖在JobTracker中通过mapreduce.jobtracker.taskscheduler设置的调度规则(scheduler)。一些调度算法可能只需要一个queue,不过有些调度算法可能很复杂,需要设置很多queue。

对queue大部分设置的更改都不需要重新启动MapReduce系统就可以生效,不过也有一些更改需要重启系统才能有效,具体如表2-5所示。

conf/mapred-queues.xml的文件配置与其他文件略有不同,配置格式如下:

<queues aclsEnabled="$aclsEnabled"> 
        <queue> 
         <name>$queue-name</name> 
         <state>$state</state> 
         <queue> 
           <name>$child-queue1</name> 
           <properties> 
             <property key="$key" value="$value"/> 
               ...  
           </properties> 
           <queue> 
             <name>$grand-child-queue1</name> 
             ...  
           </queue> 
         </queue> 
         <queue> 
           <name>$child-queue2</name> 
             ...  
         </queue> 
           ...  
           ...  
           ...  
           <queue> 
            <name>$leaf-queue</name> 
            <acl-submit-job>$acls</acl-submit-job> 
            <acl-administer-jobs>$acls</acl-administer-jobs> 
            <properties> 
              <property key="$key" value="$value"/> 
              ...  
            </properties> 
           </queue> 
          </queue> 
         </queues> 

以上这些就是Hadoop配置的主要内容,其他关于Hadoop配置方面的信息,诸如内存配置等,如果有兴趣可以参阅官方的配置文档。

2. 一个具体的配置

为了方便阐述,这里只搭建一个有三台主机的小集群。

相信大家还没有忘记Hadoop对主机的三种定位方式,分别为Master和Slave,JobTracker和TaskTracker,NameNode和DataNode。在分配IP地址时我们顺便规定一下角色。

下面为这三台机器分配IP地址及相应的角色:

  1. 10.37.128.2—master,namonode,jobtracker—master(主机名)  
  2. 10.37.128.3—slave,dataNode,tasktracker—slave1(主机名)  
  3. 10.37.128.4—slave,dataNode,tasktracker—slave2(主机名) 

首先在三台主机上创建相同的用户(这是Hadoop的基本要求):

1)在三台主机上均安装JDK 1.6,并设置环境变量。

2)在三台主机上分别设置/etc/hosts及/etc/hostname。

hosts这个文件用于定义主机名与IP地址之间的对应关系。

/etc/hosts:

  1. 127.0.0.1 localhost  
  2. 10.37.128.2 master  
  3. 10.37.128.3 slave1  
  4. 10.37.128.4 slave2 

 

2.4.3 建立和安装Cluster(4)

hostname这个文件用于定义Ubuntu的主机名。

/etc/hostname:

  1. “你的主机名”(如master,slave1等) 

3)在这三台主机上安装OpenSSH,并配置SSH可以免密码登录。

安装方式不再赘述,建立~/.ssh文件夹,如果已存在,则无须创建。生成密钥并配置SSH免密码登录本机,输入命令:

 

  1. ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa  
  2. cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 

 

将文件复制到两台Slave主机相同的文件夹内,输入命令:

  1. scp authorized_keys slave1:~/.ssh/  
  2. scp authorized_keys slave2:~/.ssh/ 

 

查看是否可以从Master主机免密码登录Slave,输入命令:

  1. ssh slave1  
  2. ssh slave2 

4)配置三台主机的Hadoop文件,内容如下。

conf/Hadoop-env.sh:

  1. export JAVA_HOME=/usr/lib/jvm/jdk  
  2. conf/core-site.xml:  
  3. <?xml version="1.0"?> 
  4. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  5.  
  6. <!-- Put site-specific property overrides in this file. --> 
  7.  
  8. <configuration> 
  9.   <property> 
  10.      <name>fs.default.name</name> 
  11.      <value>hdfs://master:9000</value> 
  12.   </property> 
  13. <property> 
  14.      <name>hadoop.tmp.dir</name> 
  15.      <value>/tmp</value> 
  16. </property> 
  17. </configuration> 
  18. conf/hdfs-site.xml:  
  19. <?xml version="1.0"?> 
  20. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  21.  
  22. <!-- Put site-specific property overrides in this file. --> 
  23.  
  24. <configuration> 
  25. <property> 
  26.    <name>dfs.replication</name> 
  27.    <value>2</value> 
  28. </property> 
  29. </configuration> 
  30. conf/mapred-site.xml:  
  31. <?xml version="1.0"?> 
  32. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  33.  
  34. <!-- Put site-specific property overrides in this file. --> 
  35.  
  36. <configuration> 
  37.  <property> 
  38.     <name>mapred.job.tracker</name> 
  39.    <value>master:9001</value> 
  40. </property> 
  41. </configuration> 
  42. conf/masters:  
  43. master  
  44. conf/slaves:  
  45. slave1  
  46. slave2 

 

5)启动Hadoop。

  1. bin/Hadoop NameNode –format  
  2. bin/start-all.sh 

 

你可以通过以下命令或者通过http://master:50070及http://master:50030查看集群状态。

  1. Hadoop dfsadmin –report 

 

2.5 日志分析及几个小技巧

如果大家在安装的时候遇到问题,或者按步骤安装完成却不能运行Hadoop,那么建议仔细查看日志信息。Hadoop记录了详尽的日志信息,日志文件保存在logs文件夹内。

无论是启动还是以后会经常用到的MapReduce中的每一个Job,或是HDFS等相关信息,Hadoop均存有日志文件以供分析。

例如:NameNode和DataNode的namespaceID不一致,这个错误是很多人在安装时都会遇到的。日志信息为:

  1. java.io.IOException: Incompatible namespaceIDs in /root/tmp/dfs/data:namenode namespaceID = 1307672299; datanode namespaceID = 389959598 

若HDFS一直没有启动,读者可以查询日志,并通过日志进行分析,日志提示信息显示了NameNode和DataNode的namespaceID不一致。

这个问题一般是由于两次或两次以上格式化NameNode造成的,有两种方法可以解决,第一种方法是删除DataNode的所有资料,第二种方法就是修改每个DataNode的namespaceID(位于/dfs/data/current/VERSION文件中)或修改NameNode的namespaceID(位于/dfs/name/current/VERSION文件中)。使其一致。

下面这两种方法在实际应用也可能会用到。

1)重启坏掉的DataNode或JobTracker。当Hadoop集群的某单个节点出现问题时,一般不必重启整个系统,只须重启这个节点,它会自动连入整个集群。

在坏死的节点上输入如下命令即可:

  1. bin/Hadoop-daemon.sh start datanode  
  2. bin/Hadoop-daemon.sh start jobtracker 

 

2)动态加入DataNode或TaskTracker。下面这条命令允许用户动态地将某个节点加入到集群中。

  1. bin/Hadoop-daemon.sh --config ./conf start datanode  
  2. bin/Hadoop-daemon.sh --config ./conf start tasktracker 

posted on 2013-01-30 10:18  imkun  阅读(675)  评论(0编辑  收藏  举报

导航