溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hadoop學(xué)習(xí)--URL方法訪問HDFS數(shù)據(jù)--day04

發(fā)布時間:2020-07-21 09:37:51 來源:網(wǎng)絡(luò) 閱讀:4019 作者:zhicx 欄目:大數(shù)據(jù)

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.net.URL;


import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;

import org.apache.hadoop.io.IOUtils;

import org.junit.Test;


public class TestFileSystemURL {

static {

URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());

}


/**

* 通過URL對象讀取HDFS文件數(shù)據(jù)

* @author Administrator

* 想要從HDFS中讀取數(shù)據(jù),首先我們考慮的是從WEBUI的那種方式去取出數(shù)據(jù)

* 1.定義一個URL對象,該URL對象封裝了該HDFS的URL地址信息

* 2.調(diào)用openStream()方法打開一個輸入流

* 3.通過IOUtils工具類把輸入流復(fù)制到字節(jié)數(shù)組輸出流中,然后打印輸出字節(jié)輸出流的信息

*/

@Test

public void readByURL() throws Exception {

// 配置需要讀取的URL地址的文件

String urlStr = "hdfs://hadoop01:9000/user/hadoop/data/hello.txt";

// 通過URL的帶string的構(gòu)造方法來創(chuàng)建URL對象

URL url = new URL(urlStr);

// 調(diào)用URL對象的openStream()方法得到一個inputstream對象

InputStream is = url.openStream();

//定義一個字符數(shù)組

// byte[] bys = new byte[1024];

// int len =0;

//有三部,讀取,賦值,判斷,一次讀取一個字符數(shù)組,返回值是讀取的字符數(shù)組的長度,如果已經(jīng)到

//文件的末尾了,就返回-1

// while((len=is.read(bys))!=-1){

//輸出一個字符數(shù)組,準(zhǔn)確的說是輸出字符數(shù)組的一部分,從0開始到讀取的長度結(jié)束,print后面不加

//ln

// System.out.print(new String(bys,0,len));

// }

// 創(chuàng)建字節(jié)數(shù)組輸出流對象

ByteArrayOutputStream baos = new ByteArrayOutputStream();

// hadoop提供的IOUtils方法來實現(xiàn)流的對拷

IOUtils.copyBytes(is, baos, 1024);

// 關(guān)閉流對象

IOUtils.closeStream(is);

System.out.println(new String(baos.toByteArray()));

   }

}


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI