使用 IDEA 搭建 Hadoop3.1.1 項目

Hadoop 的版本是 3.1.1

1. 啟動 Hadoop 服務

$ start-all.sh

2. 新建 IDEA 的 Maven 項目

2.1 選中 Maven,Project SDK 選擇為 1.8,再點擊 Next

點擊 Next

2.2 填寫好 GroupId囚霸,ArtifactId 后光稼,點擊 Next


2.3 點擊 Finish


image.png

3. 修改 Target bytecode version

打開 Setting,選中 Build, Execution, Deployment -> Compiler -> java,將 Target bytecode version 改為 1.8 或 8竹揍。

Target bytecode version

確認這幾個配置下的 jdk 版本都為 1.8


Project SDK
Module SDK

4. 導入需要的 jar 包

4.1 選中 Dependencies 后點擊下方的 + 號材失,選擇「JARs or directories」


添加 jar 包

JARs or directories

4.2 進入 Hadoop 目錄下的 share/hadoop/ 中痕鳍,把這幾個包都導進去

share/hadoop/
選擇 OK
繼續(xù) OK

4.2 在 pom.xml 中添加如下依賴

    <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--&lt;!&ndash; https://mvnrepository.com/artifact/commons-logging/commons-logging &ndash;&gt;-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

        <!--&lt;!&ndash; https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common &ndash;&gt;-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.1.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>1.2.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.1</version>
        </dependency>
        
    </dependencies>

5. 編寫 Hadoop 項目的 Java 代碼

5.1 新建 Java 類「Test.java」

image.png

5.2 編寫代碼

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class Test {

    // 在 HDFS 中新建一個 test 文件夾
    public static void main(String[] args) {

        FileSystem fileSystem = null;
        try {
            fileSystem = FileSystem.get(new URI("hdfs://localhost:9000/"),new Configuration(),"binguner");
            fileSystem.mkdirs(new Path("/test"));
            fileSystem.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

}

5.3 運行 Java 程序

image.png

6. 運行結(jié)果

6.1 運行前的 HDFS 目錄下沒有 test 文件夾


6.2 運行后的 HDFS 目錄下多了 test 文件夾

7. FileSystem 常用接口

  • 7.1 mkdirs
public boolean mkdirs(Path f) throws IOException {
    return this.mkdirs(f, FsPermission.getDirDefault());
}

參數(shù)是新的文件夾的路徑,可以在文件夾里嵌套文件夾進行創(chuàng)建。

  • 7.2 create
    public FSDataOutputStream create(Path f) throws IOException {
        return this.create(f, true);
    }

    public FSDataOutputStream create(Path f, boolean overwrite) throws IOException {
        return this.create(f, overwrite, this.getConf().getInt("io.file.buffer.size", 4096), this.getDefaultReplication(f), this.getDefaultBlockSize(f));
    }

    public FSDataOutputStream create(Path f, Progressable progress) throws IOException {
        return this.create(f, true, this.getConf().getInt("io.file.buffer.size", 4096), this.getDefaultReplication(f), this.getDefaultBlockSize(f), progress);
    }

    public FSDataOutputStream create(Path f, short replication) throws IOException {
        return this.create(f, true, this.getConf().getInt("io.file.buffer.size", 4096), replication, this.getDefaultBlockSize(f));
    }

    public FSDataOutputStream create(Path f, short replication, Progressable progress) throws IOException {
        return this.create(f, true, this.getConf().getInt("io.file.buffer.size", 4096), replication, this.getDefaultBlockSize(f), progress);
    }

    public FSDataOutputStream create(Path f, boolean overwrite, int bufferSize) throws IOException {
        return this.create(f, overwrite, bufferSize, this.getDefaultReplication(f), this.getDefaultBlockSize(f));
    }

    public FSDataOutputStream create(Path f, boolean overwrite, int bufferSize, Progressable progress) throws IOException {
        return this.create(f, overwrite, bufferSize, this.getDefaultReplication(f), this.getDefaultBlockSize(f), progress);
    }

    public FSDataOutputStream create(Path f, boolean overwrite, int bufferSize, short replication, long blockSize) throws IOException {
        return this.create(f, overwrite, bufferSize, replication, blockSize, (Progressable)null);
    }

    public FSDataOutputStream create(Path f, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) throws IOException {
        return this.create(f, FsCreateModes.applyUMask(FsPermission.getFileDefault(), FsPermission.getUMask(this.getConf())), overwrite, bufferSize, replication, blockSize, progress);
    }

    public abstract FSDataOutputStream create(Path var1, FsPermission var2, boolean var3, int var4, short var5, long var6, Progressable var8) throws IOException;

    public FSDataOutputStream create(Path f, FsPermission permission, EnumSet<CreateFlag> flags, int bufferSize, short replication, long blockSize, Progressable progress) throws IOException {
        return this.create(f, permission, flags, bufferSize, replication, blockSize, progress, (ChecksumOpt)null);
    }

    public FSDataOutputStream create(Path f, FsPermission permission, EnumSet<CreateFlag> flags, int bufferSize, short replication, long blockSize, Progressable progress, ChecksumOpt checksumOpt) throws IOException {
        return this.create(f, permission, flags.contains(CreateFlag.OVERWRITE), bufferSize, replication, blockSize, progress);
    }

create 有多個重載函數(shù)笼呆,它的參數(shù)可以指定是否覆蓋已有的文件熊响、文件備份數(shù)量、寫入文件緩沖區(qū)大小诗赌、文件塊大小以及文件權限汗茄。它的返回值是一個 FSDataOutputStream,通過返回的 FSDataOutputStream 對象可以對文件進行寫入铭若。

  • 7.3 copyFromLocal
    public void copyFromLocalFile(Path src, Path dst) throws IOException {
        this.copyFromLocalFile(false, src, dst);
    }

    public void copyFromLocalFile(boolean delSrc, Path src, Path dst) throws IOException {
        this.copyFromLocalFile(delSrc, true, src, dst);
    }

    public void copyFromLocalFile(boolean delSrc, boolean overwrite, Path[] srcs, Path dst) throws IOException {
        Configuration conf = this.getConf();
        FileUtil.copy(getLocal(conf), srcs, this, dst, delSrc, overwrite, conf);
    }

將本地文件拷貝到文件系統(tǒng)洪碳,參數(shù)可以指定上傳本地文件的路徑,上傳的多個路徑組成的 Path 數(shù)組叼屠,存放目標對路徑瞳腌,可以指定是否刪除本地本地的文件或者覆蓋 hdfs 上已經(jīng)創(chuàng)建的文件。

  • 7.4 copyToLocalFile
    public void copyToLocalFile(Path src, Path dst) throws IOException {
        this.copyToLocalFile(false, src, dst);
    }

    public void copyToLocalFile(boolean delSrc, Path src, Path dst) throws IOException {
        this.copyToLocalFile(delSrc, src, dst, false);
    }

將目標文件復制到本地指定路徑镜雨,delSrc 參數(shù)指定移動文件后是否要刪除源文件嫂侍。

  • 7.6 moveToLocalFile
    public void moveToLocalFile(Path src, Path dst) throws IOException {
        this.copyToLocalFile(true, src, dst);
    }

將目標文件移動到指定路徑,函數(shù)內(nèi)部調(diào)用的是 copyToLocalFile冷离。

  • 7.6 exists
    public boolean exists(Path f) throws IOException {
        try {
            return this.getFileStatus(f) != null;
        } catch (FileNotFoundException var3) {
            return false;
        }
    }

輸入一個路徑吵冒,檢查 HDFS 上是否存在這個路徑,存在返回 true西剥,不存在返回 false痹栖。

  • 7.7 delete
    public abstract boolean delete(Path var1, boolean var2) throws IOException;

第一個參數(shù)是要刪除的路徑,第二個參數(shù)為 true 時瞭空,如果目標文件夾內(nèi)有文件揪阿,會強制刪除。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咆畏,一起剝皮案震驚了整個濱河市南捂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旧找,老刑警劉巖溺健,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钮蛛,居然都是意外死亡鞭缭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門魏颓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岭辣,“玉大人,你說我怎么就攤上這事甸饱÷偻” “怎么了仑濒?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長偷遗。 經(jīng)常有香客問我墩瞳,道長,這世上最難降的妖魔是什么鹦肿? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任矗烛,我火速辦了婚禮,結(jié)果婚禮上箩溃,老公的妹妹穿的比我還像新娘。我一直安慰自己碌嘀,他們只是感情好涣旨,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著股冗,像睡著了一般霹陡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上止状,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天烹棉,我揣著相機與錄音,去河邊找鬼怯疤。 笑死浆洗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的集峦。 我是一名探鬼主播伏社,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼塔淤!你這毒婦竟也來了摘昌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤高蜂,失蹤者是張志新(化名)和其女友劉穎聪黎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體备恤,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡稿饰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烘跺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湘纵。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滤淳,靈堂內(nèi)的尸體忽然破棺而出梧喷,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布铺敌,位于F島的核電站汇歹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏偿凭。R本人自食惡果不足惜产弹,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弯囊。 院中可真熱鬧痰哨,春花似錦、人聲如沸匾嘱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霎烙。三九已至撬讽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悬垃,已是汗流浹背游昼。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尝蠕,地道東北人烘豌。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像趟佃,于是被迫代替她去往敵國和親扇谣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 首先闲昭,我們在使用前先看看HDFS是什麼罐寨?這將有助于我們是以后的運維使用和故障排除思路的獲得。 HDFS采用mast...
    W_Bousquet閱讀 4,187評論 0 2
  • 當數(shù)據(jù)量增大到超出了單個物理計算機存儲容量時序矩,有必要把它分開存儲在多個不同的計算機中鸯绿。那些管理存儲在多個網(wǎng)絡互連的...
    單行線的旋律閱讀 1,914評論 0 7
  • 前言 Hadoop在大數(shù)據(jù)技術體系中的地位至關重要,Hadoop是大數(shù)據(jù)技術的基礎簸淀,對Hadoop基礎知識的掌握的...
    piziyang12138閱讀 1,965評論 0 3
  • 有人問導師:分開后瓶蝴,我知道需要斷開原來密切的聯(lián)系,但是我很擔心她會慢慢得把我忘了租幕,害怕她愛上別人舷手。我該怎么 辦?...
    倪昊Kris閱讀 459評論 0 0
  • 有句話叫什么劲绪,等著等著一直等到自己關上了心門男窟,以前覺得好無聊盆赤,現(xiàn)在才知道,還怨自己太年輕不懂事歉眷,以為自己可以一切安...
    ListenRaining閱讀 471評論 0 0