完全分布式集群搭建¶
一、准备3台客户机(关闭防火墙、静态ip、主机名称)¶
克隆虚拟机(因为毕设,我的是弄了五台)¶
1、关闭需要被克隆的虚拟机¶
该虚拟机中已关闭防火墙、opt目录下创建好了module和software文件夹、创建新用户drift并设置root权限,如果未设置则先进行相应操作
opt目录下创建文件夹:
1)在/opt目录下创建module、software文件夹,第一次先删除rh
非root用户下,比如drift用户下,使用sudo rm -rf rh/
[drift@hadoop101 opt]$ sudo mkdir module
[drift@hadoop101 opt]$ sudo mkdir software
2)修改module、software文件夹的所有者
[drift@hadoop101 opt]$ sudo chown drift:drift module/ software/
[atguigu@hadoop101 opt]$ ll
总用量 8
drwxr-xr-x. 2 drift drift 4096 1月 17 14:37 module
drwxr-xr-x. 2 drift drift 4096 1月 17 14:38 software
永久关闭防火墙:
1)查看防火墙开机启动状态
[root@hadoop100桌面]#chkconfig iptables --list
2)设置开机时关闭防火墙
[root@hadoop100桌面]#chkconfig iptables off
创建新用户drift并设置root权限:
创建新用户
修改权限(设置drift用户具有root权限):vim /etc/sudoers
修改完毕,现在可以用drift帐号登录,然后用命令 su -,即可获得root权限进行操作。
2、找到克隆选项¶
3、欢迎界面¶
4、克隆虚拟机¶
5、选择“创建完整的虚拟机”¶
6、自定义“虚拟机名称”和“位置”¶
7、等待克隆完成¶
8、完成克隆,点击关闭即可¶
修改静态IP地址¶
9、修改克隆后的虚拟机ip¶
修改命令:vim /etc/udev/rules.d/70-persistent-net.rules
进入如下页面,删除eth0该行;将eth1修改为eth0,同时复制物理ip地址,修改网卡如下图
10、修改IP地址¶
修改命令:vim /etc/sysconfig/network-scripts/ifcfg-eth0
1)把上一步骤所复制的物理ip地址更改
HWADDR=00:0C:2x:6x:0x:xx
2)修改成自己的ip
IPADDR=192.168.164.101
修改主机名¶
11、修改主机名¶
修改命令:vim /etc/sysconfig/network
关闭防火墙¶
12、关闭防火墙¶
关闭命令:chkconfig iptables off
查看状态命令:service iptables status
13、重启服务器即可¶
重启命令:reboot
注意:集群多台虚拟机重复上述操作
本地和虚拟机互ping测试¶
本地ping虚拟机
虚拟机互ping
二、安装JDK&配置环境变量¶
注意:
第一次安装时通过sudo rm -rf *删除opt目录下的所有文件(其实是空的)
1、卸载现有JDK¶
1)查询是否安装Java软
[drift@hadoop101 opt]$ rpm -qa | grep java
2)如果安装的版本低于1.7,卸载该JD
[drift@hadoop101 opt]$ sudo rpm -e 软件包
3)查看JDK安装路径:
[drift@hadoop101 ~]$ which java
2、用SecureCRT工具将JDK导入到opt目录下面的software文件夹下面,如下图所示¶
3、“alt+p”进入sftp模式,如下图所示¶
4、选择jdk1.8拖入,如下图所示¶
5、拖入成功显示¶
6、在Linux系统下的opt目录中查看软件包是否导入成功¶
[drift@hadoop101 opt]$ cd software/
7、解压JDK到/opt/module目录下¶
[drift@hadoop101 software]$ tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
8、配置JDK环境变量¶
1)先获取JDK路径
[drift@hadoop101 jdk1.8.0_144]$ pwd
/opt/module/jdk1.8.0_144
2)打开/etc/profile文件
[drift@hadoop101 software]$ sudo vim /etc/profile
在profile文件末尾添加JDK路径
:wq
4)让修改后的文件生效
[drift@hadoop101 jdk1.8.0_144]$ source /etc/profile
9、测试JDK是否安装成功¶
[drift@hadoop101 jdk1.8.0_144]# java -version
java version "1.8.0_144"
注意:重启(如果java -version可以用就不用重启)
[drift@hadoop101 jdk1.8.0_144]$ sync
[drift@hadoop101 jdk1.8.0_144]$ sudo reboot
注意:
后续虚拟机通过scp命令复制JDK到每台机器中
复制文件:scp -r /opt/module/jdk1.8.0_144/ drift@hadoop102:/opt/module/
复制环境变量:sudo scp /etc/profile root@hadoop102:/etc/profile
使环境变量生效(每台机器都需要):source /etc/profile
编写集群分发脚本xsync
1、在/home/drift目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
2、在bin目录下创建xsync文件,并添加以下内容
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径 –P指向实际物理地址,防止软连接
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=102; host<106; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
3、修改脚本xsync具有执行权限
[drift@hadoop101 bin]$ chmod 777 xsync
4、调用脚本形式:xsync文件名称
[drift@hadoop101 bin]$ xsync /home/drift/bin/
注意:
如果将xsync放到/home/atguigu/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。
三、安装Hadoop&配置环境变量¶
集群部署:
注意:
如果是三台虚拟机,就只需要搭建hadoop101-hadoop103即可
1、以JDK同样方式复制Hadoop安装包到机器上¶
2、解压Hadoop到/opt/module¶
[drift@hadoop101 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
后续通过xsync脚本将hadoop分发到集群各个机器上
[drift@hadoop101 module]$ xsync /opt/module/hadoop-2.7.2/
四、配置集群¶
1、核心配置文件¶
配置core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
2、HDFS配置文件¶
配置hadoop-env.sh(替换)
配置hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
3、配置YARN¶
配置yarn-env.sh(解除注释修改)
配置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>hadoop102</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
4、MapReduce配置文件¶
配置mapred-env.sh
配置mapred-site.xml
[drift@hadoop102 hadoop]$ mv mapred-site.xml.template mapred-site.xml
[drift@hadoop102 hadoop]$ vim mapred-site.xml
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5、Hadoop配置文件分发¶
五、单点启动¶
1、如果集群是第一次启动,需要格式化NameNode¶
2、在hadoop101上启动NameNode¶
3、在hadoop102-105上分别启动DataNode¶
4、jps查看¶
5、测试¶
查看HDFS命令:bin/hadoop fs + 相应操作命令 或者 bin/hdfs dfs + 相应操作命令
六、配置ssh¶
1、SSH无密码登录(hadoop101和hadoop102都要生成)¶
[drift@hadoop101 hadoop-2.7.2]$ ssh hadoop102
atguigu@hadoop103's password:
Last login: Fri Aug 16 14:34:13 2019 from hadoop101
[drift@hadoop102 ~]$ hostname
hadoop102
2、无密钥配置¶
hadoop101配置:
(1)进入到我的home目录:cd ~/.ssh
(2)生成公钥和私钥:
[drift@hadoop101 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
[drift@hadoop101 .ssh]$ ll
总用量 12
-rw-------. 1 drift drift 1675 8月 16 15:30 id_rsa
-rw-r--r--. 1 drift drift 399 8月 16 15:30 id_rsa.pub
-rw-r--r--. 1 drift drift 814 8月 16 14:06 known_hosts
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop101 输入密码
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop102 输入密码
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop103 输入密码
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop104 输入密码
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop105 输入密码
hadoop102配置:
因为ResourceManager是配置在这台机器的,如果是配置在hadoop101上则只需要在101生成
(1)进入到我的home目录cd ~/.ssh
(2)生成公钥和私钥:
[drift@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
[drift@hadoop102 .ssh]$ ll
总用量 16
-rw-------. 1 drift drift 399 8月 16 15:31 authorized_keys
-rw-------. 1 drift drift 1675 8月 17 11:12 id_rsa
-rw-r--r--. 1 drift drift 399 8月 17 11:12 id_rsa.pub
-rw-r--r--. 1 drift drift 1221 8月 17 10:22 known_hosts
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop101 输入密码
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop102 输入密码
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop103 输入密码
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop104 输入密码
[drift@hadoop101 .ssh]$ ssh-copy-id hadoop105 输入密码
注意:
因为ResourceManager节点在hadoop102上,所以采用drift账号配置一下无密登录到hadoop101、hadoop102、hadoop103、hadoop104、hadoop105服务器上。
如果在hadoop101上需要采用root账号访问其它服务器,配置一下无密登录到hadoop101、hadoop102、hadoop103、hadoop104、hadoop105。
.ssh文件夹下的文件功能解释
七、群起并测试集群¶
1、配置slaves¶
在该文件中增加如下内容:注意:
该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点配置文件
2、启动集群¶
注意:
如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
启动YARN(注意安装节点位置)
注意:
NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。
3、web端查看SecondaryNameNode¶
网址: http://hadoop103:50090/status.html
4、集群测试(上传大小文件)¶
随便准备一个文档上传测试就行
[drift@hadoop101 hadoop-2.7.2]$ bin/hadoop fs -put wcinput/wc.input /user/drift/input
[drift@hadoop101 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/drift/input
上传后查看文件位置:
[drift@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/data/current/BP-886705812-192.168.164.101-1584939216275/current/finalized/subdir0/subdir0/
查看上传文件内容:
查看小文件:
先拼接在一个文件,因为文件是压缩包,所以再解压
[drift@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file
[drift@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file
[drift@hadoop102 subdir0]$ tar -zxvf tmp.file
八、集群启动/停止方式总结¶
1、各个服务组件逐一启动/停止¶
(1)分别启动/停止HDFS组件
注意:
单节点启动这种方式的使用场景,一般集群已经启动完毕了,单独添加或者删除节点的时候使用
2、各个模块分开启动/停止(配置ssh是前提) 常用¶
(1)整体启动/停止HDFS