1、HDFS读文件 2、HDFS写文件 3、实例操作 3.1新建Mawen工程 3.2在pom.xml中将标签中内容替换为以下代码,静待依赖包下载完毕
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!--<scope>test</scope>--> </dependency> </dependencies>3.3在src/java下新建java工程
以下共有5个案例 1、创建文件夹 2、创建文件并写入数据 3、读取文件并在控制台展示 4、复制本地文件到hdfs 5、 复制hdfs文件到本地
package cn.kgc.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.apache.hadoop.io.IOUtils; import org.junit.Test; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; /** * @author czg * date * description */ public class HdfsClient { // 创建文件夹 @Test public void mkdir() throws URISyntaxException, IOException, InterruptedException { // 1、创建配置文件 // 要确认是org.apache.hadoop.conf.Configuration; Configuration conf=new Configuration(); // 2\获取文件系统 FileSystem fs=FileSystem.get(new URI("hdfs://192.168.157.200:9000"),conf,"root"); // 3、调用ApI操作 fs.mkdirs(new Path("/user/java")); // 4、关闭流 fs.close(); } // 创建文件并写入数据 @Test public void create() throws URISyntaxException, IOException, InterruptedException { // 1、创建配置文件 // 要确认是org.apache.hadoop.conf.Configuration; Configuration conf=new Configuration(); // 2、获取文件系统 FileSystem fs=FileSystem.get(new URI("hdfs://192.168.157.200:9000"),conf,"root"); // 3、调用ApI操作 // 创建文件并写入数据 FSDataOutputStream in=fs.create(new Path("/user/java/b.txt")); in.write("Hello,HDFS".getBytes()); in.flush(); // 4、关闭流 fs.close(); } // 读取文件并在控制台展示 @Test public void cat() throws URISyntaxException, IOException, InterruptedException { // 1、创建配置文件 // 要确认是org.apache.hadoop.conf.Configuration; Configuration conf=new Configuration(); // 2、获取文件系统 FileSystem fs=FileSystem.get(new URI("hdfs://192.168.157.200:9000"),conf,"root"); // 3、调用ApI操作 // 创建文件并写入数据 FSDataInputStream out=fs.open(new Path("/user/java/b.txt")); IOUtils.copyBytes(out,System.out,1024); // 4、关闭流 fs.close(); } // 复制本地文件到hdfs @Test public void copyFromLocalFile() throws URISyntaxException, IOException, InterruptedException { // 1、创建配置文件 // 要确认是org.apache.hadoop.conf.Configuration; Configuration conf=new Configuration(); // 2、获取文件系统 FileSystem fs=FileSystem.get(new URI("hdfs://192.168.157.200:9000"),conf,"root"); // 3、调用ApI操作 // 第一个newPath(hdfs中的路径),第二个new Path(文件在本机中的路径) fs.copyFromLocalFile(new Path("C:\\xuexi\\hdfs\\data\\test.txt"),new Path("/user/java")); // 4、关闭流 fs.close(); } // 复制hdfs文件到本地 @Test public void copyTplocalFile() throws URISyntaxException, IOException, InterruptedException { // 1、创建配置文件 // 要确认是org.apache.hadoop.conf.Configuration; Configuration conf=new Configuration(); // 2、获取文件系统 FileSystem fs=FileSystem.get(new URI("hdfs://192.168.157.200:9000"),conf,"root"); // 3、调用ApI操作 // 第一个newPath(hdfs中的路径),第二个new Path(文件在本机中的路径) // fs.copyToLocalFile(new Path("/user/java/test.txt"),new Path("C:\\xuexi\\hdfs\\data")); // 运行如果出现空指针: // copyToLocalFile方法第一个参数和最后一个解析: // 第一个参数控制下载完成后是否删除源文件,默认是 true,即删除; // 最后一个参数表示是否将 RawLocalFileSystem 用作本地文件系统; // RawLocalFileSystem 默认为 false,通常情况下可以不设置, // 但如果你在执行时候抛出 NullPointerException 异常,则代表你的文件系统与程序可能存在不兼容的情况 (window 下常见), // 此时可以将 RawLocalFileSystem 设置为 true fs.copyToLocalFile(true,new Path("/user/java/test.txt"),new Path("C:\\xuexi\\hdfs\\data"),true); // 4、关闭流 fs.close(); } }