仅用于我个人的学习。书籍为人民邮电出版社的《大数据技术基础——基于Hadoop与Spark》。课后习题选择是我个人认为有用的。记录下来是为了督促我学习:)
共好
1.比较以下4种不同的HDFS API的区别
libhdfs;HFTP;WebHDFS;JavaAPI
API | 功能 |
---|---|
libhdfs | Hadoop为C语言提供HDFS文件操作和文件系统管理的访问接口 |
HFTP | 提供从远程HDFS集群读数据的能力 |
WebHDFS | 使集群外的客户机不用配置环境就可以对集群内进行访问 |
JavaAPI | 支持打开文件、读写文件、删除文件等操作 |
2.简述WebHDFS和HttpFS之间的区别
3.简述基于HDFS客户端读取HDFS文件的过程
- HDFS客户端(Client)通过调用FileSystem对象的open方法打开文件,这个对象是分布式文件系统的一个实例==(步骤一)==
- DistributedFileSystem负责向远程的元数据节点发起RPC调用,得到文件的数据块信息==(步骤二)==
RPC(Remote Procedure Call)远程过程调用,两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
- NameNode视情况返回文件的部分或全部数据块列表,对于每个数据块,NameNode都会返回该数据块及其副本的数据节点DataNode的地址
- DistributedFileSystem返回一个FSDataInputStream对象给客户端,用来读取数据。FSDataInputStream对象转而封装DFSInputStream对象(该对象负责NameNode和DataNode的通信)
- 客户端调用FSDataInputStream对象的read方法开始读取数据==(步骤三)==
- DFSInputStream对象连接保存此文件第一个数据块的最近的数据节点
- 通过对数据流反复调用read方法,把数据从数据节点传输到客户端==(步骤四)==。
- 当此数据块读取完毕时,DFSInputStream关闭连接,然后连接此文件下一个数据块的最近的数据节点==(步骤五)==
- 当客户端读取完时,调用FSDataInputStream的close方法关闭输入流==(步骤六)==