一:Vmware上安装Linux系统
二:配置Vmware NAT网络。(详细说明:vmware三种网络模式 - )。
NAT是网络地址转换,是在宿主机和虚拟机之间增加一个地址转换服务,负责外部和虚拟机之间的通讯转接和IP转换。
部署Hadoop集群,这里选择NAT模式,各个虚拟机通过NAT使用宿主机的IP来访问外网。
我们的要求是集群中的各个虚拟机有固定的IP、可以访问外网,所以进行如下设置:
打开网络接口配置文件。(详细说明:详细的ifcfg-eth0配置详解 - 莫笑 - 博客园)。
vim /etc/sysconfig/network-scripts/ifcfg-eth0。
首先把BOOTPROTO="dhcp"改成BOOTPROTO="static"表示静态获取,然后在最后追加比如下面的配置:
IPADDR=192.168.183.10
NETMASK=255.255.255.0
GATEWAY=192.168.183.2
DNS1=114.114.114.114
设置完毕,然后使用命令: /etc/init.d/network restart 或者 service network restart
用curl www.baidu.com和ping www.baidu.com来测试是否可以上网。
三:hadoop集群环境搭建。
1,为了模仿完全布式环境部署Hadoop,我们克隆两台名为slave1和slave2的虚拟机。
2、 配置网络。配置完成后,输入curl www.baidu.com测试是否可以上网。
修改网卡名称:(mac电脑修改方式)
在slave1和slave2机器上编辑网卡信息。执行sudo vim /etc/udev/rules.d/70-persistent-net.rules命令。因为它们是从master机器克隆来的,所以会保留master的网卡eth0,并且再添加一个网卡eth1。并且eth0的Mac地址和master的地址是一样的,Mac地址不允许相同,所以要删除eth0,只保留eth1网卡,并且要将eth1改名为eth0。将修改后的eth0的mac地址复制下来,修改network-scripts文件中的HWADDR属性。
vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改网络参数:
slave1机器IP改为192.168.183.11
slave2机器IP改为192.168.183.12
3.安装java。
(1) 去下载Oracle版本Java JDK:jdk-8u67-linux-x64.tar.gz
(2) 将jdk-7u67-linux-x64.tar.gz解压到/usr/local/src目录下
tar -zxvf jdk-8u67-linux-x64.tar.gz -C /usr/local/src
(3) 添加环境变量
设置JDK的环境变量 JAVA_HOME。vim ~/.bashrc,追加
export JAVA_HOME="/usr/local/src/jdk1.80_67"
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
修改完毕后,执行 source /etc/profile
(4)安装后再次执行 java –version,可以看见已经安装完成。
(5)执行:
scp -rp jdk 192.168.183.11:/user/loacl/src/
scp -rp jdk 192.168.183.12:/user/loacl/src/
远程复制到另外两台机器上。vim ~/.bashrc配置环境变量(同上)
4,下载hadoop-1.2安装包,解压。执行mkdir tmp,存放hadoop运行生成的临时文件。cd conf/
(1)配置master
master
(2)配置slave
slave1
slave2
(3) 配置core-site.xml
vim etc/hadoop/core-site.xml。配置如下:
hadoop.tmp.dir
/usr/local/src/hadoop-1.2.1/tmp
fs.default.name
hdfs://192.168.183.10:9000
(4)配置mapred-site.xml
mapred.job.tracker
http://192.168.183.10:9001
(5)配置hdfk-site.xml。(配置HDFS里面数据副数)
dfs.replication
3
(6)配置hadoop-env.sh。
export JAVA_HOME=/usr/local/src/jdk
5,配置hosts。(指定ip和hostname的映射关系)
vim /etc/hosts
master、slave1、slave2三台机器hosts都配置为:
192.168.183.10 master
192.168.183.11 slave1
192.168.183.12 slave2
6,配置network。(设置hostname)
vim /etc/sysconfig/network
HOSTNAME=master
配置完成之后需要重启才能生效。所以我们临时设置一下:
mater:hostname master
slave1: hostname slave1
slave2: hostname slave2
7,远程拷贝hadoop 1.2.1到slave1和slave2。(由于slave1和slave2此时还没有设置hostname,所以需要用ip进行copy)
cd /usr/local/src/hadoop 1.2.1。
scp -rp hadoop-1.2.1 192.168.183.11:/usr/local/src/
scp -rp hadoop-1.2.1 192.168.183.12:/usr/local/src/
8,进入slave1和slave2用cat命令检查一下各个配置文件。如:cat /core-site.xml。查看完成之后slave1和slave2分别执行hostnames slave1和hostname slave1 slave2
9,关闭防火墙。
iptables -L
/etc/init.d/iptables stop
setenforce 0
getenforce //查看防火墙状态
10,关闭selinux
selinux是Linux一个子安全机制,学习环境可以将它禁用。
vim /etc/sysconfig/selinux
SELINUX=disabled
11,设置SSH无密码登录
Hadoop集群中的各个机器间会相互地通过SSH访问,每次访问都输入密码是不现实的,所以要配置各个机器间的SSH是无密码登录的。
在master上生成公钥
ssh-keygen
一路回车,都设置为默认值,然后再当前用户的Home目录下的.ssh目录中会生成公钥文件(id_rsa.pub)和私钥文件(id_rsa)(cd ~/.ssh/ ls)。把id_rsa.pub复制到authorized_keys。在slave1和slave2上也执行相同的操作。然后把三个机制的公钥内容全部复制到master的authorized_keys中。然后再从master复制到slave1和slave2上。
cd ~/.ssh/
cat id_rsa.pub > authorized_keys
cat authorized_keys
scp -rp authorized_keys slave1:~/.ssh/
scp -rp authorized_keys slave2:~/.ssh/
测试ssh免密配置是否成功。
ssh slave1
exit
ssh slave2
exit
12,配置hadoop环境变量
HADOOP_HOME="/usr/local/src/hadoop-1.2.1"
export PATH=$HADOOP_HOME/bin:$PATH
13,启动hadoop集群。
进入到hadoop的bin目录下。第一次启动需要先格式化 namenode。启动完成后,用jps命令查看进程,验证HDFS是否可用,并上传一个文件到HDFS。最后不要忘记关闭集群(./stop-all.sh)。
cd bin/ //进入到hadoop的bin目录下
./hadoop namenode -format //第一次需要格式namenode
./start-all.sh //启动hadoop集群
jps //查看master,slave1,slave2机器上的进程
./hadoop fs -ls / //验证HDFS是否可用
./hadoop fs -put /etc/passwd/ //上传文件到HDFS
./hadoop fs -cat /passwd //测试上传文件是否可读