【實驗作業(yè)1】自己動手實現(xiàn)HDFS Shell
基于已經(jīng)學(xué)習(xí)到的Hadoop API編程知識,自己動手實現(xiàn)一個簡單的HDFS Shell程序,程序名稱為HShell,要求能夠支持以下功能:
1.使用HShell -cp 本地路徑 HDFS路徑,將文件從Linux本地文件系統(tǒng)拷貝到HDFS指定路徑上。
2.使用HShell -rm 路徑刪除文件
3.使用HShell -rm -r 路徑刪除目錄
4.使用HShell -cp -r 本地目錄路徑 HDFS路徑,將目錄從Linux本地拷貝到HDFS指定路徑上。
5.使用HShell -list 路徑顯示某個文件的信息或者某個目錄的信息
6.使用HShell -mv 路徑 路徑移動文件或者重命名文件
7.使用HShell -find 文件名 目錄實現(xiàn)在目錄下遞歸查找某個文件名的文件。
實驗結(jié)果:
1.HShell -cp 功能的測試結(jié)果。在終端中查看后顯示拷貝成功。文章來源:http://www.zghlxwxcb.cn/news/detail-715330.html
實驗代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-715330.html
import com.sun.javaws.IconUtil;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.net.URI;
import java.util.Scanner;
public class HShell {
public static void main(String[] args) {
try {
FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), new Configuration());
Scanner sc = new Scanner(System.in);
while(true)
{
String cmd1=sc.next();
String cmd2,cmd3,cmd4,cmd5;
if(cmd1.equals("HShell")){
cmd2=sc.next();
if(cmd2.equals("-cp")){
cmd3=sc.next();
cmd4=sc.next();
if(cmd3.equals("-r")){
cmd5=sc.next();
fs.copyFromLocalFile(false,true,new Path(cmd4),new Path(cmd5));
System.out.println("copy directory from "+cmd4+"to "+cmd5);
}
else
{
fs.copyFromLocalFile(new Path(cmd3),new Path(cmd4));
System.out.println("copy file from "+cmd3+"to "+cmd4);
}
}
else if(cmd2.equals("-rm")){
cmd3=sc.next();
if(cmd3.equals("-r")){
cmd4=sc.next();
if(fs.delete(new Path(cmd4),true)){
System.out.println("Directory "+ cmd4 +" has been deleted successfully!");
}
}
else
if(fs.delete(new Path(cmd3),false)){
System.out.println("File "+ cmd3 +" has been deleted successfully!");
}
}
else if(cmd2.equals("-list")){
cmd3=sc.next();
//FileStatus [] fileStatus=fs.listStatus(new Path(cmd3));
FileStatus filestatus =fs.getFileStatus(new Path(cmd3));
System.out.println(filestatus.toString());
}
else if(cmd2.equals("-mv")){
cmd3=sc.next();
cmd4=sc.next();
fs.moveFromLocalFile(new Path(cmd3),new Path(cmd4));
System.out.println("move file from "+cmd3+"to "+cmd4);
}
else if(cmd2.equals("-mv")){
cmd3=sc.next();
cmd4=sc.next();
fs.moveFromLocalFile(new Path(cmd3),new Path(cmd4));
System.out.println("move file from "+cmd3+"to "+cmd4);
}
else if(cmd2.equals("-find")){
cmd3=sc.next();
cmd4=sc.next();
fs.setWorkingDirectory(new Path(cmd4));
if(!fs.exists(new Path(cmd3)))
{
System.out.println(cmd3+" is not found");
}
else {
System.out.println(fs.getFileStatus(new Path(cmd3)).getPath());
}
}
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
到了這里,關(guān)于云計算實驗 HDFS編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!