实验3-熟悉常用的HDFS操作-答案.doc

上传人:b****9 文档编号:94770 上传时间:2022-10-02 格式:DOC 页数:27 大小:4.87MB
下载 相关 举报
实验3-熟悉常用的HDFS操作-答案.doc_第1页
第1页 / 共27页
实验3-熟悉常用的HDFS操作-答案.doc_第2页
第2页 / 共27页
实验3-熟悉常用的HDFS操作-答案.doc_第3页
第3页 / 共27页
实验3-熟悉常用的HDFS操作-答案.doc_第4页
第4页 / 共27页
实验3-熟悉常用的HDFS操作-答案.doc_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

实验3-熟悉常用的HDFS操作-答案.doc

《实验3-熟悉常用的HDFS操作-答案.doc》由会员分享,可在线阅读,更多相关《实验3-熟悉常用的HDFS操作-答案.doc(27页珍藏版)》请在冰豆网上搜索。

实验3-熟悉常用的HDFS操作-答案.doc

实验2熟悉常用的HDFS操作实验手册

实验2熟悉常用的HDFS操作

1实验目的

1. 理解HDFS在Hadoop体系结构中的角色;

2. 熟练使用HDFS操作常用的Shell命令;

3. 熟悉HDFS操作常用的JavaAPI。

2实验平台

操作系统:

Linux

Hadoop版本:

2.6.0或以上版本

JDK版本:

1.6或以上版本

JavaIDE:

Eclipse

3实验内容和要求

1.编程实现以下指定功能,并利用Hadoop提供的Shell命令完成相同任务:

提示:

1)部分Shell命令的参数路径只能是本地路径或者HDFS路径。

2)若Shell命令的参数既可以是本地路径,也可以是HDFS路径时,务必注意区分。

为保证操作正确,可指定路径前缀hdfs:

///或者file:

///

3)注意区分相对路径与绝对路径

4)具体命令的说明可参考教材或http:

//hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html

(1)向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件;

Shell命令:

检查文件是否存在:

./hdfsdfs-test-etext.txt(执行完这一句不会输出结果,需要继续输入命令

"echo$?

")

追加命令:

./hdfsdfs-appendToFilelocal.txttext.txt

覆盖命令1:

./hdfsdfs-copyFromLocal-flocal.txttext.txt

覆盖命令2:

./hdfsdfs-cp-ffile:

///home/hadoop/local.txttext.txt

也可以使用如下命令实现:

(如下代码可视为一行代码,在终端中输入第一行代码后,直到输入fi才会真正执行):

if$(./hdfsdfs-test-etext.txt);

then$(./hdfsdfs-appendToFilelocal.txttext.txt);

else$(./hdfsdfs-copyFromLocal-flocal.txttext.txt);

fi

Java代码:

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.fs.*;

importjava.io.*;

publicclassHDFSApi{

/**

*判断路径是否存在

*/

publicstaticbooleantest(Configurationconf,Stringpath)throwsIOException{

FileSystemfs=FileSystem.get(conf);

returnfs.exists(newPath(path));

}

/**

*复制文件到指定路径

*若路径已存在,则进行覆盖

*/

publicstaticvoidcopyFromLocalFile(Configurationconf,StringlocalFilePath,StringremoteFilePath)throwsIOException{

FileSystemfs=FileSystem.get(conf);

PathlocalPath=newPath(localFilePath);

PathremotePath=newPath(remoteFilePath);

/*fs.copyFromLocalFile第一个参数表示是否删除源文件,第二个参数表示是否覆盖*/

fs.copyFromLocalFile(false,true,localPath,remotePath);

fs.close();

}

/**

*追加文件内容

*/

publicstaticvoidappendToFile(Configurationconf,StringlocalFilePath,StringremoteFilePath)throwsIOException{

FileSystemfs=FileSystem.get(conf);

PathremotePath=newPath(remoteFilePath);

/*创建一个文件读入流*/

FileInputStreamin=newFileInputStream(localFilePath);

/*创建一个文件输出流,输出的内容将追加到文件末尾*/

FSDataOutputStreamout=fs.append(remotePath);

/*读写文件内容*/

byte[]data=newbyte[1024];

intread=-1;

while((read=in.read(data))>0){

out.write(data,0,read);

}

out.close();

in.close();

fs.close();

}

/**

*主函数

*/

publicstaticvoidmain(String[]args){

Configurationconf=newConfiguration();

conf.set("fs.default.name","hdfs:

//localhost:

9000");

StringlocalFilePath="/home/hadoop/text.txt";//本地路径

StringremoteFilePath="/user/hadoop/text.txt";//HDFS路径

Stringchoice="append";//若文件存在则追加到文件末尾

// Stringchoice="overwrite";//若文件存在则覆盖

try{

/*判断文件是否存在*/

BooleanfileExists=false;

if(HDFSApi.test(conf,remoteFilePath)){

fileExists=true;

System.out.println(remoteFilePath+"已存在.");

}else{

System.out.println(remoteFilePath+"不存在.");

}

/*进行处理*/

if(!

fileExists){//文件不存在,则上传

HDFSApi.copyFromLocalFile(conf,localFilePath,remoteFilePath);

System.out.println(localFilePath+"已上传至"+remoteFilePath);

}elseif(choice.equals("overwrite")){//选择覆盖

HDFSApi.copyFromLocalFile(conf,localFilePath,remoteFilePath);

System.out.println(localFilePath+"已覆盖"+remoteFilePath);

}elseif(choice.equals("append")){//选择追加

HDFSApi.appendToFile(conf,localFilePath,remoteFilePath);

System.out.println(localFilePath+"已追加至"+remoteFilePath);

}

}catch(Exceptione){

e.printStackTrace();

}

}

}

(2)从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;

Shell命令:

if$(./hdfsdfs-test-efile:

///home/hadoop/text.txt);

then$(./hdfsdfs-copyToLocaltext.txt./text2.txt);

else$(./hdfsdfs-copyToLocaltext.txt./text.txt);

fi

Java代码:

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.fs.*;

importjava.io.*;

publicclassHDFSApi{

/**

*下载文件到本地

*判断本地路径是否已存在,若已存在,则自动进行重命名

*/

publicstaticvoidcopyToLocal(Configurationconf,StringremoteFilePath,StringlocalFilePath)throwsIOException{

FileSystemfs=FileSystem.get(conf);

PathremotePath=newPath(remoteFilePath);

Filef=newFile(localFilePath);

/*如果文件名存在,自动重命名(在文件名后面加上_0,_1...)*/

if(f.exists()){

System.out.println(localFilePath+"已存在.");

Integeri=0;

while(true){

f=newFile(localFilePath+"_"+i.toString());

if(!

f.exists()){

localFilePath=localFilePath+"_"+i.toString();

break;

}

}

System.out.println("将重新命

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1