1. 程式人生 > 實用技巧 >HADOOP之HDFS用idea操作(一)

HADOOP之HDFS用idea操作(一)

使用idea操作HDFS、建立檔案、上傳檔案、獲取塊資訊、下載檔案

1.搭建maven工程

2.pom依賴

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6
.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.6
.5</version> </dependency>

3.hadoop conf中core-site.xml、hdfs-site.xml 放入resource目錄下

4.程式碼

package com.xiaoke.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import
org.junit.Test; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; public class TestHDFS { public Configuration conf = null; public FileSystem fs = null; //C/ @Before public void conn() throws Exception { // true 會獲取resource下的配置檔案,並載入進Configuration中 conf = new Configuration(true); // 使用配置檔案中的配置資訊 fs = FileSystem.get(conf); // <property> // <name>fs.defaultFS</name> // <value>hdfs://mycluster</value> // </property> //去環境變數 HADOOP_USER_NAME god 需要在winows環境變數中配置 // 不使用配置檔案中的資訊 自己建立 // fs = FileSystem.get(URI.create("hdfs://mycluster"), conf, "god"); } // 建立資料夾 @Test public void mkdir() throws Exception { Path dir = new Path("/xiaoke002"); if (fs.exists(dir)) { fs.delete(dir, true); } fs.mkdirs(dir); } // 上傳檔案 @Test public void upload() throws Exception { BufferedInputStream input = new BufferedInputStream(new FileInputStream(new File("./data/hello.txt"))); Path outfile = new Path("/xiaoke002/out.txt"); FSDataOutputStream output = fs.create(outfile); // 下面的工具相當於我們從檔案流中讀取一行,在往上面重新整理一次,完了關閉流 IOUtils.copyBytes(input, output, conf, true); } @Test public void blocks() throws Exception { Path file = new Path("/user/god/data.txt"); FileStatus fss = fs.getFileStatus(file); BlockLocation[] blks = fs.getFileBlockLocations(fss, 0, fss.getLen()); for (BlockLocation b : blks) { System.out.println(b); } // 0, 1048576, node04,node02 A // 1048576, 540319, node04,node03 B //計算向資料移動~! //其實使用者和程式讀取的是檔案這個級別~!並不知道有塊的概念~! FSDataInputStream in = fs.open(file); //面向檔案開啟的輸入流 無論怎麼讀都是從檔案開始讀起~! // blk01: he // blk02: llo msb 66231 in.seek(1048576); //計算向資料移動後,期望的是分治,只讀取自己關心(通過seek實現),同時,具備距離的概念(優先和本地的DN獲取資料--框架的預設機制) System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); System.out.println((char) in.readByte()); } @After public void close() throws Exception { fs.close(); } }

程式碼地址:https://gitee.com/Xiaokeworksveryhard/big-data.git
檔案:hadoop-hdfs