Hadoop学习笔记【12】-Hadoop2.1全分布式集群安装


1. 环境

5个节点,配置如下:

dual core x86_64, 4GB RAM, 10GB Disk

Centos 6.4_x64

OpenJDK 1.7.0_9

hadoop-2.1.0-beta

互相之间千兆网连接。

每台机器上用于安装和启动hadoop的用户名都是xc

节点的hostname、安装的服务和ip如下:

hostname 安装服务 ip
h1-1 NN 172.16.0.198
h1-2 RM + SNN 172.16.0.199
h1-3 NM + DN 172.16.0.200
h1-4 NM + DN 172.16.0.201
h1-5 NM + DN 172.16.0.202
【引用请注明出处:http://blog.csdn.net/bhq2010/article/details/11949927】

2. 准备

每个节点上的jdk已经装好了。 还需要设置ssh无密钥登录。我设置了h1-1和h1-2到所有节点的ssh无密钥登录,必须使得h1-1和h1-2这两个master都能够无密钥ssh登陆其他所有节点,包括自己。
还需要设置系统的/etc/hosts文件,将集群中各个节点的ip和主机名加入文件中:
172.16.0.198 h1-1
172.16.0.199 h1-2
172.16.0.200 h1-3
172.16.0.201 h1-4
172.16.0.202 h1-5

3. 配置

下载hadoop-2.1.0-beta,解压。 配置文件在etc/hadoop/下,启动脚本在sbin/下,功能脚本在bin/下 需要修改的配置文件有: hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slaves 具体如下: 在hadoop-env.sh中设置JAVA_HOME。
core-site.xml设置:
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://h1-1:9000</value>
  </property>
</configuration>

hdfs-site.xml设置:
<configuration>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/xc/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/xc/dfs/data</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
</configuration>

mapred-site.xml文件需要自己创建,配置如下:
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>h1-2:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>h1-2:19888</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>/mr-history/tmp</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/mr-history/done</value>
  </property>
</configuration>
虽然这里配置了jobhistory的web端口,但启动hadoop后,访问这个端口没有响应。telnet上面那两个端口也木有响应,暂时不知道为毛,但是不影响hdfs和跑mapreduce。
yarn-site.xml配置:
<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>
  <property> 
    <description>The address of the applications manager interface in the RM.</description> 
    <name>yarn.resourcemanager.address</name> 
    <value>h1-2:18040</value> 
  </property> 
  <property> 
    <description>The address of the scheduler interface.</description> 
    <name>yarn.resourcemanager.scheduler.address</name> 
    <value>h1-2:18030</value> 
  </property> 

  <property> 
    <description>The address of the RM web application.</description> 
    <name>yarn.resourcemanager.webapp.address</name> 
    <value>h1-2:18088</value> 
  </property> 
  
  <property> 
    <description>The address of the resource tracker interface.</description> 
    <name>yarn.resourcemanager.resource-tracker.address</name> 
    <value>h1-2:8025</value> 
  </property> 
</configuration>

slaves配置:
h1-3
h1-4
h1-5

将配置好的文件分发到所有的节点。

4. 启动

启动前检查一下ssh是不是设置好了。在h1-1和h1-2上执行一边: ssh 0.0.0.0 ssh h1-1/2/3/4/5 都能无密钥登录即可。 然后,在h1-1,即namenode所在的节点上执行:
$ cd hadoop_home_dir
$ ./bin/hdfs namenode -format
格式化hdfs。格式化后会在namenode节点和slaves节点上建立对应的目录(/home/xc/dfs)

PS: 我在h1-2节点上执行format后没有能够成功启动hdfs。
在h1-2,即resourcemanager所在的节点上执行:
$ cd hadoop_home_dir
$ ./sbin/start-all.sh

PS:我在h1-1上执行启动脚本,没有能够成功启动resourcemanager
启动完成后,在http://h1-1:50030能查看hdfs的状态,在http://h1-2:18088可以查看resourcemanager的状态

5. mapreduce

传一个文本文件到hdfs上,运行wordcount:
$ cd hadoop_home_dir
$ ./bin/hdfs dfs -put <src> <dst>
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.1.0-beta.jar wordcount  

参考资料

http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
http://hadoop.apache.org/docs/r2.1.0-beta/hadoop-project-dist/hadoop-common/ClusterSetup.html

疑问:

1、为啥jobhistory看不到? 2、貌似hadoop2.1的hdfs没法和hadoop1.x的hdfs之间拷贝文件,不知到为啥?
3、明明我的3个nodemanager节点都是4G的内存,resourcemanager的web ui中却显示了3*8=24GB的内存,不知为啥?我装了一个伪分布的倒是显示了正确的内存容量。
PS:
疑问3答案: 每个节点的内存大小是在配置文件中配置的,不是hadoop自动识别的,默认的就是8GB

相关内容

    暂无相关文章