(一)hadoop叢集搭建——1.4hdfs的操作

我是菜鳥程式設計師發表於2020-12-21

1.HDFS介紹

1.1HDFS特點

a. HDFS是分散式檔案管理系統中的一種,適用一次寫入,多次讀取,不支援對檔案的隨機寫,可以追加,但不能進行修改。

原因:

  1. 檔案在HDFS儲存時,以block為基本單位儲存,修改一個塊中的內容,就會影響當前快之後所有的塊,效率低。
  2. 沒有對檔案提供線上定址功能。

b. HDFS具有高容錯性,儲存資料自動儲存多個副本;適合處理大資料;可構建在廉價機器上。
c. HDFS不適合低延時資料訪問,無法對大量小檔案進行儲存,不支援併發寫入、檔案隨機修改。

1.2HDFS檔案塊大小

塊大小取絕於dfs.blocksize,預設為128M,預設為128M原因,基於最佳傳輸損耗理論。

最佳傳輸損耗理論:在一次傳輸中,定址時間佔用總傳輸時間的1%時,本次傳輸的損耗最小,為最佳價效比傳輸。

2.HDFS的shell操作

  1. 統計檔案數
    [hzhao@h2 ~]$ hadoop fs -count -h /
               7            0                  0 /
    
  2. 檢視檔案大小
    [hzhao@h2 ~]$ hadoop fs -du /
    	0  /tmp
    
  3. hadoop fs既可以對本地檔案系統進行操作,還可以操作分散式檔案系統;hdfs dfs只能操作分散式檔案系統。

3.使用java客戶端操作hdfs

3.1windows安裝hadoop並配置到環境變數中。

3.2建立專案

使用idea建立maven工程,並匯入相關依賴,pom.xml內容為

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.fanbai</groupId>
    <artifactId>hadoop</artifactId>
    <version>1.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>2.7.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.7.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
</dependencies>
</project>

3.3java客戶端建立目錄

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class TestHDFS {
    private FileSystem fs;
    private Configuration conf = new Configuration();
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        fs = FileSystem.get(new URI("hdfs://h1:9000"), conf, "hzhao");
    }
    @After
    public void close() throws IOException {
        fs.close();
    }
    /**
     * 建立目錄
     * @throws IOException
     */
    @Test
    public void testMkdir() throws IOException {
        //建立一個客戶端物件
        fs.mkdirs(new Path("/idea"));
        fs.close();
    }
}

目錄建立成功
在這裡插入圖片描述

3.4上傳檔案

/**

  • 上傳檔案
    */
    @Test
    public void testUpload() throws IOException {
    fs.copyFromLocalFile(new Path(“D:\tmp\test.txt”), new Path("/"));
    }
    檔案上傳成功
    在這裡插入圖片描述

3.5檔案下載

 /**
     * 上傳下載
     */
    @Test
    public void testDownload() throws IOException {
        fs.copyToLocalFile(new Path("/idea"), new Path("D:\\tmp"));
    }

相關文章