Hadoop

视频

https://blog.csdn.net/qq_52674050/article/details/125493470

虚拟机配置

------------图片没有放到图床

Hadoop运行环境搭建

教程:尚硅谷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: 对应的配置信息

image-20221107001234536

sbin: 启动集群相关命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lqqwoGMV-1679990546812)(pics/image-20221107001528147.png)]

Hadoop运行模式

Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式

官方文档

本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。

伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模 拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用

完全分布式模式:多台服务器组成分布式环境。生产环境使用。

image-20221107104325619

本地运行模式(官方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 
image-20221107144241293

如果我们再次执行

[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 是把所有文件都复制过去
  1. 基本语法

    rsync -av $pdir/$fname $user@$host:$pdir/$fname
    命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
    

    选项参数说明

    -a 归档拷贝

    -v 显示复制过程

  1. 案例实操

    (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)]

image-20221110151117164
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上存储的数据信息

image-20221110183107264

http://192.168.10.103:8088/

查看yarn 上运行的Job信息

image-20221110183123131
集群基本测试
(1)上传文件到集群
  • 上传小文件
[tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /wcinput

原本:

image-20221110183928132

运行后:

image-20221110184042742
# 将 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)]

image-20221110184659897
  • 上传大文件
[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.xHadoop3.x
NameNode内部通信端口8020 / 90008020 / 9000/9820
NameNode HTTP UI500709870
MapReduce Yarn查看执行任务端口80888088
历史服务器通信端口1988819888
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 优缺点

image-20221115121152845

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 准备工作

  1. 启动

    [tao@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh 
    
    
  2. 输出命令参数

    [tao@hadoop102 hadoop-3.1.3]$ $ hadoop fs -help rm
    
  3. 创建文件夹

    [tao@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /sanguo
    
    
    image-20221115140057271

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
image-20221115141327352

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)]

4. HDFS的读写流程(面试重点)

5. NameNode 和 SecondaryNameNode

6. DataNode

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值