您好,登录后才能下订单哦!
这篇文章主要为大家展示了“HDFS中Short-Circuit是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HDFS中Short-Circuit是什么”这篇文章吧。
解释下 HDFS 的 Short-Circuit ?
这是一个比较高段位的冷门问题了,我也是一般在面高阶的程序员才会抛出这样的问题,对于考察系统底层原理掌握度方面还是挺有好的。
先说目的:
因为Hadoop的一大基本原则就是移动数据不如移动计算,所以一般HDFS的client端经常会和提供数据的DataNode在同一个节点,Short Circuit Local Reads的目的就是提高在这种情况下的数据读取性能。
正常的数据读取流程,DataNode必须为每个正在读取数据块的客户端保留一个线程和一个TCP套接字。内核中会有TCP协议的开销,以及DataTransferProtocol协议的开销,因此这里有很大的优化空间。
再说流程:
1. client 会向DataNode请求创建一块共享内存,DataNode创建共享内存文件并将共享内存文件描述符返回给 client。(内存文件描述符,Unix的一种机制,目的是让DataNode不是将整个目录传递给客户端,而是打开块文件和元数据文件,保证数据的安全性)
2. client 申请共享内存中的槽位,并向DataNode请求要读取的副本文件描述符,DataNode打开副本文件并将数据块文件和元数据文件的文件描述符返回给 client。
3. client 读取完副本后,异步向DataNode请求释放文件描述符及相应槽位。
另外,其实这个问题也不一定要等面试官问了才回答,在他问你HDFS的读写过程的时候,你也可以在最后适当地插上两句,凸显逼格。
像这样:
“刚才我说的还是比较基础和常规的读写流程,实际上HDFS还有一个Short-Circuit机制可以来做数据本地读取的优化,这是更加底层的内容了...”
接下来可以先别急着讲,先看看面试官的反应看他有没有兴趣听,有的话就可以把上面这一段说出去了,当然也有可能连面试官都没听过这个东西,那就无所谓了,你说的内容已经唬到他了。
之前说过在面试的过程中可以适当地引导面试官的提问方向,往你擅长的方向上带,刚才说的其实就是一种引导的手段了,掌握这个技能的话你会发现你在面试中能表现得更自如,不用被牵着鼻子走。
当两个客户端尝试访问对HDFS相同的文件,会发生什么?
HDFS只支持独占写入。
当第一个客户端连接Namenode打开文件进行写入时,Namenode授予租约的客户端创建这个文件。当第二个客户端试图打开同一个文件写入时,Namenode会发现该文件的租约已经授予给另一个客户端,并拒绝第二个客户端打开请求。
这个问题还是比较简单的,考查的是你是不是真的有实操过,是不是有踩过坑且有思考。
为什么 HDFS 不适合存储过多的小文件?
两个重点,一个是多,一个是小,分别解释。
1)小文件过多,会过多占用namenode的内存,并浪费block。
文件的元数据,都是存储在namenode上
元数据包括文件被分成了哪些blocks,每个block存储在哪些服务器的哪个block块上。小文件过多,元数据必定过多。HDFS的每个文件、目录、数据块占用150B,因此300M内存情况下,只能存储不超过300M/150=2M个文件/目录/数据块的元数据
dataNode会向NameNode发送两种类型的报告:增量报告和全量报告
增量报告是当dataNode接收到block或者删除block时,会向nameNode报告。全量报告是周期性的,NN处理100万的block报告需要1s左右,这1s左右NN会被锁住,其它的请求会被阻塞。
2)文件过小,寻道时间大于数据读写时间,这不符合HDFS的设计:
HDFS为了使数据的传输速度和硬盘的传输速度接近,则设计将寻道时间相对最小化,将block的大小设置的比较大,这样读写数据块的时间将远大于寻道时间,接近于硬盘的传输速度。
以上是“HDFS中Short-Circuit是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。