大資料之hadoop【hdfs】
目錄
1、HDFS體系結構
2、HDFS Shell操作
3、HDFS Java API
4、HDFS和RPC
5、HDFS High Availability
6、HDFS資料回收和簡單運維
==============================================================
Hadoop
HDFS
Namenode
管理datanode,
接收client的操作
Datanode
只負責儲存資料
Yarn
MapReduce
…storm spark flink
ResourceManager
從整體上對資源的一個管理和排程
NodeManager
具體的管理和排程
=================================
HDFS
HDFS特點 分散式 資料量越來越多,在一個作業系統管轄的範圍存不下了,那麼就分配到更多的作業系統管理的磁碟中,但是不方便管理和維護,因此迫切需要一種系統來管理多臺機器上的檔案,這就是分散式檔案管理系統 。 高可用 是一種允許檔案通過網路在多臺主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。 通透性 實際上是通過網路來訪問檔案的動作,由程式與使用者看來,就像是訪問本地的磁碟一般。 容錯 即使系統中有某些節點離線,整體來說系統仍然可以持續運作而不會有資料損失。 分散式檔案管理系統很多,hdfs只是其中一種,不合適小檔案。 java中操作大檔案的一個包:java.nio包
====================================================
NameNode
是整個檔案系統的管理節點。它維護著整個檔案系統的檔案目錄樹,檔案/目錄的
元資訊和每個檔案對應的資料塊列表。接收使用者的操作請求。
檔案包括:
1)fsimage:元資料映象檔案。儲存某一時段NameNode記憶體元資料資訊。
2)edits:操作日誌檔案。
3)fstime:儲存最近一次checkpoint的時間
檢視fsimage元資料資訊可以通過命令將其轉化為普通xml檔案來進行檢視
bin/hdfs oiv -p XML -i inputfile[具體的檔案路徑] -o outputfile
eg.
[
/opt/hadoop-repo/name/current
current]# hdfs oiv -p XML -i fsimage_0000000000000000116 -o fsimage.xml
檢視edits操作日誌
bin/hdfs oev -p XML -i inputfile[具體的檔案路徑] -o outputfile
eg.
[[email protected] current]# pwd
/opt/hadoop-repo/name/current
current]# hdfs oiv -p XML -i edits_inprogress_0000000000000000119 -o edits.xml
DateNode
說明:datanode中的VERSION中的clusterID必須要和namenode中的VERSION中的clusterID保持一致。
不一致的原因:多次格式化造成(沒有清空 name|data|secondary|tmp目錄中的資料)
提供真實檔案資料的儲存服務。
檔案塊(block):最基本的儲存單位。對於檔案內容而言,一個檔案的長度大小是size,那麼從檔案的0偏移開始,按照固定的大小,順序對檔案進行劃分並編號,劃分好的每一個塊稱一個Block。HDFS預設Block大小是128MB,以一個256MB檔案,共有256/128=2個Block。
不同於普通檔案系統的是,HDFS中,如果一個檔案小於一個數據塊的大小,並不佔用整個資料塊儲存空間
Replication。多複本。預設是三個。
====================================================
HDFS shell
data]# hdfs dfs -appendToFile append.txt /hello 向/hello中追加內容append.txt
data]# hdfs dfs -cp /hello /hello1 將/hello拷貝到/hello1
HDFS JAVA
public class HDFStest {
/*列出目錄的內容 listStatus
讀取檔案 open
建立目 mkdirs
建立檔案 create
顯示檔案儲存位置getFileBlockLocations
刪除檔案或目錄 delete
*/
//Permission Owner Group Size Replication Block Size Name
FileSystem fileSystem;
Configuration configuration;
@Before
public void setUp() throws Exception{
URI uri=new URI("hdfs://master:9000/");
configuration=new Configuration();
fileSystem=FileSystem.get(uri,configuration);
// System.out.println(fileSystem);
}
//獲取檔案列表狀態
@Test
public void testListStatus()throws IOException{
// 根路徑
Path path=new Path("/");
FileStatus[] fileStatuses = fileSystem.listStatus(path);
for (FileStatus f: fileStatuses) {
FsPermission permission = f.getPermission();
String fp_prefix = "-";
if (f.isDirectory()){
fp_prefix = "d";
}
FsAction userAction=permission.getUserAction();
FsAction groupAction = permission.getGroupAction();
FsAction otherAction = permission.getOtherAction();
String acl = fp_prefix+userAction.SYMBOL+groupAction.SYMBOL+otherAction.SYMBOL;
String owner = f.getOwner();
String group= f.getGroup();
long size=f.getLen();
short replication =f.getReplication();
long blockSize = f.getBlockSize();
String name = f.getPath().getName();
String mTime = new SimpleDateFormat("yyyy-MM-dd hh:mm").format(new Date(f.getModificationTime()));
System.out.println(acl + " " + replication + " " + owner + " " +
group + " " + size + " " + mTime + " " + name);
}
}
//讀取檔案 open
@Test
public void testRead() throws IOException {
Path path = new Path("/hello");
FSDataInputStream fis = fileSystem.open(path);
// BufferedReader br=new BufferedReader(new InputStreamReader(fis));
// String line=null;
// while ((line = br.readLine())!=null)
// {
// System.out.println(line);
// }
// br.close();
// 第二種讀取方法
IOUtils.copyBytes(fis,System.out,1024,false);
IOUtils.closeStream(fis);
}
// 建立目錄 mkdirs
@Test
public void testMkdir() throws IOException {
Path path = new Path("/mutil-dir");
boolean ret = fileSystem.mkdirs(path);
Assert.assertEquals(true,ret);
}
// 建立檔案 create
@Test
public void testCreateFile() throws IOException {
Path path = new Path("/mutil-dir1/readme.txt");
// boolean ret = fileSystem.createNewFile(path);
// Assert.assertEquals(true,ret);
FSDataOutputStream fos = fileSystem.create(path);
byte[] bytes= "你好三毛".getBytes();
fos.write(bytes);
fos.close();
//推薦使用第二種
}
//顯示檔案儲存位置 getFileBlockLocations
@Test
public void testLocation() throws IOException {
Path path = new Path("/mutil-dir1/readme.txt");
FileStatus fs=fileSystem.getFileStatus(path);
long len = fs.getLen();
BlockLocation[] locations = fileSystem.getFileBlockLocations(path,0,len);
for (BlockLocation location: locations) {
String[] hosts = location.getHosts();
String[] names = location.getNames();
long length = location.getLength();
System.out.println(Arrays.toString(hosts));
System.out.println(Arrays.toString(names));
System.out.println("length "+ length);
}
}
//刪除檔案或目錄
@Test
public void testDelete() throws IOException {
Path path = new Path("/mutil-dir1/");
boolean ret = fileSystem.delete(path,true);
Assert.assertEquals(true,ret);
}
=====================================================
HDFS和RPC
Hadoop的整個體系結構就是構建在RPC之上的(org.apache.hadoop.ipc)。
RPC(Remote Procedure Call)——遠端過程呼叫協議,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為了通訊程式之間攜帶資訊資料。在OSI網路通訊模型中,RPC跨越了傳輸層和應用層。RPC使得包括網路分散式多程式在內的應用程式更加容易。
RPC採用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。首先,客戶機呼叫程序傳送一個帶引數的呼叫資訊到服務程序,然後等待響應資訊。在伺服器端,程序保持睡眠狀態直到呼叫資訊到達為止。當一個呼叫資訊到達,伺服器獲得程序引數,計算結果,傳送答覆資訊,然後等待下一個呼叫資訊,最後,客戶端呼叫程序接收答覆資訊,獲取程序結果,最後呼叫執行。
RPC程式碼演示
服務介面
package com.sanmao.hadoop_02.rpc;
import org.apache.hadoop.ipc.VersionedProtocol;
//要繼承VersionedProtocol 這個通訊協議
public interface IHelloService extends VersionedProtocol{
long versionID=123456789L;
public String sayHello(String name);
public String heartBeat(String status);
}
具體服務類
package com.sanmao.hadoop_02.rpc;
import org.apache.hadoop.ipc.ProtocolSignature;
import java.io.IOException;
/**
* Created by kkk on 2016/10/21.
*/
public class HelloServiceImpl implements IHelloService{
public String sayHello(String name) {
System.out.println("hello 方法被呼叫了");
return "hello "+name;
}
public String heartBeat(String status) {
System.out.println("心跳檢測");
return "心跳響應 "+ status;
}
public long getProtocolVersion(String s, long l) throws IOException {
return IHelloService.versionID;
}
public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException {
//新建一個簽名
return new ProtocolSignature();
}
}
RPC 伺服器
package com.sanmao.hadoop_02.rpc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
public class RPCDriver {
public static void main(String[] args) throws IOException {
Configuration configuration = new Configuration();
RPC.Builder builder = new RPC.Builder(configuration);
RPC.Server server = builder.setBindAddress("localhost").setPort(8888)
.setProtocol(IHelloService.class)
.setInstance(new HelloServiceImpl()).build();
server.start();
System.out.println("RPC伺服器開啟");
}
}
RPC 客戶端
package com.sanmao.hadoop_02.rpc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import java.io.IOException;
import java.net.InetSocketAddress;
public class RPCClient {
/*Class<T> protocol,
long clientVersion,
InetSocketAddress addr,
Configuration conf*/
//RPC底層採取的就是TPC/IP協議
public static void main(String[] args) throws IOException, InterruptedException {
Configuration configuration= new Configuration();
InetSocketAddress inetSocketAddress=new InetSocketAddress("localhost",8888);
IHelloService proxy = RPC.getProxy(IHelloService.class, IHelloService.versionID, inetSocketAddress, configuration);
//SOAP協議
String result = proxy.sayHello("三毛");
System.out.println(result);
while (true){
String ret = proxy.heartBeat(System.currentTimeMillis() + "");
System.out.println(ret);
Thread.sleep(3000);
}
}
}
HDFS呼叫之資料儲存讀檔案解析
HDFS呼叫之資料儲存寫檔案解析
三個關鍵的介面
ClientProtocol
是客戶端(FileSystem)與NameNode通訊的介面。
DatanodeProtocol
是DataNode與NameNode通訊的介面。
NamenodeProtocol
是SecondaryNameNode與NameNode通訊的介面
常見的HDFS運維
修改回收站清空資料的時間
在每個節點(不僅僅是主節點)上新增配置 core-site.xml,增加如下內容
<property>
<name>fs.trash.interval</name>
<value>1440</value>
<description>單位是分鐘</description>
</property>
hdfs dfsadmin -safemode leave ——>hdfs離開受保護模式
檢視磁碟內容
df -lh /
檢視具體目錄下面檔案大小
du -lh --max-depth=1 path
檢視hdfs
hdfs dfs -du -lh hdfs_path
hdfs dfs -df hdfs_path
檢視磁碟健康狀況
hdfs fsck -blocks hdfs_path
相關推薦
大資料之hadoop【hdfs】
目錄 1、HDFS體系結構 2、HDFS Shell操作 3、HDFS Java API 4、HDFS和RPC 5、HDFS High Availability 6、HDFS資料回收和簡單運維 =======
大資料之Hadoop學習《一》——認識HDFS
title: 大資料之Hadoop學習<一>————認識HDFS date: 2018-11-12 20:31:36 tags: Hadoop categories: 大資料 toc: true 點選檢視我的部落格:Josonlee’s Blog 文
大資料之hadoop(檔案系統HDFS)
一 HDFS概述1.1 概念HDFS,它是一個檔案系統,用於儲存檔案,通過目錄樹來定位檔案;其次,它是分散式的,由很多伺服器聯合起來實現其功能,叢集中的伺服器有各自的角色。HDFS的設計適合一次寫入,多次讀出的場景,且不支援檔案的修改。適合用來做資料分析,並不適合用來做網盤應
大資料之Hadoop學習(環境配置)——Hadoop偽分散式叢集搭建
title: Hadoop偽分散式叢集搭建 date: 2018-11-14 15:17:20 tags: Hadoop categories: 大資料 點選檢視我的部落格: Josonlee’s Blog 文章目錄 前言準備 偽分
大資料之Hadoop學習——動手實戰學習MapReduce程式設計例項
文章目錄 一、MapReduce程式設計例項 1.自定義物件序列化 需求分析 報錯:Exception in thread "main" java.lang.IllegalArgumentExcept
大資料之hadoop / hive / hbase 的區別是什麼?有什麼應用場景?
文章目錄 1. hadoop 2. hive 3. hbase 總結 1. hadoop 它是一個分散式計算+分散式檔案系統,前者其實就是 MapReduce,後者是 HDFS 。後者可以獨立執行,前者可以選擇性使用,也
最詳細的大資料之Hadoop分散式系統架構解析!沒有之一!
Hadoop 由許多元素構成。其最底部是 Hadoop Distributed File System(HDFS),它儲存 Hadoop 叢集中所有儲存節點上的檔案。HDFS(對於本文)的上一層是MapReduce引擎,該引擎由 JobTrackers 和 TaskTrack
大資料之hadoop分散式計算框架MapReduce
一、MapReduce構成 MapReduce分為兩部分,即map和reduce。 其中map是入隊(key,value),reduce則是聚合(計算)。 map過程的輸出時reduce過程的輸入。 需要注意的是這裡map中的key是可以重複的,reduce做聚
大資料之hadoop對比spark------資料儲存
1.Hadoop的資料都是來自於哪裡: 答案:磁碟。 2.map與reduce可以同時執行嗎? 答案:不能,由什麼決定的,shuffle過程決定的。 3.spark為什麼比hadoop要快,sprak儘量的避免從磁碟中進行讀取,以及配置資訊和計算資料,對比這些特性,極
大資料之Hadoop生態系統概述
一、什麼是大資料 首先,我們來了解一下,什麼是大資料?大資料(BigData)是指無法在一定時間內用常規軟體工具進行捕捉、管理和處理的資料集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率、多樣化的資訊資產。由IBM提出的大資料
大資料之hadoop 環境搭建從零開始——實戰訓練
這裡的前提是要先安裝一個乾淨的CentOS系統,我這裡用的是CentOS6.6,安裝教程參考另一篇部落格:https://blog.csdn.net/gaofengyan/article/details/85054337 目錄 ha
大資料之hadoop機架感知
Hadoop是一個能夠對大量資料進行分散式處理的軟體框架,實現了Google的MapReduce程式設計模型和框架,能夠把應用程式分割成許多的小的工作單元(塊),並把這些單元放到任何叢集節點上執行。在MapReduce中,一個準備提交執行的應用程式稱為“作業(job)”,而從一個作業劃分出得、運行於各個計算節
初探大資料之Hadoop簡介
一、Hadoop的主要作用 Hadoop主要解決海量資料的儲存和海量資料的分析計算。 二、Hadoop框架技術的組成 1、HDFS: HDFS是一個檔案系統,用來儲存檔案的
中國綠城大資料研發中心【offer】
綠城總共經過了一次機考,四次面試才拿到了offer。網上投的簡歷,後面打電話邀請我去紫金港校區參加宣講會,【沒去】再後來傳送了一份筆試邀請,其實最開始一直沒重視這個崗位的(畢竟一直追逐的是網際網路公司)後面做線上筆試的時候看到全部是邏輯推力,樹立運算,性格測試。後面就收到了面
大資料之Hadoop(MapReduce(四))------->企業優化
6.1 MapReduce 跑的慢的原因 Mapreduce 程式效率的瓶頸在於兩點: 1)計算機效能 CPU、記憶體、磁碟健康、網路 2)I/O 操作優化 (1)資料傾斜 (2)map和reduce數設定不合理 (3)reduce等待過久 (4)小檔案過多
大資料之hadoop面試題4
2.23. 我們開發job時,是否可以去掉reduce階段。可以。設定reduce數為0 即可。2.24. datanode在什麼情況下不會備份datanode在強制關閉或者非正常斷電不會備份。2.25. combiner出現在那個過程出現在map階段的map方法後等。2.
大資料之hadoop單機版虛擬機器Vmware安裝教程
為深入學習hadoop,需要在個人電腦中安裝cloudera_centos虛擬機器。本篇文件介紹的就是關於cloudera_centos虛擬機器的安裝教程。(推薦使用virtualbox
大資料開發之Hadoop篇----hdfs讀寫許可權操作
由於hdfs的結構和linux是差不多的,所以我們在hdfs的讀寫操作上也是會面臨許可權和路徑問題問題,先讓我們來看下這些都是些什麼問題。 這裡我先上傳了一個README.txt的檔案上去,通過hdfs dfs -ls /user/hadoop命令我們已經可以檢視到hdfs上有了這個檔案了
大資料開發之Hadoop篇----hdfs垃圾回收機制配置
其實要啟動hdfs上的垃圾回收機制只需要配置兩個引數就可以了,也是在core-site.xml上配置就好了,我們先去官網看下這個兩引數的解釋。 官網的解釋是:Number of minutes after which the checkpoint gets deleted. If zero
大資料開發之Hadoop篇----hdfs讀流程
讀流程所涉及到的有client,NameNode和DataNode這個三個,我們來了解下這三個之間在讀流程裡都是幹什麼的。 1,當我們輸入一條讀入資料的命令的時候,如:hdfs dfs -ls / 或者 hdfs dfs -cat /user/hadoop/xxx時,client就通