在上一篇我们完成了ContOS网络配置以及JDK的安装,这一篇将在上一篇的基础上继续讲解虚拟机的克隆,hadoop环境搭建
传送门:
VMware 下Hadoop集群环境搭建之新建虚拟机
VMware 下Hadoop集群环境搭建之为虚拟机安装CentOS 6.7 64位系统
VMware 下Hadoop集群环境搭建之CentOS 6.7 网络配置的相关配置,JDK的安装
虚拟机克隆.
利用上一篇已经完成网络配置和jdk安装的虚拟机在克隆两台虚拟机.
1. 将拟机hadoop01关机.
2. 如动图演示那样,选中hadoop01,然后鼠标右键,在出来的菜单中选择 管理—>克隆:
3. 下一步:
4. 选中虚拟机中当前状态,然后下一步:
5. 选择创建完成克隆,然后下一步:
6. 这一步,将虚拟机名称更改为hadoop02,并将存储位置修改为与上一个虚拟机在相同文件夹下,其中每个虚拟机各自有一个文件夹,这里我的目录可能与上面两篇文章的目录有所不一样,原因是我发现之前的Hadoop就存了一个hadoop01,为了区分我的其他虚拟机,以及让每个虚拟机单独一个文件夹,我将Hadoop命名为hadoop01,并在上层目录下新建了一个bolg-hadoopes目录,然后将hadoop01拖到bolg-hadoopes下.注意,在改动了目录机构以后,在VMware中选中虚拟机可能就会报一个找不到虚拟机的错误,然后提示移除,移除就好了,然后VMware的菜单中 文件—>打开—>定位到hadoop01的位置,选中hadoop01.vmx打开即可.
7. 点击完成,等待克隆结束,就又创建了一个和上面那个一模一样的虚拟机:
8. 同样的方式,再克隆一台取名为hadoop03的虚拟机.
9. 分别开启刚克隆的这两台以及之前的那一台共3台虚拟机.
10. 用XShell登录到hadoop01,hadoop02,hadoop03,为避免混乱,在XShell中分别将3个虚拟机命名为h1,h2,h3.XShell连接到虚拟机的方式请参见上一篇文章.
11. 开启克隆的两台虚拟机的时候,我们会看到主机名都是hadoop1,ip也没有规律,这将给初学者的我们带来很大的不便,所以我决定将他们规划如下:
hadoop1(192.168.93.120),
hadoop2(192.168.93.121),
hadoop3(192.168.93.122)
分别修改克隆的两台虚拟机主机名和IP地址
编辑/etc/udev/rules.d/70-persistent-net.rules 这个文件:
vim /etc/udev/rules.d/70-persistent-net.rules# PCI device 0x8086:0x100f (e1000) #这条是来自克隆的那台虚拟机的配置,将这条注释:原因是ATTR{address}=="00:0c:29:21:6f:26"的物理地址信息是来自克隆的虚拟机 #SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:21:6f:26", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x100f (e1000) #将这条的NAME="eth1" 改成 NAME="eth0" #经过物理地址信息查看对比,00:0c:29:64:74:a4才是当前这台机器对应的物理地址. SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:64:74:a4", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
编辑网卡配置信息,修还物理地址和IP地址即可.物理地址查看方式请参见上一篇文章.
vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0 HWADDR=00:0c:29:64:74:a4 #修改物理地址,物理地址请根据自己的VMware获取 TYPE=Ethernet UUID=afcc5664-3e15-4768-b5ab-45f1c53f7a68 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=192.168.93.121 #修改IP地址 PREFIX=24 GATEWAY=192.168.93.2 DNS1=8.8.8.8 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0"
修改主机名:
vim /etc/sysconfig/networkNETWORKING=yes HOSTNAME=hadoop2
分别编辑3台机器的hosts文件,在已有内容后面添加地址映射:
vim /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.93.120 hadoop1 www.hadoop1.com 192.168.93.121 hadoop2 www.hadoop2.com 192.168.93.122 hadoop3 www.hadoop3.com
- 重启克隆的两台机器.
- 测试3台机器之前是否可以相互通信.
- 用hadoop1分别ping hadoop2,hadoop3:
- 用hadoop2分别ping hadoop1,hadoop3.
- 用hadoop3分别ping hadoop1,hadoop2.
- 用hadoop1分别ping hadoop2,hadoop3:
新建用户并配置sudo权限
- 我们在安装CentOS系统的时候,因为直接用root用户而被警告,因为root用户权限过大,如果经常有删除修改操作,可能会有危险,接下来,我们在hadoop1上新建一个hadoop用户,之后搭建hadoop环境,都用hadoop用户来完成,除非特别说明.
- 添加hadoop用户
useradd hadoop - 给hadoop设置密码
passwd hadoop 给hadoop配置sudo权限(在命令前加上sudo,可以执行root权限才能执行的命令)
编辑sudoers文件,在编辑之前我们可能查看一下sudoers的信息:
ll /etc/sudoers-r--r-----. 1 root root 4002 Mar 2 2012 /etc/sudoers
我们可以看到该文件连root用户都是只读的.所以要想修改该文件内容,需要先修改一下该文件的权限,给root添加写权限:
chmod u+w /etc/sudoers
编辑该文件:vim /etc/sudoers## ## Allow root to run any commands anywhere root ALL=(ALL) ALL #给hadoop用户添加sudo权限 hadoop ALL=(ALL) ALL ## Allows members of the 'sys' group to run networking, software, ## service management apps and more. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS ## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL # 执行sudo权限时不需要输入密码 %hadoop ALL=(ALL) NOPASSWD: ALL ## Allows members of the users group to mount and unmount the
测试sudo权限.
- 在hadoop的home下新建一个file1文件.
touch /home/file1. 查看/home/file1. 信息:
-rw-r--r--. 1 root root 0 May 1 00:32 /home/file1
从文件信息 可以看出,只有root可以读写删除该文件.
- 切换到hadoop
su hadoop 删除/home/file1文件
rm -rf hadooprm: cannot remove `/home/file1': Permission denied
结果是删除文件失败,权限异常.
- 用添加sudo来删除
sudo rm -rf /home/file1
可以看到结果删除成功了,说明我们sudo权限配置成功.
- 在hadoop的home下新建一个file1文件.
- 在hadoop2,hadoop3上同样的分别新建一个hadoop用户,并配置sudo权限.
安装hadoop并配置相关文件.
- 在hadoop1上切换至hadoop用户,注意,接下来的配置需要在hadoop用户下完成,如果在配置过程中,随意切换用户,导致某些操作在不同用户下来完成的,后期启动hadoop集群的时候会因hadoop文件的权限问题导致启动失败,排查起错误来也会比较困难.
- 在hadoop的家目录下新建一个apps文件夹
mkdir /home/hadoop/apps - 用xftp上传hadoop-2.7.5.tar.gz包到该目录下(具体操作请参见上一篇)上传jdk的方式.
hadoop-2.7.5.tar.gz的链接:https://pan.baidu.com/s/1o9CXsn71kfNVNKIQX0PW5w 密码:hf19 - 解压hadoop-2.7.5.tar.gz包:
tar -zxvf /home/hadoop/apps/hadoop-2.7.5.tar.gz - 解压后的结果:
- 进入到hadoop-2.7.5
cd /home/hadoop/apps/hadoop-2.7.5 - 在/home/hadoop/apps/hadoop-2.7.5新建一个data目录(hadoop参数的数据存放目录)
mkdir /home/hadoop/apps/hadoop-2.7.5/data 配置hadoop-env.sh文件:
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim hadoop-env.sh# set JAVA_HOME in this file, so that it is correctly defined on # remote nodes. # The java implementation to use. #在这里添加JDK安装目录的环境变量,这里我又尝试过 JAVA_HOME=${JAVA_HOME},但是不能起作用,还是老老实实的写吧 export JAVA_HOME=/home/java/jdk1.7.0_79 # The jsvc implementation to use. Jsvc is required to run secure datanodes
配置core-site.xml配置文件
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim core-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:9000</value><!--这里hadoop需要换成自己配置的第一台机器的hostname,比如我的是hadoop1,所以我这里写的就是hadoop1--> </property> <property> <name>hadoop.tmp.dir</name> <!--配置hadoop集群数据存放路径,注意最后不要有空格--> <value>/home/hadoop/apps/hadoop-2.7.5/data</value> </property> </configuration>
设置hdfs-site.xml配置文件
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim hdfs-site.xml<configuration> <!--配置副本数量--> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
配置mapred-site.xml配置文件
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
默认mapred-site.xml不存在,将mapred-site.xml.template改成mapred-site.xml即可
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml<configuration> <!--指定mapreduce在yarn上运行--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
配置yarn-site.xml配置文件
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim yarn-site.xml<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
配置slaves配置文件
cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
vim slaves#指定干活的datanode hadoop2 hadoop3
- 配置hadoop1到hadoop2,hadoop3之间的免密通信,完成这一步操作,需要安装ssh软件,注意 如果机器中没有安装ssh-client软件,先需要安装,如果没有安装软件技能,推荐先了解下linux安装安软的知识.安装步骤如下1,2:
- 查找适合的软件包:yum list | grep openssh-clients
- 安装:yum install openssh-clients.x86_64 (openssh-clients.x86_64 是我查找到的结果).
- 启动hadoop2,hadoop3,并都切换到hadoop用户下.
- 配置免密登录之前,登录到hadoop2看看效果:
ssh hadoop2
退出hadoop2的登录:exit
- 在hadoop1的hadoop用户根目录下(注意,必须用hadoop用户来执行),执行以下命令产来密钥对:
cd ~
ssh-keygen -t rsa
结果如下:
- 将密钥拷贝到hadoop2,hadoop3:
cd .ssh #.ssh是生成密钥对时产生的文件夹
ssh-copy-id hadoop1 #拷贝到hadoop1(hadoop1就是当前的机器,当前机器也需要设置免密登录)
ssh-copy-id hadoop2 #拷贝到hadoop2
ssh-copy-id hadoop3 #拷贝到hadoop3
拷贝到hadoop2的截图如下:
拷贝到其他机器也是一样,就不一一截图了. - 验证免密登录是否配置成功.
不需要密码,直接就登录成功了.记得退出登录.
配置hadoop软件的环境变量:
- 配置之前:输入: which hadoop
发现是找不到hadoop这个命令的. 在/etc/profile文件中添加hadoop的环境变量
sudo vim /etc/profile #因为只有root用户才能编辑该文件,所以hadoop想要编辑,需要用sudo权限:``` export JAVA_HOME=/home/java/jdk1.7.0_79 #申明hadoop的路径变量 export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.5 #在之前配置JAVA的环境变量之后追加hadoop的环境变量 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ```
- source vim /etc/profile #让环境变量生效
- 验证配置是否成功:which hadoop
结果如上表示配置成功.
- 配置之前:输入: which hadoop
- 将已经配置好的hadoop整个文件包拷贝到hadoop2,hadoop3,这里需要注意的是hadoop2和hadoop3中即将放置hadoop包的路径需要保持一致,如果不一致,需要在上面配置的那几个hadoop配置文件中修改有路径的地方.
- 在hadoop2,hadoop3的hadoop家目录下新建一个apps目录.
- scp -r /home/hadoop/apps/hadoop-2.7.5 hadoop2:/home/hadoop/apps/
- scp -r /home/hadoop/apps/hadoop-2.7.5 hadoop3:/home/hadoop/apps/
- 根据上面配置hadoop软件的环境变量一样去hadoop2和hadoop3上配置好hadoop的环境变量.
- 分别重启3台机器.
- 在hadoop1上,用户hadoop用户,格式化hadoop 的HDFS(文件系统),第一次使用需要格式化:
hadoop namenode -format
- 在hadoop1上启动hdfs文件系统:
start-dfs.sh
待启动完成,再验证是否有该有进程:jps
在hadoop2,hadoop3上查看hadoop的进程:jps
- 在hadoop1上启动yarn集群
start-yarn.sh
在hadoop2,hadoop3上查看进程:
- 使用浏览器查看集群状态:http://192.168.93.120:8088
如果没法访问,查看防火墙状态:
sudo service iptables status
关闭防火墙:
sudo service iptables stop
最后正确的结果:
- 查看HDFS文件系统状态:http://192.168.93.120:50070
如果结果都如上,表示hadoop集群搭建成功.那这篇文章的目的就达到了.
总结
我在配置的时候,也出现这样那样的问题.所以配置过程中需要注意以下几点:
1. 配置主机名时,以及在添加用户时,千万不要使用带有下划线的以及其他不符合规范的命名,我第一次配置时因为使用了下划线,导致启动集群时一直启动失败,折腾了好久好久.
2. hadoop的解压,配置,拷贝,需要使用配置了免密登录的用户来完成.比如我以上配置的就是hadoop用户来完成的.
3. 初始hadoop集群的时候,需要使用与解压,配置,拷贝hadoop时的用户一致.
4. 配置的时候仔细,仔细再仔细.可能因为一个字母错误,就会导致很多问题.
5. 我的3台虚拟机的hostname命名分别是hadoop1,hadoop2,hadoop3,在这三台虚拟机下都有一个用来搭建hadoop集群的用户hadoop,所以再阅读的时候不要混淆了.
6. 如果按照我的步骤来搭建,最后集群搭建完成时,每台机器的进程规划如下:
主机名 | 进程 |
---|---|
hadoop1 | SecondaryNameNode ResourceManager NameNode |
hadoop2 | DataNode NodeManager |
hadoop3 | DataNode NodeManager |
尽情期待下一篇Zookeeper的环境搭建,或者HDFS的API操作
创作不易.转载注明出处.
qq交流群:775661488