hdfs的客戶端操作


 

hdfs的客戶端操作

 

hdfs的客戶端有多種形式:

  網頁形式

  命令行形式

  客戶端在哪里運行,沒有約束,只要運行客戶端的機器能夠跟hdfs集群聯網

 

文件的切塊大小和存儲的副本數量,都是由客戶端決定!

所謂的由客戶端決定,是通過配置參數來定的

hdfs的客戶端會讀以下兩個參數,來決定切塊大小、副本數量:

切塊大小的參數: dfs.blocksize

副本數量的參數: dfs.replication

 

上面兩個參數應該配置在客戶端機器的hadoop目錄中的hdfs-site.xml中配置

<property>
<name>dfs.blocksize</name>
<value>64m</value>
</property>

<property>
<name>dfs.replication</name>
<value>2</value>
</property>

 

hdfs命令行客戶端的常用操作命令

查看hdfs中的目錄信息

hadoop fs -ls /hdfs路徑

 

上傳文件到hdfs

hadoop fs -put /本地文件  /aaa
hadoop fs -copyFromLocal /本地文件  /hdfs路徑 ## copyFromLocal等價於 put hadoop fs -moveFromLocal /本地文件 /hdfs路徑 ## 跟copyFromLocal的區別是:從本地移動到hdfs中

 

下載文件到客戶端本地磁盤

hadoop fs -get /hdfs中的路徑   /本地磁盤目錄
hadoop fs -copyToLocal /hdfs中的路徑 /本地磁盤路徑 ## 跟get等價 hadoop fs -moveToLocal /hdfs路徑 /本地路徑 ## 從hdfs中移動到本地

 

在hdfs創建文件夾

hadoop fs -mkdir  -p /aaa/xxx

 

移動hdfs中的文件(改名)

hadoop fs -mv /hdfs的路徑  /hdfs的另一個路徑

 

刪除hdfs中的文件或文件夾

hadoop fs -rm -r /aaa

 

修改文件的權限

hadoop fs -chown user:group /aaa
hadoop fs -chmod 700 /aaa

 

追加內容到已存在的文件

hadoop fs -appendToFile /本地文件   /hdfs中的文件

 

顯示文本文件的內容

hadoop fs -cat /hdfs中的文件
hadoop fs -tail /hdfs中的文件

 

public class HdfsClientDemo {  FileSystem fs = null; @Before public void init() throws Exception{ Configuration conf = new Configuration(); conf.set("dfs.replication", "2"); conf.set("dfs.blocksize", "64m"); fs = FileSystem.get(new URI("hdfs://hdp-01:9000/"), conf, "root"); } /** * 上傳文件到HDFS * @throws IOException * @throws IllegalArgumentException */ @Test public void testSet() throws IllegalArgumentException, IOException{ fs.copyFromLocalFile(new Path("D:/install-pkgs/hbase-1.2.1-bin.tar.gz"), new Path("/")); fs.close(); } /** * 從HDFS中下載文件到客戶端本地磁盤 * @throws IOException * @throws IllegalArgumentException */ @Test public void testGet() throws IllegalArgumentException, IOException{ fs.copyToLocalFile(new Path("/hdp20-05.txt"), new Path("f:/")); fs.close(); } /** * 在hdfs內部移動文件\修改名稱 */ @Test public void testRename() throws Exception{ fs.rename(new Path("/install.log"), new Path("/aaa/in.log")); fs.close(); } /** * 在hdfs中創建文件夾 */ @Test public void testMkdir() throws Exception{ fs.mkdirs(new Path("/xx/yy/zz")); fs.close(); } /** * 在hdfs中刪除文件或文件夾 */ @Test public void testRm() throws Exception{ fs.delete(new Path("/aaa"), true); fs.close(); } /** * 查詢hdfs指定目錄下的文件信息 */ @Test public void testLs() throws Exception{ // 只查詢文件的信息,不返回文件夾的信息 RemoteIterator<LocatedFileStatus> iter = fs.listFiles(new Path("/"), true); while(iter.hasNext()){ LocatedFileStatus status = iter.next(); System.out.println("文件全路徑:"+status.getPath()); System.out.println("塊大小:"+status.getBlockSize()); System.out.println("文件長度:"+status.getLen()); System.out.println("副本數量:"+status.getReplication()); System.out.println("塊信息:"+Arrays.toString(status.getBlockLocations())); System.out.println("--------------------------------"); } fs.close(); } /** * 查詢hdfs指定目錄下的文件和文件夾信息 */ @Test public void testLs2() throws Exception{ FileStatus[] listStatus = fs.listStatus(new Path("/")); for(FileStatus status:listStatus){ System.out.println("文件全路徑:"+status.getPath()); System.out.println(status.isDirectory()?"這是文件夾":"這是文件"); System.out.println("塊大小:"+status.getBlockSize()); System.out.println("文件長度:"+status.getLen()); System.out.println("副本數量:"+status.getReplication()); System.out.println("--------------------------------"); } fs.close(); }

 


   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM