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配置:
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