hdfs

1.經過代碼驗證集羣的配置文件的優先級
1.編寫源代碼
@Test
public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {

        // 1 獲取文件系統
        Configuration configuration = new Configuration();
        configuration.set("dfs.replication", "2");
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "jinghang");

        // 2 上傳文件
        fs.copyFromLocalFile(new Path("e:/banzhang.txt"), new Path("/banzhang.txt"));

        // 3 關閉資源
        fs.close();

        System.out.println("over");
}
2.將hdfs-site.xml拷貝到項目的根目錄下
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
3.參數優先級
參數優先級排序:(1)客戶端代碼中設置的值 >(2)ClassPath下的用戶自定義配置文件 >(3)而後是服務器的默認配置


2.經過代碼驗證seek指定位置下載node

@Test瀏覽器

public void testCopyToLocalFile() throws IOException, InterruptedException, URISyntaxException{緩存

 

// 1 獲取文件系統安全

Configuration configuration = new Configuration();服務器

FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:9000"), configuration, "jinghang");網絡

 

// 2 執行下載操做oop

// boolean delSrc 指是否將原文件刪除spa

// Path src 指要下載的文件路徑日誌

// Path dst 指將文件下載到的路徑xml

// boolean useRawLocalFileSystem 是否開啓文件校驗

fs.copyToLocalFile(false, new Path("/banzhang.txt"), new Path("e:/banhua.txt"), true);

 

// 3 關閉資源

fs.close();

}3.hdfs的文件的上傳、下載流程文件的上傳1)客戶端經過Distributed FileSystem模塊向NameNode請求上傳文件,NameNode檢查目標文件是否已存在,父目錄是否存在。2)NameNode返回是否能夠上傳。3)客戶端請求第一個 Block上傳到哪幾個DataNode服務器上。4)NameNode返回3個DataNode節點,分別爲dn一、dn二、dn3。5)客戶端經過FSDataOutputStream模塊請求dn1上傳數據,dn1收到請求會繼續調用dn2,而後dn2調用dn3,將這個通訊管道創建完成。6)dn一、dn二、dn3逐級應答客戶端。7)客戶端開始往dn1上傳第一個Block(先從磁盤讀取數據放到一個本地內存緩存),以Packet爲單位,dn1收到一個Packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待應答。8)當一個Block傳輸完成以後,客戶端再次請求NameNode上傳第二個Block的服務器。(重複執行3-7步)。文件下載1)客戶端經過Distributed FileSystem向NameNode請求下載文件,NameNode經過查詢元數據,找到文件塊所在的DataNode地址。2)挑選一臺DataNode(就近原則,而後隨機)服務器,請求讀取數據。3)DataNode開始傳輸數據給客戶端(從磁盤裏面讀取數據輸入流,以Packet爲單位來作校驗)。4)客戶端以Packet爲單位接收,先在本地緩存,而後寫入目標文件。4.hdfs的默認副本策略第一個副本在客戶端所處的節點上,若是客戶端在集羣外,隨機選一個第二個副本和第一個副本位於相同機架上,隨機節點第三個副本位於不一樣機架,隨機節點。5.nn和2nn的工做機制?2nn有什麼做用?集羣的故障處理、集羣的安全模式1. 第一階段:NameNode啓動(1)第一次啓動NameNode格式化後,建立Fsimage和Edits文件。若是不是第一次啓動,直接加載編輯日誌和鏡像文件到內存。(2)客戶端對元數據進行增刪改的請求。(3)NameNode記錄操做日誌,更新滾動日誌。(4)NameNode在內存中對元數據進行增刪改。2. 第二階段:Secondary NameNode工做    (1)Secondary NameNode詢問NameNode是否須要CheckPoint。直接帶回NameNode是否檢查結果。    (2)Secondary NameNode請求執行CheckPoint。    (3)NameNode滾動正在寫的Edits日誌。    (4)將滾動前的編輯日誌和鏡像文件拷貝到Secondary NameNode。    (5)Secondary NameNode加載編輯日誌和鏡像文件到內存,併合並。    (6)生成新的鏡像文件fsimage.chkpoint。    (7)拷貝fsimage.chkpoint到NameNode。    (8)NameNode將fsimage.chkpoint從新命名成fsimage。        NameNode故障後,能夠採用以下兩種方法恢復數據。方法一:將SecondaryNameNode中數據拷貝到NameNode存儲數據的目錄;1. kill -9 NameNode進程2. 刪除NameNode存儲的數據(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)[jinghang@hadoop102 hadoop-2.7.2]$ rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*3. 拷貝SecondaryNameNode中數據到原NameNode存儲數據目錄[jinghang@hadoop102 dfs]$ scp -r jinghang@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/4. 從新啓動NameNode[jinghang@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode方法二:使用-importCheckpoint選項啓動NameNode守護進程,從而將SecondaryNameNode中數據拷貝到NameNode目錄中。1.修改hdfs-site.xml中的<property>  <name>dfs.namenode.checkpoint.period</name>  <value>120</value></property><property>  <name>dfs.namenode.name.dir</name>  <value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name</value></property>2.  kill -9 NameNode進程3.    刪除NameNode存儲的數據(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)[jinghang@hadoop102 hadoop-2.7.2]$ rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*4.    若是SecondaryNameNode不和NameNode在一個主機節點上,須要將SecondaryNameNode存儲數據的目錄拷貝到NameNode存儲數據的平級目錄,並刪除in_use.lock文件[jinghang@hadoop102 dfs]$ scp -r jinghang@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary ./[jinghang@hadoop102 namesecondary]$ rm -rf in_use.lock[jinghang@hadoop102 dfs]$ pwd/opt/module/hadoop-2.7.2/data/tmp/dfs[jinghang@hadoop102 dfs]$ lsdata  name  namesecondary5.    導入檢查點數據(等待一會ctrl+c結束掉)[jinghang@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -importCheckpoint6.    啓動NameNode[jinghang@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode集羣的安全模式1.namenode啓動namenode啓動時,首先將鏡像文件載入內存,並執行編輯日誌中的各項操做。一旦在內存中成功創建文件系統元數據的映像,則建立一個新的Fsimage文件和一個空的編輯日誌。此時,namenode開始監聽datanode請求。這個過程期間,namenode一直運行安全模式,即namenode的文件系統對於客戶端來講是之讀的。2.datanode啓動系統中的數據塊的位置並非由namenode維護的,而是以塊列表的形式存儲在datanode中。在系統的正常操做期間,namenode會在內存中保留全部塊位置的映射信息。在安全模式下,各個datanode會向namenode發送最新的塊列表信息,namenode瞭解到足夠多的塊位置信息以後,便可高效運行文件系統。3.安全模式退出判斷若是知足「最小副本條件」,namenode會在30秒後退出安全模式。基本語法(1)bin/hdfs dfsadmin -safemode get        (功能描述:查看安全模式狀態)(2)bin/hdfs dfsadmin -safemode enter      (功能描述:進入安全模式狀態)(3)bin/hdfs dfsadmin -safemode leave    (功能描述:離開安全模式狀態)(4)bin/hdfs dfsadmin -safemode wait    (功能描述:等待安全模式狀態)6.dn的工做機制1)一個數據塊在DataNode上以文件形式存儲在磁盤上,包括兩個文件,一個是數據自己,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。2)DataNode啓動後向NameNode註冊,經過後,週期性(1小時)的向NameNode上報全部的塊信息。3)心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令如複製塊數據到另外一臺機器,或刪除某個數據塊。若是超過10分鐘沒有收到某個DataNode的心跳,則認爲該節點不可用。4)集羣運行中能夠安全加入和退出一些機器。7.判斷dn的離線  1.datanode進程死亡或網絡故障形成datanode沒法與namenode通訊  2.namenode不會當即把節點斷定爲死亡,要通過一段時間,這段時間暫稱做超時時長  3.hdfs默認的超時時長爲10分鐘30秒  4.超長公式  TimeOut=2*dfs namenode.heartbeat.recheck-interval+10*dfs heartbeat-interval8.添加新節點(1)在xiaokai01主機上再克隆一臺xiaokai04主機    (2)修改IP地址和主機名稱    (3)刪除原來HDFS文件系統留存的文件(/opt/module/hadoop-2.7.2/data和log)    (4)source一下配置文件[jinghang@hadoop105 hadoop-2.7.2]$ source /etc/profile9.什麼是黑名單?什麼是白名單?如何退役舊節點?    添加到白名單的主機節點,都容許訪問NameNode,不在白名單的主機節點,都會被退出。配置白名單的具體步驟以下:(1)在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下建立dfs.hosts文件[jinghang@hadoop102 hadoop]$ pwd/opt/module/hadoop-2.7.2/etc/hadoop[jinghang@hadoop102 hadoop]$ touch dfs.hosts[jinghang@hadoop102 hadoop]$ vi dfs.hosts添加以下主機名稱(不添加hadoop105)hadoop102hadoop103hadoop104    (2)在NameNode的hdfs-site.xml配置文件中增長dfs.hosts屬性<property><name>dfs.hosts</name><value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value></property>(3)配置文件分發[jinghang@hadoop102 hadoop]$ xsync hdfs-site.xml    (4)刷新NameNode[jinghang@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodesRefresh nodes successful    (5)更新ResourceManager節點[jinghang@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes17/06/24 14:17:11 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:8033    在黑名單上面的主機都會被強制退出。1.在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下建立dfs.hosts.exclude文件[jinghang@hadoop102 hadoop]$ pwd/opt/module/hadoop-2.7.2/etc/hadoop[jinghang@hadoop102 hadoop]$ touch dfs.hosts.exclude[jinghang@hadoop102 hadoop]$ vi dfs.hosts.exclude添加以下主機名稱(要退役的節點)hadoop1052.在NameNode的hdfs-site.xml配置文件中增長dfs.hosts.exclude屬性<property><name>dfs.hosts.exclude</name>      <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value></property>3.刷新NameNode、刷新ResourceManager[jinghang@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodesRefresh nodes successful[jinghang@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.1.103:80334.        檢查Web瀏覽器,退役節點的狀態爲decommission in progress(退役中),說明數據節點正在複製塊到其餘節點,如圖3-17所示圖3-17  退役中5.等待退役節點狀態爲decommissioned(全部塊已經複製完成),中止該節點及節點資源管理器。注意:若是副本數是3,服役的節點小於等於3,是不能退役成功的,須要修改副本數後才能退役,如圖3-18所示圖3-18 已退役[jinghang@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanodestopping datanode[jinghang@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanagerstopping nodemanager6.    若是數據不均衡,能夠用命令實現集羣的再平衡[jinghang@hadoop102 hadoop-2.7.2]$ sbin/start-balancer.sh starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-jinghang-balancer-hadoop102.outTime Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved    注意:不容許白名單和黑名單中同時出現同一個主機名稱

相關文章
相關標籤/搜索