分布式文件系統HDFS-部署和配置


1 部署HDFS

HDFS的基本操作可以分為集群管理和文件系統操作兩種類型:

  • 集群管理:包括Namenodede 的格式化、集群的啟動和停止、集群信息查看等。
  • 文件系統:包括對目錄、文件和權限等內容的操作。

HDFS中的命令主要在sbin和bin目錄下[一般要進行環境變量的設置]:

  • sbin:集群控制腳本(.sh)。
  • bin:hadoop的文件系統命令和其他管理維護工具。

1.1 hadoop安裝和維護的方式

主要有2種方式:

  • 一是從開源軟件的官網網站直接下載軟件包。
  • 二是利用集成化軟件對Hadoop集群進行部署和維護。[集成化工具:amabri、cloudera manager、華為的FusionInsight]

第一種方式缺點:

  • 配置優化難度
  • 組件整合難度

1.2 部署HDFS的核心步驟和部署原則

1.2.1 集群規划

  • hadoop系統的規模
  • 組件和角色規划
    • A.確定需要安裝哪些組件:比如要實現Namenode的高可用性,就需要額外安裝ZK組件。
    • B.確定組件中的不同角色分別安裝在哪些節點上:比如需要幾個Datanode,分別安裝在哪些服務器上,Namenode是安裝在獨立服務器上,還是和某個Datanode共享一台服務器。
    • C.根據角色規划確定所需的服務器性能需求:比如namenode所在服務器可以適當加大內存,以適應fsimage的可能大小,並且安裝多塊硬盤,將元數據信息保存在多個硬盤路徑上,防止單個硬盤發生故障。
    • D.節點擴增:計算和存儲能力不夠時,很多時候就通過節點數量解決。
  • 配置規划:Datanode和Namenode一般都可以配置多個存儲路徑。
    • A.Datanode實現多硬盤均勻存儲。
    • B.Namenode可以實現多副本備份。

1.2.2 linux環境准備

HDFS作為hadoop的核心組件,隨Hadoop一起整體部署。

安裝hadoop前的環境准備:

  1. 配置java環境變量:export JAVA_HOME=/opt/java/jdk
  2. hadoop部署在多台服務器上,主從節點之間、各節點之間可以通過TCP/IP協議相互訪問[通過設置DNS或hosts文件,使得主機名和IP地址綁定,實現通過主機名就能訪問對方]
  3. 確保hadoop所需端口打開:hadoop以及各類配套模板需要使用大量網絡端口,但是自帶的防火牆軟件,設置不當造成功能無法正確運行。
  4. SSH接口免密登錄
  5. Hadoop以及分布式NoSQL數據庫要求各個節點之間的時間同步:最常見的集群時間同步方案是部署NTP服務。
//確保hadoop所需端口打開,通過命令禁用並停止防火牆服務
systemctl mask filewalld
systemctl stop  fillwalld

1.2.3 Hadoop的軟件包部署

  • sbin目錄:存放HDFS和Yarn組件的集群控制命令。
  • bin目錄:存放HDFS的文件系統命令行工具以及Yarn等組件的命令行工具。
  • etc/hadoop目錄:存放hadoop的配置文件。
  • share目錄:存放hadoop的各類庫包(Jar)。

PS:分布式的時候,hadoop軟件包需要解壓縮,並復制到所有節點上,並且在每個節點上的存儲位置都是相同的,並給予足夠的用戶訪問權限。其次,進行系統配置。

2 HDFS的基本配置

HDFS的配置文件:大多數默認是XML和TXT格式存在。配置文件默認存放在/etc/hadoop目錄下。

HDFS中6個重要的配置文件:

  1. core-site.xml:Hadoop全局的配置文件,也包含一些HDFS的宏觀配置。
  2. dfs-site.xml:HDFS配置文件。
  3. yarn-site.xml:YARN配置文件。
  4. mapred-sie.xml:MapReduce配置文件。
  5. slaves:從節點列表。
  6. hadoop-env.sh:與運行腳本的環境變量相關的配置文件。

2.1 core-site.xml

//core-site.xml文件
<configuration>       
   <property><!--指定namenode的地址-->
               <name>fs.defaultFS</name>
               <value>hdfs://node1:8020</value>
               <description>node1節點為該集群的Namenode,對應節點的端口是8020</description>
   </property>   
   <property><!--用來指定使用hadoop時產生文件的存放目錄-->
            <name>hadoop.tmp.dir</name>
            <value>file:/data/hadoop/hadoop-2.6.0/tmp</value> 
   </property> 
</configuration>

 2.2 dfs-site.xml

dfs-site.xml:HDFS的重要配置文件,其Namenode節點和Datanode節點相關的配置項不同。

Namenode主要有3個配置項:dfs.namenode.name.dir、dfs.blocksize、dfs.replication。

Datanode主要有1個配置項:dfs.datanode.data.dir。

//Namenode主要有3個配置項dfs.namenode.name.dir、dfs.blocksize、dfs.replication。
//Datanode主要有1個配置項
dfs.datanode.data.dir   
<configuration> 
    <property> 
        <name>dfs.namenode.name.dir</name>                 
        <value>/opt/dfs/name</value> 
         <description>namenode的目錄位置,對應的目錄需要存在value里面的路徑</description> 
    </property>

    <property> 
        <name>dfs.datanode.data.dir</name>         
        <value>/opt/dfs/data</value>
        <description>datanode的目錄位置,對應的目錄需要存在value里面的路徑,可以是一個或多個用逗號分隔的本地路徑</description>         
    </property> 

    <property> 
          <name>dfs.replication</name> 
        <value>2</value> <description>hdfs系統的副本數量    
         </description> 
    </property> 

    <property> 
        <name>dfs.namenode.secondary.http-address</name>     
        <value>master:9001</value> 
        <description>備份namenode的http地址,master是主機名</description> 
    </property> 
</configuration>
                 

2.3 slaves

slaves:在Namenode節點還需要建立一個名為slaves的文本文件,里面記錄Datanode的子節點機名,用換行分割。

2.4 hadoop-env.sh

JAVA_HOME進行環境變量配置:export JAVA_HOME=/opt/java/jdk

2.5 配置機架感知策略

需要實現機架感知的配置內容,在core-site.xml中實現兩個配置項。

net.topology.node.switch.mapping.imp:org.apache.hadoop.net.TableMapping,表示采用映射文件的方式實現機架映射。

net.topology.table.file.name:內容為映射文件的路徑和名稱。

3 集群的啟動和停止

軟件包sbin目錄下的start-dfs.sh和stop-dfs.sh為HDFS的集群啟動和停止命令。

單獨啟動或停止一個HDFS進程,或者對單獨的角色進行控制命令:hadoop-daemon.sh start | stop namenode |datanode|secondarynamenode

其次可以通過查看http://namenode:50070/查看系統的狀態,比如該系統的啟動時間、版本、集群ID等信息。

4 使用和管理HDFS

作為文件系統,HDFS的使用主要指對文件的上傳、下載和移動,以及查看內容、建立或刪除目錄等。

查看HDFS狀態,主要指查看節點的健康狀態,查看存儲容量,查看分塊信息等。

控制HDFS,主要指對系統進行初始化,增加或刪除子節點,以及提高HDFS的可用性等。

4.1 管理和操作命令

hdfs的命令行操作用命令hdfs實現,即命令行敲入:hdfs.hdfs命令文件放在Hadoop目錄下的bin子目錄中,包含了HDFS絕大多數的用戶命令,不帶任何參數地執行hdfs,可以看到所有可用的指令。

  1. dfs:HDFS的文件系統操作指令。
  2. dfsadmin:HDFS的集群管理命令,比如:查看機架感知狀態,可以執行hdfs dfsadmin-printTopology。
  3. fsck:HDFS的集群檢查工具。
  4. namenode-format:主節點格式化指令。
  5. balaner:數據平衡指令。

4.2 格式化Namenode

hdfs namenode -format

4.3 Namenode的安全模式

當namenode啟動時,需要將fsimage等信息讀入內存,並且等待各個Datanode上報存儲狀態,在這個過程完成之前,叫安全模式。(safenode)

此時namenode為只讀狀態,只能讀取不能寫入,當足夠數量的節點以及數據塊處在健康狀態時,系統會自動退出安全模式。

手動對安全模式進行管理:hdfs dfsadmin -safemode [enter | leave |get |wait]

4.4 元數據恢復

由於secondary namenode在進行元數據合並時,保存了元數據的副本信息,當Namenode發生損壞時,可以利用secondary namenode中的數據進行恢復。

  1. 利用stop-dfs.sh命令停止整個集群
  2. 清空namenode原有的元數據信息,路徑可以從配置項dfs.namenode.name.dir中獲得。
  3. 如果secondary namenode和namenode沒有部署在同一個節點上,需要將secondary namenode存儲的副本信息復制到namenode,其路徑和secondary namenode中的元數據副本的路徑一致,可以從配置項dfs.namenode.checkpoint.dir中獲得。
  4. 執行hadoop namenode-importCheckpoint,系統將檢查副本數據,並將其復制到dfs.namenode.name.dir所指示的路徑當中。

4.5 子節點添加與刪除

大數據業務要求數據被不斷采集、不斷積累,需要分布式存儲和NoSQL數據庫等實現方便的橫向擴展(scale out)。HDFS可以很方便的進行Datanode節點添加和刪除。

1.靜態添加/刪除Datanode的方法

  • 利用stop-dfs.sh命令停止整個集群
  • 在namenode節點上的slaves配置文件中添加新的節點,或刪掉舊的節點。添加新節點時,要確保新節點和其他節點之間主機名和IP地址可以相互訪問,可以實現SSH無密碼訪問等。
  • 利用start-dfs.sh重新啟動集群,在新節點配置正確的情況下,會隨命令啟動Datanode角色,並和Namenode連接。
  • 可以執行hdfs balancer命令,在節點之間進行手動的數據平衡。刪除節點之后,namenode會自動檢查副本數量,並選擇新的節點存儲不足的副本。

2.動態添加Datanode的方法

  • HDFS集群保持運行狀態
  • 在namenode節點上的slaves配置文件中添加新的節點。
  • 在新節點執行hadoop-daemon.sh start datanode ,啟動Datanode角色
  • 在主節點執行hdfs dfsadmin -refreshNodes,刷新節點列表,Namenode會根據新列表和子節點建立聯系。

3.動態刪除Datanode的方法 

  • HDFS集群保持運行狀態
  • 提前在hdfs-site.xml中配置dfs.hosts.exclude屬性,內容為一個本地文本文件的路徑,該文件可以稱為exclude文件,其結構和slave文件的相同,即為每行一個節點主機名的列表。  記錄在exclude文件中的主機,會在刷新之后被記作禁用狀態,並在界面上看到這個狀態。
  • 在主節點執行hdfs dfsadmin -refreshNodes,刷新節點列表。
  • 在節點寫入exclude文件,並執行hdfs dfsadmin -refreshNodes,刷新節點列表。

添加/刪除Datanode完成之后,可以通過兩種手段查看結果。

  • 在命令行執行hdfs dfsadmin -report 查看節點列表信息。
  • 通過web界面,切換到Datanodes標簽,可以查看子節點的列表,in operation表示正在使用的節點,decommissinoning,表示目前禁用的節點。

4.6 HDFS文件系統操作

可以通過執行hdfs dfs指令來進行各類操作,包括建立、刪除目錄、HDFS上的文件復制、移動和改名、本地文件系統和HDFS系統之間的文件相互復制等、文件的權限操作等。

  • hdfs dfs -ls /  ----查看文件目錄狀態
  • hdfs dfs -lsr / ----遞歸查看hdfs的根目錄下的內容的
  • hdfs dfs -mkdir /d1 ----在hdfs上創建文件夾d1
  • hdfs dfs -put <linux source > <hdfs destination> ----把數據從linux[本地文件]上傳到hdfs的特定路徑中[HDFS文件或路徑]
  • hdfs dfs -get <hdfs source> <linux destination>----把數據從hdfs下載到linux的特定路徑下
  • hdfs dfs -mv/-cp <hdfs source > <hdfs destination>---在HDFS系統中進行文件移動或復制,參數為HDFS的源地址和目的地址。
  • hdfs dfs -text <hdfs文件> ---將序列號文件轉換成文本顯示出來。
  • hdfs dfs -rm <hdfs文件> ----刪除文件或空目錄
  • hdfs dfs -rmr <hdfs文件> ----遞歸刪除文件或空目錄
//查看文件目錄狀態,-ls之后必須指明需要查看的目錄
hdfs dfs -ls /hdfsdir/file1
hdfs dfs -ls hdfs://node1:8020/hdfsdir/file1
//建立新目錄
hdfs dfs -mkdir /hdfsdir/dir1
//從本地文件系統向HDFS復制文件。-put、-copyFromLocal。
hdfs dfs -put localfile/hdfsdir/file1
hdfs dfs -put -f localfile1 localfile2/hadoopdir
//從HDFS向本地復制文件。-get、-copyToLocal。
hdfs dfs -get /hdfsdir/hdfsfile localfile

4.7 以web方式查看文件系統

訪問http://namenode:50070/explorer.html,選擇"browse the file system"選項,可以對HDFS的目錄結構進行查看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM