《hadoop权威指南》笔记一:走进hdfs

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013128262/article/details/97711061

基于​《hadoop权威指南》第四版

一、什么是hdfs

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。

  • HDFS是一个高度容错性的系统,适合部署在廉价的机器上。
  • HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
  • HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。

HDFS是Apache Hadoop Core项目的一部分。

二、hdfs不适合的几个场景

1. hdfs不适合低时延的应用(几十毫秒)

hdfs本身为高吞吐而优化!
思考: 为何基于hdfs实现的hbase可以满足低延迟的访问需求?

2.小文件不能过多

每个文件、目录、数据块的存储信息大约150字节。
所以一百万个文件,至少需要300MB的内存。当小文件过多时会直接压垮namdnode。

3.不能多用户写入,任意修改文件

不能多用户写入,任意修改文件。hdfs文件只支持单用户写入,仅append!这个和hdfs存储原理相关,后续的笔记会详细介绍。

hdfs最适合一次写入多次读取是最高效的访问模式

三、hdfs基本信息

1. namenode与datanode

  • namenode 可以理解为存储hdfs元数据信息的结点
  • datanode 可以理解为实际存储数据的结点

当然二者的关系不仅仅如此,会有一些复杂的设计在里面。

2.hdfs的块信息

hdfs默认块是128MB,但是当你数据是是10MB时,hdfs不会占用128MBMB(与普通文件系统不一样)。

hdfs的块为什么这么大?

为了最小化寻址开销。当然这个值也不能太大,map任务通常一次只能处理一个块中的数据。

3.基本命令

# 查看help
hadoop fs -help

# 上传文件
hadoop fs -copyFromLocal xxx hdfs://localhost/

# 下载文件
hadoop fs  -copyToLocal

# 建目录
hadoop fs -mkdir dir

# ls
hadoop fs  -ls .
# ls结果的第二列是副本数。其中目录的元数据存储在namenode无副本一说,所以值是 “-”

当客户端使用core-site.xml配置后,我们的命令就不需要使用冗长的URI

四、其他

1.最佳分片大小?

最佳分片大小与块大小相同,如果分片跨越两个数据块。hdfs基本不会同时存储着两个数据块,因此分片中的部分数据需要通过网络传输到map任务运行的节点。

2.map任务将其输出写入本地磁盘而不是hdfs?

中间数据存储在hdfs小题大做了(没必要多副本)。存储在本地磁盘还可以加速运算,减少网络传输。
reduce任务并不具备本地化的优势。

3.hdfs读取与写入流程?

都是6小步,在下一笔记详细介绍

展开阅读全文

没有更多推荐了,返回首页