1.文件操作
1)上传本地文件到HDFS
2)读取文件
3)在hadoopfs中新建文件,并写入
4)重命名文件
5)删除hadoopfs上的文件
2.目录操作
1)读取某个目录下的所有文件
2)在hadoopfs上创建目录
3)删除目录
3. HDFS信息
1)查找某个文件在HDFS集群的位置
2)获取HDFS集群上所有节点名称信息
准备工作:
1、新建一个project项目,添加lib文件夹,将图示的jar文件添加到文件夹中,并将其add to built path。如图示。
2、添加conf文件夹,将core-site.xml和hdfs-site.xml两个文件拷贝到conf下面。刷新。主要作用是配置主机地址。
3、编译环境和运行环境都是用1.7版本,即jdk1.7和jre1.7。本实验使用的是Eclipse indigo-windows-32bit和jdk1.7-32bit。
4、此处暂时不需要hadoop-plugin插件,有的话也不影响,但是主机hosts文件要配置好,就是在主机cmd命令中可以通过域名访问CentOS端NameNode主机。
HDFS 文件读取流程
1.Client调用FileSystem.open()方法:
1)FileSystem通过RPC与NN通信,NN返回该文件的部分或全部block列表(含有block拷贝的DN地址)。
2)选取距离客户端最近的DN建立连接,读取block,返回FSDataInputStream。
2.Client调用输入流的read()方法:
1)当读到block结尾时,FSDataInputStream关闭与当前DN的连接,并为读取下一个block寻找最近DN。
2)读取完一个block都会进行checksum验证,如果读取DN时出现错误,客户端会通知NN,然后再从下一个拥有该block拷贝的DN继续读。
3)如果block列表读完后,文件还未结束,FileSystem会继续从NN获取下一批block列表。
3.关闭FSDataInputStream
HDFS 文件写入流程
1.Client调用FileSystem的create()方法:
1)FileSystem向NN发出请求,在NN的namespace里面创建一 新文件,但是并不关联任何块。
2)NN检查文件是否已存在、操作权限。如果检查通过,NN记录新文件信息,并在某一个DN上创建数据块。
3)返回FSDataOutputStream,将Client引导至该数据块执行写入操作。
2.Client调用输出流的write()方法:HDFS默认将每个数据块放置3份。
FSDataOutputStream将数据首先写到第一节点,第一节点将数据包传送并写入第二节点,第二节点=》第三节点。
3.Client调用流的close()方法:flush缓冲区的数据包,block完成复制份数后,
NN返回成功消息。
代码如下:
1、添加一个包(packet),org.dragon.hadoop.hdfs.utils,添加一个HDFSUtils.java文件,文件里面内容如下
package org.dragon.hadoop.hdfs.utils; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; /** * @author ZhuXY * @time 2016-3-6 下午8:17:10 */ public