1、开发配置环境:
具体的就不介绍了,请参考我另外一篇文章http://my.oschina.net/lanzp/blog/309078
2、Hadoop节点配置
在讲解之前,先声明一点,这篇文章的所有环境都是基于上一篇伪分布的配置文章的基础上再做配置的,如果你没有看过我之前的那篇文章,建议你先去阅读一下。
现在网上比较少新版本的配置教程,那么下面我就来分享一下我自己的实战经验,如有不正确的地欢迎指正
🙂
首先,我们的节点信息如下:
1
2
3
4
|
master 192.168.8.184 slave1 192.168.8.183 slave2 192.168.8.178 slave3 192.168.8.190 |
我是用虚拟机做的,主节点(Master)配置好后作为模板,其他3个从节点(slave1、slave2、slave3)直接做虚拟机拷贝,其中slave1还兼任了第二namenode节点。因为主节点的配置跟从节点的配置是完全一样的,拷贝完后只需要做两件事:修改hostname、重新生成SSH无口令登陆的KEY。拷贝完成后启动如果网络有问题,直接百度谷歌就行了。关于修改hostname对应上面的IP修改成相应的名称就可以了,如192.168.8.184修改成master。而用户名、密码完全可以不需要修改,当然你要改也是没有问题的,节点多了不好记哦。首先,我们先来讲一下配置,一共要配置6个文件,分别是core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、masters、slaves,其中masters文件可能会在配置目录下不存在,自己新建一个就可以了,详细配置如下:
core-site.xml:
1
2
3
4
5
6
7
8
9
10
11
12
|
< configuration > < property > < name >fs.defaultFS</ name > < value >hdfs://192.168.8.184:9000</ value > < description >same as fs.default.name</ description > </ property > < property > < name >hadoop.tmp.dir</ name > < value >/usr/mywind/tmp</ value > < description >A base for other temporary directories.</ description > </ property > </ configuration > |
hdfs-site.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
< configuration > < property > < name >dfs.namenode.name.dir</ name > < value >/usr/mywind/name</ value > < description >same as dfs.name.dir</ description > </ property > < property > < name >dfs.datanode.data.dir</ name > < value >/usr/mywind/data</ value > < description >Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices.</ description > </ property > < property > < name >dfs.blocksize</ name > < value >268435456</ value > < description >HDFS blocksize of 256MB for large file-systems.</ description > </ property > < property > < name >dfs.namenode.http-address</ name > < value >master:50070</ value > < description >The address and the base port where the dfs namenode web ui will listen on.</ description > </ property > < property > < name >dfs.namenode.secondary.http-address</ name > < value >slave1:50090</ value > < description >The secondary namenode http server address and port.</ description > </ property > < property > < name >dfs.replication</ name > < value >3</ value > < description >same as old frame,recommend set the value as the cluster DataNode host numbers!</ description > </ property > </ configuration > |
mapred-site.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
< configuration > <!--Configurations for MapReduce Applications --> < property > < name >mapreduce.framework.name</ name > < value >yarn</ value > < description >Execution framework set to Hadoop YARN.</ description > </ property > <!--Configurations for MapReduce JobHistory Server --> < property > < name >mapreduce.jobhistory.address</ name > < value >master:10020</ value > < description >MapReduce JobHistory Server host:port.Default port is 10020.</ description > </ property > < property > < name >mapreduce.jobhistory.webapp.address</ name > < value >master:19888</ value > < description >MapReduce JobHistory Server Web UI host:port.Default port is 19888.</ description > </ property > </ configuration > |
yarn-site.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
< configuration > <!-- Configurations for ResourceManager --> < property > < name >yarn.resourcemanager.address</ name > < value >master:8032</ value > </ property > < property > < name >yarn.resourcemanager.scheduler.address</ name > < value >master:8030</ value > </ property > < property > < name >yarn.resourcemanager.resource-tracker.address</ name > < value >master:8031</ value > </ property > < property > < name >yarn.resourcemanager.admin.address</ name > < value >master:8033</ value > </ property > < property > < name >yarn.resourcemanager.webapp.address</ name > < value >master:8088</ value > </ property > <!-- Configurations for NodeManager --> < property > < name >yarn.nodemanager.aux-services</ name > < value >mapreduce_shuffle</ value > < description >Configuration to enable or disable log aggregation.Shuffle service that needs to be set for Map Reduce applications.</ description > </ property > < property > < name >yarn.nodemanager.aux-services.mapreduce_shuffle.class</ name > < value >org.apache.hadoop.mapred.ShuffleHandler</ value > </ property > </ configuration >< span ></ span > |
masters:
1
|
master |
slaves:
1
2
3
|
slave1 slave2 slave3 |
具体每个参数代表什么意思,直接查官网或者看description信息就可以知道了,根据你自己实际的情况去修改就可以了。我们配置的时候主要是配置了NameNode、DataNode、ResourceManager、Map/Reduce 的JobHistory Server,配置上我已经有注释加以说明了,看起来会更清晰明了。这里或许有人会疑问,上面的配置好像只指定了NameNode、Secondary NameNode 的,没有指定DataNode的信息,其实对于DataNode而言,它只需要知道自己从属哪个NameNode节点就可以了,通过masters、slaves文件可以清晰地定义清楚它们之间的关系,不需要更多的配置,在启动主节点的时候,主节点会根据这两个文件定义的关系去启动子节点(当然,他们之间要实现无口令连接通讯才行)。下面要讲解一下SSH的无口令登陆设置。由于从节点(slave1、slave2、slave3)是在主节点那边直接拷贝过来的,建议重新生成一下KEY:
1
2
|
ssh -keygen -t dsa -P '' -f ~/. ssh /id_dsa cat ~/. ssh /id_dsa .pub >> ~/. ssh /authorized_keys |
从节点(slave1、slave2、slave3)执行上面的命令重新生成完KEY之后,主节点需要与从节点建立无密码登陆,那么,就需要把主节点的KEY添加到从节点的授权列表中,这样主节点才能不需要输入密码的情况下连接访问从节点。步骤如下:
1. 把主节点的公钥复制到从节点中。
2. 从节点把主节点的公钥写入授权列表。
首先,在主节点中切换到/home/a01513目录下(注意:a01513是我的操作系统用户名,实际名称根据你系统的用户名改成相应的名称就可以了):
1
|
cd /home/a01513 |
然后复制,这里我以slave1节点为例:
1
|
scp ~/. ssh /id_rsa .pub a01513@192.168.8.183: /home/a01513/ |
这里可能要你输入slave1(192.168.8.183)的主机密码,输入就可以了,输入完成后到slave1节点终端输入以下命令把主节点的公钥复制到授权列表:
1
|
cat ~ /id_rsa .pub >> ~/. ssh /authorized_keys |
回到主节点终端中输入:
1
|
ssh slave1 |
如果不需要输入密码就连接成功的话,证明你配置对了,恭喜!
如果上面的步骤完成了,那么下面进行格式化文件系统:
1
|
hdfs namenode - format |
然后启动HDFS、YARN、JobHistory进程:
1
2
|
start-dfs.sh start-yarn.sh |
注意旧版本的start-all.sh已经被上面两个脚本替代了,不过好像这命令还可能用,建议还是用上面两个吧。
1
|
mr-jobhistory-daemon.sh start historyserver |
关闭也很简单:
1
2
3
|
stop-dfs.sh stop-yarn.sh mr-jobhistory-daemon.sh stop historyserver |
至此,我们的完全分布式配置已经大功告成!