HDFS API的高级编程
HDFS的API就两个:FileSystem 和Configuration
1、文件的上传和下载
1 package com.ghgj.hdfs.api; 2 3 import org.apache.hadoop.conf.Configuration; 4 import org.apache.hadoop.fs.FileSystem; 5 import org.apache.hadoop.fs.Path; 6 7 public class HDFS_GET_AND_PUT { 8 9 public static void main(String[] args) throws Exception { 10 11 12 Configuration conf = new Configuration(); 13 conf.set("fs.defaultFS", "hdfs://hadoop1:9000"); 14 conf.set("dfs.replication", "2"); 15 FileSystem fs = FileSystem.get(conf); 16 17 18 /** 19 * 更改操作用户有两种方式: 20 * 21 * 1、直接设置运行换种的用户名为hadoop 22 * 23 * VM arguments ; -DHADOOP_USER_NAME=hadoop 24 * 25 * 2、在代码中进行声明 26 * 27 * System.setProperty("HADOOP_USER_NAME", "hadoop"); 28 */ 29 System.setProperty("HADOOP_USER_NAME", "hadoop"); 30 31 // 上传 32 fs.copyFromLocalFile(new Path("c:/sss.txt"), new Path("/a/ggg.txt")); 33 34 35 36 /** 37 * .crc : 校验文件 38 * 39 * 每个块的元数据信息都只会记录合法数据的起始偏移量: qqq.txt blk_41838 : 0 - 1100byte 40 * 41 * 如果进行非法的数据追加。最终是能够下载合法数据。 42 * 由于你在数据的中间, 也就是说在 0 -1100 之间的范围进行了数据信息的更改。 造成了采用CRC算法计算出来校验值,和最初存入进HDFS的校验值 43 * 不一致。HDFS就认为当前这个文件被损坏了。 44 */ 45 46 47 // 下载 48 fs.copyToLocalFile(new Path("/a/qqq.txt"), new Path("c:/qqq3.txt")); 49 50 51 /** 52 * 上传和下载的API的底层封装其实就是 : FileUtil.copy(....) 53 */ 54 55 fs.close(); 56 } 57 }