hadoop入门补充知识
Hadoop实操演练
什么是快照
给虚拟机保存当下的状态 之后可以回退到保存的状态
什么时候用快照
在对虚拟机执行一些比较危险的操作之前可以先使用快照之后还可以返回
如何快速生成多台虚拟机
先将需要克隆的机器关机
链接克隆与完整克隆
链接克隆的速度很快但是需要保证原机器运行正常(不能坏)
完整克隆速度较慢但是克隆完毕之后克隆机与原机器之间再无关系
克隆完机器一般需要两步操作
1.网卡信息的修改
vim /etc/sysconfi/network-scripts/ifcfg-ens33
systemctl restart network
2.主机名称的修改(可以不做)
hostnamectl set-hostname 新的名称
bash
3.关闭防火墙
systemctl stop firewalld 临时关闭
systemctl disable firewalld 然后reboot
永久关闭
systemctl status firewalld 查看防火墙状态
systemctl restart network 重启
4.配置映射关系(可以不做)
虚拟机:vim /etc/hosts(10.0.0.201 hadoop101)
本机: C:\Windows\System32\drivers\etc\hosts
如何利用xshell通过主机名称的防暑链接虚拟机
修改宿主机hosts文件映射关系即可
完全分布式(开发重点)
1)准备 3台客户机
2)安装 JDK
3)配置环境变量
4)安装 Hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置 ssh
9)群起并测试集群
详细:
1)准备 3台客户机(关闭防火墙、静态 ip、主机名称)
克隆机器修改主机名和主机IP地址
2)安装 JDK
利用scp命令拷贝数据文件至三个客户机
scp -r /opt/module root@hadoop102:/opt/module
scp -r /opt/module root@hadoop103:/opt/module
scp -r /opt/module root@hadoop104:/opt/module
也可以在A机器将B机器文件拷贝给C机器
scp -r root@hadoop101:/opt/module root@hadoop103:/opt/module
扩展:拷贝文件的命令有scp(全量拷贝)、rsync(增量拷贝)
scp(全量拷贝)
scp -r $pdir/$fname
$user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称
目的用户@主机:目的路径/名称
rsync(增量拷贝)
rsync -rvl $pdir/$fname
$user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称
目的用户@主机:目的路径/名称
参数详解
r 递归
v 显示复制过程
l 拷贝符号连接
3)配置环境变量
1.利用scp命令拷贝环境变量文件至三个客户机
scp /etc/profile
root@hadoop102:/etc/profile
scp /etc/profile
root@hadoop103:/etc/profile
scp /etc/profile
root@hadoop104:/etc/profile
2.source文件配置
source /etc/profile
3.验证是否成功
java
4)扩展:集群分发脚本
复制文件到所有节点的相同目录下
1.在/usr/local/bin下创建sync文件并填写以下内容
[jason@hadoop102 ~]$ cd /usr/local/bin
[jason@hadoop102 bin]$ touch xsync
[jason@hadoop102 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=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
2.修改权限
chmod 777 xsync
3.测试
在当前机器随便找一个其他机器没有的目录
xsync test/
5)集群配置
集群部署规划
hadoop102 hadoop103 hadoop104
HDFS NameNode/DataNode DataNode SecondaryNameNode/DataNode
YARN NodeManager ResourceManager/NodeManager NodeManager
'''在102上修改,然后用xsync脚本直接同步'''
1.配置 core-site.xml(修改主机名即可)
[jason@hadoop102 hadoop]$ vi core-site.xml
"""
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
"""
2.HDFS 配置文件
1.配置 hadoop-env.sh
[jason@hadoop102 hadoop]$ vi hadoop-env.s
"""内容(有就不用改了)
export JAVA_HOME=/opt/module/jdk1.8.0_14
"""
2.配置 hdfs-site.xml(将伪分布式配置删除添加下列配置)
[jason@hadoop102 hadoop]$ vi hdfs-site.xml
"""内容
<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
"""
3.YARN 配置文件
1.配置 yarn-env.sh
[jason@hadoop102 hadoop]$ vi yarn-env.sh
"""内容(有就不用改了)
export JAVA_HOME=/opt/module/jdk1.8.0_144
"""
2.配置 yarn-site.xml(修改主机名即可)
[jason@hadoop102 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>hadoop103</value>
</property>
"""
4.MapReduce 配置文件
1.配置 mapred-env.sh
[jason@hadoop102 hadoop]$ vi mapred-env.sh
"""内容(伪分布式配了就不用改了)
export JAVA_HOME=/opt/module/jdk1.8.0_144
"""
2.配置 mapred-site.xml(伪分布式配了就不用改了)
[jason@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[jason@hadoop102 hadoop]$ vi mapred-site.xml
"""内容
<!-- 指定 MR 运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
"""
3.在集群上分发配置好的 Hadoop 配置文件
[jason@hadoop102 etc]$ xsync hadoop/
4.查看文件分发情况
[jason@hadoop103 hadoop]$ cat /opt/module/hadoop-
2.7.2/etc/hadoop/core-site.xml
1.如果集群是第一次启动,需要格式化 NameNode(我们不是 因为前面弄了伪分布式)
[jason@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
如果集群不是第一次启动,需要删除data和logs目录
[jason@hadoop102 hadoop-2.7.2]$ rm -rf data/ logs/
[jason@hadoop103 hadoop-2.7.2]$ rm -rf data/ logs/
[jason@hadoop104 hadoop-2.7.2]$ rm -rf data/ logs/
2.在 hadoop102 上启动 NameNode和DataNode
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
3.去103和104启动datanode(namenode就一个)
[jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
[jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
4.浏览器验证
hadoop102:50070
上述单点启动的方式每次都一个一个节点启动
如果节点数量很多该如何解决
公钥私钥工作原理
知识补充:查看know_hosts文件(访问过的主机地址)
[jason@hadoop102 ~]$ ll # 无法查看
[jason@hadoop102 ~]$ ls -al # 可以查看
[jason@hadoop102 ~]$ cd .ssh
[jason@hadoop102 .ssh]$ ll
[jason@hadoop102 .shh]$ cat known_hosts
生成公钥私钥
[jason@hadoop102 .ssh]$ ssh-keygen -t rsa # 连续回车即可
将102公钥拷贝到103和104
[jason@hadoop102 .shh]$ ssh-copy-id hadoop103
[jason@hadoop102 .shh]$ ssh-copy-id hadoop104
"""
hadoop103中的.ssh在拷贝前后文件是有变化的
hadoop104中的.ssh在拷贝前后文件是有变化的
"""
免密直接访问103和104
ssh hadoop103/hadoop104
自己用ssh访问自己也需要输入密码,可以采用相同措施解决
[jason@hadoop102 .shh]$ ssh-copy-id hadoop102
由于hadoop103上有一个resurcemanage所以也需要配置ssh
[jason@hadoop103 .ssh]$ ssh-keygen -t rsa
[jason@hadoop103 .shh]$ ssh-copy-id hadoop102
[jason@hadoop103 .shh]$ ssh-copy-id hadoop103
[jason@hadoop103 .shh]$ ssh-copy-id hadoop104
1.配置
文件位置:/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[jason@hadoop102 hadoop]$ vi slaves
内容(内容清空再添加)
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行
2.同步所有节点配置文件
[jason@hadoop102 hadoop]$ xsync slaves
3.将之前单节点启动的datanode、namenode全部退出
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop namenode
[jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
[jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
4.启动HDFS
[jason@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
5.验证每个节点对于启动的服务
jps查看照着之前的表格比较不能出错
6.启动yarn(一定要在hadoop103上启动 因为rm在这里)
这里需要将hadoop03的公钥分别发送给hadoop102、hadoop103、hadoop104
[jason@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
7.验证每个节点对于启动的服务
jps查看照着之前的表格比较不能出错
集群测试
上传文件到集群
1.小文件
[jason@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put wcinput/wc.input /
2.大文件
[jason@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put /opt/software/hadoop-2.7.2.tar.gz /
3.浏览器界面测试
1. 各个服务组件逐一启动/停止
(1)分别启动/停止 HDFS 组件
hadoop-daemon.sh start/stop namenode/datanode/ secondarynamenode
(2)启动/停止 YARN
yarn-daemon.sh start /stop resourcemanager/nodemanager
2. 各个模块分开启动/停止(配置 ssh 是前提)常用
(1)整体启动/停止 HDFS
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止 YARN
start-yarn.sh/stop-yarn.sh
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时 的同步,比如,每隔十分钟,同步一次时间
1. 时间服务器配置(必须 root 用户)
(1)检查 ntp 是否安装
[root@hadoop102 hadoop-2.7.2]# rpm -qa | grep ntp
(2)修改 ntp 配置文件
[root@hadoop102 hadoop-2.7.2]# vi /etc/ntp.conf
a)修改1(授权 192.168.1.0-192.168.1.255 网段上的所有机器可以从这台机器上查 询和同步时间)
# 解开注释
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b)修改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
c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群 中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改/etc/sysconfig/ntpd 文件
[root@hadoop102 hadoop-2.7.2]$ vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动 ntpd 服务
[root@hadoop102 桌面]$ service ntpd start
[root@hadoop102 桌面]$ service ntpd status
(5)设置 ntpd 服务开机启动
[root@hadoop102 桌面]$ chkconfig ntpd on
2. 其他机器配置(必须 root 用户)
分 时 日 月 周
(1)在其他机器配置 1 分钟与时间服务器同步一次
root@hadoop103 hadoop2-7.2]$ crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(2)修改任意机器时间
[root@hadoop103 ~]$ date -s "2020-11-11 11:11:11"
(3)一分钟后查看机器是否与时间服务器同步
[root@hadoop103 ~]$ date
# 测试的时候可以将 10 分钟调整为 1 分钟,节省时间。
(4)主动同步时间
[root@hadoop103 root]$ /usr/sbin/ntpdate hadoop102