一、相关准备
- 搭载windows7系统的电脑
- VMware Workstation
- Ubuntu16.04
- XShell、Xftp
- Linux版JDK1.8
二、开始
1.首先在VMware Workstation上安装3个Ubuntu虚拟机。
不会安装的请看我上一篇文章。
分别给他们命名为master、slave1、slave2。
2.给Ubuntu设置静态IP。
-
点击 编辑,虚拟网络编辑器
-
选择 VMnet8 NAT模式,勾上“NAT模式”、“使用本地DHCP服务……”。可以在下边看到子网IP及掩码。点击“DHCP设置”可以看到可使用的IP地址范围。
- 启动master,编辑/etc/network/interfaces文件(root用户下操作)。
修改内容如下所示。address是表示本机的IP,可自行修改,但不要超出128~254的范围。用同样的方法分别修改slave1、slave2的IP(slave1:192.168.118.201,slave2:192.168.118.202)。
vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet static
address 192.168.118.200
netmask 255.255.255.0
gateway 192.168.118.2
dns-nameserver 8.8.8.8
修改后重启shutdown -r now
,输入ifconfig
可以看到IP地址已经改变。

- 编辑每一台虚拟机的/etc/hosts
vim /etc/hosts
添加每一台虚拟机的IP及虚拟机名:
127.0.0.1 localhost
127.0.1.1 ubuntu
192.168.118.200 master
192.168.118.201 slave1
192.168.118.202 slave2
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
在每一台虚拟机上都能通过虚拟机名ping通其他两台虚拟机。
“Ctrl”+“C”结束ping。

3.配置Hadoop
在3台虚拟机上都安装hadoop、JDK以及SSH。不会的安装请参考我的上一篇文章。
在master上进行如下操作,实现master与slave无密码登陆。
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
master下:
-
编辑hadoop-env.sh
vim /usr/hadoop/etc/hadoop/hadoop-env.sh
在JAVA_HOME处输入jdk目录
-
编辑core-site.xml
vim /usr/hadoop/etc/hadoop/core-site.xml
在<configuration></configuration>标签内输入以下内容
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
- 编辑hdfs-site.xml
vim /usr/hadoop/etc/hadoop/hdfs-site.xml
在<configuration></configuration>标签内输入以下内容
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
- 编辑mapred-site.xml
vim /usr/hadoop/etc/hadoop/mapred-site.xml.template
在<configuration></configuration>标签内输入以下内容
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:19888</value>
</property>
重命名mapred-site.xml.template 为mapred-site.xml
mv /usr/hadoop/etc/hadoop/mapred-site.xml.template /usr/hadoop/etc/hadoop/mapred-site.xml
-
编辑yarn-env.sh
vim /usr/hadoop/etc/hadoop/yarn-env.sh
把JAVA_HOME值改为JDK目录
-
编辑yarn-site.xml
vim /usr/hadoop/etc/hadoop/yarn-site.xml
在<configuration></configuration>标签内输入以下内容
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>8</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
<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>
- 编辑slaves
vim /usr/hadoop/etc/hadoop/slaves
添加slave
slave1
slave2
所有虚拟机的配置都一样
在master上配置之后可以通过scp命令拷贝hadoop目录到slave中。
如把master上的/usr/hadoop目录传输到slave1的/home/pan/目录下:
scp -r /usr/hadoop slave1:/home/pan/
(如果使用root用户传输失败,切换普通用户试试)
4.启动Hadoop群集
按照上面的配置理论上角色分配应该如下所示:
主机名 | 角色 |
---|---|
master | NameNode 、ResourceManager |
slave1 | NodeManager、SecondaryNameNode、DataNode |
slave2 | NodeManager、DataNode |
在master中格式化
hdfs namenode -format
接着同样在msater中用普通用户启动Hadoopstart-all.sh
(用root用户会出现Permission denied, please try again.错误,SSH的问题)
如果出现command not found
,输入source /etc/profile
更新环境变量再启动Hadoop
-
在master中jps
master
-
slave1
slave1
-
slave2
slave2
与表格相同,配置成功!
主机名 | 角色 |
---|---|
master | NameNode 、ResourceManager |
slave1 | NodeManager、SecondaryNameNode、DataNode |
slave2 | NodeManager、DataNode |
网友评论