国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

云計算與大數(shù)據(jù)實(shí)驗(yàn)四 HDFS編程

這篇具有很好參考價值的文章主要介紹了云計算與大數(shù)據(jù)實(shí)驗(yàn)四 HDFS編程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、實(shí)驗(yàn)?zāi)康?/h4>
  1. 深入理解HDFS工作原理和編程思想

  2. 使用HDFSJava接口進(jìn)行文件的讀寫

  3. 使用HDFSJava接口進(jìn)行之上傳文件

  4. 使用HDFSJava接口進(jìn)行之刪除文件

二、實(shí)驗(yàn)內(nèi)容

  1. HDFSJava API接口進(jìn)行文件的讀寫操作

  2. HDFSJava API接口進(jìn)行之上傳文件操作

  3. HDFSJava API接口進(jìn)行之刪除文件操作

三、實(shí)驗(yàn)步驟

(一)HDFS-JAVA接口之讀取文件

我們要深入探索HadoopFileSystem類,它是與Hadoop的某一文件系統(tǒng)進(jìn)行交互的API

第3關(guān):hdfs-java接口之上傳文件,云計算與大數(shù)據(jù),大數(shù)據(jù),hdfs,云計算,文件讀寫,文件上傳與刪除

為了完成接下來的操作,你需要學(xué)習(xí)并掌握:

1.FileSystem對象的使用,2.FSDataInputSteam對象的使用。

FileSystem對象

要從Hadoop文件系統(tǒng)中讀取文件,最簡單的辦法是使用java.net.URL對象打開數(shù)據(jù)流,從中獲取數(shù)據(jù)。不過這種方法一般要使用FsUrlStreamHandlerFactory實(shí)例調(diào)用setURLStreamHandlerFactory()方法。不過每個Java虛擬機(jī)只能調(diào)用一次這個方法,所以如果其他第三方程序聲明了這個對象,那我們將無法使用了。 因?yàn)橛袝r候我們不能在程序中設(shè)置URLStreamHandlerFactory實(shí)例,這個時候咱們就可以使用FileSystem API來打開一個輸入流,進(jìn)而對HDFS進(jìn)行操作。

代碼如下:

public sattic void main(String[] args){
????URI uri = URI.create("hdfs://localhost:9000/user/tmp/test.txt");
????Configuration config = new Configuration();
????FileSystem fs = FileSystem.get(uri, config);
????InputStream in = null;
????try {
????????in = fs.open(new Path(uri));
????????IOUtils.copyBytes(in, System.out, 2048, false);
????} catch (Exception e) {
????????IOUtils.closeStream(in);
????}
}

FileSystem是一個通用的文件系統(tǒng)API,FileSystem實(shí)例有下列幾個靜態(tài)工廠方法用來構(gòu)造對象。

public static FileSystem get(Configuration conf)throws IOException
public static FileSystem get(URI uri,Configuration conf)throws IOException
public static FileSystem get(URI uri,Configuration conf,String user)throws IOException

Configuration對象封裝了客戶端或服務(wù)器的配置,通過設(shè)置配置文件讀取類路徑來實(shí)現(xiàn)(如:/etc/hadoop/core-site.xml)。

  • 第一個方法返回的默認(rèn)文件系統(tǒng)是在core-site.xml中指定的,如果沒有指定,就使用默認(rèn)的文件系統(tǒng)。
  • 第二個方法使用給定的URI方案和權(quán)限來確定要使用的文件系統(tǒng),如果給定URI中沒有指定方案,則返回默認(rèn)文件系統(tǒng),
  • 第三個方法作為給定用戶來返回文件系統(tǒng),這個在安全方面來說非常重要。

FSDataInputStream對象

實(shí)際上,FileSystem對象中的open()方法返回的就是FSDataInputStream對象,而不是標(biāo)準(zhǔn)的java.io類對象。這個類是繼承了java.io.DataInputStream的一個特殊類,并支持隨機(jī)訪問,由此可以從流的任意位置讀取數(shù)據(jù)。

在有了FileSystem實(shí)例之后,我們調(diào)用open()函數(shù)來獲取文件的輸入流。

public FSDataInputStream open(Path p)throws IOException
public abst\fract FSDataInputStream open(Path f,int bufferSize)throws IOException

了解了這些,我們在來回顧上文代碼,就能更好的理解這些方法的作用了:

第3關(guān):hdfs-java接口之上傳文件,云計算與大數(shù)據(jù),大數(shù)據(jù),hdfs,云計算,文件讀寫,文件上傳與刪除

編寫代碼實(shí)現(xiàn)如下功能:

使用FSDataInputStream獲取HDFS/user/hadoop/目錄下的task.txt的文件內(nèi)容,并輸出;

預(yù)期輸出: WARN [main] - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 怕什么真理無窮,進(jìn)一寸有一寸的歡喜。

相關(guān)代碼:

1.	//啟動hadoop: start-dfs.sh
2.	package step2;
3.	
4.	import java.io.IOException;
5.	import java.io.InputStream;
6.	import java.net.URI;
7.	
8.	import org.apache.hadoop.conf.Configuration;
9.	import org.apache.hadoop.fs.FileSystem;
10.	import org.apache.hadoop.fs.Path;
11.	import org.apache.hadoop.io.IOUtils;
12.	
13.	
14.	public class FileSystemCat {
15.	
16.	    public static void main(String[] args) throws IOException {
17.	        /********* Begin *********/
18.	        Configuration config = new Configuration();
19.	        URI uri = URI.create("hdfs://localhost:9000/user/hadoop/task.txt");
20.	        FileSystem fs = FileSystem.get(uri, config);
21.	        InputStream in = null;
22.	        try {
23.	            in = fs.open(new Path(uri));
24.	            IOUtils.copyBytes(in, System.out, 2048, false);
25.	        } catch (Exception e) {
26.	            IOUtils.closeStream(in);
27.	        }
28.	        /********* End *********/
29.	    }
30.	
31.	}

(二)HDFS-JAVA接口之上傳文件

FSDataOutputStream對象

我們知道在Java中要將數(shù)據(jù)輸出到終端,需要文件輸出流,HDFSJavaAPI中也有類似的對象。 FileSystem類有一系列新建文件的方法,最簡單的方法是給準(zhǔn)備新建的文件制定一個path對象,然后返回一個用于寫入數(shù)據(jù)的輸出流:

public FSDataOutputStream create(Path p)throws IOException

該方法有很多重載方法,允許我們指定是否需要強(qiáng)制覆蓋現(xiàn)有文件,文件備份數(shù)量,寫入文件時所用緩沖區(qū)大小,文件塊大小以及文件權(quán)限。

注意:create()方法能夠?yàn)樾枰獙懭肭耶?dāng)前不存在的目錄創(chuàng)建父目錄,即就算傳入的路徑是不存在的,該方法也會為你創(chuàng)建一個目錄,而不會報錯。如果有時候我們并不希望它這么做,可以先用exists()方法先判斷目錄是否存在。

我們在寫入數(shù)據(jù)的時候經(jīng)常想要知道當(dāng)前的進(jìn)度,API也提供了一個Progressable用于傳遞回調(diào)接口,這樣我們就可以很方便的將寫入datanode的進(jìn)度通知給應(yīng)用了。

package org.apache.hadoop.util;
public interface Progressable{
????public void progress();
}

編寫代碼與腳本實(shí)現(xiàn)如下功能:

/develop/input/目錄下創(chuàng)建hello.txt文件,并輸入如下數(shù)據(jù): 迢迢牽牛星,皎皎河漢女。 纖纖擢素手,札札弄機(jī)杼。 終日不成章,泣涕零如雨。 河漢清且淺,相去復(fù)幾許? 盈盈一水間,脈脈不得語。 《迢迢牽牛星》

使用FSDataOutputStream對象將文件上傳至HDFS/user/tmp/目錄下,并打印進(jìn)度。

預(yù)期輸出:

第3關(guān):hdfs-java接口之上傳文件,云計算與大數(shù)據(jù),大數(shù)據(jù),hdfs,云計算,文件讀寫,文件上傳與刪除

?相關(guān)代碼:

shell指令:

1.	mkdir /develop
2.	mkdir /develop/input
3.	cd /develop/input
4.	touch hello.txt
5.	vim hello.txt  插入數(shù)據(jù)  wq 保存退出
6.	start-dfs.sh
1.	package step3;
2.	
3.	
4.	import java.io.BufferedInputStream;
5.	import java.io.FileInputStream;
6.	import java.io.FileNotFoundException;
7.	import java.io.IOException;
8.	import java.io.InputStream;
9.	import java.net.URI;
10.	import java.io.File;
11.	
12.	import org.apache.hadoop.conf.Configuration;
13.	import org.apache.hadoop.fs.FSDataOutputStream;
14.	import org.apache.hadoop.fs.FileSystem;
15.	import org.apache.hadoop.fs.Path;
16.	import org.apache.hadoop.io.IOUtils;
17.	import org.apache.hadoop.util.Progressable;
18.	
19.	
20.	public class FileSystemUpload {
21.	
22.	    public static void main(String[] args) throws IOException {
23.	        /********* Begin *********/
24.	        File localPath = new File("/develop/input/hello.txt");
25.	        String hdfsPath = "hdfs://localhost:9000/user/tmp/hello.txt";
26.	
27.	        InputStream in = new BufferedInputStream(new FileInputStream(localPath));// 獲取輸入流對象
28.	
29.	        Configuration config = new Configuration();
30.	
31.	        FileSystem fs = FileSystem.get(URI.create(hdfsPath), config);
32.	
33.	        long fileSize = localPath.length() > 65536 ? localPath.length() / 65536 : 1; // 待上傳文件大小
34.	
35.	        FSDataOutputStream out = fs.create(new Path(hdfsPath), new Progressable() {
36.	            // 方法在每次上傳了64KB字節(jié)大小的文件之后會自動調(diào)用一次
37.	            long fileCount = 0;
38.	
39.	            public void progress() {
40.	                System.out.println("總進(jìn)度" + (fileCount / fileSize) * 100 + "%");
41.	                fileCount++;
42.	            }
43.	        });
44.	
45.	        IOUtils.copyBytes(in, out, 2048, true);// 最后一個參數(shù)的意思是使用完之后是否關(guān)閉流
46.	        /********* End *********/
47.	    }
48.	}

(三)HDFS-JAVA接口之刪除文件

我們在開發(fā)或者維護(hù)系統(tǒng)時,經(jīng)常會需要列出目錄的內(nèi)容,在HDFSAPI中就提供了listStatus()方法來實(shí)現(xiàn)該功能。

public FileStatus[] listStatus(Path f)throws IOException
public FileStatus[] listStatus(Path f,PathFilter filter)throws IOException
public FileStatus listStatus(Path[] files)throws IOException
public FileStatus() listStatus(Path[] files,PathFilter filter)throws IOException

當(dāng)傳入?yún)?shù)是一個文件時,他會簡單的轉(zhuǎn)變成以數(shù)組方式返回長度為1FileStatus對象,當(dāng)傳入?yún)?shù)是一個目錄時,則返回0或多個FileStatus對象,表示此目錄中包含的文件和目錄。

刪除文件

使用FileSystemdelete()方法可以永久性刪除文件或目錄。

public boolean delete(Path f,boolean recursive)throws IOException

如果f是一個文件或者空目錄,那么recursive的值可以忽略,當(dāng)recursize的值為true,并且p是一個非空目錄時,非空目錄及其內(nèi)容才會被刪除(否則將會拋出IOException異常)。

編寫代碼實(shí)現(xiàn)如下功能:

  • 刪除HDFS/user/hadoop/目錄(空目錄);
  • 刪除HDFS/tmp/test/目錄(非空目錄);
  • 列出HDFS根目錄下所有的文件和文件夾;
  • 列出HDFS/tmp/的所有文件和文件夾。

預(yù)期輸出:

第3關(guān):hdfs-java接口之上傳文件,云計算與大數(shù)據(jù),大數(shù)據(jù),hdfs,云計算,文件讀寫,文件上傳與刪除

?相關(guān)代碼:

1.	package step4;
2.	import java.io.IOException;
3.	import java.net.URI;
4.	import org.apache.hadoop.conf.Configuration;
5.	import org.apache.hadoop.fs.FileStatus;
6.	import org.apache.hadoop.fs.FileSystem;
7.	import org.apache.hadoop.fs.FileUtil;
8.	import org.apache.hadoop.fs.Path;
9.	
10.	public class FileSystemDelete {
11.	
12.	    public static void main(String[] args) throws IOException {
13.	    /********* Begin *********/
14.	        String root = "hdfs://localhost:9000/";//根目錄
15.	        String path = "hdfs://localhost:9000/tmp"; //要列出的目錄
16.	        //待刪除的兩個目錄
17.	        String del1 = "hdfs://localhost:9000/user/hadoop";
18.	        String del2 = "hdfs://localhost:9000/tmp/test";
19.	
20.	        Configuration config = new Configuration();
21.	        FileSystem fs = FileSystem.get(URI.create(root),config);
22.	        fs.delete(new Path(del1),true);
23.	        fs.delete(new Path(del2),true);
24.	        Path[] paths = {new Path(root),new Path(path)};
25.	        FileStatus[] status = fs.listStatus(paths);
26.	        Path[] listPaths = FileUtil.stat2Paths(status);
27.	
28.	        for(Path path1 : listPaths){
29.	            System.out.println(path1);
30.	        }
31.	    /********* End *********/
32.	    }
33.	}

四、實(shí)驗(yàn)心得?

會使用HDFSJava接口進(jìn)行文件的讀寫

會使用HDFSJava接口進(jìn)行之上傳文件

會使用HDFSJava接口進(jìn)行之刪除文件文章來源地址http://www.zghlxwxcb.cn/news/detail-715767.html

到了這里,關(guān)于云計算與大數(shù)據(jù)實(shí)驗(yàn)四 HDFS編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 云計算實(shí)驗(yàn) HDFS編程

    云計算實(shí)驗(yàn) HDFS編程

    【實(shí)驗(yàn)作業(yè)1】自己動手實(shí)現(xiàn)HDFS Shell 基于已經(jīng)學(xué)習(xí)到的Hadoop API編程知識,自己動手實(shí)現(xiàn)一個簡單的HDFS Shell程序,程序名稱為HShell,要求能夠支持以下功能: 1.使用HShell -cp 本地路徑 HDFS路徑,將文件從Linux本地文件系統(tǒng)拷貝到HDFS指定路徑上。 2.使用HShell -rm 路徑刪除文件 3.使

    2024年02月08日
    瀏覽(22)
  • 大數(shù)據(jù)實(shí)驗(yàn)三-HBase編程實(shí)踐

    大數(shù)據(jù)實(shí)驗(yàn)三-HBase編程實(shí)踐

    目錄 一.實(shí)驗(yàn)內(nèi)容 二.實(shí)驗(yàn)?zāi)康?三.實(shí)驗(yàn)過程截圖及說明 1、安裝HBase 2、配置偽分布式模式: 3、使用hbase的shell命令來操作表: 4、使用hbase提供的javaAPI來編程實(shí)現(xiàn)類似操作: 5、實(shí)驗(yàn)總結(jié)及心得體會 6、完整報告在文章開頭,掛載。 HBase編程實(shí)踐: 1)在Hadoop基礎(chǔ)上安裝H

    2024年04月12日
    瀏覽(34)
  • 【大數(shù)據(jù)實(shí)驗(yàn)五】 MapReduce初級編程實(shí)踐

    【大數(shù)據(jù)實(shí)驗(yàn)五】 MapReduce初級編程實(shí)踐

    1實(shí)驗(yàn)?zāi)康?1.通過實(shí)驗(yàn)掌握基本的MapReduce編程方法; 2.掌握用MapReduce解決一些常見的數(shù)據(jù)處理問題,包括數(shù)據(jù)去重、數(shù)據(jù)排序和數(shù)據(jù)挖掘等。 2實(shí)驗(yàn)平臺 已經(jīng)配置完成的Hadoop偽分布式環(huán)境。 (1)操作系統(tǒng):Linux(Ubuntu18.04) (2)Hadoop版本:3.1.3 3實(shí)驗(yàn)內(nèi)容和要求 1.編程實(shí)現(xiàn)文件

    2024年02月03日
    瀏覽(156)
  • 大數(shù)據(jù)實(shí)驗(yàn) 實(shí)驗(yàn)六:Spark初級編程實(shí)踐

    大數(shù)據(jù)實(shí)驗(yàn) 實(shí)驗(yàn)六:Spark初級編程實(shí)踐

    實(shí)驗(yàn)環(huán)境:Windows 10 Oracle VM VirtualBox 虛擬機(jī):cnetos 7 Hadoop 3.3 因?yàn)镠adoop版本為3.3所以在官網(wǎng)選擇支持3.3的spark安裝包 解壓安裝包到指定文件夾 配置spark-env.sh 啟動成功 (1) 在spark-shell中讀取Linux系統(tǒng)本地文件“/home/hadoop/test.txt”,然后統(tǒng)計出文件的行數(shù); (2) 在spark-shell中讀

    2024年02月04日
    瀏覽(174)
  • 云計算技術(shù) 實(shí)驗(yàn)四 HDFS操作方法和基礎(chǔ)編程

    云計算技術(shù) 實(shí)驗(yàn)四 HDFS操作方法和基礎(chǔ)編程

    參考資料為: 教材代碼-林子雨編著《大數(shù)據(jù)基礎(chǔ)編程、實(shí)驗(yàn)和案例教程(第2版)》教材所有章節(jié)代碼_廈大數(shù)據(jù)庫實(shí)驗(yàn)室博客 1 . 實(shí)驗(yàn)學(xué)時 4學(xué)時 2 . 實(shí)驗(yàn)?zāi)康?熟悉HDFS的基本shell命令 熟悉HDFS的web管理 掌握HDFS編程實(shí)踐 3 . 實(shí)驗(yàn)內(nèi)容 (一)參考實(shí)驗(yàn)指南的內(nèi)容,完成相關(guān)的HDF

    2024年02月08日
    瀏覽(23)
  • (十一)大數(shù)據(jù)實(shí)戰(zhàn)——hadoop高可用之HDFS手動模式高可用

    (十一)大數(shù)據(jù)實(shí)戰(zhàn)——hadoop高可用之HDFS手動模式高可用

    本節(jié)內(nèi)容我們介紹一下hadoop在手動模式下如何實(shí)現(xiàn)HDFS的高可用,HDFS的高可用功能是通過配置多個 NameNodes(Active/Standby)實(shí)現(xiàn)在集群中對 NameNode 的熱備來解決上述問題。如果出現(xiàn)故障,如機(jī)器崩潰或機(jī)器需要升級維護(hù),這時可通過此種方式將 NameNode很快的切換到另外一臺機(jī)器,

    2024年02月14日
    瀏覽(23)
  • (十二)大數(shù)據(jù)實(shí)戰(zhàn)——hadoop集群之HDFS高可用自動故障轉(zhuǎn)移

    (十二)大數(shù)據(jù)實(shí)戰(zhàn)——hadoop集群之HDFS高可用自動故障轉(zhuǎn)移

    本節(jié)內(nèi)容主要介紹一下hadoop集群下實(shí)現(xiàn)HDFS高可用的自動故障轉(zhuǎn)移,HDFS高可用的自動故障轉(zhuǎn)移主要通過zookeeper實(shí)現(xiàn)故障的監(jiān)控和主節(jié)點(diǎn)的切換。自動故障轉(zhuǎn)移為 HDFS 部署增加了兩個新組件:ZooKeeper 和 ZKFailoverController (ZKFC)進(jìn)程。ZooKeeper 是維護(hù)少量協(xié)調(diào)數(shù)據(jù),通知客戶端這些

    2024年02月13日
    瀏覽(29)
  • 【黑馬2023大數(shù)據(jù)實(shí)戰(zhàn)教程】VMWare虛擬機(jī)部署HDFS集群詳細(xì)過程

    【黑馬2023大數(shù)據(jù)實(shí)戰(zhàn)教程】VMWare虛擬機(jī)部署HDFS集群詳細(xì)過程

    視頻:黑馬2023 VMWare虛擬機(jī)部署HDFS集群 注意!這些操作的前提是完成了前置準(zhǔn)備中的服務(wù)器創(chuàng)建、固定IP、防火墻關(guān)閉、Hadoop用戶創(chuàng)建、SSH免密、JDK部署等操作!!! 操作在這里 大數(shù)據(jù)集群環(huán)境準(zhǔn)備過程記錄(3臺虛擬機(jī)) 1.上傳Hadoop安裝包到node1節(jié)點(diǎn)中 rz -bey 2.解壓縮安裝包到

    2023年04月27日
    瀏覽(25)
  • 云計算與大數(shù)據(jù)實(shí)驗(yàn)七 HBase的安裝與基本操作

    云計算與大數(shù)據(jù)實(shí)驗(yàn)七 HBase的安裝與基本操作

    一、實(shí)驗(yàn)?zāi)康?回顧 Hadoop 和 Zookeeper安裝與配置 掌握 HBase 安裝與配置 理解HBase工作原理 掌握HBase表的基本操作 二、實(shí)驗(yàn)內(nèi)容 HBase 安裝與配置 使用 HBase shell 指令創(chuàng)建表 使用 HBase shell 命令添加/刪除數(shù)據(jù) 使用命令刪除表 三、實(shí)驗(yàn)步驟 (一)HBase 安裝與配置 HBase安裝 HBase 的安

    2024年02月03日
    瀏覽(28)
  • 大數(shù)據(jù)技術(shù)原理與應(yīng)用實(shí)驗(yàn)指南——HDFS JAVA API編程實(shí)踐

    大數(shù)據(jù)技術(shù)原理與應(yīng)用實(shí)驗(yàn)指南——HDFS JAVA API編程實(shí)踐

    1. 實(shí)驗(yàn)?zāi)康?(1) 熟練使用HDFS操作常用的Shell命令。 (2) 熟悉HDFS操作常用的Java API。 2. 實(shí)驗(yàn)內(nèi)容 (1) 編程實(shí)現(xiàn)指定功能,并利用Hadoop提供的Shell命令完成相同任務(wù)(文件的上傳、下載、輸出、刪除、移動等操作)。 (2) 有余力編寫一個Java程序,讀取HDFS中的指定文件。

    2024年02月19日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包