日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据之HDFS

發(fā)布時(shí)間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据之HDFS 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、HDFS角色

1、nameNode:負(fù)責(zé)管理整個(gè)文件系統(tǒng)的元數(shù)據(jù);
2、dataNode :負(fù)責(zé)管理用戶的文件數(shù)據(jù)塊;
3、secondary Namenode:負(fù)責(zé)管理image鏡像文件;

dataNode會(huì)定期向nameNode匯報(bào)自身所保存的文件block信息,而namenode則會(huì)負(fù)責(zé)保持文件的副本數(shù)量

二、客戶端向HDFS寫數(shù)據(jù):

上傳數(shù)據(jù)是,dataNode的選擇策略:
1、第一個(gè)副本先考慮和客戶端最近的機(jī)架;
2、第二個(gè)副本再考慮跨機(jī)架選dataNode;
3、第三個(gè)副本在第一個(gè)副本機(jī)架另外選一個(gè)dataNode;

以packet為單位上傳,以chunk為單位校驗(yàn);

三、nameNode管理元數(shù)據(jù)機(jī)制:

hdfs集群不適合存儲(chǔ)大量的小文件;

若nameNode宕機(jī),hdfs就不能正常提供服務(wù);

若namenode硬盤損壞,可以通過secondary Namenode恢復(fù)大部分?jǐn)?shù)據(jù),

因此在配置nameNode的工作目錄參數(shù)時(shí),應(yīng)配置在多塊磁盤上;

nameNode的內(nèi)存常態(tài)為128G。

四、java操作HDFS文件

用流的方式來操作hdfs上的文件,可以實(shí)現(xiàn)讀取指定偏移量范圍的數(shù)據(jù)

package cn.itcast.hdfs;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.net.URI;import org.apache.commons.io.IOUtils;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.junit.Before;import org.junit.Test;public class HdfsStreamAccess {FileSystem fs = null;Configuration conf = null;@Beforepublic void init() throws Exception{conf = new Configuration();//拿到一個(gè)文件系統(tǒng)操作的客戶端實(shí)例對(duì)象// fs = FileSystem.get(conf);//可以直接傳入 uri和用戶身份fs = FileSystem.get(new URI("hdfs://192.168.56.103:9000"),conf,"root"); //最后一個(gè)參數(shù)為用戶名}/*** 通過流的方式上傳文件到hdfs* @throws Exception*/@Testpublic void testUpload() throws Exception {FSDataOutputStream outputStream = fs.create(new Path("/angelababy.love"), true);FileInputStream inputStream = new FileInputStream("c:/angelababy.love");IOUtils.copy(inputStream, outputStream);}/*** 通過流的方式下載hdfs文件* @throws Exception*/@Testpublic void testDownLoad() throws Exception {FSDataInputStream inputStream = fs.open(new Path("/angelababy.love")); FileOutputStream outputStream = new FileOutputStream("d:/angelababy.love");IOUtils.copy(inputStream, outputStream); }/*** 獲取hdfs文件上指定長度內(nèi)容*/@Testpublic void testRandomAccess() throws Exception{FSDataInputStream inputStream = fs.open(new Path("/angelababy.love"));inputStream.seek(12);FileOutputStream outputStream = new FileOutputStream("d:/angelababy.love.part2");IOUtils.copy(inputStream, outputStream); }/*** 顯示hdfs上文件的內(nèi)容*/@Testpublic void testCat() throws IllegalArgumentException, IOException{FSDataInputStream in = fs.open(new Path("/angelababy.love"));IOUtils.copy(in, System.out);// IOUtils.copyBytes(in, System.out, 1024);}}

五、hadoop中的rpc框架

1、創(chuàng)建一個(gè)project項(xiàng)目

2、創(chuàng)建客戶端和服務(wù)端,然后分別啟動(dòng)

MyHdfsClient

package cn.itcast.client;import java.net.InetSocketAddress;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import cn.itcast.protocol.ClientNamenodeProtocol;public class MyHdfsClient {public static void main(String[] args) throws Exception {ClientNamenodeProtocol namenode = RPC.getProxy(ClientNamenodeProtocol.class, 1L,new InetSocketAddress("localhost", 8888), new Configuration());String metaData = namenode.getMetaData("/wordcount");System.out.println(metaData);}}

ClientNamenodeProtocol

package cn.itcast.protocol;public interface ClientNamenodeProtocol {public static final long versionID=1L; //會(huì)讀取這個(gè)版本號(hào), 但可以和客戶端的不一樣, 沒有校驗(yàn)public String getMetaData(String path);}

MyNameNode

package cn.itcast.service;import cn.itcast.protocol.ClientNamenodeProtocol;public class MyNameNode implements ClientNamenodeProtocol{//模擬namenode的業(yè)務(wù)方法之一:查詢?cè)獢?shù)據(jù)@Overridepublic String getMetaData(String path){return path+": 3 - {BLK_1,BLK_2} ....";} }

PublishServiceUtil

package cn.itcast.service;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import org.apache.hadoop.ipc.RPC.Builder;import org.apache.hadoop.ipc.RPC.Server;import cn.itcast.protocol.ClientNamenodeProtocol;public class PublishServiceUtil {public static void main(String[] args) throws Exception {Builder builder = new RPC.Builder(new Configuration());builder.setBindAddress("localhost").setPort(8888).setProtocol(ClientNamenodeProtocol.class).setInstance(new MyNameNode());Server server = builder.build();server.start();}}

3、運(yùn)行結(jié)果

總結(jié)

以上是生活随笔為你收集整理的大数据之HDFS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。