一、准备工作
(1)在Windows 10机器上安装VMware Workstation并建立三台虚拟机,我使用的是CentOS7系统,配置相应的IP地址(根据自己电脑的IP地址配置),然后在每台机器中配置JDK环境。
(2)安装Xshell 6用于远程登录系统
(3)安装Secure File Transfer Client,用于在Windows系统向虚拟机上传输文件
(4)Hadoop-1.2.1.tar.gz 压缩包
相关软件链接: https://pan.baidu.com/s/1whr9qFtJLiTl95BIvyttmw 密码: cv78
二、Hadoop完全分布式配置
1、打开三台虚拟机和Xshell,在Xshell命令中输入ssh ip地址,分别连接三台电脑,连接时需要输入用户名和密码(在安装CentOS时自己配置)。为了方便我的三台虚拟机主机名为node1,node2,node3。
连接成功后如下:
2、通过Secure File Transfer Client,将Hadoop-1.2.1.tar.gz压缩包传到node1系统上
3、输入命令解压hadoop-1.2.1.tar.gz文件
解压之后输入ls命令查看目录,如下:
4、进入hadoop-1.2.1文件夹的conf目录下,进行相关的配置
5、配置core-site.xml文件
修改文件内容,fs.default.name配置NameNode在哪台机器上,端口是什么。hadoop.tmp.dir是设置hdfs的工作目录,如果不设置,那默认工作目录在Linux系统的tmp目录下,而这个目录在每次系统重启之后会清空,数据会消失,因此最好改一下,设置一个工作目录。这个目录不需要创建,在之后格式化时会自动创建。第三个属性暂时可以不要。
6、配置hdfs-site.xml文件,dfs.replication是配置文件的副本数也即block的副本数,如果不配置默认为3,而现在是三台虚拟机,一个NameNode和两个DataNode,因此副本数最多为2。
7、配置DataNode,修改slaves文件,内容为另外两台的主机名或IP地址
8、配置Serondary NameNode,它只要不和NameNode在同一台机器即可,因此可以放在node2或node3机器上。修改配置文件masters,我将其放在node2机器上,也可写IP地址。
9、配置hadoop-env.sh文件,更改JAVA_HOME的路径为自己设置的路径
10、设置三台机器之间的免密码登录。为什么要设置免密码登录?因此在三台机器上定义了不同的节点,有的是NameNode,有的是DataNode。每一个节点实际上是一个进程,三台机器上的节点都启动,那么整个集群才算启动,所以要做到在任何一台机器上输入启动命令都可以启动整个集群,那么就要免密码登录,远程登录其他机器启动进程,否则就需要在每一台机器上都启动一次。
(1)首先修改hosts文件,添加两台主机(最后两行)。同理在另外两台机器上也添加其他两台机器
(2)输入命令生成密钥,并将公钥放到本地认证文件中去,另外两个主机做相同的操作,这里只是本地的免密码登录。
(3)远程免密码登录,此命令是将node1上的id_sda.pub文件全部拷贝到node2上的根目录下,回车后需要输入node2的密码。
完成之后再node2上会有这个文件
最后将此文件追加到指定的认证文件中
然后在node1中输入命令登录node2就不需要输入密码
同理将上述步骤用在node3中。
11、在node2和node3机器上解压hadoop-1.2.1.tar.gz,并将node1上conf下的配置文件拷贝到node2和node3上,保证配置文件相同。
12、格式化,首先进入hadoop-1.2.1/bin目录下进行格式化,命令为:./hadoop namenode -format
13、启动,命令为:./start-dfs.sh。因为此时还没有配置MapReduce,不能用 ./start-all.sh。启动之后可用jps命令查看启动的节点。
14、在Windows系统的域名解析文件hosts文件添加三台机器,文件路径为:C:\Windows\System32\drivers\etc
15、启动集群后,打开浏览器输入地址:http://node1:50070,若网页加载失败,使用命令:./stop-dfs.sh,关闭集群,然后在三台机器上输入命令:systemctl stop firewalled.service,关闭防火墙之后重新启动,在进入即可。
16、配置MapReduce,修改conf文件夹下的mapred-site.xml文件,之后启动用 ./start-all.sh即可。