环境:centos7+hadoop2.7.7+jdk1.8.0_201
文章下边用到的用户名,路径名,需要根据自己的情况修改,本人在系统的用户名是cxm,两台虚拟机的名字是master和slave1;
我有参考其他的文章,有些名字,路径没有改过来,需要读者按自己的情况改;
本篇文章没有一步一步地演示结果,有些步骤可能要思考一下。
一.centos 虚拟机安装
安装界面要对 网络进行开启,选择环境(最小安装等等),选择基本环境时候,不要选minimal,选了就只有文本界面,可以选择gnome界面那个环境,所有的设置都过一遍。
输入了虚拟机名 HadoopMaster
超级用户密码:123
usr:cxm
password:123
对 / 目录文件的写操作都要用root用户: su root , 退出: exit
鼠标被虚拟机吃了:CTRL+ALT
网络连接在VMware那里设置用NAT模式
网络问题
我的主机有3个适配器,一个是虚拟机的适配器,一个是wifi的适配器,一个是网卡的适配器,分别对应三个ip地址(网卡没有连所以没有IP地址,即2个IP),表明我的主机所属于的网段,也就是我的主机可以属于多个网段,同网段存在的ip是可以相互ping通的。
我连wifi后的ip是172.17.149.93,该ip是与外网连通的;我虚拟机适配器的ip是192.168.126.1,所以我创建的虚拟机ip要和192.168.126.1同网段,而我主机的两个ip是可以ping通的,那么我创建的虚拟机就能够ping通外网。
报错:连接网络一连就断开
原因:可能是我第一次安装的时候,在安装界面没有选择配置好网络ip等;这次安装只选择了gnome环境的安装,第一次可以ping通外网,后边我有设置成静态ip。在我没有修改虚拟机的网卡配置的时候,可能ip是动态的,所以可以ping通外网。而我修改网卡配置,设置ip为静态的时候,我设置成192.168.64.100,和我的虚拟机适配器不同网段,所以ping不通,也连接不上网络,网络可能指的是网段。
报错:两台虚拟机不能ping通
原因:一开始是有一台连不上网络,是该机ip和我虚拟机适配器的ip不同网段,所以ping不通
报错:虚拟机不能ping通外网
原因:两台机器设置的网关不是和我虚拟机适配器同网段,所以ping不通。
正确做法是:在VMware设置网络为nat模式(表示是同一网段的),如果一台是克隆机,要生成新的MAC地址,进入系统后,设置两台虚拟机的 ip 和 网关 与我的虚拟机适配器的ip同网段。
vi操作
编辑模式按 i ,退出编辑模式按ESC
退出: :q!
保存并退出: :wq
1.配主机名(master,slave)
su root
vi /etc/sysconfig/network
添加:(里边有多余的就删除掉)
NETWORKING=yes
HOSTNAME=master
确认生效:
hostname master
hostname
2.配置网络环境(ip)
查看enss33有没有显示ip地址,第一个:ifconfig
没有则(修改的是网卡):
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static //dhcp
IPADDR=192.168.126.130
NETMASK=255.255.255.0
GATEWAY=192.168.126.2 (网关显示的是192.168.126.255,和实际配置的是不同的!!!)
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=1a367d0c-8108-4454-a71f-92147b01d30f (注释掉 )
DEVICE=ens33
ONBOOT=yes
重启网络服务:
su root
/sbin/service network restart
检查:ifconfig
3.关闭防火墙
systemctl disable firewalld
查看防火墙状态:systemctl status firewalld 或者 firewall-cmd --status
4.配置host列表
vi /etc/hosts
添加对应的IP和主机名:(里边的东西不要删除)
192.168.126.130 master
192.168.126.131 slave1
ping两台机器:
ping master
ping slave
5.安装JDK
将 JDK 文件解压, 放到/usr/java 目录下 :
cd /home/zkpk/resources/software/jdk
mkdir /usr/java
mv ~/resources/software/jdk/jdk-7u71-linux-x64.gz /usr/java/
cd /usr/java
tar -xvf /usr/java/jdk-7u71-linux-x64.gz
配置环境变量:
vi /home/cxm/.bash_profile
添加:
export JAVA_HOME=/usr/java/jdk1.8.0_201
export PATH=$JAVA_HOME/bin:$PATH
使改动生效:
source /home/cxm/.bash_profile
测试配置:
java -version
which java
6.免密钥登录配置
该部分所有的操作都要在cxm 用户下
HadoopMaster 节点 :
终端生成密钥:
ssh-keygen -t rsa
生成的密钥在.ssh 目录下,多了id_rsa和id_rsa.pub文件,密钥和公钥
复制公钥文件:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改 authorized_keys 文件的权限, 命令如下:
chmod 600 ~/.ssh/authorized_key
将 authorized_keys 文件复制到 slave 节点:
ssh-copy-id slave
HadoopSlave 节点 :
在终端生成密钥, 命令如下(一路点击回车生成密钥)
ssh-keygen -t rsa
验证免密钥登陆 :
说明:
1,一般只需要配置master节点到slave节点的免密码登录,反之则不需要;
2, 如果有多个slave节点,则slave节点之间 需要配置相互之间的免密码登录!!!
3,每个节点生成自己的密钥匙是必须步骤(ssh-keygen指令)
4,建议采取ssh-copy-id方法,来简化步骤
5,配置好免密码登录后,在~/.ssh目录下有多个文件,其中autorized_keys为可以免密码登录的远程用户 和其主机名的列表;
在 HadoopMaster 机器上执行下面的命令:
ssh slave
二.Hadoop 配置部署
每个节点上的 Hadoop 配置基本相同, 在 HadoopMaster 节点操作, 然后完成复制到另一个节点。 下 面所有的操作都使用cxm用户
复制并解压 Hadoop 安装包命令如下:
[zkpk@master ~]$ tar -xvf ~/hadoop-2.5.2.tar.gz
[zkpk@master ~]$ cd ~/hadoop-2.5.2
配置环境变量 hadoop-env.sh
环境变量文件中, 只需要配置 JDK 的路径。
[zkpk@master hadoop-2.5.2] gedit /home/cxm/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
在文件的靠前的部分找到下面的一行代码: export JAVA_HOME=${JAVA_HOME} 将这行代码修改为下面的代码: export JAVA_HOME=/usr/java/jdk1.8.0_201/
然后保存文件
配置环境变量 yarn-env.sh
环境变量文件中, 只需要配置 JDK 的路径。
[zkpk@master hadoop-2.5.2]$ gedit ~/hadoop-2.7.7/etc/hadoop/yarn-env.sh
在文件的靠前的部分找到下面的一行代码: # export JAVA_HOME=/home/y/libexec/jdk1.6.0/
将这行代码修改为下面的代码(将#号去掉):
export JAVA_HOME=/usr/java/jdk1.8.0_201/
然后保存文件。
配置核心组件 core-site.xml
使用 gedit 编辑:
[zkpk@master hadoop-2.5.2]$ gedit ~/hadoop-2.7.7/etc/hadoop/core-site.xml
用下面的代码替换 core-site.xml 中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/cxm/hadoopdata</value>
</property>
</configuration>
配置文件系统 hdfs-site.xml
用下面的代码替换 hdfs-site.xml 中的内容:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
配置文件系统 yarn-site.xml
使用 gedit 编辑:
[zkpk@master hadoop-2.5.2]$ gedit ~/hadoop-2.7.7/etc/hadoop/yarn-site.xml
用下面的代码替换 yarn-site.xml 中的内容:
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
</configuration>
配置计算框架 mapred-site.xml
复制 mapred-site-template.xml 文件:
[zkpk@master hadoop-2.5.2]$ cp ~/hadoop-2.7.7/etc/hadoop/mapred-site.xml.template ~/hadoop-2.7.7/etc/hadoop/mapred-site.xml
使用 gedit 编辑:
[zkpk@master ~]$ gedit ~/hadoop-2.7.7/etc/hadoop/mapred-site.xml
用下面的代码替换 mapred-site.xml 中的内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在 master 节点配置 slaves 文件
使用 gedit 编辑:
[zkpk@master hadoop-2.5.2]$ gedit ~/hadoop-2.7.7/etc/hadoop/slaves
用下面的代码替换 slaves 中的内容:
slave
注意, Hadoop3.0 下已取消 slaves 文件,改为 workers 文件。 workers 文件内容与以前 slaves 文件相同,均 为主机名(每行一个主机名 )
hadoop 3.0 的配置文件说明
参考其他文档
复制到从节点
使用下面的命令将已经配置完成的 Hadoop 复制到从节点 HadoopSlave 上:
[zkpk@master hadoop-2.5.2]$ cd
[zkpk@master ~]$ scp -r hadoop-2.7.7 cxm@slave1:~/
注意: 因为之前已经配置了免密钥登录, 这里可以直接远程复制。
三.启动 Hadoop 集群
下面所有的操作都使用 cxm用户
配置 Hadoop 启动的系统环境变量
该节的配置需要同时在两个节点(HadoopMaster 和 HadoopSlave) 上进行操作,操作命令如下:
[zkpk@master hadoop-2.5.2]$ cd
[zkpk@master ~]$ gedit ~/.bash_profile将下面的代码追加到.bash_profile 末尾:
#HADOOP
export HADOOP_HOME=/home/cxm/hadoop-2.7.7
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
然后执行命令:[zkpk@master ~]$ source ~/.bash_profile
创建数据目录
该节的配置需要同时在两个节点(HadoopMaster 和 HadoopSlave) 上进行操作。 在 zkpk 的用户主目录下, 创建数据目录, 命令如下:
[zkpk@master ~]$ mkdir /home/cxm/hadoopdata
启动 Hadoop 集群
格式化文件系统
格式化命令如下, 该操作需要在 HadoopMaster 节点上执行:
[zkpk@master ~]$ hdfs namenode -format
启动 Hadoop
使用 start-all.sh 启动 Hadoop 集群, 首先进入 Hadoop 安装主目录, 然后执行启动命令:
[zkpk@master ~]$ cd ~/hadoop-2.5.2
[zkpk@master hadoop-2.5.2]$ sbin/start-all.sh
执行命令后, 提示出入 yes/no 时, 输入 yes。
查看进程是否启动
在 HadoopMaster 的终端执行 jps 命令, 在打印结果中会看到 4 个进程, 分别是 ResourceManager、 Jps、 NameNode 和 SecondaryNameNode, 如下图所示。 如果出现了这 4 个进程表示主节点进程启动成功。
在 HadoopSlave 的终端执行 jps 命令, 在打印结果中会看到 3 个进程, 分别是 NodeManager、 DataNode 和 Jps, 如下图所示。 如果出现了这 3 个进程表示从节点进程启动成功。
Web UI 查看集群是否成功启动
在 HadoopMaster 上启动 Firefox 浏览器, 在浏览器地址栏中输入输入 http://master:50070/, 检 查 namenode 和 datanode 是否正常。 UI 页面如下图所示。
在 HadoopMaster 上启动 Firefox 浏览器, 在浏览器地址栏中输入输入 http://master:18088/, 检 查 Yarn 是否正常, 页面如下图所示。
运行 PI 实例检查集群是否成功
进入 Hadoop 安装主目录, 执行下面的命令:
[zkpk@master ~]$ cd ~/hadoop-2.7.7/share/hadoop/mapreduce/
[zkpk@master mapreduce]$ hadoop jar ~/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 10 10
最后输出: Estimated value of Pi is 3.20000000000000000000
如果以上的 3 个验证步骤都没有问题, 说明集群正常启动。