1.HDFS的Java基本操作非常重要
2.Haoop的常用shell操作
1.hadoop fs -ls hdfs://haoop1:8020/目录
2.hadoop fs -copyFromLocal|put 文件地址 目的目录
3.hadoop fs -copyToLocal|get 文件地址 目的目录
4.hadoop fs -moveToLocal 文件地址 目地址
5.hadoop fs -mkdir 创建文件夹
6.hadoop fs -rm -r -skipTrash 目标文件夹或文件(不在回收站中保留)
3.HDFS的基本操作
1)构造一个hdfs的客户端(可指定URI和user,如指定,则可省略第二步)
FileSystem
例子:FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:8020"),new Configuration(),"用户名")
2)构造一个配置参数封装对象
Configuration 默认的fs.defaultFS的默认值是file:///指的是本地文件系统URI,我们需要需改
3)执行操作
a) fs.copyFromLocalFile
b) fs.copyToLocalFile(false,XX,XX,true); 第一个参数是否移除hdfs上的文件,第四个参数,是否使用本地文件系统
c)fs.listFiles 查看文件的信息(只能列出文件信息)
d) fs.listStatus 查看文件和文件夹的信息
e) fs.getFileBlockLocations 查看文件块的信息(指定偏移量)
f) fs.concat 连接多个文件
h) fs.getUse 获得整个文件系统的已使用空间
i) fs.rename 文件改名
j) fs.setReplocation 修改文件的副本数量
4)操作完毕后,关闭客户端
4. HDFS的IO流操作
1)fs.open() 获得hdfs文件的输入流 拿到FSDataInputStream(随机流,可支持seek方法)
2)IOUtils.copyBytes方法处理流,可指定缓冲流大小 记得关闭流!
从指定偏移量读取hdfs中的文件数据,具有重大意义,在分布式数据处理时,可以将数据分片来分配给不同的节点处理
3)fs.create() 获得hdfs上文件的输出流
5. HDFS的写数据流程
1)客户端向nameNode请求上传文件
2)nameNode检查上传路径的合法性
3)nameNode反馈给客户端可以上传
4)客户端向nameNode请求上传第一个Block
5)nameNode返回给一个dataNode节点列表给客户端(取决与设置的副本数量和网络拓扑图)
6)客户端向第一个dataNode节点请求上传数据(请求建立PiPeLine),第一个节点也向它兄弟做一个请求
7)dataNode节点响应客户端的请求,PiPeLine建立成功
8)客户端向dataNode1以Soket流的方式发送数据,以packet(64K)为单位,dataNode1通过管道
依次复制给它的兄弟,同时依次返回接受响应。按照这种方式依次将所有的packet和block传完。
6. HDFS的读数据流程
1)客户端将读请求(附带文件路径Path)发送给nameNode
nameNode上保存了元数据
2)nameNode在元数据中查找该文件的块信息和存放信息并反馈给客户端
3)客户端根据网络拓扑图去相应的datanode请求数据(建立socket流管道)
4)nameNode通过socket流来将数据传给客户端
5)多次读取完成操作
7.HDFS中nameNode管理元数据的机制
1)NameNode:
响应客户端请求
维护目录树
管理元数据