一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java實現對Hadoop的操作

java實現對Hadoop的操作

2021-09-23 13:21Even710 Java教程

這篇文章主要介紹了java實現對Hadoop的操作,通過非常完整詳細的代碼展示了如何去進行一系列操作,包括基本操作,文件讀寫,需要的朋友可以參考下

基本操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
 
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
 
@RunWith(JUnit4.class)
@DisplayName("Test using junit4")
public class HadoopClientTest {
 
    private FileSystem fileSystem = null;
 
    @BeforeEach
    public void init() throws URISyntaxException, IOException, InterruptedException {
        Configuration configuration = new Configuration();
 
        configuration.set("dfs.replication", "1");
        configuration.set("dfs.blocksize", "64m");
        fileSystem = FileSystem.get(new URI("hdfs://hd-even-01:9000"), configuration, "root");
    }
    /**
     * 從本地復制文件到Hadoop
     *
     * @throws URISyntaxException
     * @throws IOException
     * @throws InterruptedException
     */
    @Test
    public void copyFileFromLocal() throws URISyntaxException, IOException, InterruptedException {
        // 上傳文件
        fileSystem.copyFromLocalFile(new Path("C:\\Users\\Administrator\\Desktop\\win10激活.txt"), new Path("/even1"));
        // 關閉流,報錯winUtils,因為使用了linux的tar包,如果windows要使用,則需要編譯好這個winUtils包才能使用
        fileSystem.close();
    }
 
    /**
     * 從Hadoop下載文件到本地,下載需要配置Hadoop環境,并添加winutils到bin目錄
     *
     * @throws URISyntaxException
     * @throws IOException
     * @throws InterruptedException
     */
    @Test
    public void copyFileToLocal() throws URISyntaxException, IOException, InterruptedException {
        // 下載文件
        fileSystem.copyToLocalFile(new Path("/win10激活.txt"), new Path("E:/"));
        // 關閉流,報錯winUtils,因為使用了linux的tar包,如果windows要使用,則需要編譯好這個winUtils包才能使用
        fileSystem.close();
    }
 
 
    /**
     * 創建文件夾
     *
     * @throws IOException
     */
    @Test
    public void hdfsMkdir() throws IOException {
        // 調用創建文件夾方法
        fileSystem.mkdirs(new Path("/even1"));
        // 關閉方法
        fileSystem.close();
    }
 
    /**
     * 移動文件/修改文件名
     */
    public void hdfsRename() throws IOException {
        fileSystem.rename(new Path(""), new Path(""));
        fileSystem.close();
    }
 
    /**
     * 刪除文件/文件夾
     *
     * @throws IOException
     */
    @Test
    public void hdfsRm() throws IOException {
//        fileSystem.delete(new Path(""));
        // 第二個參數表示遞歸刪除
        fileSystem.delete(new Path(""), true);
 
        fileSystem.close();
    }
 
    /**
     * 查看hdfs指定目錄的信息
     *
     * @throws IOException
     */
    @Test
    public void hdfsLs() throws IOException {
        // 調用方法返回遠程迭代器,第二個參數是把目錄文件夾內的文件也列出來
        RemoteIterator<LocatedFileStatus> listFiles = fileSystem.listFiles(new Path("/"), true);
        while (listFiles.hasNext()) {
            LocatedFileStatus locatedFileStatus = listFiles.next();
 
            System.out.println("文件路徑:" + locatedFileStatus.getPath());
            System.out.println("塊大小:" + locatedFileStatus.getBlockSize());
            System.out.println("文件長度:" + locatedFileStatus.getLen());
            System.out.println("副本數量:" + locatedFileStatus.getReplication());
            System.out.println("塊信息:" + Arrays.toString(locatedFileStatus.getBlockLocations()));
        }
 
        fileSystem.close();
    }
 
    /**
     * 判斷是文件還是文件夾
     */
    @Test
    public void findHdfs() throws IOException {
        // 1,展示狀態信息
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
        // 2,遍歷所有文件
        for (FileStatus fileStatus : listStatus) {
            if (fileStatus.isFile())
                System.out.println("是文件:" + fileStatus.getPath().getName());
            else if (fileStatus.isDirectory())
                System.out.println("是文件夾:" + fileStatus.getPath().getName());
        }
 
        fileSystem.close();
    }
 
}

文件讀寫

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.DisplayName;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
 
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
 
@RunWith(JUnit4.class)
@DisplayName("this is read write test!")
public class HadoopReadWriteTest {
    FileSystem fileSystem = null;
    Configuration configuration = null;
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        // 1,加載配置
        configuration = new Configuration();
        // 2,構建客戶端
        fileSystem = FileSystem.get(new URI("hdfs://hd-even-01:9000/"), configuration, "root");
    }
 
 
    @Test
    public void testReadData() throws IOException {
        // 1,獲取hdfs文件流
        FSDataInputStream open = fileSystem.open(new Path("/win10激活.txt"));
        // 2,設置一次獲取的大小
        byte[] bytes = new byte[1024];
        // 3,讀取數據
        while (open.read(bytes) != -1)
            System.out.println(Arrays.toString(bytes));
 
        open.close();
        fileSystem.close();
    }
 
    /**
     * 使用緩存流
     *
     * @throws IOException
     */
    @Test
    public void testReadData1() throws IOException {
        FSDataInputStream open = fileSystem.open(new Path("/win10激活.txt"));
 
        // 使用緩沖流會快點
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open, StandardCharsets.UTF_8));
 
        String line = "";
 
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
 
        bufferedReader.close();
        open.close();
        fileSystem.close();
    }
 
    /**
     * 指定偏移量來實現只讀部分內容
     */
    @Test
    public void readSomeData() throws IOException {
        FSDataInputStream open = fileSystem.open(new Path("/win10激活.txt"));
 
 
        // 指定開始的index
        open.seek(14);
 
        // 指定讀的多少
        byte[] bytes = new byte[5];
        while (open.read(bytes) != -1)
            System.out.println(new String(bytes));
 
        open.close();
        fileSystem.close();
 
    }
 
    /**
     * 流方式寫數據
     * @throws IOException
     */
    @Test
    public void writeData() throws IOException {
        // 1,獲取輸出流
        FSDataOutputStream out = fileSystem.create(new Path("/win11.txt"), false);
 
        // 2,獲取需要寫的文件輸入流
        FileInputStream in = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\xixi.txt"));
 
        byte[] b = new byte[1024];
        int read = 0;
        while ((read = in.read(b)) != -1) {
            out.write(b, 0, read);
        }
        in.close();
        out.close();
        fileSystem.close();
    }
 
    /**
     * 直接寫字符串
     */
    @Test
    public void writeData1() throws IOException {
        // 1,創建輸出流
        FSDataOutputStream out = fileSystem.create(new Path("/aibaobao.txt"), false);
        // 2,寫數據
        out.write("wochaoaibaobao".getBytes());
        // 3,關閉流
        IOUtils.closeStream(out);
        fileSystem.close();
    }
 
    /**
     * IOUtils方式上傳
     *
     * @throws IOException
     */
    @Test
    public void putToHdfs() throws IOException {
        // 1,獲取輸入流
        FileInputStream in = new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\xixi.txt"));
        // 2,獲取輸出流
        FSDataOutputStream out = fileSystem.create(new Path("/haddopPut.txt"), false);
        // 3,拷貝
        IOUtils.copyBytes(in, out, configuration);
        // 4,關閉流
        IOUtils.closeStream(in);
        IOUtils.closeStream(out);
        fileSystem.close();
    }
 
    /**
     * IOUtils方式下載
     * @throws IOException
     */
    @Test
    public void getFromHdfs() throws IOException {
        // 1,獲取輸入流
        FSDataInputStream open = fileSystem.open(new Path("/haddopPut.txt"));
        // 2,獲取輸出流
        FileOutputStream out = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\haddopPut.txt"));
        // 3,拷貝
        IOUtils.copyBytes(open, out, configuration);
        // 4,關閉流
        IOUtils.closeStream(open);
        IOUtils.closeStream(out);
        fileSystem.close();
    }
}

到此這篇關于java實現對Hadoop的操作的文章就介紹到這了,更多相關Java Hadoop內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_37581297/article/details/84349916

延伸 · 閱讀

精彩推薦
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
主站蜘蛛池模板: 91制片厂制作传媒免费版樱花 | 亚洲欧美精品一区天堂久久 | a天堂中文在线 | 国产小嫩模好紧 | ange venus与黑人 | 18岁的老处女 | 久久影院中文字幕 | 日韩国产成人精品视频 | 99re在线精品视频免费 | 2022国产麻豆剧传媒剧情 | 亚洲成综合 | 四虎国产精品免费久久麻豆 | 国语自产拍在线播放不卡 | 午夜神器老司机高清无码 | 五月色婷婷网在线观看 | 99在线观看视频免费精品9 | 性xxxx18学生第一次出血 | 关晓彤一级做a爰片性色毛片 | 丝瓜草莓香蕉绿巨人幸福宝 | 日韩一| 俄罗斯激情性孕妇孕交大全 | 欧美又大又粗又爽视频 | bedfriend泰剧全集免费观看 | 亚洲精品动漫在线观看 | 久久99精品涩AV毛片观看 | 国产三级精品三级男人的天堂 | 男人狂躁女人gif动态图 | 521色香蕉网在线观看免费 | 猥琐对着美女飞机喷到脸上 | 91在线精品国产丝袜超清 | 91porny.首页| 男女姓交大视频免费观看 | 国产精品一级视频 | 亚洲成人三级 | 亚洲 欧美 国产 在线观看 | 国产人成77777视频网站 | 日本www色 | 亚洲国产精品综合福利专区 | gay男男白袜chinese | 99精品99| 青青草高清视频 |