大数据Hadoop全家桶学习1:分布式文件存储系统HDFS

    技术2022-07-13  76

    Hadoop生态

    三个核心组件:

    分布式文件系统----------HDFS(实现将文件分布式存储在很多服务器上)分布式运算编程框架----MapReduce(实现在很多机器上分布式并行运算)分布式资源调度平台----YARN(帮助用户调度大量的MapReduce程序,并合理分配运算资源)

     

    存储框架:

    HDFS-----------分布式文件存储系统(存储单元:文件)

    Hbase---------分布式数据库系统(存储单元:表)

    Kafka----------分布式消息缓存系统(存储单元:消息)(实时流式处理场景中广泛使用)

    运算框架:

    MapReduce------离线批处理/Hadoop中的批量处理框架

    Spark--------------离线批量处理/也可以实时流式处理

    Storm-------------实时流式处理(Spark可替换)

    辅助类工具:

    HIve------------数据仓库(看起来像数据库,但不是数据库。存一些需要分析的数据,从而可以直接写sql语句进行统计。可以接收sql翻译成mapreduce或者spark程序运行,从而让开发人员不用写mapreduce逻辑,只需要写sql逻辑)

    Flume-----------数据采集

    Sqoop----------数据迁移(比如把Hadoop的数据导入到关系型数据库Mysql,以便展示web端)

    ElasticSearch-------分布式搜索引擎

    大数据处理应用场景:

    (1)公司产品 / 运营情况分析

    (2)推荐系统(例如电商推荐)

    (3)精准广告推荐系统

    一、分布式存储系统HDFS 介绍

    1.1、存储模型:字节

    文件线性切割成块(Block:偏移量 offset ;

    Block分散存储在集群节点中,单一文件Block大小一致,文件与文件可以不一致;

    Block可以设置副本数,副本无序分散在不同节点中(副本数不要超过节点数量);

    文件上传可以设置Block大小和副本数,已上传的文件Block副本数可以调整,大小不变;

    只支持一次写入多次读取,同一时刻只有一个写入者;

    可以append追加数据。

    1.2、架构模型:

    文件元数据MetaData,文件数据 

    元数据数据本身

    (主)NameNode节点保存文件元数据单节点   posix

    (从)DataNode节点保存文件Block数据:多节点

    DataNodeNameNode保持心跳,提交Block列表

    HdfsClientNameNode交互元数据信息

    HdfsClientDataNode交互文件Block据(cs)

    DataNode 利用服务器本地文件系统存储数据块

    1.3、HDFS架构:

    NameNode(NN):

    (1)基于内存存储 :不会和磁盘发生交换(双向)

    只存在内存中持久化(单向)

    (2)NameNode主要功能:接受客户端的读写服务、收集DataNode汇报的Block列表信息

    (3)NameNode保存metadata信息包括:

    文件owership和permissions文件大小,时间Block列表:Block偏移量),位置信息(持久化不存)Block每副本位置(由DataNode上报)

    (4)NameNode持久化:

    NameNode的metadata信息在启动后会加载到内存metadata存储到磁盘文件名为”fsimage(时点备份)Block的位置信息不会保存到fsimageedits记录对metadata的操作日志…>Redis

    SecondaryNameNode(SNN):

    (1)作用:它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。

    (2)SNN执行合并时机:

    根据配置文件设置的时间间隔fs.checkpoint.period  默认3600秒根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB 

    DataNode(DN):

    本地磁盘目录存储数据(Block)文件形式同时存储Block的元数据信息文件启动DN时会向NN汇报block信息通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN

    1.4、HDFS写流程

    Client:切分文件Block

    -->按Block线性和NN获取DN列表(副本数)

    -->验证DN列表后以更小的单位流式传输数据

    -->各节点,两两通信确定可用

    -->Block传输结束后:

    DN向NN汇报Block信息DN向Client汇报完成Client向NN汇报完成获取下一个Block存放的DN列表.

    -->最终Client汇报完成NN会在写流程更新文件状态

    1.5、HDFS读流程

    Client:

    和NN获取一部分Block副本位置列表线性和DN获取Block,最终合并为一个文件在Block副本列表中按距离择优选MD5验证数据完整性

    二、HDFS常用命令

    2.1、帮助命令

    一切命令都从帮助开始,命令是记不完的,只有学会使用帮助,才能免却记忆的痛苦。 hdfs dfs -help

    2.2、查看命令

    (1)列出文件系统目录下的目录和文件:

    # -h 以更友好的方式列出,主要针对文件大小显示成相应单位K、M、G等 # -r 递归列出,类似于linux中的tree命令 hdfs dfs -ls [-h] [-r] <path>

    (2)查看文件内容:

    hdfs dfs -cat <hdfsfile>

    (3)查看文件末尾的1KB数据:

    hdfs dfs -tail [-f] <hdfsfile>

    2.3、创建命令

    (1)新建目录:

    hdfs dfs -mkdir <path>

    (2)创建多级目录:

    hdfs dfs -mkdir -p <path>

    (3)新建一个空文件:

    # linux下是touchz,不知道为什么在hdfs要加个z? hdfs dfs -touchz <filename>

    (4)上传本地文件到hdfs:

    # -f 如果hdfs上已经存在要上传的文件,则覆盖 hdfs dfs -put [-f]  <local src> ...  <hdfs dst>

    举例:将/usr/local/hadoop-2.7.3/etc/hadoop下的所有配置文件都上传到hdfs的/hadoop目录:

    hdfs dfs -mkdir /config hdfs dfs -put /usr/local/hadoop-2.7.3/etc/hadoop /config

    2.4、删除命令

    (1)删除文件或目录:

    # -r 递归删除目录下的所有文件 # -f为直接删除,不予提示 # -skipTrash为彻底放入文件,不放入回收站 hdfs dfs -rm [-r] [-f] [-skipTrash] <hdfs path>

    2.5、获取命令 (1)将hdfs文件下载到本地:

    hdfs dfs -get < hdfs path> < localpath> 举例:将hdfs的/config目录下载到本地的/config目录下 hdfs dfs -get /config /config

    (2)将hdfs文件合并起来下载到本地:

    hdfs hdfs -getmerge [-nl] <hdfs path> <localdst> 举例:将hdfs的/config/hadoop目录下的所有文件合并下载到本地的config.txt中 hdfs dfs -getmerge /config/hadoop config.txt

    2.6、其他hdfs文件操作命令

    拷贝:hdfs dfs -cp [-r] < hdfs path >  < hdfs path1 > 移动:hdfs dfs -mv < hdfs path >  < hdfs path1 > 统计目录下的对象数:hdfs dfs -count < hdfs path > 统计目录下的对象大小:hdfs dfs -du [-s] [-h] < hdfs path > 修改hdfs文件权限 修改所属组[-chgrp [-R] GROUP PATH...]  修改权限模式[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] 修改所需组和所有者[-chown [-R] [OWNER][:[GROUP]] PATH...] 

    2.7、hdfs管理命令

    (1)显示帮助:

    hdfs dfsadmin -help

    (2)查看文件系统健康状态:

    显示hdfs的容量、数据块和数据节点的信息 hdfs dfsadmin -report

    (3)安全模式管理: 安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。当hdfs进入安全模式时不允许客户端进行任何修改文件的操作,包括上传文件,删除文件,重命名,创建文件夹等操作。 当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。假设我们设置的副本数(即参数dfs.replication)是5,那么在datanode上就应该有5个副本存在,假设只存在3个副本,那么比例就是3/5=0.6。通过配置dfs.safemode.threshold.pct定义最小的副本率,默认为0.999。

    1、查看安全模式状态 hdfs dfsadmin -safemode get 2、强制进入安全模式 hdfs dfsadmin -safemode enter 3、强制离开安全模式 hdfs dfsadmin -safemode leave

    三、常用命令汇总:

    1.hdfs命令行 (1)查看帮助 hdfs dfs -help (2)查看当前目录信息 hdfs dfs -ls / (3)上传文件 hdfs dfs -put /本地路径 /hdfs路径 (4)剪切文件 hdfs dfs -moveFromLocal a.txt /aa.txt (5)下载文件到本地 hdfs dfs -get /hdfs路径 /本地路径 (6)合并下载 hdfs dfs -getmerge /hdfs路径文件夹 /合并后的文件 (7)创建文件夹 hdfs dfs -mkdir /hello (8)创建多级文件夹 hdfs dfs -mkdir -p /hello/world (9)移动hdfs文件 hdfs dfs -mv /hdfs路径 /hdfs路径 (10)复制hdfs文件 hdfs dfs -cp /hdfs路径 /hdfs路径 (11)删除hdfs文件 hdfs dfs -rm /aa.txt (12)删除hdfs文件夹 hdfs dfs -rm -r /hello (13)查看hdfs中的文件 hdfs dfs -cat /文件 hdfs dfs -tail -f /文件 (14)查看文件夹中有多少个文件 hdfs dfs -count /文件夹 (15)查看hdfs的总空间 hdfs dfs -df / hdfs dfs -df -h / (16)修改副本数 hdfs dfs -setrep 1 /a.txtZ-blog:www.361wx.com

     

    Processed: 0.011, SQL: 10