前置知识
大数据三个阶段
- 阶段 1:Hadoop 生态体系
- 阶段 2:Spark 离线计算
- 阶段 3:Flink 实时计算
大数据两个方向
- 离线开发方向——Hadoop、Spark
- 实时计算方向——Flink、Hbase
大数据核心工作
- 分布式数据存储——
HDFS
、HBase、KuDu - 分布式数据计算——MapReduce、
Hive
、Spark
、Flink
- 分布式数据传输——
KafKa
、Pulsar、Flume、Sqoop
Hadoop 三大功能组件
- 数据存储——HDFS
- 数据计算——MapReduce
- 资源调度——YARN
为什么需要分布式存储?
数据量太大,单机存储能力有上限,需要靠数量来解决问题
数量的提升带来的是网络传输、磁盘读写、CPU、内存等各方面的综合提升。
分布式组合在一起可以达到1+1>2的效果
分布式系统常见的组织形式?
去中心化模式:没有明确中心,大家协调工作
中心化模式:有明确的中心,基于中心节点分配工作
Hadoop是哪种模式?
- 主从模式(中心化模式)的架构
HDFS的基础架构
HDFS是Hadoop三大组件(HDFS、MapReduce、YARN)之一,全称是:Hadoop Distributed File System(Hadoop分布式文件系统),是Hadoop技术栈内提供的分布式数据存储解决方案,可以在多台服务器上构建存储集群,存储海量的数据。
HDFS集群角色
主角色:NameNode
- HDFS系统的主角色,是一个独立的进程
- 负责管理HDFS整个文件系统
- 负责管理DataNode
从角色:DataNode
- HDFS系统的从角色,是一个独立进程
- 主要负责数据的存储,即存入数据和取出数据
主角色辅助角色:SecondaryNameNode
- NameNode的辅助,是一个独立进程
- 主要帮助NameNode完成元数据整理工作(打杂)
Hadoop安装包目录结构
bin,存放Hadoop的各类程序(命令)
etc,存放Hadoop的配置文件
include,C语言的一些头文件
lib,存放Linux系统的动态链接库(.so文件)
libexec,存放配置Hadoop系统的脚本文件(.sh和.cmd)
licenses-binary,存放许可证文件
sbin,管理员程序(super bin)
share,存放二进制源码(Java jar包)
配置HDFS集群,涉及的文件的修改
workers: 配置从节点(DataNode)有哪些
hadoop-env.sh: 配置Hadoop的相关环境变量
core-site.xml: Hadoop核心配置文件
hdfs-site.xml: HDFS核心配置文件
这些文件均存在与$HADOOP_HOME/etc/hadoop
文件夹中。$HADOOP_HOME
设置的环境变量,其指代Hadoop安装文件夹
配置workers文件
# 进入配置文件目录
cd etc/hadoop
# 编辑workers文件
vim workers
# 填入如下内容
node1
node2
node3
配置hadoop-env.sh文件
# 填入如下内容
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
JAVA_HOME,指明JDK环境的位置在哪
HADOOP_HOME,指明Hadoop安装位置
HADOOP_CONF_DIR,指明Hadoop配置文件目录位置
HADOOP_LOG_DIR,指明Hadoop运行日志目录位置
通过记录这些环境变量, 来指明上述运行时的重要信息
配置core-site.xml文件
在文件内部填入如下内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
fs.defaultFS
:HDFS文件系统的网络通讯路径hdfs://node1:8020
:协议为hdfs://,namenode为node1,namenode通讯端口为8020io.file.buffer.size
:io操作文件缓冲区大小
配置hdfs-site.xml文件
# 在文件内部填入如下内容
<configuration>
<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>
</configuration>
dfs.datanode.data.dir.perm
:hdfs文件系统,默认创建的文件权限设置。700,即:rwx——dfs.namenode.name.dir
:NameNode元数据的存储位置。/data/nn,在node1节点的/data/nn目录下dfs.namenode.hosts
:NameNode允许哪几个节点的DataNode连接(即允许加入集群)dfs.blocksize
:hdfs默认块大小。268435456(256MB)dfs.namenode.handler.count
:namenode处理的并发线程数。以100个并行度处理文件系统的管理任务dfs.datanode.data.dir
:从节点DataNode的数据存储目录。/data/dn,即数据存放在node1、node2、node3,三台机器的/data/dn内
HDFS的Shell操作
进程启停管理
Hadoop HDFS组件内置了HDFS集群的一键启停脚本。
#一键启动HDFS集群
$HADOOP_HOME/sbin/start-dfs.sh
执行原理:
在执行此脚本的机器上,启动SecondaryNameNode
读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,启动NameNode
读取workers内容,确认DataNode所在机器,启动全部DataNode
#一键关闭HDFS集群
$HADOOP_HOME/sbin/stop-dfs.sh
执行原理:
在执行此脚本的机器上,关闭SecondaryNameNode
读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,关闭NameNode
读取workers内容,确认DataNode所在机器,关闭全部NameNode
除了一键启停外,也可以单独控制进程的启停。
$HADOOP_HOME/sbin/hadoop-daemon.sh
,此脚本可以单独控制所在机器的进程的启停
用法:hadoop-daemon.sh (start|status|stop) (namenode|secondarynamenode|datanode)
$HADOOP_HOME/bin/hdfs
,此程序也可以用以单独控制所在机器的进程的启停
用法:hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)
文件系统操作命令
关于HDFS文件系统的操作命令,Hadoop提供了2套命令体系
hadoop命令(老版本用法),用法:
hadoop fs [generic options]
hdfs命令(新版本用法),用法:
hdfs dfs [generic options]
两者在文件系统操作上,用法完全一致,用哪个都可以,某些特殊操作需要选择hadoop命令或hdfs命令
常用命令:
mkdir 创建文件夹
ls、cat 列出内容、查看内容
cp、mv、rmr 复制、移动、删除
put、get 上传、下载
appendToFile 向文件追加内容
1.创建文件夹
hadoop fs -mkdir [-p] <path> ...
hdfs dfs -mkdir [-p] <path> ...
# path 为待创建的目录
# -p选项的行为与Linux mkdir -p一致,它会沿着路径创建父目录。
2.查看指定目录下内容
hadoop fs -ls [-h] [-R] [<path> ...]
hdfs dfs -ls [-h] [-R] [<path> ...]
# path 指定目录路径
# -h 人性化显示文件size
# -R 递归查看指定目录及其子目录
3.上传文件到HDFS指定目录下
hadoop fs -put [-f] [-p] <localsrc> ... <dst>
hdfs dfs -put [-f] [-p] <localsrc> ... <dst>
# -f 覆盖目标文件(已存在下)
# -p 保留访问和修改时间,所有权和权限。
# localsrc 本地文件系统(客户端所在机器)
# dst 目标文件系统(HDFS)
4.查看HDFS文件内容
hadoop fs -cat <src> ...
hdfs dfs -cat <src> ...
#读取指定文件全部内容,显示在标准输出控制台。
#读取大文件可以使用管道符配合more
hadoop fs -cat <src> | more
hdfs dfs -cat <src> | more
5.下载HDFS文件
hadoop fs -get [-f] [-p] <src> ... <localdst>
hdfs dfs -get [-f] [-p] <src> ... <localdst>
#下载文件到本地文件系统指定目录,localdst必须是目录
#-f 覆盖目标文件(已存在下)
#-p 保留访问和修改时间,所有权和权限。
6.拷贝HDFS文件
hadoop fs -cp [-f] <src> ... <dst>
hdfs dfs -cp [-f] <src> ... <dst>
# -f 覆盖目标文件(已存在下)
7.追加数据到HDFS文件中
hadoop fs -appendToFile <localsrc> ... <dst>
hdfs dfs -appendToFile <localsrc> ... <dst>
#将所有给定本地文件的内容追加到给定dst文件。
#dst如果文件不存在,将创建该文件。
#如果<localSrc>为-,则输入为从标准输入中读取。
8.HDFS数据移动操作
hadoop fs -mv <src> ... <dst>
hdfs dfs -mv <src> ... <dst>
# 移动文件到指定文件夹下
# 可以使用该命令移动数据,重命名文件的名称
9.HDFS数据删除操作
hadoop fs -rm -r [-skipTrash] URI [URI ...]
hdfs dfs -rm -r [-skipTrash] URI [URI ...]
# 删除指定路径的文件或文件夹
# -skipTrash 跳过回收站,直接删除
命令官方指导文档:Apache Hadoop 3.3.4 – Overview
❤️Sponsor
您的支持是我不断前进的动力,如果您感觉本文对您有所帮助的话,可以考虑打赏一下本文,用以维持本博客的运营费用,拒绝白嫖,从你我做起!🥰🥰🥰
支付宝 | 微信 |