https://blog.csdn.net/qq_52674050/article/details/125493470
虚拟机配置
------------图片没有放到图床
Hadoop运行环境搭建
模版虚拟机环境准备
(1) 安装epel-release
yum install -y epel-release
注意: 如果安装是最小版的操作系统,还需要安装如下工具:
- net-tool: 工具包集合 包含ifconfig 命令
- vim
yum -y net-tools
yum -y vim
(2) 关闭防火墙,关闭防火墙开机自启
systemctl stop firewalld
systemctl disable firewalld.service
企业开发时,单个服务器的防火墙是关闭的,公司整体的对外会设置一个防火墙
(3)创建普通用户
useradd [name]
passwd [name]
(4) 让普通用户具有root 权限 方便后期加sudo 执行 root 权限命令
vim /etc/sudoers
修改 /etc/sudoers 文件 在%wheel 下面添加
具有权限后,sudo 不需要输入命令
(5)/opt 创建文件夹放置东西
sudo mkdir module
sudo mkdir software
更改文件归属权限
sudo chown tao:tao module/ software/
(6)卸载虚拟机自带JDK
虚拟机最小化不需要执行
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
rpm -qa: 查询所安装的所有rpm软件包
grep -i: 忽略大小写
xargs -n1 : 表示每次只传递一个参数
rpm -e -nodeps : 强制卸载软件
(7) 重启虚拟机
reboot
克隆虚拟机
(1) 先关闭模版机
右键-》电源-》关闭客户机
右键-》管理-》克隆
修改102 103 104 等等 同样的方式
su root
vim /etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/hostname
重启
reboot
检查每一个 102 103 104 等等
ping www.baidu.com
## ctrl+C 停止
hostname
配置Xshell
新建会话 挨个设置
可以重命名成hadoop102 103 104
安装JDK
jdk 通过 Xftp 放到 opt/spftware 下面
#解压缩
sudo tar -zxvf jdk-8u212-linuxx64.tar.gz -C /opt/module/
设置环境变量
sudo vim /etc/profile
## 如下图
可以看到环境变量就是遍历profile.d中所有.sh 结尾的文件
现在主流设置环境变量的方式
cd /etc/profile.d
#如下图
## 编辑环境变量 创建自己的sh
sudo vim my_env.sh
## 如下图
#终端执行 加载一下环境变量
source /etc/profile
##检查
java
Hadoop 安装
cd /opt/software
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
配置环境变量
/opt/module/hadoop-3.1.3
cd /opt/mpdule/hadop-3.1.3
sudo vim /etc/profile.d/my_env.sh
# 再加载一下
source /etc/profile
#检查
hadoop
hadoop 目录结构
bin:
hdfs : 存储相关
mapred: 计算相关
yarn: 调度相关
etc: 对应的配置信息
sbin: 启动集群相关命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lqqwoGMV-1679990546812)(pics/image-20221107001528147.png)]
Hadoop运行模式
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式
本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模 拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用
完全分布式模式:多台服务器组成分布式环境。生产环境使用。
本地运行模式(官方WordCount)
1)创建在 hadoop-3.1.3 文件下面创建一个 wcinput 文件夹
2)在 wcinput 文件下创建一个 word.txt 文件
3)编辑 word.txt 文件
[tao@hadoop102 hadoop-3.1.3]$ mkdir wcinput
[tao@hadoop102 hadoop-3.1.3]$ cd wcinput/
[tao@hadoop102 wcinput]$ vim word.txt
4)回到 Hadoop 目录/opt/module/hadoop-3.1.3
5)执行程序
统计word.txt 中的单词数
输入(数据)---------mapred---------> 输出
技巧: 输入命令太长不知道文件里面有什么 double tab显示
[tao@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ wcoutput
## 后面的输入路径 输出路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ixbUp8uE-1679990546813)(pics/image-20221107110839505.png)]
6)查看结果
[tao@hadoop102 hadoop-3.1.3]$ cd wcoutput/
[tao@hadoop102 wcoutput]$ ll
[tao@hadoop102 wcoutput]$ cat part-r-00000
如果我们再次执行
[tao@hadoop102 wcoutput]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ wcoutput
会发现报错,也就是这里的输出路径是不能存在的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UyxRUbJv-1679990546813)(pics/image-20221107144902874.png)]
伪分布式运行模式
完全分布式运行模式(开发重点)
1)准备 3 台客户机(关闭防火墙、静态 IP、主机名称)
2)安装 JDK
3)配置环境变量
4)安装 Hadoop
5)配置环境变量
(以上均在hadoop102上面配置完成,参考下图需要将102的环境拷贝给其他)
6)配置集群
7)单点启动
8)配置 ssh
9)群起并测试集群
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZJeu7eH-1679990546814)(pics/image-20221107150017961.png)]
虚拟机准备
前文(补充hadoop102配置步骤)
编写集群分发脚本 xsync
1)scp(secure copy)安全拷贝
(1)scp 定义 scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
(2)基本语法
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
(3)案例实操
➢ 前提:在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、 /opt/software 两个目录,并且已经把这两个目录修改为 tao:tao(文件所有权 如果是root 可修改权限也可以切换root)
这是在102 向103 推送 jdk为例
[tao@hadoop102 module]$ scp -r jdk1.8.0_212/ tao@hadoop103:/opt/module/
#yes
#输入hadoop103 密码
hadoop103: 这是因为之前已经在 /etc/hosts中已经配置过了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JGYGsXZ-1679990546814)(pics/image-20221107151956383.png)]
现在在103 向102 拉取 hadoop为例
[tao@hadoop103 module]$ scp -r tao@hadoop102:/opt/module/hadoop-3.1.3 ./
在103上 将102的文件拷贝到104中
[tao@hadoop103 module]$ scp -r tao@hadoop102:/opt/module/* tao@hadoop104:/opt/module/
# 输入两边的密码就可以啦
2)rsync 远程同步工具
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:
- 用 rsync 做文件的复制要比 scp 的速度快
- rsync 只对差异文件做更新。scp 是把所有文件都复制过去
-
基本语法
rsync -av $pdir/$fname $user@$host:$pdir/$fname 命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项参数说明
-a 归档拷贝
-v 显示复制过程
-
案例实操
(a)删除 hadoop103 中/opt/module/hadoop-3.1.3/wcinput
[tao@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/ wcoutput/
(b) 同步 hadoop102 中的/opt/module/hadoop-3.1.3 到 hadoop103
[tao@hadoop102 module]$ rsync -av hadoop-3.1.3/ tao@hadoop103:/opt/module/hadoop-3.1.3/ # 此时的102 中是有wcinput wcoutput 的哦
此时看看hadloop103 (rm -rf 后才 rsync )
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qN9dNbD1-1679990546814)(pics/image-20221107154853927.png)]
3)xsync 集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync 命令原始拷贝:
rsync -av /opt/module tao@hadoop103:/opt/
(b)期望脚本:
xsync 要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[tao@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tao/.local/bin:/home/tao/bin:/opt/module/jdk1.8.0_212/bin:/opt/module/jdk1.8.0_212/bin:/opt/module/hadoop-3.1.3/bin:/opt/module/hadoop-3.1.3/sbin
(3)脚本实现 (a)在/home/tao/bin 目录下创建 xsync 文件
[tao@hadoop102 ~]$ cd /home/tao/
[tao@hadoop102 ~]$ mkdir bin
[tao@hadoop102 ~]$ cd bin
[tao@hadoop102 bin]$ vim xsync## 脚本名字可以任意取
# 赋予执行权限
[tao@hadoop102 bin]$ chmod 777 xsync
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BGOfDYk4-1679990546815)(pics/image-20221107165639885.png)]
[tao@hadoop102 ~]$ xsync bin/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GHIlQgxA-1679990546815)(pics/image-20221107170006041.png)]
此时103 104 均已同步bin
现在分发 环境变量
[tao@hadoop102 ~]$ xsync /etc/profile.d/my_env.sh
erro: 权限拒绝
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gD47Y6kM-1679990546816)(pics/image-20221107170339109.png)]
# 现在改为 sudo 绝对路径
[tao@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56eaoeV1-1679990546816)(pics/image-20221107170943551.png)]
此时 环境变量已经同步
那么在103 104 上进行source
[tao@hadoop104 ~]$ source /etc/profile
SSH无密登录配置
(1)免密登录原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IToB7GTu-1679990546817)(pics/image-20221107185129880.png)]
正常需要输入密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G7c260wZ-1679990546817)(pics/image-20221107185222033.png)]
配置 102 可以无密登录103 104
# 显示所有隐藏文件
[tao@hadoop102 ~]$ ll -al
[tao@hadoop102 ~]$ cd .ssh/
# 如果没有.ssh 文件
ssh localhost
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3TghSrEw-1679990546817)(pics/image-20221107185638689.png)]
# 生成钥匙对
[tao@hadoop102 .ssh]$ ssh-keygen -t rsa
## 一直 回车
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FcE3L78N-1679990546818)(pics/image-20221107185923306.png)]
# 将102公钥拷贝到103 104
[tao@hadoop102 .ssh]$ ssh-copy-id hadoop103
[tao@hadoop102 .ssh]$ ssh hadoop103
# 这样就可以无密登录了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TSvxhU6-1679990546818)(pics/image-20221107190255738.png)]
tips: 102 无密ssh自己 也需要配置
此时我们尝试 分发脚本
[tao@hadoop102 ~]$ xsync a.txt
这时候已经你不需要每个都输入密码了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0TTtJPJV-1679990546819)(pics/image-20221107192250674.png)]
配置 103 104 可以无密登录102 103 104
此时我们是配置的 tao 用户
如果在hadoop102 切换root 用户 是不能无密登录103 104 的 还需要在root身份下重新配置
这边配置102 root 对于103 104 的无密登录(我没配置)
集群配置
(1)集群部署规划
(针对不同需求设计)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-36KJkDYL-1679990546819)(pics/image-20221110150240270.png)]
(2)配置文件
Hadoop 配置文件分两类:默认配置文件和自定义配置文件
只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VAva42JV-1679990546820)(pics/image-20221110150501096.png)]
core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 tao -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>tao</value>
</property>
</configuration>
hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在hadloop102上面配置完成 然后通过脚本xsync 分发到103 104 上面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQwTiCU8-1679990546821)(pics/image-20221110153731047.png)]
然后在103 104 上面查看配置文件
群起集群
配置 workers
[tao@hadoop102 ~]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
# 删除localhost
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点的配置文件
[tao@hadoop102 hadoop]$ xsync workers
启动集群
(1)如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode
(注意:格式 化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找 不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)
[tao@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
多出以下三个文件夹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DgOq6XBQ-1679990546821)(pics/image-20221110164716849.png)]
此时103 104 还没有初始化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RakCyrp8-1679990546821)(pics/image-20221110165306133.png)]
版本信息
(2)启动 集群 HDFS
[tao@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NV9XbAnG-1679990546822)(pics/image-20221110170459963.png)]
启动103 的 ResourcesManageer
启动yarn
[tao@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
注意:103 需要配置SSH免密登录 不然启动不了
所以这一步顺带把104的也配置了 包括root 用户的权限
此时102 103 104
jps
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHF7kRYo-1679990546822)(pics/image-20221110182841183.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9RYBIwDI-1679990546823)(pics/image-20221110182853023.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PbHsLZhI-1679990546823)(pics/image-20221110182909240.png)]
这时候的配置就和要求一样
打开浏览器
输入 (我没有在windows hosts 文件中配置端口映射 所以需要输入ip)
http://192.168.10.102:9870/
查看HDFS上存储的数据信息
http://192.168.10.103:8088/
查看yarn 上运行的Job信息
集群基本测试
(1)上传文件到集群
- 上传小文件
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /wcinput
原本:
运行后:
# 将 word.txt 上传到wcinput
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /wcinput
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sh5neSz6-1679990546823)(pics/image-20221110184456773.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFIhYQoZ-1679990546824)(pics/image-20221110184512998.png)]
- 上传大文件
[tao@hadoop102 ~]$ hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DxG1jwkt-1679990546824)(pics/image-20221110185227021.png)]
(2)文件位置
数据存储在DataNode节点, DataNode数据在 core-site.xml 配置文件中指定
# core-site.xml
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
[tao@hadoop102 ~]$ cd /opt/module/hadoop-3.1.3/data/
[tao@hadoop102 data]$ cd dfs/current/
[tao@hadoop102 current]$ cd BP-241437330-192.168.10.102-1668069962055/
[tao@hadoop102 BP-241437330-192.168.10.102-1668069962055]$ cd current/finalized/subdir0/subdir0/
[tao@hadoop102 subdir0]$ cat blk_1073741825
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q75nvzf4-1679990546825)(pics/image-20221110191024562.png)]
发现这里就是之前上传的小文件
之前的JDK哪里去了呢,神奇的操作来了
(3)拼接
-rw-rw-r–. 1 tao tao 26 11月 10 18:44 blk_1073741825
-rw-rw-r–. 1 tao tao 11 11月 10 18:44 blk_1073741825_1001.meta
-rw-rw-r–. 1 tao tao 134217728 11月 10 18:51 blk_1073741826
-rw-rw-r–. 1 tao tao 1048583 11月 10 18:51 blk_1073741826_1002.meta
-rw-rw-r–. 1 tao tao 60795424 11月 10 18:51 blk_1073741827
-rw-rw-r–. 1 tao tao 474975 11月 10 18:51 blk_1073741827_1003.meta
[tao@hadoop102 subdir0]$ cat blk_1073741826 >> tmp.tar.gz
[tao@hadoop102 subdir0]$ cat blk_1073741827 >> tmp.tar.gz
[tao@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz
[tao@hadoop102 subdir0]$ rm -rf jdk1.8.0_212/ tmp.tar.gz
## 证明 数据的存储路径
[tao@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-241437330-192.168.10.102-1668069962055/current/finalized/subdir0/subdir0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-99sj1vFV-1679990546825)(pics/image-20221110212234308.png)]
(4)存储副本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UqvpwRui-1679990546825)(pics/image-20221110212937057.png)]
这里的 3 指的是有3个这个数据的副本 他们分别存储在102 103 104 相同的路径
(5)下载
[tao@hadoop102 subdir0]$ hadoop -fs -get 待下载文件 存储路径
(6)执行 wordcount 程序
[tao@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p0rUVuRu-1679990546826)(pics/image-20221110213615819.png)]
这时候并没有得到wcoutput 的输出 同时 上面的state 也显示的failed
Tips:
针对P31出现的按步骤操作却得不到wordcount的输出结果的问题,报错如下:
Exit code: 1
Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
解决方法如下:
1、关闭yarn:在hadoop-3.1.3文件夹下执行 sbin/stop-yarn.sh
2、关闭hdfs:在hadoop-3.1.3文件夹下执行 sbin/stop-dfs.sh
3、修改mapred-site.xml:在hadoop-3.1.3文件夹下执行 vim etc/hadoop/mapred-site.xml
4、添加以下内容:
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
2022.22.12
bug: 如果 Xshell 连接不上虚拟机 检查服务设置中的NAT DHCP是否开启
bug :
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j05sfKcc-1679990546826)(pics/image-20221112150453599.png)]
不能提前预览信息 是因为在windows 没有设置 ip 映射
解决方案:HDFS Web报错Couldn‘t preview the file.
然后重新执行wordcount 命令 就是正常的 继续跟着教程走
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-siSYiOEo-1679990546827)(pics/image-20221112151008511.png)]
原因是没有配置 历史服务器
配置历史服务器
为了查看程序的运行情况
(1)配置mapred-xml 增加配置
[tao@hadoop102 hadoop]$ vim mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
(2)分发
[tao@hadoop102 hadoop]$ xsync mapred-site.xml
关闭 重启 yarn dfs
(3) 在hadoop102启动历史服务器
[tao@hadoop102 hadoop-3.1.3]$ bin/mapred --daemon start historyserver
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAfx4Uzb-1679990546827)(pics/image-20221112154629922.png)]
运行一个任务
[tao@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput
再次点击 History
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCNSpefA-1679990546827)(pics/image-20221112162716586.png)]
(4) 查看是否启动
jps
(5) 查看JobHistory
http://hadoop102:19888/jobhistory
配置 日志聚集功能
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tlodebkn-1679990546828)(pics/image-20221112163418859.png)]
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryServer
开启日志聚集功能具体步骤如下:
(1) 配置 yarn-site.xml
## 这里只配置
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 启用resourcemanager ha -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 声明两台resourcemanager的地址 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>
<!--指定resourcemanager的逻辑列表-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- ========== rm1的配置 ========== -->
<!-- 指定rm1的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop102</value>
</property>
<!-- 指定rm1的web端地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop102:8088</value>
</property>
<!-- 指定rm1的内部通信地址 -->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>hadoop102:8032</value>
</property>
<!-- 指定AM向rm1申请资源的地址 -->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>hadoop102:8030</value>
</property>
<!-- 指定供NM连接的地址 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>hadoop102:8031</value>
</property>
<!-- ========== rm2的配置 ========== -->
<!-- 指定rm2的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop105</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop105:8088</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>hadoop105:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>hadoop105:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>hadoop105:8031</value>
</property>
<!-- 指定zookeeper集群的地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop102:2181,hadoop105:2181,hadoop106:2181</value>
</property>
<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 指定resourcemanager的状态信息存储在zookeeper集群 -->
<property>
<name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 选择调度器,默认容量 -->
<property>
<description>The class to use as the resource scheduler.</description>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<!-- ResourceManager处理调度器请求的线程数量,默认50;如果提交的任务数大于50,可以增加该值,但是不能超过3台 * 4线程 = 12线程(去除其他应用程序实际不能超过8) -->
<property>
<description>Number of threads to handle scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.client.thread-count</name>
<value>8</value>
</property>
<!--
是否将虚拟核数当作CPU核数,默认是false,采用物理CPU核数
-->
<property>
<description>Flag to determine if logical processors(such as
hyperthreads) should be counted as cores. Only applicable on Linux
when yarn.nodemanager.resource.cpu-vcores is set to -1 and
yarn.nodemanager.resource.detect-hardware-capabilities is true.
</description>
<name>yarn.nodemanager.resource.count-logical-processors-as-cores</name>
<value>false</value>
</property>
<!-- 是否让yarn自动检测硬件进行配置,默认是false,如果该节点有很多其他应用程序,建议手动配置。如果该节点没有其他应用程序,可以采用自动 -->
<property>
<description>Enable auto-detection of node capabilities such as
memory and CPU.
</description>
<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
<value>false</value>
</property>
<!--
Core转成Vcore的个数(虚拟核数和物理核数乘数,默认是1.0)
hadoop中的vcore不是真正的core,通常vcore的个数设置为逻辑cpu个数的1~5倍。
-->
<property>
<description>Multiplier to determine how to convert phyiscal cores to vcores. This value is used if
yarn.nodemanager.resource.cpu-vcores is set to -1(which implies auto-calculate vcores) and
yarn.nodemanager.resource.detect-hardware-capabilities is set to true. The number of vcores will be calculated as number of CPUs * multiplier.
</description>
<name>yarn.nodemanager.resource.pcores-vcores-multiplier</name>
<value>1.0</value>
</property>
<!-- NodeManager使用内存数,默认8G,修改为4G内存 -->
<property>
<description>Amount of physical memory, in MB, that can be allocated
for containers. If set to -1 and
yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
automatically calculated(in case of Windows and Linux).
In other cases, the default is 8192MB.
</description>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>6144</value>
</property>
<!-- nodemanager的CPU核数,不按照硬件环境自动设定时默认是8个,修改为4个 -->
<property>
<description>Number of vcores that can be allocated
for containers. This is used by the RM scheduler when allocating
resources for containers. This is not used to limit the number of
CPUs used by YARN containers. If it is set to -1 and
yarn.nodemanager.resource.detect-hardware-capabilities is true, it is
automatically determined from the hardware in case of Windows and Linux.
In other cases, number of vcores is 8 by default.</description>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
<!-- 容器最小内存,默认1G -->
<property>
<description>The minimum allocation for every container request at the RM in MBs. Memory requests lower than this will be set to the value of this property. Additionally, a node manager that is configured to have less memory than this value will be shut down by the resource manager.
</description>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<!-- 容器最大内存,默认8G,修改为2G -->
<property>
<description>The maximum allocation for every container request at the RM in MBs. Memory requests higher than this will throw an InvalidResourceRequestException.
</description>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>6144</value>
</property>
<!-- 容器最小CPU核数,默认1个 -->
<property>
<description>The minimum allocation for every container request at the RM in terms of virtual CPU cores. Requests lower than this will be set to the value of this property. Additionally, a node manager that is configured to have fewer virtual cores than this value will be shut down by the resource manager.
</description>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<!-- 容器最大CPU核数,默认4个,修改为2个 -->
<property>
<description>The maximum allocation for every container request at the RM in terms of virtual CPU cores. Requests higher than this will throw an
InvalidResourceRequestException.</description>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
</property>
<!-- 虚拟内存检查(限制),默认打开,修改为关闭 -->
<property>
<description>Whether virtual memory limits will be enforced for
containers.</description>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 虚拟内存和物理内存设置比例,默认2.1 -->
<property>
<description>Ratio between virtual memory to physical memory when setting memory limits for containers. Container allocations are expressed in terms of physical memory, and virtual memory usage is allowed to exceed this allocation by this ratio.
</description>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
(2) 分发配置
[tao@hadoop102 hadoop]$ vim yarn-site.xml
[tao@hadoop102 hadoop]$ xsync yarn-site.xml
(3) 关闭 NodeManager 、ResourceManager 和 HistoryServer
## 停止yarn 因为更改了yarn 配置
[tao@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
## 停止HistoryServer
[tao@hadoop102 hadoop-3.1.3]$ mapred --daemon stop historyserver
重启
[tao@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
[tao@hadoop102 hadoop-3.1.3]$ mapred --daemon start historyserver
[tao@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /output2
3.2.8 集群启动/停止方式总结
1)各个模块分开启动/停止(配置 ssh 是前提)常用
(1)整体启动/停止 HDFS
start-dfs.sh/stop-dfs.sh
(2)整体启动/停止 YARN
start-yarn.sh/stop-yarn.sh
2)各个服务组件逐一启动/停止
(1)分别启动/停止 HDFS 组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
(2)启动/停止 YARN
yarn --daemon start/stop resourcemanager/nodemanager
3.2.9 编写 Hadoop 集群常用脚本
1)Hadoop 集群启停脚本(包含 HDFS,Yarn,Historyserver):myhadoop.sh
[tao@hadoop102 ~]$ cd /home/tao/bin/
[tao@hadoop102 bin]$ vim myhadoop.sh
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
# 赋予权限
[tao@hadoop102 bin]$ chmod 777 myhadoop.sh
关闭 / 启动
[tao@hadoop102 bin]$ myhadoop.sh stop
[tao@hadoop102 bin]$ myhadoop.sh start
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-itVTvKrz-1679990546828)(pics/image-20221112180602603.png)]
2)查看三台服务器Java进程脚本:jpsall
[tao@hadoop102 ~]$ cd /home/tao/bin/
[tao@hadoop102 bin]$ vim jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
[tao@hadoop102 bin]$ chmod 777 jpsall
[tao@hadoop102 bin]$ jpsall
分发 保证脚本都可以使用
[tao@hadoop102 ~]$ xsync bin/
常见面试题
(一)常用默认端口号说明
端口名称 | Hadoop2.x | Hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce Yarn查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
2、常用的配置文件
3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers
2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves
集群时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步
HDFS
1. HDFS概述
1.1 背景定义
背景
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系 统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这 就是分布式文件管理系统。HDFS 只是分布式文件管理系统中的一种
HDFS 定义
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色
HDFS 的使用场景
适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭 之后就不需要改变
1.2 优缺点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cfcH4STT-1679990546829)(pics/image-20221115121424514.png)]
1.3 组成架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dCblL31b-1679990546829)(pics/image-20221115121655141.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-44078kFs-1679990546830)(pics/image-20221115121714665.png)]
1.4 文件块大小
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6F3pUb2k-1679990546830)(pics/image-20221115133733097.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-02uKVrNs-1679990546831)(pics/image-20221115133756123.png)]
如果是固态硬盘 磁盘传输速率为200MB/s 那么块大小自然可以为256M
2. HDFS的shell 操作(开发重点)
2.1 基本语法
hadoop fs 具体命令 OR hdfs dfs 具体命令
两个是完全相同的
2.2 命令大全
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> ... <dst>]
[-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...]
[-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] [-v] [-x] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
[-head <file>]
[-help [cmd ...]]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
[-setfattr {-n name [-v value] | -x name} <path>]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] [-s <sleep interval>] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touch [-a] [-m] [-t TIMESTAMP ] [-c] <path> ...]
[-touchz <path> ...]
[-truncate [-w] <length> <path> ...]
[-usage [cmd ...]]
Generic options supported are:
-conf <configuration file> specify an application configuration file
-D <property=value> define a value for a given property
-fs <file:///|hdfs://namenode:port> specify default filesystem URL to use, overrides 'fs.defaultFS' property from configurations.
-jt <local|resourcemanager:port> specify a ResourceManager
-files <file1,...> specify a comma-separated list of files to be copied to the map reduce cluster
-libjars <jar1,...> specify a comma-separated list of jar files to be included in the classpath
-archives <archive1,...> specify a comma-separated list of archives to be unarchived on the compute machines
The general command line syntax is:
command [genericOptions] [commandOptions]
2.3 常用命令实操
2.3.1 准备工作
-
启动
[tao@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
-
输出命令参数
[tao@hadoop102 hadoop-3.1.3]$ $ hadoop fs -help rm
-
创建文件夹
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /sanguo
2.3.2 上传
1)-moveFromLocal:从本地剪切粘贴到 HDFS
[tao@hadoop102 hadoop-3.1.3]$ vim shuguo.txt
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -moveFromLocal ./shuguo.txt /sanguo
2)-copyFromLocal:从本地文件系统中拷贝文件到 HDFS 路径去
[tao@hadoop102 hadoop-3.1.3]$ vim weiguo.txt
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -copyFromLocal ./weiguo.txt /sanguo
3)-put:等同于 copyFromLocal,生产环境更习惯用 put
[tao@hadoop102 hadoop-3.1.3]$ vim wuguo.txt
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -put wuguo.txt /sanguo
4)-appendToFile:追加一个文件到已经存在的文件末尾
[tao@hadoop102 hadoop-3.1.3]$ vim liubei.txt
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt
2.3.3 下载
1)-copyToLocal:从 HDFS 拷贝到本地
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -copyToLocal /sanguo/shuguo.txt ./
2)-get:等同于 copyToLocal,生产环境更习惯用 get
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt
2.3.4 HDFS直接操作
1)-ls: 显示目录信息
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /
Found 5 items
-rw-r--r-- 3 tao supergroup 195013152 2022-11-10 18:51 /jdk-8u212-linux-x64.tar.gz
drwxr-xr-x - tao supergroup 0 2022-11-15 14:10 /sanguo
drwx------ - tao supergroup 0 2022-11-12 17:12 /tmp
drwxr-xr-x - tao supergroup 0 2022-11-10 18:44 /wcinput
drwxr-xr-x - tao supergroup 0 2022-11-12 14:54 /wcoutput
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /sanguo
Found 3 items
-rw-r--r-- 3 tao supergroup 14 2022-11-15 14:12 /sanguo/shuguo.txt
-rw-r--r-- 3 tao supergroup 7 2022-11-15 14:09 /sanguo/weiguo.txt
-rw-r--r-- 3 tao supergroup 6 2022-11-15 14:10 /sanguo/wuguo.txt
2)-cat:显示文件内容
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -cat /sanguo/shuguo.txt
2022-11-15 14:34:38,214 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
shuguo
liubei
3)-chgrp、-chmod、-chown:Linux 文件系统中的用法一样,修改文件所属权限
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -chmod 666 /sanguo/shuguo.txt
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -chown tao:tao /sanguo/shuguo.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O3VQNIMP-1679990546831)(pics/image-20221115143657048.png)]
4)-mkdir:创建路径
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /jinguo
5)-cp:从 HDFS 的一个路径拷贝到 HDFS 的另一个路径
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo.txt /jinguo
6)-mv:在 HDFS 目录中移动文件
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/wuguo.txt /jinguo
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/weiguo.txt /jinguo
7)-tail:显示一个文件的末尾 1kb 的数据
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -tail /jinguo/shuguo.txt
8)-rm:删除文件或文件夹
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -rm /sanguo/shuguo.txt
9)-rm -r:递归删除目录及目录里面内容
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /sanguo
10)-du 统计文件夹的大小信息
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -du -s -h /jinguo
27 81 /jinguo
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -du -h /jinguo
14 42 /jinguo/shuguo.txt
7 21 /jinguo/weiguo.txt
6 18 /jinguo/wuguo.tx
说明:27 表示文件大小;81 表示 27*3 个副本;/jinguo 表示查看的目录
11)-setrep:设置 HDFS 中文件的副本数量
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -setrep 10 /jinguo/shuguo.txt
这里设置的副本数只是记录在 NameNode 的元数据中,是否真的会有这么多副本,还得 看 DataNode 的数量。因为目前只有 3 台设备,最多也就 3 个副本,只有节点数的增加到 10 台时,副本数才能达到 10
3. HDFS的API操作
数据的上传和下载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zRjcWRQh-1679990546831)(pics/image-20221121145718786.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQldjYgY-1679990546832)(pics/image-20221121145652354.png)]
4. HDFS的读写流程(面试重点)
5. NameNode 和 SecondaryNameNode
6. DataNode
sferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
shuguo
liubei
3)-chgrp、-chmod、-chown:Linux 文件系统中的用法一样,修改文件所属权限
```shell
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -chmod 666 /sanguo/shuguo.txt
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -chown tao:tao /sanguo/shuguo.txt
[外链图片转存中…(img-O3VQNIMP-1679990546831)]
4)-mkdir:创建路径
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /jinguo
5)-cp:从 HDFS 的一个路径拷贝到 HDFS 的另一个路径
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo.txt /jinguo
6)-mv:在 HDFS 目录中移动文件
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/wuguo.txt /jinguo
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/weiguo.txt /jinguo
7)-tail:显示一个文件的末尾 1kb 的数据
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -tail /jinguo/shuguo.txt
8)-rm:删除文件或文件夹
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -rm /sanguo/shuguo.txt
9)-rm -r:递归删除目录及目录里面内容
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /sanguo
10)-du 统计文件夹的大小信息
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -du -s -h /jinguo
27 81 /jinguo
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -du -h /jinguo
14 42 /jinguo/shuguo.txt
7 21 /jinguo/weiguo.txt
6 18 /jinguo/wuguo.tx
说明:27 表示文件大小;81 表示 27*3 个副本;/jinguo 表示查看的目录
11)-setrep:设置 HDFS 中文件的副本数量
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -setrep 10 /jinguo/shuguo.txt
这里设置的副本数只是记录在 NameNode 的元数据中,是否真的会有这么多副本,还得 看 DataNode 的数量。因为目前只有 3 台设备,最多也就 3 个副本,只有节点数的增加到 10 台时,副本数才能达到 10
3. HDFS的API操作
数据的上传和下载
[外链图片转存中…(img-zRjcWRQh-1679990546831)]
[外链图片转存中…(img-yQldjYgY-1679990546832)]