扫码加入千人跳槽求职QQ群,每日都有全国招聘信息哦

   

Hadoop 附带了一个名为 HDFS(Hadoop分布式文件系统)的分布式文件系统,专门

存储超大数据文件,为整个 Hadoop 生态圈提供了基础的存储服务。

本章内容:

1) HDFS 文件系统的特点,以及不适用的场景

2) HDFS 文件系统重点知识点:体系架构和数据读写流程

3) 关于操作 HDFS 文件系统的一些基本用户命令

1. HDFS 特点 :

HDFS 专为解决大数据存储问题而产生的,其具备了以下特点:

1) HDFS 文件系统可存储超大文件

每个磁盘都有默认的数据块大小,这是磁盘在对数据进行读和写时要求的最小单位,文件系统是要构建于磁盘上的,文件系统的也有块的逻辑概念,通常是磁盘块的整数倍,通常文件系统为几千个字节,而磁盘块一般为 512个字节。

HDFS 是一种文件系统,自身也有块(block)的概念,其文件块要比普通单一磁

盘上文件系统大的多,默认是 64MB。

HDFS 上的块之所以设计的如此之大,其目的是为了最小化寻址开销。

HDFS文件的大小可以大于网络中任意一个磁盘的容量,文件的所有块并不需要存储在一个磁盘上,因此可以利用集群上任意一个磁盘进行存储,由于具备这种分布式存储的逻辑,所以可以存储超大的文件,通常 G、T、P 级别。

2) 一次写入,多次读取

一个文件经过创建、写入和关闭之后就不需要改变,这个假设简化了数据一致性的问题,同时提高数据访问的吞吐量。

3) 运行在普通廉价的机器上

Hadoop 的设计对硬件要求低,无需昂贵的高可用性机器上,因为在 HDFS 设计中充分考虑到了数据的可靠性、安全性和高可用性。

2. 不适用于 于 HDFS 的场景:

1) 低延迟

HDFS 不适用于实时查询这种对延迟要求高的场景,例如:股票实盘。往往应对低延迟数据访问场景需要通过数据库访问索引的方案来解决,Hadoop 生态圈中的Hbase 具有这种随机读、低延迟等特点。

2) 大量小文件

对于 Hadoop 系统,小文件通常定义为远小于HDFS的block size (默认64MB)的文件,由于每个文件都会产生各自的MetaData元数据,Hadoop通过Namenode来存储这些信息,若小文件过多,容易导致 Namenode 存储出现瓶颈。

3) 多用户更新

为了保证并发性,HDFS 需要一次写入多次读取,目前不支持多用户写入,若要修改,也是通过追加的方式添加到文件的末尾处,出现太多文件需要更新的情况,Hadoop是不支持的。针对有多人写入数据的场景,可以考虑采用 Hbase 的方案。

4) 结构化数据

HDFS适合存储半结构化和非结构化数据,若有严格的结构化数据存储场景,也可以考虑采用 Hbase 的方案。

5) 数据量并不大

通常 Hadoop 适用于 TB、PB 数据,若待处理的数据只有几十 GB 的话,不建议使用 Hadoop,因为没有任何好处。

3. HDFS 体系 架构

HDFS 是一个主/从(Master/Slave)体系架构,由于分布式存储的性质,集群拥有两类节点 NameNode 和 DataNode。

NameNode(名字节点):系统中通常只有一个,中心服务器的角色,管理存储和检索多个 DataNode 的实际数据所需的所有元数据。

DataNode(数据节点):系统中通常有多个,是文件系统中真正存储数据的地方,在NameNode 统一调度下进行数据块的创建、删除和复制。

图中的 Client 是 HDFS 的客户端,是应用程序可通过该模块与 NameNode 和DataNode 进行交互,进行文件的读写操作。

4. HDFS 数据块复制

为了系统容错,文件系统会对所有数据块进行副本复制多份,Hadoop 是默认 3 副本管理。

复本管理策略是运行客户端的节点上放一个复本(若客户端运行在集群之外,会随机选择一个节点),第二个复本会放在与第一个不同且随机另外选择的机架中节点上,第三个复本与第二个复本放在相同机架,切随机选择另一个节点。所存在其他复本,则放在集群中随机选择的节点上,不过系统会尽量避免在相同机架上放太多复本。

所有有关块复制的决策统一由NameNode负责,NameNode会周期性地接受集群中数据节点 DataNode 的心跳和块报告。一个心跳的到达表示这个数据节点是正常的。一个块报告包括该数据节点上所有块的列表。

5. HDFS 读取 和 写入 流程

1) 读文件的过程:

首先 Client 通过 File System 的 Open 函数打开文件,Distributed File System 用RPC 调用 NameNode 节点,得到文件的数据块信息。对于每一个数据块,NameNode节点返回保存数据块的数据节点的地址。Distributed File System 返回FSDataInputStream 给客户端,用来读取数据。客户端调用 stream 的 read()函数开始读取数据。DFSInputStream 连接保存此文件第一个数据块的最近的数据节点。DataNode从数据节点读到客户端(client),当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。当客户端读取完毕数据的时候,调用 FSDataInputStream的 close 函数。

在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。失败的数据节点将被记录,以后不再连接。

2) 写文件的过程:

客户端调用 create()来创建文件,Distributed File System用RPC调用NameNode节点,在文件系统的命名空间中创建一个新的文件。NameNode节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。

Distributed File System返回DFSOutputStream,客户端用于写数据。客户端开始写入数据,DFSOutputStream 将数据分成块,写入 Data Queue。Data Queue 由 DataStreamer读取,并通知NameNode节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个Pipeline里。Data Streamer将数据块写入Pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。

DFSOutputStream为发出去的数据块保存了Ack Queue,等待Pipeline中的数据节点告知数据已经写入成功。

6. 操作 HDFS 的 基本 命令

1) 打印文件列表(ls)

标准写法:

hadoop fs -ls hdfs:/ #hdfs: 明确说明是 HDFS 系统路径

简写:

hadoop fs -ls / #默认是 HDFS 系统下的根目录

打印指定子目录:

hadoop fs -ls /package/test/ #HDFS 系统下某个目录

2) 上传文件、目录(put、copyFromLocal)

put 用法:

上传新文件:

hdfs fs -put file:/root/test.txt hdfs:/ #上传本地 test.txt文件到HDFS根目录,HDFS

根目录须无同名文件,否则“File exists”

hdfs fs -put test.txt /test2.txt #上传并重命名文件。

hdfs fs -put test1.txt test2.txt hdfs:/ #一次上传多个文件到 HDFS 路径。

上传文件夹:

hdfs fs -put mypkg /newpkg #上传并重命名了文件夹。

覆盖上传:

hdfs fs -put -f /root/test.txt / #如果 HDFS 目录中有同名文件会被覆盖

copyFromLocal 用法:

上传文件并重命名:

hadoop fs -copyFromLocal file:/test.txt hdfs:/test2.txt

覆盖上传:

hadoop fs -copyFromLocal -f test.txt /test.txt

3) 下载文件、目录(get、copyToLocal)

get 用法:

拷贝文件到本地目录:

hadoop fs -get hdfs:/test.txt file:/root/

拷贝文件并重命名,可以简写:

hadoop fs -get /test.txt /root/test.txt

copyToLocal 用法

拷贝文件到本地目录:

hadoop fs -copyToLocal hdfs:/test.txt file:/root/

拷贝文件并重命名,可以简写:

hadoop fs -copyToLocal /test.txt /root/test.txt

4) 拷贝文件、目录(cp)

从本地到 HDFS,同 put

hadoop fs -cp file:/test.txt hdfs:/test2.txt

从 HDFS 到 HDFS

hadoop fs -cp hdfs:/test.txt hdfs:/test2.txt

hadoop fs -cp /test.txt /test2.txt

5) 移动文件(mv)

hadoop fs -mv hdfs:/test.txt hdfs:/dir/test.txt

hadoop fs -mv /test.txt /dir/test.txt

6) 删除文件、目录(rm)

删除指定文件

hadoop fs -rm /a.txt

删除全部 txt 文件

hadoop fs -rm /*.txt

递归删除全部文件和目录

hadoop fs -rm -R /dir/

7) 读取文件(cat、tail)

hadoop fs -cat /test.txt #以字节码的形式读取

hadoop fs -tail /test.txt

8) 创建空文件(touchz)

hadoop fs - touchz /newfile.txt

9) 创建文件夹(mkdir)

hadoop fs -mkdir /newdir /newdir2 #可以同时创建多个

hadoop fs -mkdir -p /newpkg/newpkg2/newpkg3 #同时创建父级目录

10) 获取逻辑空间文件、目录大小(du)

hadoop fs - du / #显示 HDFS 根目录中各文件和文件夹大小

hadoop fs -du -h / #以最大单位显示 HDFS 根目录中各文件和文件夹大小

hadoop fs -du -s / #仅显示 HDFS 根目录大小。即各文件和文件夹大小之和

想进入微信群的可扫码,备注入群

转发到朋友圈是最高的赞赏

因为不是天生丽质,所以必须天生励志!

hadoop fs –ls /hbase 无内容_Hadoop大数据实战系列文章之HDFS文件系统相关推荐

  1. hadoop fs –ls /hbase 无内容_Hadoop学习---HDFS的常用shell命令详解

    注意:访问hdfs系统的指令 hadoop dfs --- 已过时 hadoop fs -- 使用范围更大 hdfs dfs --范围相对较小hadoop fs 和 hdfs dfs之间没有太大的区别 ...

  2. vs该文件没有与之关联的应用来执行该操作_Hadoop大数据实战系列文章之Zookeeper...

    扫码加入千人跳槽求职QQ群,每日都有全国招聘信息哦     Zookeeper 是一种分布式的,开源的,应用于分布式应用的协作服务.它提供了一些简单的操作,使得分布式应用可以基于这些接口实现诸如同步. ...

  3. “卜算子·大数据”学习系列原创文章、源码——从入门到精通

    大数据 big-data :white_check_mark: 转载请注明出处与作者信息(如下) 原创作者:王小雷 作品出自:https://github.com/wangxiaoleiAI/big- ...

  4. 【“工业大数据预测”系列】——第2篇:异常数据处理

    文章目录 前言 1 数据来源 2 数据预处理 2.1 无效数据处理 2.2 异常数据处理 3 数据预处理完整代码 前言   Hi,久等了,这里是工业大数据预测系列的第二篇.   前面我们提到,工业大数 ...

  5. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  6. Hadoop命令hadoop fs -ls详解

    Hadoop有提供一些脚本命令,以便于我们对HDFS进行管理,可以通过命令hadoop fs进行查看: 通过以上使用说明可以发现,里面提供了大多数和我们在本地操作文件系统相类似的命令,例如,cat查看 ...

  7. 运行hadoop fs -ls 命令显示本地目录问题

    2019独角兽企业重金招聘Python工程师标准>>> 运行hadoop fs -ls 命令显示本地目录问题 问题原因:是因为在hadoop配置文件中没有指定HDFS的默认路径 解决 ...

  8. hadoop fs -ls / 出现WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform

    Hadoop fs -ls / 出现WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform ...

  9. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法

    大数据学习系列之八----- Hadoop.Spark.HBase.Hive搭建环境遇到的错误以及解决方法 参考文章: (1)大数据学习系列之八----- Hadoop.Spark.HBase.Hiv ...

最新文章

  1. vtigercrm学习(二)
  2. html文章整体居中,div居中与div内容居中
  3. Android MediaPlayer
  4. php rpc调用,PHP 通过 JSON-RPC 调用实现以太坊交互
  5. opencv findContours 报错_acrt_first_block == header
  6. CNSA与CASC和CASIC的区别
  7. Android 系统(41)---Android7.0 PowerManagerService亮灭屏分析(二)
  8. html判断ie6,jquery如何判断是否是ie?
  9. Ubuntu安装JDK,搭建java环境
  10. windows下安装pycharm并连接Linux的python环境
  11. 可爱的 CreateMessageDialog
  12. Servlet面试题整理
  13. 浅析 Redis 复制
  14. Excel分组数据、并创建多个新Excel文件
  15. EFF希望NSA销毁长达14年的电话监控记录
  16. 计算机测电阻伏安特性实验报告,《电学元件伏安特性的测量》实验报告附页
  17. NOIP模拟赛8.16 C、长跑(LCT)
  18. Python开发(基础):列表List
  19. thinkphp生成guid 唯一识别码
  20. 软件工程新生需要注意什么?

热门文章

  1. 满意度指数能够告诉我们什么?
  2. 程序员的算法课(3)-递归(recursion)算法
  3. 弹性地基梁板的计算理论_造价人常用小帮手:30个实用小软件+44套计算表,绝对实用...
  4. Mysql windows安装说明
  5. php判断是否为手机设备
  6. zabbix server的图像展示接口
  7. 《OSPF和IS-IS详解》一第6章 链路状态数据库同步6.1 OSPF数据库同步
  8. Entity Framework 6 Recipes 2nd Edition(11-5)译 - 从”模型定义”函数返回一个匿名类型...
  9. PHP_小数/四舍五入/上进/下取等
  10. svn常用命令与分支操作