1.准备3台客户机(关闭防火墙、静态ip、主机名称)(克隆三台虚拟机时候:不要连续克隆)

1.修改克隆后虚拟机的ip

[root@hadoop100 /]#vim /etc/udev/rules.d/70-persistent-net.rules

进入如下页面,删除eth0该行;将eth1修改为eth0,同时复制物理ip地址,如图1-119所示

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_大数据

图1-119 修改网卡

2.修改IP地址

[root@hadoop100 /]#vim /etc/sysconfig/network-scripts/ifcfg-eth0

(1)把复制的物理ip地址更新

HWADDR=00:0C:2x:6x:0x:xx   #MAC地址

(2)修改成你想要的ip

IPADDR=192.168.1.105      #IP地址//自定义

3.修改子机名称

1. 修改linux的主机映射文件(hosts文件)

(1)进入Linux系统查看本机的主机名。通过hostname命令查看

[root@hadoop100 桌面]# hostname
hadoop5

(2)如果感觉此主机名不合适,我们可以进行修改。通过编辑/etc/sysconfig/network文件

[root@hadoop100 桌面]# vi /etc/sysconfig/network

文件中内容

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME= hadoop5//100为自定义

注意:主机名称不要有“_”下划线

(3)打开此文件后,可以看到主机名。修改此主机名为我们想要修改的主机名hadoop5。

(4)保存退出。

4.域名解析:

打开/etc/hosts(hosts文件作用:自定义网址和IP地址的域名解析文件)

[root@hadoop100 桌面]# vim /etc/hosts

添加如下内容//100-108为自定义,1为自定义网段

192.168.1.100 hadoop
192.168.1.101 hadoop1
192.168.1.102 hadoop2
192.168.1.103 hadoop3
192.168.1.104 hadoop4
192.168.1.105 hadoop5
192.168.1.106 hadoop6
192.168.1.107 hadoop7
192.168.1.108 hadoop8

5.关闭防火墙,禁止开机自启动

service iptables stop
  chkconfig iptables off

查看防火墙情况

service iptables status

§接下来想在Xshell上操作,要重启虚拟机

检查:

 

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_sql_02

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_分布式_03

 

 

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_sql_04

6.在/opt目录下创建文件夹en、software文件夹

mkdir en
 mkdir software

2三台虚拟机:安装JDK并配置环境变量

1. 卸载现有JDK

(1)查询是否安装Java软件:

rpm -qa | grep java

(2)如果安装的版本低于1.7,卸载该JDK

sudo rpm -e 软件包

(3)查看JDK安装路径:

which java

2. 用Xshell工具将JDK导入到opt目录下面的software文件夹下面

3.在Linux系统下的opt目录中查看软件包是否导入成功

@hadoop5 opt]$ cd software/
@hadoop5 software]$ ls
hadoop-2.7.2.tar.gz  jdk-8u144-linux-x64.tar.gz

4.解压JDK到/opt/module目录下

@hadoop5 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/en/

5. 配置JDK环境变量

(1)先获取JDK路径

@hadoop5 jdk1.8.0_144]$ pwd
/opt/en/jdk1.8.0_144

(2)打开/etc/profile文件

@hadoop5 software]$ sudo vi /etc/profile

在profile文件末尾添加JDK路径

#JAVA_HOME
export JAVA_HOME=/opt/en/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin

(3)保存后退出

:wq

(4)让修改后的文件生效

@hadoop5 jdk1.8.0_144]$ source /etc/profile

6. 测试JDK是否安装成功

@hadoop5 jdk1.8.0_144]# java -version
java version "1.8.0_144"

 

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_分布式_05

  注意:重启(如果java -version可以用就不用重启)

@hadoop5 jdk1.8.0_144]$ sync
@hadoop5 jdk1.8.0_144]$ sudo reboot

3.三台虚拟机:安装Hadoop并配置环境变量

  1. Xshell工具将hadoop-2.7.2.tar.gz导入到opt目录下面的software文件夹下面
  2. 进入到Hadoop安装包路径下
@hadoop5 ~]$ cd /opt/software/
  1. 解压安装文件到/opt/en下面
@hadoop5 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/en/
  1. 查看是否解压成功
@hadoop5 software]$ ls /opt/en/
hadoop-2.7.2
  1. 将Hadoop添加到环境变量

(1)获取Hadoop安装路径

@hadoop5 hadoop-2.7.2]$ pwd
/opt/en/hadoop-2.7.2

(2)打开/etc/profile文件

@hadoop5 hadoop-2.7.2]$ sudo vi /etc/profile

在profile文件末尾添加JDK路径:

#HADOOP_HOME
export HADOOP_HOME=/opt/en/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

(3)保存后退出

:wq

(4)让修改后的文件生效

@ hadoop5 hadoop-2.7.2]$ source /etc/profile
  1. 测试是否安装成功
@hadoop5 hadoop-2.7.2]$ hadoop version
Hadoop 2.7.2

 

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_kvm 虚拟机 修改IP后和宿主机不通_06

 

  1. 重启(如果Hadoop命令不能用再重启)
@ hadoop5 hadoop-2.7.2]$ sync
@ hadoop5 hadoop-2.7.2]$ sudo reboot

7.连接xshell,确定三者pingtong

  1. 以上三台都做(一台做一次)
  2. 集群配置

1. 集群部署规划

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_大数据_07

 

2. hadoop5上配置集群

(1)核心配置文件

配置core-site.xml

[root@hadoop5 hadoop]$ vi core-site.xml

在该文件中编写如下配置

<!-- 指定HDFS中NameNode的地址(第一台主机名) -->
<property>
<name>fs.defaultFS</name>
hadoop5:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/en/hadoop-2.7.2/data/tmp</value>
</property>

(2)HDFS配置文件

配置hadoop-env.sh

[root@hadoop5 hadoop]$ vi hadoop-env.sh

添加:

export JAVA_HOME=/opt/en/jdk1.8.0_144

配置hdfs-site.xml

[root@hadoop5hadoop]$ vi hdfs-site.xml

在该文件中编写如下配置

<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置(第二台主机名) -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop6:50090</value>
</property>

(3)YARN配置文件

配置yarn-env.sh

[root@hadoop5 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/en/jdk1.8.0_144

配置yarn-site.xml

[root@hadoop5 hadoop]$ vi yarn-site.xml

在该文件中增加如下配置

<!-- Reducer获取数据的方式
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址(第三台主机名) -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop7</value>
</property>

(4)MapReduce配置文件

配置mapred-env.sh

[root@hadoop5 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/en/jdk1.8.0_144

配置mapred-site.xml

[root@hadoop5 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[root@hadoop5 hadoop]$ vi mapred-site.xml

在该文件中增加如下配置

<!-- 指定MR运行在Yarn上
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
  1. Hadoop6和hadoop7另外两台的同步集群配置

5.1同步脚本

xsync集群分发脚本(循环复制文件到所有节点的相同目录下)

(a)在/root目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:

[root@hadoop5 ~]$ mkdir bin
[root@hadoop5 ~]$ cd bin/

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_kvm 虚拟机 修改IP后和宿主机不通_08

[root@hadoop5 bin]$ touch xsync
 
[root@hadoop5 bin]$ vi xsync

在该文件中编写如下代码

#!/bin/bash

#1 获取输入参数个数,如果没有参数,直接退出

pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称

p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径

pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称

user=`whoami`

#5 循环

for((host=6; host<8; host++)); do
        echo ------------------- hadoop$host --------------
hadoop$host:$pdir
done

(b)修改脚本 xsync 具有执行权限

[root@hadoop5 bin]$ chmod 777 xsync

5.2同步过程

1.在集群上分发配置好的Hadoop配置文件

[root@hadoop5 hadoop]$ xsync /opt/en/hadoop-2.7.2/

2.查看文件分发情况

[root@hadoop6
[root@hadoop7

5.3:不用脚本就用命令:

Rsync(空格)-av (空格)要传的本机文件的绝对路径(空格)本地主机的用户名@对面主机名:传在对方主机的绝对路径

7集群单点启动

(1)如果集群是第一次启动,需要格式化NameNode

[root@hadoop5 hadoop-2.7.2]$ hdfs namenode -format

(2)在hadoop5上启动NameNode

[root@hadoop5 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[root@hadoop5 hadoop-2.7.2]$ jps
3461 NameNode

(3)在hadoop5、hadoop6以及hadoop7上分别启动DataNode

[root@hadoop5hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[root@hadoop5 hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[root@hadoop6 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[root@hadoop6 hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[root@hadoop7 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[root@hadoop7 hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode

8.SSH无密登录配置

1. 配置ssh

(1)基本语法

ssh另一台电脑的ip地址

(2)ssh连接时出现Host key verification failed的解决方法

[root@hadoop102 opt] $ ssh 192.168.1.107
The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)? 
Host key verification failed.

(3)解决方案如下

(4)配置免密

A:生成公钥和私钥:(cd ~/.ssh/)

[root@hadoop5 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

B:将公钥拷贝到要免密登录的目标机器上

[root@hadoop5 .ssh]$ ssh-copy-id hadoop5
[root@hadoop5 .ssh]$ ssh-copy-id hadoop6
[root@hadoop5 .ssh]$ ssh-copy-id hadoop7

测试:ssh另一台电脑的ip地址

C:hadoop6和hadoop7一样

9 群起集群并测试集群

1. 配置slaves

目录:/opt/en/hadoop-2.7.2/etc/hadoop/slaves

[root@hadoop5 hadoop]$ vi slaves

在该文件中增加如下内容:

hadoop5
hadoop6
hadoop7

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

同步所有节点配置文件

[root@hadoop5 hadoop]$ xsync slaves

2. 群启动集群

(1)如果集群是第一次启动,需要格式化NameNode

[root@hadoop5 hadoop-2.7.2]$ bin/hdfs namenode -format

(2)群启动HDFS

[root@hadoop5 hadoop-2.7.2]$ sbin/start-dfs.sh
[root@hadoop5 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[root@hadoop6 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
[root@hadoop7 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

(3)群启动YARN

[root@hadoop7 hadoop-2.7.2]$ sbin/start-yarn.sh

 

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_kvm 虚拟机 修改IP后和宿主机不通_09

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_sql_10

 

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_分布式_11

 

(4)Web端查看SecondaryNameNode

(a)浏览器中输入:http://hadoop104:50090/status.html

(b)查看SecondaryNameNode信息,如图2-41所示。

 

kvm 虚拟机 修改IP后和宿主机不通 更改虚拟机ip地址命令_sql_12

图2-41 SecondaryNameNode的Web端

3. 集群基本测试

(1)上传文件到集群

  上传小文件

[root@hadoop5 hadoop-2.7.2]$ hdfs dfs -mkdir -p /user/root/input
[root@hadoop102 hadoop-2.7.2]$ hdfs dfs -put wcinput/wc.input /user/root/input

  上传大文件

[root@hadoop5 hadoop-2.7.2]$ bin/hadoop fs -put
 /opt/software/hadoop-2.7.2.tar.gz  /user/root/input

(2)上传文件后查看文件存放在什么位置

(a)查看HDFS文件存储路径

[root@hadoop5 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

(b)查看HDFS在磁盘存储文件内容

[root@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce

(3)拼接

-rw-rw-r--. 1 root root 134217728 5月  23 16:01 blk_1073741836
-rw-rw-r--. 1 root root   1048583 5月  23 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 root root  63439959 5月  23 16:01 blk_1073741837
-rw-rw-r--. 1 atguigu atguigu    495635 5月  23 16:01 blk_1073741837_1013.meta
[root@hadoop5 subdir0]$ cat blk_1073741836>>tmp.file
[root@hadoop5 subdir0]$ cat blk_1073741837>>tmp.file
[root@hadoop102 subdir0]$ tar -zxvf tmp.file

(4)下载

[root@hadoop5 hadoop-2.7.2]$ bin/hadoop fs -get
 /user/root/input/hadoop-2.7.2.tar.gz ./

10错误:Datanode没起来,报错RemoteException(org.apache.hadoop.hdfs.protocol.UnregisteredNodeException)的解决方案

进入:

/opt/en/hadoop-2.7.2/data/tmp/dfs/data

删除current/

重启即可