虚拟机环境准备(克隆多台虚拟机)
1.更改子网
网络连接方式
虚拟机的子网ip是用来动态分配的,如192.168.1.0 动态分配的就都是192.168.1.x 网段下的
网关要和ip在同一网段下,(虚拟机和vmnet8虚拟网卡要在同一网段下),物理机的ip和网卡可以在不同网段下,物理机ping虚拟机要先通过vmnet8,由vmnet8与虚拟机通信
每台虚拟机网段都在192.168.1.x中
右键点击虚拟机,选择克隆
2.选择网卡
vi /etc/udev/rules.d/70-persistent-net.rules
删除eth0,把eth1改为eth0
3.修改网卡ip
vim /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR是上一步address的,如下
4.修改主机名
/etc/sysconfig/network
5.修改物理机和虚拟机的hosts映射
192.168.1.3 hadoop003
192.168.1.4 hadoop004
192.168.1.5 hadoop005
192.168.1.6 hadoop006
192.168.1.7 hadoop007
vim /etc/hosts
虚拟机
C:\Windows\System32\drivers\etc
物理机
6.关闭防火墙,关闭开机自启
chkconfig iptables off
7.重启
reboot
8.克隆完成
虚拟机和物理机互相ping
集群搭建
在各个机器上使用root用户在/opt目录下创建software(用于存放安装之前的压缩包)、module(用于存放解压后的程序)文件夹
7.安装jdk
解压
[root@hadoop003 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
配置path环境变量
[root@hadoop003 software]$ vi /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
使修改生效
source /etc/profile
测试jdk是否安装成功
[root@hadoop003 jdk1.8.0_144]# java -version
8.安装hadoop
解压
[root@hadoop003 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
配置path环境变量
[root@ hadoop003 hadoop-2.7.2]$ vi /etc/profile
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
使修改生效
source /etc/profile
测试hadoop是否安装成功
[root @hadoop003 ~]$ hadoop version
9.配置集群
四大块:
①hdfs
②yarn
③mapreduce
④从节点
配置方法
一,可以操作虚拟机挨个修改
二,可以在物理机通过notpad++修改,要去掉中文注释,会有乱码产生
物理机和虚拟机建立连接,双击下载到本地修改,ctrl+s保存自动上传到虚拟机
hdfs配置
配置Hadoop所使用Java的环境变量,告知hadoop我们jdk的安装目录/opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
因为hdfs要启动namenode、datanode等进程,会产生pid,hadoop要把pid记录在某个位置,默认是放在/tmp下。这里修改pid文件存放位置:
/opt/module/hadoop-2.7.2/sbin/hadoop-daemon.sh
添加
export HADOOP_PID_DIR=/opt/module/hadoop-2.7.2/pid
核心配置文件:/opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml(hdfs的核心配置文件)
<!-- 指定HDFS中NameNode的地址,我们要在hadoop003上启动namenode进程 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop003:9000</value>
</property>
<!-- datanode是个进程,我们把数据交给它后,它会把数据存储到本地磁盘,这里指定存储到磁盘的位置-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
hdfs配置文件 /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
<!--副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--secondarynamenode辅助namenode工作,指定要在hadoop005上启动该进程-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop005:50090</value>
</property>
Yarn的配置
a) 修改/opt/module/hadoop-2.7.2/etc/hadoop/yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
Yarn的进程也会产生pid,修改pid文件存放位置:
/opt/module/hadoop-2.7.2/sbin/yarn-daemon.sh
添加
export YARN_PID_DIR=/opt/module/hadoop-2.7.2/pid
b) 修改/opt/module/hadoop-2.7.2/etc/hadoop/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>hadoop004</value>
</property>
mapreduce配置
a) 修改/opt/module/hadoop-2.7.2/etc/hadoop/mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
b) 修改/opt/module/hadoop-2.7.2/etc/hadoop/mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
从节点配置
要注意把该文件自带的localhost要删除。配置了3台机器,意味着可以在这3台机器上都可以启动datanode、nodemanager进程。
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
hadoop003
hadoop004
hadoop005
10.安全拷贝
①/opt/module
[root@hadoop003 /]$ scp -r /opt/module/* hadoop004:/opt/module
[root@hadoop003 /]$ scp -r /opt/module/* hadoop005:/opt/module
②/etc/profile
scp /etc/profile hadoop004:/etc
scp /etc/profile hadoop005:/etc
需要source重新加载文件才能让path配置生效
source /etc/profile
集群启动
如果集群是第一次启动,需要格式化NameNode(格式化只进行一次!!!)
在格式化时,要保证一切正常,不要出现错误、异常、或者提示让选择yes或者no,如果出现这些情况,把所有的配置检查一遍确认无误后,将hadoop安装目录下的data、pid、logs目录删除重新格式化。
[root@hadoop003 hadoop-2.7.2]$ hadoop namenode -format
整体启动,会挨个登陆到每台虚拟机上启动hdfs进程(ssh)
a) 整体启动/停止hdfs(在namenode节点启动)
sbin/start-dfs.sh
sbin/stop-dfs.sh
b) 整体启动/停止yarn (在resourcemanager节点启动)
sbin/start-yarn.sh
sbin/stop-yarn.sh
注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。如果不在一台机器上,则ResourceManger所在机器也需要配置到其他机器的ssh免密登录。
查看hdfs
Hdfs的5个进程启动完毕后,就可以查看了,hadoop给我们提供了一个web页面,供我们查看hdfs文件系统,访问地址:http://hadoop003:50070。注意该地址与namenode的通信地址不同,namenode的通信地址是hdfs://hadoop003:9000,
查看yarn
Yarn的web页面查看地址:http://hadoop004:8088/
SSH免密登陆
Ssh是一种协议, 用于不同主机之间的通信,我们可以使用ssh通信协议,在一台机器上去访问另外一台机器,例如 在hadoop003机器上执行ssh hadoop004,提示输入密码后就可以远程登录hadoop004了。
免密登陆原理
免密登陆流程:
在本台机器生成公钥和私钥,将公钥拷贝给要免密登陆的机器即可
操作
hadoop003,hadoop004都要生成秘钥分发到三台节点,为了nn,rm
要在.ssh目录下进行,在root的家目录下找到.ssh
默认是没有.ssh,需要先ssh hadoop004登录到一台节点上,才会生成
生成公钥和私钥
[root@hadoop003 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[root@hadoop003 .ssh]$ ssh-copy-id hadoop003
[root@hadoop003 .ssh]$ ssh-copy-id hadoop004
[root@hadoop003 .ssh]$ ssh-copy-id hadoop005
集群时间同步
时间同步的方式:在集群中找一台机器,作为时间服务器,集群中其他机器与这台机器定时的同步时间,比如,每隔十分钟,同步一次时间。
(1) 时间服务器配置(必须root用户)
修改ntp配置文件
[root@hadoop003 桌面]# vim /etc/ntp.conf
修改内容如下
i. 修改1(授权192.168.1.0网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
ii. 修改2(集群在局域网中,不使用其他的网络时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
iii. 添加3(当该节点丢失网络连接,依然可以作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
c) 修改/etc/sysconfig/ntpd 文件
[root@hadoop003 桌面]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
d) 重新启动ntpd
[root@hadoop003 桌面]# service ntpd status
ntpd 已停
[root@hadoop003 桌面]# service ntpd restart
正在启动 ntpd: [确定]
e) 开机自启:
[root@hadoop003 桌面]# chkconfig ntpd on
(2) 其他机器配置(必须root用户,同时注意,将其它机器的ntp服务停掉 service ntpd stop chkconfig ntpd off
)
一、 在其他机器配置10分钟与时间服务器同步一次
[root@hadoop004 hadoop-2.7.2]# crontab -e
编写脚本
*/10 * * * * /usr/sbin/ntpdate hadoop003
二、 修改任意机器时间
[root@hadoop004 root]# date -s "2017-9-11 11:11:11"
三、 十分钟后查看机器是否与时间服务器同步
[root@hadoop004 root]# date