1、登录大数据实验平台
进入实验,(界面显示为master、slave01、slave02),如图6-1所示。
图 1实验环境界面
2、确保各台虚拟机能ping通外网
(图2-1界面中master、slave01、slave02,分别对应一个虚拟机,随后简称为“界面各虚拟机”)。
2.2.1 在桌面空白处右击鼠标
打开一个终端(图2-2根据centos7所使用的图形桌面系统不同会稍有区别,一般使用gnome或xfce)。
图 2-2桌面右击鼠标界面
2.2.2 ping网络
分别在master、slave01和slave02虚拟机上ping一个外网网址,确保能够ping通,“ctrl+c”组合键结束ping命令的执行(大数据实验室提供的虚拟机默认已可ping通外网)。
图 2-3master虚拟机ping通界面
图 2-4 slave01虚拟机ping通界面
图 2-5 slave02虚拟机ping通界面
2.3配置主机名
(“界面各虚拟机”分别操作此步骤,主机名分别设置为master, slave01,
slave02)。
说明:此处以界面虚拟机master的操作为例(默认已经配置好主机名称),slave01和slave02的操作如法炮制。
2.3.1以下操作需要root用户权限,所以先切换成root用户,密码:zkpk。
[zkpk@localhost ~]$ su root
图 2-6切换到root用户
2.3.2使用vi命令编辑主机名(或使用gedit)。
2.3.2.1编辑主机名文件
[root@localhost zkpk]# vi /etc/hostname
2.3.2.2将hostname文件中原来内容替换为master,如果已经是master,可以直接按冒号“:“键,再输入“wq”保存退出。
2.3.2.3临时设置主机名为master。
[root@localhost zkpk]# hostname master
2.3.2.4检测主机名是否修改成功,使用bash命令让上一步操作生效。
[root@localhost zkpk]# bash
图 6-7主机名修改成功界面
6.4配置时钟同步(使用root用户权限,“界面各虚拟机”分别操作此步骤;若已配置过,请忽略此步骤)
说明:此处以界面虚拟机master的操作为例,slave01和slave02的操作如法炮制。
6.4.1配置自动时钟同步
6.4.1.1使用Linux命令配置。
[root@master zkpk]# crontab -e
6.4.1.2按“i“键,进入插入模式;输入下面的内容(注意:星号之间和前后都有空格)。
0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
6.4.1.3按“Esc”键退出插入模式,然后按“:”键,输入“wq”保存退出。
6.4.2手动同步时间,直接在终端下运行下面的命令。
[root@master zkpk]# /usr/sbin/ntpdate cn.pool.ntp.org
图6-8手动同步时间界面
6.5关闭防火墙(使用root用户权限;“界面各虚拟机”分别操作此步骤;若已配置过,请忽略此步骤)
说明:此处以界面虚拟机master的操作为例,slave01和slave02的操作如法炮制。
6.5.1查看防火墙状态(默认已经关闭防火墙)
[root@master zkpk]# systemctl status firewalld.service
图 6-9查看防火墙状态界面
6.5.2在终端中执行下面命令(说明:两条命令分别是临时关闭防火墙和禁止开机启动防火墙)。
[root@master zkpk]# systemctl stop firewalld.service
[root@master zkpk]# systemctl disable firewalld.service
6.6配置hosts列表(使用root权限;“界面各虚拟机”分别操作此步骤;默认已经配置)
说明:此处以界面虚拟机master的操作为例,slave01和slave02的操作如法炮制。
6.6.1运行ifconfig命令,获得当前master虚拟机的ip地址,如图6-10所示是master的ip地址。(用相同方法获得当前slave01和slave02虚拟机的ip地址。)
图 6-10获得master虚拟机的ip地址
6.6.2编辑主机名列表文件hosts。
[root@master zkpk]# vi /etc/hosts
6.6.3将下面三行添加到/etc/hosts文件中,保存退出。
说明:
这里master虚拟机对应IP地址是10.42.0.93,slave01对应的IP是10.42.0.94,slave02对应的IP是10.42.0.95。而自己在做配置时,需要将IP地址改成自己的实验环境中的master、slave01和slave02虚拟机对应的IP地址。
10.42.0.93 master
10.42.0.94 slave01
10.42.0.95 slave02
6.6.4分别Ping master、slave01和slave02主机名。
[root@master ~]# ping master -c 3
[root@master ~]# ping slave01 -c 3
[root@master ~]# ping slave02 -c 3
说明:参数-c 3表示只返回三行响应就中止。
6.6.5如果出现图6-11所示的信息表示配置主机名列表文件成功。(此处只显示了master虚拟机Ping
slave01虚拟机的界面)
图 6-11 master虚拟机Ping slave01虚拟机成功
6.7免密钥登录配置(使用zkpk用户权限)。
6.7.1master虚拟机上。
6.7.1.1先从root用户,退回到普通用户zkpk(注意命令行提示符的变化)。
[root@master zkpk]# su zkpk
6.7.1.2在终端生成密钥,命令如下(一路按回车完成密钥生成)
[zkpk@master ~]$ ssh-keygen -t rsa
图 6-12 master虚拟机上密钥生成界面
6.7.1.3生成的密钥在用户根目录中的.ssh子目录中,进入.ssh目录查看,如图6-13所示操作。
图 6-13查看生成的密钥
6.7.1.4执行以下命令复制公钥文件。
[zkpk@master .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
6.7.1.5执行“ls -l”命令后会看到图6-14所示的文件列表,说明复制公钥文件成功。
图 6-14复制公钥文件成功
6.7.1.6修改authorized_keys文件的权限,命令如下。
[zkpk@master .ssh]$ chmod 600 ~/.ssh/authorized_keys
6.7.1.7将专用密钥添加到 ssh-agent 的高速缓存中,命令如下。
[zkpk@master .ssh]$ ssh-add ~/.ssh/id_rsa
6.7.1.8将authorized_keys文件复制到slave01、slave02虚拟机的zkpk用户的根目录,命令如下。
说明:如果提示输入yes/no的时候,输入yes,回车。密码是:zkpk
[zkpk@master .ssh]$ scp ~/.ssh/authorized_keys zkpk@slave01:~/
[zkpk@master .ssh]$ scp ~/.ssh/authorized_keys zkpk@slave02:~/
图 6-15复制authorized_keys文件到slave01、slave02虚拟机
6.7.2 slave01虚拟机上。
6.7.2.1先从root用户,退回到普通用户zkpk(注意命令行提示符的变化)。
[root@slave01 zkpk]# su zkpk
图 6-16切换到zkpk用户
然后生成密钥,命令如下(一路点击回车生成密钥)。
[zkpk@slave01 ~]$ ssh-keygen -t rsa
图 6-17 slave01虚拟机上密钥生成界面
6.7.2.2将authorized_keys文件移动到.ssh目录,命令如下。
[zkpk@slave01 ~]$ mv authorized_keys ~/.ssh/
6.7.3 slave02虚拟机上。
6.7.3.1先从root用户,退回到普通用户zkpk, (注意命令行提示符的变化)。
[root@slave02 zkpk]# su zkpk
生成密钥,命令如下(一路点击回车生成密钥)。
[zkpk@slave02 ~]$ ssh-keygen -t rsa
6.7.3.2将authorized_keys文件移动到.ssh目录,命令如下。
[zkpk@slave02 ~]$ mv authorized_keys ~/.ssh/
6.7.4验证免密钥登录。
6.7.4.1在master虚拟机上远程登录slave01,命令如下。
[zkpk@master ~]$ ssh slave01
6.7.4.2如果出现图6-18所示的内容表示免密钥配置成功。
图 6-18 master虚拟机上远程登录slave01
6.7.4.3退出slave01远程登录,命令如下。
[zkpk@slave01 ~]$ exit
图 6-19 master虚拟机上退出slave01远程登录
6.7.4.4在master机器上远程登录slave02,命令如下。
[zkpk@master ~]$ ssh slave02
6.7.4.5如果出现图6-20所示的内容表示免密钥配置成功。
图 6-20 master虚拟机上远程登录slave02
6.7.4.6退出slave02远程登录,命令如下。
[zkpk@slave02 ~]$ exit
6.8安装JDK(注意:在“界面各虚拟机”master、slave01和slave02分别操作此步骤。)
6.8.1删除系统自带的jdk(如若出现如图6-21效果,说明系统自带java,需要先卸载)
6.8.1.1查看系统自带jdk
在master虚拟机上执行:
[zkpk@master ~]$ rpm -qa | grep java
图 6-21在master虚拟机查看系统自带jdk
在slave01虚拟机上执行:
[zkpk@slave01 ~]$ rpm -qa | grep java
图 6-22在slave01虚拟机查看系统自带jdk
在slave02虚拟机上执行:
[zkpk@slave02 ~]$ rpm -qa | grep java
图 6-23在slave02虚拟机查看系统自带jdk
6.8.1.2切换为root用户,密码:zkpk
在master虚拟机上执行:
[zkpk@master ~]$ su root
在slave01虚拟机上执行:
[zkpk@slave01 ~]$ su root
在slave02虚拟机上执行:
[zkpk@slave03 ~]$ su root
6.8.1.3移除系统自带的jdk
在master虚拟机上执行:
[root@master zkpk]# yum remove java-1.*
图 6-24在master虚拟机上移除系统自带的jdk
在slave01虚拟机上执行:
[root@slave01 zkpk]# yum remove java-1.*
图 6-25在slave01虚拟机上移除系统自带的jdk
在slave02虚拟机上执行:
[root@slave02 zkpk]# yum remove java-1.*
图 6-26在slave02虚拟机上移除系统自带的jdk
6.8.1.4创建存放jdk文件目录
在master虚拟机上执行:
[root@master zkpk]# mkdir /usr/java
在slave01虚拟机上执行:
[root@slave01 zkpk] # mkdir /usr/java
在slave02虚拟机上执行:
[root@slave02 zkpk] # mkdir /usr/java
6.8.2 解压JDK压缩包
6.8.2.1将/home/zkpk/tgz下的JDK压缩包解压到/usr/java目录下
在master虚拟机上执行:
[root@master zkpk]# tar -xzvf /home/zkpk/tgz/jdk-8u131-linux-x64.tar.gz -C /usr/java
图 6-27在master虚拟机上解压JDK压缩包
在slave01虚拟机上执行:
[root@slave01 zkpk]# tar -xzvf /home/zkpk/tgz/jdk-8u131-linux-x64.tar.gz -C /usr/java
图 6-28在slave01虚拟机上解压JDK压缩包
在slave02上执行:
[root@slave02 zkpk]# tar -xzvf /home/zkpk/tgz/jdk-8u131-linux-x64.tar.gz -C /usr/java
图 6-29在slave02虚拟机上解压JDK压缩包
6.8.2.2退出root用户。
在master虚拟机上执行:
[root@master zkpk]# exit
图 6-30在master虚拟机上退出root用户
在slave01虚拟机上执行:
[root@slave01 zkpk]# exit
图 6-31在slave01虚拟机上退出root用户
在slave02虚拟机上执行:
[root@slave02 zkpk]# exit
图 6-32在slave02虚拟机上退出root用户
6.8.3配置zkpk用户环境变量。
在master虚拟机上执行:
使用vi命令修改“.bash_profile”。
[zkpk@master ~]$ vi /home/zkpk/.bash_profile
复制以下内容添加到上面打开的文件.bash_profile中,然后保存退出。(如果已经有这样的内容,直接退出。)
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export PATH=$JAVA_HOME/bin:$PATH
图 6-33在master虚拟机上配置zkpk用户环境变量
在slave01虚拟机上执行:
使用vi命令修改“.bash_profile”。
[zkpk@slave01 ~]$ vi /home/zkpk/.bash_profile
复制以下内容添加到上面打开的文件.bash_profile中,然后保存退出。(如果已经有这样的内容,直接退出。)
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export PATH=$JAVA_HOME/bin:$PATH
在slave02虚拟机上执行:
使用vi命令修改“.bash_profile”。
[zkpk@slave02 ~]$ gedit /home/zkpk/.bash_profile
复制以下内容添加到上面打开的文件.bash_profile中,然后保存退出。(如果已经有这样的内容,直接退出。)
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export PATH=$JAVA_HOME/bin:$PATH
6.8.4使环境变量生效。
在master虚拟机上执行:
[zkpk@master ~]$ source /home/zkpk/.bash_profile
在slave01虚拟机上执行:
[zkpk@slave01 ~]$ source /home/zkpk/.bash_profile
在slave02虚拟机上执行:
[zkpk@slave02 ~]$ source /home/zkpk/.bash_profile
6.8.5查看java是否配置成功。
在master虚拟机上执行:
[zkpk@master ~]$ java -version
图 6-34在master虚拟机上查看java是否配置成功
在slave01虚拟机上执行:
[zkpk@slave01 ~]$ java -version
在slave02虚拟机上执行:
[zkpk@slave02 ~]$ java -version
6.9安装部署Hadoop集群(zkpk用户)
注意:每个虚拟机上的Hadoop配置基本相同,在master虚拟机上操作,然后复制到slave01、slave02两个虚拟机即可。
6.9.1将/home/zkpk/tgz/hadoop目录下的Hadoop压缩包解压到/home/zkpk目录下
[zkpk@master ~]$ tar -xzvf /home/zkpk/tgz/hadoop-2.7.3.tar.gz -C /home/zkpk
图 6-35在master虚拟机上解压Hadoop压缩包
6.9.2配置hadoop-env.sh文件。
6.9.2.1使用vi命令修改hadoop-env.sh文件。
[zkpk@master ~]$ vi /home/zkpk/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
6.9.2.2复制以下内容添加到上面打开的文件hadoop-env.sh中,然后保存退出。(如果已经有这样的内容,直接退出。)
export JAVA_HOME=/usr/java/jdk1.8.0_131/
图 6-36在master虚拟机上配置hadoop-env.sh文件
6.9.3配置yarn-env.sh文件。
6.9.3.1使用vi命令修改yarn-env.sh文件。
[zkpk@master ~]$ vi ~/hadoop-2.7.3/etc/hadoop/yarn-env.sh
6.9.3.2复制以下内容添加到上面打开的文件yarn-env.sh中,然后保存退出。(如果已经有这样的内容,直接退出。)
export JAVA_HOME=/usr/java/jdk1.8.0_131/
图 6-37在master虚拟机上配置yarn-env.sh文件
6.9.4配置core-site.xml 文件。
6.9.4.1使用vi命令修改core-site.xml文件。
[zkpk@master ~]$ vi ~/hadoop-2.7.3/etc/hadoop/core-site.xml
6.9.4.2复制以下内容替换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/zkpk/hadoopdata</value>
</property>
</configuration>
图 6-38在master虚拟机上配置core-site.xml文件
6.9.5配置hdfs-site.xml文件。
6.9.5.1使用vi命令修改hdfs-site.xml文件。
[zkpk@master ~]$ vi ~/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
6.9.5.2复制以下内容替换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>2</value>
</property>
</configuration>
图 6-39在master虚拟机上配置hdfs-site.xml文件
6.9.6配置yarn-site.xml文件。
6.9.6.1使用vi命令修改yarn-site.xml文件。
[zkpk@master ~]$ vi ~/hadoop-2.7.3/etc/hadoop/yarn-site.xml
6.9.6.2复制以下内容替换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>
图 6-40在master虚拟机上配置yarn-site.xml文件
6.9.7配置mapred-site.xml文件。
6.9.7.1复制mapred-site-template.xml文件。
[zkpk@master ~]$ cp ~/hadoop-2.7.3/etc/hadoop/mapred-site.xml.template ~/hadoop-2.7.3/etc/hadoop/mapred-site.xml
6.9.7.2使用vi命令编辑mapred-site.xml文件。
[zkpk@master ~]$ gedit ~/hadoop-2.7.3/etc/hadoop/mapred-site.xml
6.9.7.3复制以下内容替换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>
图 6-41在master虚拟机上配置mapred-site.xml文件
6.9.8配置slaves文件。
6.9.8.1使用vi命令编辑slaves文件。
[zkpk@master ~]$ vi ~/hadoop-2.7.3/etc/hadoop/slaves
6.9.8.2复制以下内容替换slaves中的内容,然后保存退出。(如果已经有这样的内容,直接退出。)
slave01
slave02
图 6-42在master虚拟机上配置slaves文件
6.9.9创建Hadoop数据目录。
[zkpk@master ~]$ mkdir hadoopdata
6.9.10将配置好的hadoop文件夹复制到从节点。
6.9.10.1使用scp命令将文件夹复制到slave01、slave02上。
注意:因为之前已经配置了免密钥登录,这里可以直接免密钥远程复制。
[zkpk@master ~]$ scp -r hadoop-2.7.3 zkpk@slave01:~/
[zkpk@master ~]$ scp -r hadoop-2.7.3 zkpk@slave02:~/
复制完成后,可以在slave01和slave02上检验是否复制成功。(此处以slave02虚拟机为例。)
[zkpk@slave02 ~]$ ll
图 6-43在slave02虚拟机上检验是否复制成功
6.10配置Hadoop环境变量(使用zkpk用户权限;“界面各虚拟机”分别操作此步骤;若已配置过,请忽略此步骤)
说明:此处以界面虚拟机master的操作为例,slave01和slave02的操作如法炮制。
6.10.1使用vi命令编辑.bash_profile文件。
[zkpk@master ~]$ vi ~/.bash_profile
6.10.2复制以下内容添加到.bash_profile末尾,然后保存退出。(如果已经有这样的内容,直接退出。)
#HADOOP
export HADOOP_HOME=/home/zkpk/hadoop-2.7.3
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
图 6-44在master虚拟机上配置.bash_profile文件
6.10.3使环境变量生效。
[zkpk@master ~]$ source ~/.bash_profile
6.11格式化Hadoop文件目录
注意:此操作在master虚拟机上执行。
格式化命令如下。
[zkpk@master ~]$ hdfs namenode –format
图6-45 格式化master虚拟机(1)
图 6-46格式化master虚拟机(2)
6.12启动Hadoop集群。
6.12.1在
master虚拟机上运行start-all.sh命令。(格式化后首次执行此命令,提示输入yes/no时,输入yes。)
[zkpk@master ~]$ start-all.sh
6.12.2查看进程是否启动。
6.12.2.1在master虚拟机上的终端执行jps命令,出现图6-47效果。
注意:前面那些数字是进程号,可能因为自己的实验环境不同而不同。
图 6-47 master虚拟机成功启动
6.12.2.2在slave01虚拟机上的终端执行jps命令,出现如图 6-48效果。
图 6-48 slave01虚拟机成功启动
6.12.2.3在slave02虚拟机上的终端执行jps命令,出现如图 6-49效果。
图 6-49slave02虚拟机成功启动
6.12.3Web UI查看集群是否成功启动。
6.12.3.1在窗口左上部的Applications菜单中打开Firefox浏览器,在浏览器地址栏中输入,检查namenode
和 datanode 是否正常,如图6-50、6-51、6-52所示。
图 6-50在Applications菜单中打开Firefox浏览器
图6-51查看集群namenode 和 datanode情况(1)
图 6-52查看集群namenode 和 datanode情况(2)
6.12.3.2打开Firefox浏览器新标签页,地址栏中输入,检查Yarn是否正常,如图6-53、6-54所示。
图 6-53查看集群Yarn情况(1)
图 6-54查看集群Yarn情况(2)
6.12.4运行PI实例检查集群是否成功。
6.12.4.1执行下面的命令。(Pi后面的第一个参数10是Map任务的数量,第二个10是求圆周率Pi的算法的参数。)
[zkpk@master~]$ hadoop jar ~/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 10 10
6.12.4.2会看到如下的执行结果。
图 6-55运行PI实例(1)
图 6-56运行PI实例(2)
图 6-57运行PI实例(3)
6.12.4.3最后输出:Estimated value of Pi is
3.20000000000000000000,这个值还不够精确,可以通过调整那两个参数逐渐逼近3.1415926……。
说明:如果通过WebUI界面能看见正常的namenode和datanode以及YARN启动,然后运行PI程序能够得到上述图所示结果,说明集群正常启动。