实验内容目录
- (1)向HDFS上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件;
- (2)从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;
- (3)将HDFS中指定文件的内容输出到终端中;
- (4)显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;
- (5)给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;
- (6)提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录;
- (7)在HDFS中,将文件从源路径移动到目的路径。
(1)向HDFS上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件;
- 相关代码如下
public int FileUpload() throws IOException{
FileSystem fs=FileSystem.get(conf);
if(!fs.exists(new Path(dst_path))){//HDFS判断是否存在
System.out.println("file not exist");
fs.copyFromLocalFile(false, new Path(scr_filename), new Path(dst_path));//不存在
}else{//存在
System.out.print("the file"+scr_filename+" exists on HDFS,do you want (a)ppend or (o)verwrite?");
Scanner input=new Scanner(System.in);
String s=input.next();
if(s.equalsIgnoreCase("o")){
System.out.println("overwrite");
fs.copyFromLocalFile(false, true, new Path(scr_filename), new Path(dst_path));
}else if(s.equalsIgnoreCase("a")){
System.out.println("append");
FileInputStream in=new FileInputStream(scr_filename);
FSDataOutputStream app_f=fs.append(new Path(dst_path));
byte[] data=new byte[1024];
int read=-1;
while((read=in.read(data))>0){
app_f.write(data,0,read);
}
in.close();
}
input.close();
}
return 0;
}
elipse中的代码截图效果
我创建了append.txt和secondwork.txt(secondwork.txt里面的内容是mango,hello!)
这里显示我创建的append.txt的内容
运行结果如下
我选择了“a” append,就是将“/usr/local/hadoop/append.txt”追加到原有文件secondwork.txt中,如图所示
(2)从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;
- 相关代码如下
public int download(String HDFS_scr_path,String Local_dst_path) throws IOException{
File dstFile=new File(Local_dst_path+HDFS_scr_path);
FileSystem fs=FileSystem.get(conf);
if(!dstFile.exists()){
fs.copyToLocalFile(new Path(HDFS_scr_path), new Path(Local_dst_path));
}
else{
fs.rename(new Path(HDFS_scr_path), new Path(HDFS_scr_path+"001"));
fs.copyToLocalFile(new Path(HDFS_scr_path+"001"), new Path(Local_dst_path));
fs.rename(new Path(HDFS_scr_path+"001"), new Path(HDFS_scr_path));
}
return 0;
}
elipse中的代码截图效果
将HDFS中的secondwork.txt下载到usr//local//hadoop路径下的filework.txt中,cat命令查看filework.txt中的内容如图所示
(3)将HDFS中指定文件的内容输出到终端中;
- 相关代码如下
public int PrintFile(String HDFS_src_path) throws IOException{
FileSystem fs=FileSystem.get(co