HDFS-常用API操作

一、Maven

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version>
</dependency>
<!--  2、Hadoop      -->
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.2.1</version>
</dependency>
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.2.1</version>
</dependency>

如果Eclipse/Idea打印不出日志,在控制臺上只顯示:

log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).  
log4j:WARN Please initialize the log4j system properly.  
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

可以在項目的src/main/resources目錄下,新建一個文件,命名為“log4j.properties”,在文件中填入

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

二、API操作

1、 讀取某個目錄下的所有文件
public class CatFiles {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 創建要讀取的文件路徑Path listf = new Path("/testa");// 4 創建FileStatus對象,調用listStatus方法  ***FileStatus stats[]=fs.listStatus(listf);for(int i=0;i<stats.length;i++){System.out.println(stats[i].getPath().toString());}fs.close();// 5 返回成功信息System.out.println(" ps: 目錄文件查找完畢!!!");}
}
2、創建HDFS目錄
public class MkdirList {public static void main(String[] args) throws IOException, InterruptedException{// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration conf = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), conf, "root");// 3 創建一個目錄 *****Path path = new Path("/List");fs.mkdirs(path);// 4 關閉流fs.close();// 5 返回創建成功信息System.out.println(" ps: 目錄創建成功!!!");}}
3、判斷文件會否存在
public class ifExistsFlie {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 創建要讀取的文件路徑Path File = new Path("/testa");// 4 調用exists方法  返回boolean類型 ***boolean isExists = fs.exists(File);System.out.println(isExists);fs.close();// 5 返回成功信息System.out.println(" ps: 確認是否存在完畢!!!");}
}
4、查找某個文件的狀態信息
ublic class FindFile {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 對文件名進行操作   ***Path File = new Path("/testa/part-m-00000");// 4 創建FileStatus對象,調用getFileStatus方法FileStatus filestatus = fs.getFileStatus(File);System.out.println(filestatus);// 5 返回成功信息System.out.println(" ps: 查找信息成功!!!");}
FileStatus字段解析private Path path;                  - Path路徑private long length;                - 文件長度private boolean isdir;              - 是不是目錄private short block_replication;    - 塊的復本數private long blocksize;             - 塊大小private long modification_time;     - 修改時間private long access_time;           - 訪問時間private FsPermission permission;    - 權限private String owner;               - 所有者private String group;               - 所在組private Path symlink;               - 符號鏈接,如果isdir為true那么symlink必須為null
5、上傳本地文件
public class UploadFiles {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 創建源目的文件路徑和文件上傳操作 *****Path src = new Path("src/main/resources/HdfsCommand.txt");Path dst = new Path("/List/HdfsCommand.txt");fs.copyFromLocalFile(src, dst);// 4 關閉流fs.close();// 5 返回創建成功信息System.out.println(" ps: 文件上傳成功!!!");}
}
6、文件拷貝到本地
public class CopyFile {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 創建源目的文件路徑和文件上傳操作 *****Path src = new Path("/testa/part-m-00000");Path dst = new Path("src/main/");fs.copyToLocalFile(src,dst);// 4 關閉流fs.close();// 5 返回創建成功信息System.out.println(" ps: 文件拷貝成功!!!!");}
}
7、刪除文件/目錄
public class DeleteFile {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 將要刪除的文件/目錄路徑String File = "/List";// 4 刪除文件 返回boolean類型   ***fs.delete(new Path(File), true);fs.close();// 5 返回成功信息System.out.println(" ps: 文件刪除成功!!!");}
}
8、讀文件
public class ReadFile {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 文件路徑Path File = new Path("hdfs://Carlota1:9000/b.txt");// 4 創建FSDataInputStream對象FSDataInputStream in = fs.open(File);// 6 讀取數據String info = in.readUTF();System.out.println(info);// 7 關閉流fs.close();// 8 返回創建成功信息System.out.println(" ps: 文件讀取數據成功!!!");}}
9、重命名文件/目錄
public class RenameFile {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 對文件名進行操作   ***Path old = new Path("/test");Path now = new Path("/testa");// 4 調用hdfs的rename重命名方法,返回值為boolean類型    ***fs.rename(old, now);// 5 返回成功信息System.out.println(" ps: 文件重命名成功!!!");}}
10、寫文件
public class WriteFile {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 文件路徑 ***Path File=new Path("hdfs://Carlota1:9000/b.txt");// 4 創建FSDataOutputStream對象 ***FSDataOutputStream out = fs.create(File);// 6 寫入數據 ***out.writeUTF("Hello world!!");// 7 關閉流fs.close();// 8 返回創建成功信息System.out.println(" ps: 文件寫入數據成功!!");}}
11、返回文件/目錄上次修改的時間
public class ReviseTime {public static void main(String[] args) throws IOException, InterruptedException {// 0 自動快速地使用缺省Log4j環境。BasicConfigurator.configure();// 1 獲取文件系統Configuration configuration = new Configuration();// 2 配置在集群上運行FileSystem fs = FileSystem.get(URI.create("hdfs://Carlota1:9000"), configuration, "root");// 3 創建要讀取的文件路徑Path File = new Path("/testa");// 4 創建FileStatus對象,調用listStatus方法FileStatus filestatus = fs.getFileStatus(File);// 5 調用getModificationTime方法 返回值類型為longlong time = filestatus.getModificationTime();// 6 轉換long類型為DataSimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(time);System.out.println(simpleDateFormat.format(date));fs.close();// 6 返回成功信息System.out.println(" ps: 返回信息成功!!!");}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535744.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535744.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535744.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux命令之-管理文件和目錄的命令

一. 創建和刪除目錄的命令 1&#xff0e;mkdir 命令 &#xff08;1&#xff09;一般格式&#xff1a;mkdir [選項] 目錄名 &#xff08;2&#xff09;說明&#xff1a;該命令創建由目錄名命名的目錄。 &#xff08;3&#xff09;舉例1&#xff1a; 在目錄 /usr/fedora 下建…

Hive-簡介入門

Hive簡介 Hive最初是Facebook為了滿足對海量社交網絡數據的管理和機器學習的需求而產生和發展的。互聯網現在進入了大數據時代&#xff0c;大數據是現在互聯網的趨勢&#xff0c;而hadoop就是大數據時代里的核心技術&#xff0c;但是hadoop的mapreduce操作專業性太強&#xff0…

Hive-原理解析

一、Hive 架構 下面是Hive的架構圖。 Hive的體系結構可以分為以下幾部分 1、用戶接口&#xff1a;CLI&#xff08;hive shell&#xff09;&#xff1b;JDBC&#xff08;java訪問Hive&#xff09;&#xff1b;WEBUI&#xff08;瀏覽器訪問Hive&#xff09; 2、元數據&#x…

linux命令之history命令

在Linux系統上輸入命令并按下Enter后&#xff0c;這個命令就會存放在命令記錄表 ( ~/.bash_history )中&#xff0c;預定的記錄為1000條&#xff0c;這些都定義在環境變量中。列出所有的歷史記錄&#xff1a;#history 只列出最近10條記錄&#xff1a;#history 10 (注,history和…

Hive-配置安裝

一、HDFS安裝 1、解壓到指定位置tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /usr/local/apps/ 2、改名mv apache-hive-3.1.2-bin/ hive-3.1.2 3、在conf目錄下添加Hadoop安裝路徑mv hive-env.sh.template hive-env.sh # 配置HADOOP_HOME路徑 export HADOOP_HOME/opt/module/…

linux文件系統概念目錄結構

文件系統概念一. 文件與目錄的定義1. 文件系統&#xff1a;它是磁盤上有特定格式的一片區域&#xff0c;操作系統通過文件系統可以方便地查尋和訪問其中所包含的磁盤塊&#xff1b;2. 文件&#xff1a;文件系統中存儲數據的一個命名的對象。3. 目錄&#xff1a;其中包含許多文件…

JDK源碼解析之 java.lang.Class

Java程序在運行時&#xff0c;Java運行時系統一直對所有的對象進行所謂的運行時類型標識。 這項信息紀錄了每個對象所屬的類。虛擬機通常使用運行時類型信息選準正確方法去執行&#xff0c;用來保存這些類型信息的類是Class類。Class類封裝一個對象和接口運行時的狀態&#xff…

Linux Vi常用技巧

VI常用技巧VI命令可以說是Unix/Linux世界里最常用的編輯文件的命令了&#xff0c;但是因為它的命令集眾多&#xff0c;很多人都不習慣使用它&#xff0c;其實您只需要掌握基本命令&#xff0c;然后加以靈活運用&#xff0c;就會發現它的優勢&#xff0c;并會逐漸喜歡使用這種方…

JDK源碼解析之 java.lang.ClassLoader

Class代表它的作用對象是類&#xff0c;Loader代表它的功能是加載&#xff0c;那么ClassLoader就是把一個以.class結尾的文件以JVM能識別的存儲形式加載到內存中。 一、核心方法 1、loadClass方法 protected Class<?> loadClass(String name, boolean resolve) throws…

Linux Vi的使用

一、插入文本┌──┬────────────┐│命令│描述 │├──┼────────────┤│i │在當前字符前插入文本 │├──┼────────────┤│I │在行首插入文本 │├──┼────────────┤│a │在當前字符后添加文本 │├──┼──…

Hive-beeline服務

Hive客戶端工具后續使用了Beeline 替代HiveCLI &#xff0c;并且后續版本也會廢棄掉HiveCLI 客戶端工具,Beeline是 Hive 0.11版本引入的新命令行客戶端工具,它是基于SQLLine CLI的JDBC客戶端。 Beeline支持嵌入模式(embedded mode)和遠程模式(remote mode)。在嵌入式模式下&am…

用戶賬號管理基本概念

什么是用戶賬號管理用戶賬號一般包括普通用戶賬號、管理賬號和系統賬號。為了鑒別用戶身份以及加強系統安全&#xff0c;系統為每個使用它的人分配了一個賬號&#xff0c;這就是普通用戶賬號。每個人擁有一個獨立的普通用戶賬號&#xff0c;每個賬號有不同的用戶名和密碼。用戶…

JDK源碼解析之 Java.lang.Compiler

Compiler類提供支持Java到本機代碼編譯器和相關服務。在設計上&#xff0c;它作為一個占位符在JIT編譯器實現。 一、源碼部分 public final class Compiler {private Compiler() {} // dont make instancesprivate static native void initialize();private st…

shell的基本概念

Shell就像一個殼層&#xff0c;這個殼層介于用戶和操作系統之間&#xff0c;負責將用戶的命令解釋為操作系統可以接收的低級語言&#xff0c;并將操作系統響應的信息以用戶可以了解的方式來顯示。 從用戶登陸到注銷期間&#xff0c;用戶輸入的每個命令都會經過解譯及…

JDK源碼解析之 java.lang.System

一個和系統環境進行交互的類. System不允許被實例化, 而且是一個final類 一、不能實例化 private System() { }二、成員變量 public final static InputStream in null; //這是“標準”輸入流。 public final static PrintStream out null; //這是“標準”輸出流。 public …

詳解MySQL中DROP,TRUNCATE 和DELETE的區別

注意:這里說的delete是指不帶where子句的delete語句 相同點: truncate和不帶where子句的delete, 以及drop都會刪除表內的數據 不同點: 1. truncate和 delete只刪除數據不刪除表的結構(定義) drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index…

JDK源碼解析之 Java.lang.Package

如果我們在Class對象上調用getPackage方法&#xff0c;就可以得到描述該類所在包的Package對象(Package類是在java.lang中定義的)。我們也可以用包名通過調用靜態方法getPackage或者調用靜態方法getPackages(該方法返回由系統中所有已知包構成的數組)來獲得Package對象。getNam…

Mysql中limit的用法詳解

在我們使用查詢語句的時候&#xff0c;經常要返回前幾條或者中間某幾行數據&#xff0c;這個時候怎么辦呢&#xff1f;不用擔心&#xff0c;mysql已經為我們提供了這樣一個功能。SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于強制 SE…

Docker入門-簡介

獨具魅力的Docker作為一門新技術&#xff0c;它的出現有可能引起其所在領域大范圍的波動甚至是重新洗牌。根據業內專業人士的看法&#xff0c;不論如何&#xff0c;Docker的出現&#xff0c;已經成為云服務市場中一枚極具意義的戰略性棋子。從2013年開始在國內發力&#xff0c;…

Mysql中limit的優化

在一些情況中&#xff0c;當你使用LIMIT row_count而不使用HAVING時&#xff0c;MySQL將以不同方式處理查詢。 如果你用LIMIT只選擇一些行&#xff0c;當MySQL選擇做完整的表掃描時&#xff0c;它將在一些情況下使用索引。 如果你使用LIMIT row_count與ORD…