常用HDFS操作
阿新 • • 發佈:2018-12-15
- 向HDFS中上傳任意文字檔案,如果指定的檔案在HDFS中已經存在,由使用者指定是追加到原有檔案末尾還是覆蓋原有的檔案;
//假設 /user/hadoop/input路徑已存在 如沒存在 在命令列輸入 hadoop fs -mkdir -p /user/hadoop/input Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); String localFileName = "/home/hadoop/myfile.txt"; String remoteFileName = "/user/hadoop/input/myfile.txt"; Path localFilePath = new Path(localFileName); Path remoteFilePath = new Path(remoteFileName); FileSystem fs = FileSystem.get(conf); if(!fs.exists(remoteFilePath)) { ////遠端檔案不存在 System.out.println("檔案未在遠端伺服器存在"); fs.copyFromLocalFile(localFilePath, remoteFilePath); System.out.println("檔案已上傳到伺服器"); }else { //遠端檔案已存在 System.out.println("檔案已在遠端伺服器存在,請選擇下一步動作:1 覆蓋 ;2 新增到檔案末尾 "); int choice = 0; Scanner input = new Scanner(System.in); choice = input.nextInt(); switch(choice) { case 1:fs.copyFromLocalFile(true, false, localFilePath,remoteFilePath); System.out.println("檔案已成功進行覆蓋");break; case 2:FSDataOutputStream out = fs.append(remoteFilePath); FileInputStream in = new FileInputStream(localFileName); //位元組流 byte buff[] = new byte[1024]; int read = -1; while((read =in.read(buff))>0) { //in.read()返回讀取資料的長度 out.write(buff, 0, read); } out.close(); in.close(); System.out.println("內容已新增到檔案末尾");break; default:System.out.println("未採取任何動作");break; } }
-
從HDFS中下載指定檔案,如果本地檔案與要下載的檔名稱相同,則自動對下載的檔案重新命名;
-
將HDFS中指定檔案的內容輸出到終端中; 這個命令特別簡單:hadoop fs -cat /user/hadoop/input/myfile.txt
-
顯示HDFS中指定的檔案的讀寫許可權、大小、建立時間、路徑等資訊; 這個要求用shell實現也特別簡單:hadoop fs -ls /user/hadoop/input/myfile.txt
-
給定HDFS中某一個目錄,輸出該目錄下的所有檔案的讀寫許可權、大小、建立時間、路徑等資訊,如果該檔案是目錄,則遞迴輸出該目錄下所有檔案相關資訊; 這個問題與上一個問題的不同之處在於目錄裡有目錄:hadoop fs -ls -R -h /user/hadoop/input/
-
提供一個HDFS內的檔案的路徑,對該檔案進行建立和刪除操作。如果檔案所在目錄不存在,則自動建立目錄;
-
提供一個HDFS的目錄的路徑,對該目錄進行建立和刪除操作。建立目錄時,如果目錄檔案所在目錄不存在則自動建立相應目錄;刪除目錄時,由使用者指定當該目錄不為空時是否還刪除該目錄; shell:
-
向HDFS中指定的檔案追加內容,由使用者指定內容追加到原有檔案的開頭或結尾;
-
刪除HDFS中指定的檔案; shell命令:hadoo[ fs -rm /user/hadoop/input/myfile.txt
-
在HDFS中,將檔案從源路徑移動到目的路徑。 shell:hadoop fs -mv /user/hadoop/input/myfile.txt /user/hadoop/myfile.txt