实验3熟悉常用的HDFS操作答案.docx
- 文档编号:25457812
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:35
- 大小:3.44MB
实验3熟悉常用的HDFS操作答案.docx
《实验3熟悉常用的HDFS操作答案.docx》由会员分享,可在线阅读,更多相关《实验3熟悉常用的HDFS操作答案.docx(35页珍藏版)》请在冰豆网上搜索。
实验3熟悉常用的HDFS操作答案
实验3-熟悉常用的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)从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("将重新命名为:
"+localFilePath);
}
//下载文件到本地
PathlocalPath=newPath(localFilePath);
fs.copyToLocalFile(remotePath,localPath);
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路径
try{
HDFSApi.copyToLocal(conf,remoteFilePath,localFilePath);
System.out.println("下载完成");
}catch(Exceptione){
e.printStackTrace();
}
}
}
(2)将HDFS中指定文件的内容输出到终端中;
Shell命令:
./hdfsdfs-cattext.txt
Java代码:
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.*;
importjava.io.*;
publicclassHDFSApi{
/**
*读取文件内容
*/
publicstaticvoidcat(Configurationconf,StringremoteFilePath)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathremotePath=newPath(remoteFilePath);
FSDataInputStreamin=fs.open(remotePath);
BufferedReaderd=newBufferedReader(newInputStreamReader(in));
Stringline=null;
while((line=d.readLine())!
=null){
System.out.println(line);
}
d.close();
in.close();
fs.close();
}
/**
*主函数
*/
publicstaticvoidmain(String[]args){
Configurationconf=newConfiguration();
conf.set("fs.default.name","hdfs:
//localhost:
9000");
StringremoteFilePath="/user/hadoop/text.txt";//HDFS路径
try{
System.out.println("读取文件:
"+remoteFilePath);
HDFSApi.cat(conf,remoteFilePath);
System.out.println("\n读取完成");
}catch(Exceptione){
e.printStackTrace();
}
}
}
(3)显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;
Shell命令:
./hdfsdfs-ls-htext.txt
Java代码:
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.*;
importjava.io.*;
importjava.text.SimpleDateFormat;
publicclassHDFSApi{
/**
*显示指定文件的信息
*/
publicstaticvoidls(Configurationconf,StringremoteFilePath)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathremotePath=newPath(remoteFilePath);
FileStatus[]fileStatuses=fs.listStatus(remotePath);
for(FileStatuss:
fileStatuses){
System.out.println("路径:
"+s.getPath().toString());
System.out.println("权限:
"+s.getPermission().toString());
System.out.println("大小:
"+s.getLen());
/*返回的是时间戳,转化为时间日期格式*/
LongtimeStamp=s.getModificationTime();
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
Stringdate=format.format(timeStamp);
System.out.println("时间:
"+date);
}
fs.close();
}
/**
*主函数
*/
publicstaticvoidmain(String[]args){
Configurationconf=newConfiguration();
conf.set("fs.default.name","hdfs:
//localhost:
9000");
StringremoteFilePath="/user/hadoop/text.txt";//HDFS路径
try{
System.out.println("读取文件信息:
"+remoteFilePath);
HDFSApi.ls(conf,remoteFilePath);
System.out.println("\n读取完成");
}catch(Exceptione){
e.printStackTrace();
}
}
}
(4)给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;
Shell命令:
./hdfsdfs-ls-R-h/user/hadoop
Java代码:
importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.*;
importjava.io.*;
importjava.text.SimpleDateFormat;
publicclassHDFSApi{
/**
*显示指定文件夹下所有文件的信息(递归)
*/
publicstaticvoidlsDir(Configurationconf,StringremoteDir)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathdirPath=newPath(remoteDir);
/*递归获取目录下的所有文件*/
RemoteIterator
/*输出每个文件的信息*/
while(remoteIterator.hasNext()){
FileStatuss=remoteIterator.next();
System.out.println("路径:
"+s.getPath().toString());
System.out.println("权限:
"+s.getPermission().toString());
System.out.println("大小:
"+s.getLen());
/*返回的是时间戳,转化为时间日期格式*/
LongtimeStamp=s.getModificationTime();
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
Stringdate=format.format(timeStamp);
System.out.println("时间:
"+date);
System.out.println();
}
fs.close();
}
/**
*主函数
*/
publicstaticvoidmain(String[]args){
Configurationconf=newConfiguration();
conf.set("fs.default.name","hdfs:
//localhost:
9000");
StringremoteDir="/user/hadoop";//HDFS路径
try{
System.out.println("(递归)读取目录下所有文件的信息:
"+remoteDir);
HDFSApi.lsDir(conf,remoteDir);
System.out.println("读取完成");
}catch(Exceptione){
e.printStackTrace();
}
}
}
(5)提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。
如果文件所在目录不存在,则自动创建目录;
Shell命令:
if$(./hdfsdfs-test-ddir1/dir2);
then$(./hdfsdfs-touchzdir1/dir2/filename);
else$(./hdfsdfs-mkdir-pdir1/dir2&&hdfsdfs-touchzdir1/dir2/filename);
fi
删除文件:
./hdfsdfs-rmdir1/dir2/filename
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));
}
/**
*创建目录
*/
publicstaticbooleanmkdir(Configurationconf,StringremoteDir)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathdirPath=newPath(remoteDir);
booleanresult=fs.mkdirs(dirPath);
fs.close();
returnresult;
}
/**
*创建文件
*/
publicstaticvoidtouchz(Configurationconf,StringremoteFilePath)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathremotePath=newPath(remoteFilePath);
FSDataOutputStreamoutputStream=fs.create(remotePath);
outputStream.close();
fs.close();
}
/**
*删除文件
*/
publicstaticbooleanrm(Configurationconf,StringremoteFilePath)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathremotePath=newPath(remoteFilePath);
booleanresult=fs.delete(remotePath,false);
fs.close();
returnresult;
}
/**
*主函数
*/
publicstaticvoidmain(String[]args){
Configurationconf=newConfiguration();
conf.set("fs.default.name","hdfs:
//localhost:
9000");
StringremoteFilePath="/user/hadoop/input/text.txt";//HDFS路径
StringremoteDir="/user/hadoop/input";//HDFS路径对应的目录
try{
/*判断路径是否存在,存在则删除,否则进行创建*/
if(HDFSApi.test(conf,remoteFilePath)){
HDFSApi.rm(conf,remoteFilePath);//删除
System.out.println("删除路径:
"+remoteFilePath);
}else{
if(!
HDFSApi.test(conf,remoteDir)){//若目录不存在,则进行创建
HDFSApi.mkdir(conf,remoteDir);
System.out.println("创建文件夹:
"+remoteDir);
}
HDFSApi.touchz(conf,remoteFilePath);
System.out.println("创建路径:
"+remoteFilePath);
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
(6)提供一个HDFS的目录的路径,对该目录进行创建和删除操作。
创建目录时,如果目录文件所在目录不存在则自动创建相应目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录;
Shell命令:
创建目录:
./hdfsdfs-mkdir-pdir1/dir2
删除目录(如果目录非空则会提示notempty,不执行删除):
./hdfsdfs-rmdirdir1/dir2
强制删除目录:
./hdfsdfs-rm-Rdir1/dir2
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));
}
/**
*判断目录是否为空
*true:
空,false:
非空
*/
publicstaticbooleanisDirEmpty(Configurationconf,StringremoteDir)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathdirPath=newPath(remoteDir);
RemoteIterator
return!
remoteIterator.hasNext();
}
/**
*创建目录
*/
publicstaticbooleanmkdir(Configurationconf,StringremoteDir)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathdirPath=newPath(remoteDir);
booleanresult=fs.mkdirs(dirPath);
fs.close();
returnresult;
}
/**
*删除目录
*/
publicstaticbooleanrmDir(Configurationconf,StringremoteDir)throwsIOException{
FileSystemfs=FileSystem.get(conf);
PathdirPath=newPath(remoteDir);
/*第二个参数表示是否递归删除所有文件*/
booleanresult=fs.delete(dirPath,true);
fs.close();
returnresult;
}
/**
*主函数
*/
publicstaticvoidmain(String[]args){
Configurationconf=newConfiguration();
conf.set("fs.default.name","hdfs:
//localhost:
9000");
StringremoteDir="/user/hadoop/input";//HDFS目录
BooleanforceDelete=false;//是否强制删除
try{
/*判断目录是否存在,不存在则创建,存在则删除*/
if(!
HDFSApi.test(conf,remoteDir)){
HDFSApi.mkdir(conf,remoteDir);//创建目录
System.out.println("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 熟悉 常用 HDFS 操作 答案