【Hadoop技术框架--HDFS】

本文详细介绍了Hadoop分布式文件系统HDFS的核心概念,包括其分布式架构(去中心化和中心化)、HDFS的角色分配(NameNode、DataNode和SecondaryNameNode),以及HDFS集群的部署步骤、服务启停和Shell操作。同时,还提到了如何使用HDFSwebUI进行管理和监控。
摘要由CSDN通过智能技术生成

前言:
💞💞大家好,书生♡,今天主要和大家分享一下大数据技术框架Hadoop的组成之一的hdfs,希望对大家有所帮助。感谢大家关注点赞。
💞💞前路漫漫,希望大家坚持下去,不忘初心,成为一名优秀的程序员

个人主页⭐: 书生♡
gitee主页🙋‍♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,前端,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬

1. 分布式的基础架构分析

 大数据时代的到来,人们对数据的依赖性越来越大、上网产生的数据量急剧增加、信息量爆炸式增长。因此,只是通过增加计算机的硬盘容量处理数据难以达到要求,这样将所有的数据存储和处理在同一台计算机上便不可行了。此时通过增加计算机的横向容量,即增加计算机的数量,将数据分布在多台计算机上的Hadoop 分布式计算便诞生了。而HDFS是Hadoop 分布式计算的一个重要组成部分,分布式文件系统。

大数据体系中,分布式的调度一般分为两个部分:

  • 去中心化管理
  • 中心化管理

1.1 去中心化

去中心化就是服务期之前根据规则去协调。
在这里插入图片描述

例如区块链

1.2 中心化

中心化:有一个中心节点(服务器)来统筹其它服务器的工作,统一指挥,统一调派,避免混乱。
这种模式,也被称之为:一主多从模式,简称主从模式(Master And Slaves)

在这里插入图片描述
大数据框架,大多数的基础架构上,都是符合:中心化模式的

这种模式,也被称之为:一主多从模式,简称主从模式(Master And Slaves)

主从架构(中心化):

  • 主角色 master: 发号施令,负责任务的接受和分配
  • 从角色 slave: 负责干活
    主备架构:可以解决中心化存在的问题
  • 主角色active : 正常工作
  • 备角色standby : 观察主角色工作,并实时备份主角色数据,当主角色宕机后,立即上位

在这里插入图片描述
我们是今天的内容HDFS就是中心化管理

2. HDFS的基础架构

在这里插入图片描述

因为我们的HDFS就是中心化:所以我们的HDFS其中也是主从结构,就是有一个中心节点(服务器),还有其他好几个从服务器去处理数据。

HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一
全称是:Hadoop Distributed File System(Hadoop分布式文件系统)
是Hadoop技术栈内提供的分布式数据存储解决方案
可以在多台服务器上构建存储集群,存储海量的数据

2.1 HDFS的角色分配

HDFS的角色分配:
NameNode:是集群中的主角色或主节点,负责 DataNode的管理工作

DataNode:是集群中的从角色或从节点, 负责数据文件的读或写

SecondaryNameNode: 是集群中的辅助角色或辅助节点,负责帮助NameNode完成管理工作(负责元数据的合并工作).

在这里插入图片描述

NameNode:简称为NN
DataNode:简称为DN
SecondaryNameNode:简称为SNN

 在开发中,我们的NN只有一个,就是只有一个主服务器,会有多个DN从服务器,以及一个SNN帮助NameNode完成管理工作(负责元数据的合并工作).。

 在开发中我们可能会遇见主服务器宕机的时候,那么我们一般的处理方法是使用主备服务器,也就是会说我们会同时运行多个NN服务器,但是对外处理请求的只有一个,一旦这个坏了,另外一个马上连接。

HDFS是一个标准的主从架构

注意: 通常情况下, NameNode的服务器性能,要比DataNode高.(cpu和内存大)

3. HDFS集群环境部署

3.1 部署hadoop的前提条件

关于HDFS的环境部署,我们只需要了解就可以了。在公司中我们一般使用配置好的服务器。

前期准备:

  1. 有三台服务器
  2. 验证服务器的网络畅通
  3. 可以进行ssh免密登录
  4. 关闭防火墙及selinux
  5. 安装jdk
  6. 时间同步

关于这些准备,在我的上一个博客中详细的讲述了,大家可以去看看上一篇博客的内容。
HDFS集群环境部署

配置好环境以后,我们需要下载Hadoop的安装包:

Hadoop的下载网址:https://hadoop.apache.org/releases.html
Hadoop的下载网址:https://archive.apache.org/dist/hadoop/common/

3.2 安装部署

3.2.1 部署步骤

  1. 将hadoop安装包上传到/export/software目录下
    在这里插入图片描述

  2. 将该安装包进行解压

cd /export/software
tar -zxvf 安装包名 -C ../server

在这里插入图片描述

在这里插入图片描述
3. 创建一个软连接

cd /export/server
ln -s hadoop-3.3.0/ hadoop
  1. 修改配置文件
    4.1 先进入配置文件的文件目录:
cd /export/server/hadoop/etc/hadoop/

在这里插入图片描述

workers: 配置从节点(DataNode)有哪些
hadoop-env.sh: 配置Hadoop的相关环境变量
core-site.xml: Hadoop核心配置文件
hdfs-site.xml: HDFS核心配置文件
yarn-site.xml: yarn核心配置文件
mapred-site.xml: mapreduce核心配置文件

4.2 打开workers文件(配置参会该集群工作的服务器有哪些)

vim workers

# 将内部文件修改为如下内容
node1
node2
node3

4.3 打开hadoop-env.sh文件,配置hadoop的基础环境变量

vim hadoop-env.sh

# 在文件末尾添加如下内容
export JAVA_HOME=/export/server/jdk  # java安装目录
export HADOOP_HOME=/export/server/hadoop  # hadoop安装目录
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  # hadoop配置文件目录
export HADOOP_LOG_DIR=$HADOOP_HOME/logs # hadoop日志文件目录

#文件最后添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

4.4 打开core-site.xml文件,配置hadoop的一些基础服务配置信息

xml文件时以成对标签的形式进行kv结构的修饰
标签内部的名称就是key值,两个标签中间的数据就是value

vim core-site.xml

# 在文件末尾添加如下内容

# 在文件内部填入如下内容

<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>

<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>

# 注意要卸载configuration的标签内部,多余的标签要删掉

4.5 打开hdfs-site.xml文件,配置hdfs的相关服务信息

# 在文件内部填入如下内容
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
 <value>/data/nn</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>node1,node2,node3</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>

4.6 准备数据存储目录

# 进入root权限,创建目录
# node1
mkdir -p /data/nn
mkdir /data/dn

# node2, node3
mkdir -p /data/dn

4.7 将hadoop目录复制到node2和node3中
这个scp的代码在下面会给大家讲解,这里大家只要知道这个是复制文件的就可以。具体用法后面会讲。

scp -r /export/server/hadoop node2:/export/server
scp -r /export/server/hadoop node3:/export/server

4.8 配置环境变量

export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

注意:使用source /etc/profile进行激活

3.2.2 初始化NameNode

由于我们的NameNode在node1上,所以只在node1上执行该代码即可

可以理解为我们要存储元数据,先要构建一个元数据的结构文件,后续将数据不断的在该文件中增删改查.

hadoop namenode -format

3.2.3 启动服务

# 一键启动hdfs集群
start-dfs.sh
# 一键关闭hdfs集群
stop-dfs.sh

# 如果遇到命令未找到的错误,表明环境变量未配置好,可以以绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh
/export/server/hadoop/sbin/stop-dfs.sh

在这里插入图片描述
服务启动后,可以使用jps查看服务进程

jps

在这里插入图片描述

3.2.4 如果出现服务启动问题去日志文件中找答案

  1. cd到logs目录中
cd /export/server/hadoop/logs
  1. 找到故障服务的.log文件
    在这里插入图片描述
  2. 使用grep进行筛选
# 通常我们筛选的都是error或者warning, 如果是info证明没有异常
cat hadoop-hadoop-datanode-node1.log | grep WARN

4. HDFS的服务启停

4.1 对整个hadoop服务的启动和关闭

会将hadoop中的hdfs,yarn服务都会启动

start-all.sh

stop-all.sh

在这里插入图片描述

4.2 一键启停hdfs集群

下方指令是针对于整个hdfs的启停.在node1中执行该命令, node2, node3中的服务都会被启动. 前提是免密登录

# 一键启动
start-dfs.sh 
# 一键停止
stop-dfs.sh

在这里插入图片描述

4.3 单起单停

# 只能控制当前服务器中服务的启停
hdfs --daemon start|stop|status namenode|datanode|secondarynamenode

在这里插入图片描述

使用浏览器访问服务,验证服务器是否启动
namenode所在服务器的ip地址:9870

192.168.88.100:9870

在这里插入图片描述

5.HDFS的Shell操作

hdfs的文件结构和linux中基本一致 : 树状结构

hdfs中也划分目录和文件,目录只能存储子目录和文件, 文件只能存储数据

文件和数据的区别???

文件是用来存储数据的,磁盘中数据以文件的形式存储起来,方便后续查找使用,数据不一定以文件的形式展示.

hdfs的shell命令格式:

# 新写法
hdfs dfs -命令 [-选项] [参数]
# 老写法
hadoop fs -命令 [-选项] [参数]

注意: 在hdfs dfs - 之后或hadoop fs -之后和linux终端指令基本没有区别

关于hdfs的相关命令,我们可以通过命令才查看

hdfs dfs 查看hdfs有哪些命令

Usage: hadoop fs [generic options]
        [-appendToFile <localsrc> ... <dst>]
        [-cat [-ignoreCrc] <src> ...]
        [-checksum [-v] <src> ...]
        [-chgrp [-R] GROUP PATH...]
        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
        [-concat <target path> <src path> <src path> ...]
        [-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] <localsrc> ... <dst>]
        [-copyToLocal [-f] [-p] [-crc] [-ignoreCrc] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>]
        [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] [-s] <path> ...]
        [-cp [-f] [-p | -p[topax]] [-d] [-t <thread count>] [-q <thread pool queue size>] <src> ... <dst>]
        [-createSnapshot <snapshotDir> [<snapshotName>]]
        [-deleteSnapshot <snapshotDir> <snapshotName>]
        [-df [-h] [<path> ...]]
        [-du [-s] [-h] [-v] [-x] <path> ...]
        [-expunge [-immediate] [-fs <path>]]
        [-find <path> ... <expression> ...]
        [-get [-f] [-p] [-crc] [-ignoreCrc] [-t <thread count>] [-q <thread pool queue size>] <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 [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
        [-moveToLocal <src> <localdst>]
        [-mv <src> ... <dst>]
        [-put [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] <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 -[defswrz] <path>]
        [-text [-ignoreCrc] <src> ...]
        [-touch [-a] [-m] [-t TIMESTAMP (yyyyMMdd:HHmmss) ] [-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]


5.1 ls指令查看hdfs中的文件目录信息

hdfs dfs -ls 路径 路径要从根路径指定
hadoop fs -ls 路径

在这里插入图片描述

5.2 hdfs的文件目录操作

  • hdfs dfs -mkdir /路径
  • hdfs dfs -touch /路径/文件
  • hdfs dfs -mv 原始路径 目标路径
  • hdfs dfs -cp 原始路径 目标路径
  • hdfs dfs -rm -r /路径
 hdfs dfs -mkdir -p /itcast/itheima

在这里插入图片描述

5.3 文件的上传和下载

put指令: 从linux 服务器本地上传到hdfs文件系统中

hdfs dfs -put 本地文件路径(写绝对路径) hdfs的路径

hdfs dfs -put /var/log/messages  /

get命令: 从hdfs文件系统将文件下载到linux文件系统中

hdfs dfs -get hdfs的文件路径 本地文件路径

hdfs dfs -get /sparklog/local-1664869425770.lz4  /root

注意: 在hdfs中使用任何文件或目录,要使用绝对路径进行查找,在hdfs中 没有工作目录的概念,更没有相对路径的概念.

5.4 练习

在hdfs中创建文件夹:/itcast/itheima,如存在请删除
hdfs dfs -ls /
hdfs dfs -mkdir -p /itcast/itheima


上传/etc/hosts文件到hdfs的/itcast/itheima内
hdfs dfs -put /etc/hosts /itcast/itheima

查看hdfs中刚刚上传的文件内容
hdfs dfs -put /etc/hosts /itcast/itheima

向hdfs中上传的文件追加:itheima到最后一行
echo itheima > a.txt
hdfs dfs -appendToFile /root/a.txt /itcast/itheima/hosts

下载hdfs中上传的文件到本地任意目录
 hdfs dfs -get /itcast/itheima/hosts /root
 
在hdfs中创建文件夹:/itcast/bigdata,将/itcast/itheima/hosts文件复制到/itcast/bigdata内
hdfs dfs -mkdir /itcast/bigdata
hdfs dfs -cp /itcast/itheima/hosts /itcast/bigdata

在hdfs中将/itcast/itheima/hosts文件重命名为/itcast/itheima/myhost
hdfs dfs -mv /itcast/itheima/hosts /itcast/itheima/myhosts

在hdfs中删除/itcast文件夹
hdfs dfs -rm -r /itcast

6.HDFS webUI的使用

我们可以使用node1:9870打开hdfs的网页端,但是前提是必须配置windows系统下的主机映射,否则只能使用ip访问

`192.168.88.100:9870

打开C:\Windows\System32\drivers\etc\hosts文件

写入下面:
192.168.88.100 node1 node1.itcast.cn
192.168.88.101 node2 node2.itcast.cn
192.168.88.102 node3 node3.itcast.cn

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据存储:

在这里插入图片描述

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值