From bf90aea602e3cf53df1fdb000b5a2f65d135338b Mon Sep 17 00:00:00 2001 From: luoxiang <2806718453@qq.com> Date: Sun, 2 Jun 2019 16:31:43 +0800 Subject: [PATCH] modify --- notes/HDFS-Java-API.md | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/notes/HDFS-Java-API.md b/notes/HDFS-Java-API.md index 25f2e20..35c2afd 100644 --- a/notes/HDFS-Java-API.md +++ b/notes/HDFS-Java-API.md @@ -21,9 +21,7 @@ ## 一、 简介 -Hadoop提供了简单易用的Java API用于操作HDFS。通过这些API,我们可以通过编程来更灵活的操作HDFS。同时从编程体验上来说,这些API的设计确实非常人性化,基本上你只需要一行代码就能完成相应的操作。 - -想要使用HDFS API,你只需要导入`hadoop-client`这个依赖包即可。以下关于API的操作我均使用单元测试的方法进行演示,完整的POM文件如下: +想要使用HDFS API,需要导入依赖`hadoop-client`。如果是CDH版本的Hadoop,还需要额外指明其仓库地址: ```xml @@ -77,7 +75,7 @@ Hadoop提供了简单易用的Java API用于操作HDFS。通过这些API,我 ### 2.1 FileSystem -FileSystem是操作HDFS的入口,通过FileSystem我们可以完成对HDFS上文件和目录的所有操作。在使用前需要获取它,这里由于之后的每个单元测试都需要用到FileSystem,所以使用`@Before`注解进行标注。 +FileSystem是所有HDFS操作的主入口。由于之后的每个单元测试都需要用到它,这里使用`@Before`注解进行标注。 ```java private static final String HDFS_PATH = "hdfs://192.168.0.106:8020"; @@ -88,7 +86,7 @@ private static FileSystem fileSystem; public void prepare() { try { Configuration configuration = new Configuration(); - // 这里我启动的是单节点的Hadoop,副本系数可以设置为1,不设置的话默认值为3 + // 这里我启动的是单节点的Hadoop,所以副本系数设置为1,默认值为3 configuration.set("dfs.replication", "1"); fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration, HDFS_USER); } catch (IOException e) { @@ -111,7 +109,7 @@ public void destroy() { ### 2.2 创建目录 -这里目录可以是多级,支持递归创建。 +支持递归创建目录: ```java @Test @@ -124,7 +122,7 @@ public void mkDir() throws Exception { ### 2.3 创建指定权限的目录 -这里`FsPermission(FsAction u, FsAction g, FsAction o)` 的三个参数分别对应创建者权限,同组其他用户权限,其他用户权限,可以使用`FsAction`枚举类中的值进行指定。 +`FsPermission(FsAction u, FsAction g, FsAction o)` 的三个参数分别对应:创建者权限,同组其他用户权限,其他用户权限,权限值定义在`FsAction`枚举类中。 ```java @Test @@ -169,7 +167,7 @@ public void exist() throws Exception { ### 2.6 查看文件内容 -这里我们查看的是一个小文件的内容,所以直接转换成字符串后输出,对于大文件,还是应该从输出流中读取数据,分批处理。 +查看小文本文件的内容,直接转换成字符串后输出: ```java @Test @@ -180,7 +178,7 @@ public void readToString() throws Exception { } ``` -inputStreamToString 是一个自定义方法,实现如下: +`inputStreamToString`是一个自定义方法,代码如下: ```java /** @@ -314,7 +312,7 @@ public void listFiles() throws Exception { } ``` -FileStatus中包含了文件的基本信息,比如文件路径,是否是文件夹,修改时间,访问时间,所有者,所属组,文件权限,是否是符号链接等,输出内容示例如下(这里为了直观,我对输出进行了换行显示): +`FileStatus`中包含了文件的基本信息,比如文件路径,是否是文件夹,修改时间,访问时间,所有者,所属组,文件权限,是否是符号链接等,输出内容示例如下: ```properties FileStatus{ @@ -343,7 +341,7 @@ public void listFilesRecursive() throws Exception { } ``` -这里输出和上面类似,只是多了文本大小,副本系数,块大小等信息。 +和上面输出类似,只是多了文本大小,副本系数,块大小信息。 ```properties LocatedFileStatus{ @@ -375,16 +373,16 @@ public void getFileBlockLocations() throws Exception { } ``` -块输出信息比较简单,第一个值是文件的起始偏移量(offset),第二个值是文件大小(length),第三个是块所在的主机名(hosts)。 +块输出信息有三个值,分别是文件的起始偏移量(offset),文件大小(length),块所在的主机名(hosts)。 ``` 0,57028557,hadoop001 ``` -这里我上传的文件比较小,只有57M(小于128M),且程序中设置了副本系数为1,所有只有一个块信息,如果文件很大,则这里会输出文件所有块的信息。 +这里我上传的文件只有57M(小于128M),且程序中设置了副本系数为1,所有只有一个块信息。

-**以上所有测试用例可以从本仓库进行下载**:[HDFS Java API](https://github.com/heibaiying/BigData-Notes/tree/master/code/Hadoop/hdfs-java-api) +**以上所有测试用例下载地址**:[HDFS Java API](https://github.com/heibaiying/BigData-Notes/tree/master/code/Hadoop/hdfs-java-api) \ No newline at end of file