HDFS 配置本地客戶端

之前,一直通過Linux命令操作HDFS恨诱。接下來(lái),在本地配置HDFS客戶端室叉,通過編寫代碼操作HDFS。

環(huán)境

  1. mbp2018
  2. hadoop-2.7.7

配置步驟

1. 在本地解壓hadoop-2.7.7.tar.gz硫惕,并配置環(huán)境變量茧痕。在終端輸入$ hadoop測(cè)試是否安裝成功。

2. 在IDEA中建立一個(gè)空的mavean工程恼除。

File \rightarrow new \rightarrow Projects


一路確定即可

3. 打開工程中的pox.xml文件踪旷,在pom.xml文件中加入如下內(nèi)容:

<?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.bigdata</groupId>
    <artifactId>hadoop100</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <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>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.7</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.7</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.7</version>
        </dependency>
    </dependencies>

</project>

聯(lián)網(wǎng)后,等待所有依賴導(dǎo)入完成豁辉。導(dǎo)入成功的包顏色會(huì)是白的令野,否則應(yīng)該是灰色或者黃色。


4. 在工程的resources目錄中加入log4j.properties文件徽级,并寫入如下內(nèi)容:

log4j.rootLogger=INFO,stdout,debug,error

#輸出到控制臺(tái)
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p [%t] %C.%M(%L) | %m%n

#輸出DEBUG級(jí)別以上的日志到文件
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p [%t] %C.%M(%L) | %m%n
log4j.appender.debug.File=./logs/debug.txt
log4j.appender.debug.DatePattern=','yyyy-MM-dd
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.Append=true
log4j.appender.debug.Encoding=UTF-8

#輸出DEBUG級(jí)別以上的日志到文件
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p [%t] %C.%M(%L) | %m%n
log4j.appender.error.File=./logs/error.txt
log4j.appender.error.DatePattern=','yyyy-MM-dd
log4j.appender.error.Threshold=ERROR
log4j.appender.error.Append=true
log4j.appender.error.Encoding=UTF-8

5. 新建一個(gè)JavaClass文件气破,準(zhǔn)備測(cè)試客戶端是否創(chuàng)建成功

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Test;

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

public class HDFSClient {

    public FileSystem getConf(){
        Configuration conf = new Configuration();
        FileSystem fs = null;
        try {
            fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), conf, "lg");  // 以用戶lg連接hdfs://hadoop102:9000,因?yàn)镹ameNode在hadoop102上
        }catch (Exception e){
            System.out.println(e);
        }
        return fs;
    }

    public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException {

        // 1 獲取客戶端
        FileSystem fs = getConf();

        // 2 在hdfs上創(chuàng)建路徑
        fs.mkdirs(new Path("/school"));

        // 3 關(guān)閉資源
        fs.close();

        System.out.println("over");

    }

在瀏覽器中輸入http://hadoop102:9000查看根目錄下是否有school目錄餐抢。

注意:

  1. 在連接前现使,首先需要配置本機(jī)的hosts文件,即主機(jī)名和ip的映射關(guān)系
  2. 在連接hadoop102時(shí)旷痕,相當(dāng)于使用lg用戶登錄hadoop102節(jié)點(diǎn)碳锈,所以需要配置本機(jī)和hadoop102之間的SSH免密登錄。

HDFS客戶端的常用操作

1. 上傳文件

// 1 文件上傳
    @Test
    public void testCopyFromLocalFile() throws IOException {
        // 1 獲取fs對(duì)象
        FileSystem fs = getConf();

        // 2 執(zhí)行上傳API
        fs.copyFromLocalFile(new Path(filePath), new Path("/xianzhang.txt"));

        // 3 關(guān)閉fs對(duì)象
        fs.close();
    }

2. 下載文件

// 2 下載文件
    @Test
    public void testCopyTOLocalFile() throws IOException {
        // 1 獲取fs對(duì)象
        FileSystem fs = getConf();

        // 2 執(zhí)行下載操作
        fs.copyToLocalFile(new Path("/school/xianzhang.txt"), new Path(filePath + "/xianzhang.txt"));

        // 3 關(guān)閉資源
        fs.close();
    }

3. 刪除文件

// 3 文件刪除
    @Test
    public void testDelete() throws IOException {
        FileSystem fs = getConf();
        fs.delete(new Path("/school"), true);
        fs.close();
    }

4. 文件更名

// 4 文件更名
    @Test
    public void testRename() throws IOException {
        FileSystem fs = getConf();
        fs.rename(new Path("/xianzhang.txt"), new Path("/shizhang.txt"));
        fs.close();
    }

5. 查看文件詳情

// 5 查看文件詳情
    @Test
    public void testListFile() throws IOException {
        FileSystem fs = getConf();

        // 查看文件詳情
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);

        while(listFiles.hasNext()) {
            LocatedFileStatus fileStatus = listFiles.next();

            System.out.println(fileStatus.getPath().getName());  // 文件名
            System.out.println(fileStatus.getPermission());  // 權(quán)限
            System.out.println(fileStatus.getLen());  // 長(zhǎng)度

            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            for (BlockLocation blockLocation : blockLocations) {
                String[] hosts = blockLocation.getHosts();
                for (String host : hosts) {
                    System.out.println(host);
                }
            }

            System.out.println("---------------------------");
        }
        fs.close();
    }

6. 判斷文件類型

//  6 判斷是文件還是文件夾
    @Test
    public void testListType() throws IOException {
        FileSystem fs = getConf();

        // 判斷操作
        FileStatus[] listStatus = fs.listStatus(new Path("/"));

        for (FileStatus fileStatus : listStatus) {

            if (fileStatus.isFile()) {
                System.out.println("f:" + fileStatus.getPath().getName());  // 文件
            } else {
                System.out.println("d:" + fileStatus.getPath().getName());  // 目錄
            }
        }
        fs.close();
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苦蒿,一起剝皮案震驚了整個(gè)濱河市殴胧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佩迟,老刑警劉巖团滥,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異报强,居然都是意外死亡灸姊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門秉溉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)力惯,“玉大人,你說我怎么就攤上這事召嘶「妇В” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵弄跌,是天一觀的道長(zhǎng)甲喝。 經(jīng)常有香客問我,道長(zhǎng)铛只,這世上最難降的妖魔是什么埠胖? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任糠溜,我火速辦了婚禮,結(jié)果婚禮上直撤,老公的妹妹穿的比我還像新娘非竿。我一直安慰自己,他們只是感情好谋竖,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布红柱。 她就那樣靜靜地躺著,像睡著了一般圈盔。 火紅的嫁衣襯著肌膚如雪豹芯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天驱敲,我揣著相機(jī)與錄音铁蹈,去河邊找鬼。 笑死众眨,一個(gè)胖子當(dāng)著我的面吹牛握牧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娩梨,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼沿腰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了狈定?” 一聲冷哼從身側(cè)響起颂龙,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纽什,沒想到半個(gè)月后措嵌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芦缰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年企巢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片让蕾。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浪规,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出探孝,到底是詐尸還是另有隱情笋婿,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布顿颅,位于F島的核電站萌抵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏元镀。R本人自食惡果不足惜绍填,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栖疑。 院中可真熱鬧讨永,春花似錦、人聲如沸遇革。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)萝快。三九已至锻霎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揪漩,已是汗流浹背旋恼。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奄容,地道東北人冰更。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像昂勒,于是被迫代替她去往敵國(guó)和親蜀细。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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