java大數據最全課程學習筆記(4)--HDFS NN,2NN,DN及HDFS2.x新特性

来源:https://www.cnblogs.com/gitBook/archive/2020/07/17/13328501.html
-Advertisement-
Play Games

目前CSDN,博客園,簡書同步發表中,更多精彩歡迎訪問我的gitee pages HDFS NN,2NN,DN及HDFS2.x新特性 NameNode和SecondaryNameNode(重點) NN和2NN工作機制 第一階段:NameNode啟動 第一次啟動NameNode格式化後,創建fsima ...


目前CSDN,博客園,簡書同步發表中,更多精彩歡迎訪問我的gitee pages

目錄

HDFS NN,2NN,DN及HDFS2.x新特性

NameNode和SecondaryNameNode(重點)

NN和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。

NN和2NN工作機制詳解

Fsimage:NameNode記憶體中元數據序列化後形成的文件。

Edits:記錄客戶端更新元數據信息的每一步操作(可通過Edits運算出元數據)。

NameNode啟動時,先滾動Edits並生成一個空的edits.inprogress,然後載入Edits和Fsimage到記憶體中,此時NameNode記憶體就持有最新的元數據信息。Client開始對NameNode發送元數據的增刪改的請求,這些請求的操作首先會被記錄到edits.inprogress中(查詢元數據的操作不會被記錄在Edits中,因為查詢操作不會更改元數據信息),如果此時NameNode掛掉,重啟後會從Edits中讀取元數據的信息。然後,NameNode會在記憶體中執行元數據的增刪改的操作。

由於Edits中記錄的操作會越來越多,Edits文件會越來越大,導致NameNode在啟動載入Edits時會很慢,所以需要對Edits和Fsimage進行合併(所謂合併,就是將Edits和Fsimage載入到記憶體中,照著Edits中的操作一步步執行,最終形成新的Fsimage)。SecondaryNameNode的作用就是幫助NameNode進行Edits和Fsimage的合併工作。

SecondaryNameNode首先會詢問NameNode是否需要CheckPoint(觸發CheckPoint需要滿足兩個條件中的任意一個,定時時間到和Edits中數據寫滿了)。直接帶回NameNode是否檢查結果。SecondaryNameNode執行CheckPoint操作,首先會讓NameNode滾動Edits並生成一個空的edits.inprogress,滾動Edits的目的是給Edits打個標記,以後所有新的操作都寫入edits.inprogress,其他未合併的Edits和Fsimage會拷貝到SecondaryNameNode的本地,然後將拷貝的Edits和Fsimage載入到記憶體中進行合併,生成fsimage.chkpoint,然後將fsimage.chkpoint拷貝給NameNode,重命名為Fsimage後替換掉原來的Fsimage。NameNode在啟動時就只需要載入之前未合併的Edits和Fsimage即可,因為合併過的Edits中的元數據信息已經被記錄在Fsimage中。

Fsimage和Edits解析

  1. 概念

  1. oiv查看Fsimage文件

    1. 查看oiv和oev命令

      [atguigu@hadoop101 current]$ hdfs
      oiv            apply the offline fsimage viewer to an fsimage
      oev            apply the offline edits viewer to an edits file
      
    2. 基本語法

      hdfs oiv -p 文件類型 -i鏡像文件 -o 轉換後文件輸出路徑

    3. 案例實操

      [atguigu@hadoop101 current]$ pwd
      /opt/module/hadoop-2.7.2/data/tmp/dfs/name/current
      
      [atguigu@hadoop101 current]$ hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-2.7.2/fsimage.xml
      
      [atguigu@hadoop101 current]$ cat /opt/module/hadoop-2.7.2/fsimage.xml
      

      查看xml文件,部分顯示結果如下

      <inode>
      	<id>16386</id>
      	<type>DIRECTORY</type>
      	<name>user</name>
      	<mtime>1512722284477</mtime>
      	<permission>atguigu:supergroup:rwxr-xr-x</permission>
      	<nsquota>-1</nsquota>
      	<dsquota>-1</dsquota>
      </inode>
      <inode>
      	<id>16387</id>
      	<type>DIRECTORY</type>
      	<name>atguigu</name>
      	<mtime>1512790549080</mtime>
      	<permission>atguigu:supergroup:rwxr-xr-x</permission>
      	<nsquota>-1</nsquota>
      	<dsquota>-1</dsquota>
      </inode>
      <inode>
      	<id>16389</id>
      	<type>FILE</type>
      	<name>wc.input</name>
      	<replication>3</replication>
      	<mtime>1512722322219</mtime>
      	<atime>1512722321610</atime>
      	<perferredBlockSize>134217728</perferredBlockSize>
      	<permission>atguigu:supergroup:rw-r--r--</permission>
      	<blocks>
      		<block>
      			<id>1073741825</id>
      			<genstamp>1001</genstamp>
      			<numBytes>59</numBytes>
      		</block>
      	</blocks>
      </inode >
      
      • 思考:可以看出,Fsimage中沒有記錄塊所對應DataNode,為什麼?

        在集群啟動後,要求DataNode上報數據塊信息,並間隔一段時間後再次上報。

  2. oev查看Edits文件

    1. 基本語法

      hdfs oev -p 文件類型 -i編輯日誌 -o 轉換後文件輸出路徑

    2. 案例實操

      [atguigu@hadoop101 current]$ hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-2.7.2/edits.xml
      [atguigu@hadoop101 current]$ cat /opt/module/hadoop-2.7.2/edits.xml
      

      查看xml文件

      <?xml version="1.0" encoding="UTF-8"?>
      <EDITS>
      	<EDITS_VERSION>-63</EDITS_VERSION>
      	<RECORD>
      		<OPCODE>OP_START_LOG_SEGMENT</OPCODE>
      		<DATA>
      			<TXID>129</TXID>
      		</DATA>
      	</RECORD>
      	<RECORD>
      		<OPCODE>OP_ADD</OPCODE>
      		<DATA>
      			<TXID>130</TXID>
      			<LENGTH>0</LENGTH>
      			<INODEID>16407</INODEID>
      			<PATH>/hello7.txt</PATH>
      			<REPLICATION>2</REPLICATION>
      			<MTIME>1512943607866</MTIME>
      			<ATIME>1512943607866</ATIME>
      			<BLOCKSIZE>134217728</BLOCKSIZE>
      			<CLIENT_NAME>DFSClient_NONMAPREDUCE_-1544295051_1</CLIENT_NAME>
      			<CLIENT_MACHINE>192.168.1.5</CLIENT_MACHINE>
      			<OVERWRITE>true</OVERWRITE>
      			<PERMISSION_STATUS>
      				<USERNAME>atguigu</USERNAME>
      				<GROUPNAME>supergroup</GROUPNAME>
      				<MODE>420</MODE>
      			</PERMISSION_STATUS>
      			<RPC_CLIENTID>908eafd4-9aec-4288-96f1-e8011d181561</RPC_CLIENTID>
      			<RPC_CALLID>0</RPC_CALLID>
      		</DATA>
      	</RECORD>
      	<RECORD>
      		<OPCODE>OP_ALLOCATE_BLOCK_ID</OPCODE>
      		<DATA>
      			<TXID>131</TXID>
      			<BLOCK_ID>1073741839</BLOCK_ID>
      		</DATA>
      	</RECORD>
      	<RECORD>
      		<OPCODE>OP_SET_GENSTAMP_V2</OPCODE>
      		<DATA>
      			<TXID>132</TXID>
      			<GENSTAMPV2>1016</GENSTAMPV2>
      		</DATA>
      	</RECORD>
      	<RECORD>
      		<OPCODE>OP_ADD_BLOCK</OPCODE>
      		<DATA>
      			<TXID>133</TXID>
      			<PATH>/hello7.txt</PATH>
      			<BLOCK>
      				<BLOCK_ID>1073741839</BLOCK_ID>
      				<NUM_BYTES>0</NUM_BYTES>
      				<GENSTAMP>1016</GENSTAMP>
      			</BLOCK>
      			<RPC_CLIENTID></RPC_CLIENTID>
      			<RPC_CALLID>-2</RPC_CALLID>
      		</DATA>
      	</RECORD>
      	<RECORD>
      		<OPCODE>OP_CLOSE</OPCODE>
      		<DATA>
      			<TXID>134</TXID>
      			<LENGTH>0</LENGTH>
      			<INODEID>0</INODEID>
      			<PATH>/hello7.txt</PATH>
      			<REPLICATION>2</REPLICATION>
      			<MTIME>1512943608761</MTIME>
      			<ATIME>1512943607866</ATIME>
      			<BLOCKSIZE>134217728</BLOCKSIZE>
      			<CLIENT_NAME></CLIENT_NAME>
      			<CLIENT_MACHINE></CLIENT_MACHINE>
      			<OVERWRITE>false</OVERWRITE>
      			<BLOCK>
      				<BLOCK_ID>1073741839</BLOCK_ID>
      				<NUM_BYTES>25</NUM_BYTES>
      				<GENSTAMP>1016</GENSTAMP>
      			</BLOCK>
      			<PERMISSION_STATUS>
      				<USERNAME>atguigu</USERNAME>
      				<GROUPNAME>supergroup</GROUPNAME>
      				<MODE>420</MODE>
      			</PERMISSION_STATUS>
      		</DATA>
      	</RECORD>
      </EDITS >
      

      思考:NameNode如何確定下次開機啟動的時候合併哪些Edits?

CheckPoint時間設置

  1. 預設設置為SecondaryNameNode每隔一小時執行一次.

    [hdfs-default.xml]

    <property>
     <name>dfs.namenode.checkpoint.period</name>
     <value>3600</value>
    </property>
    
  2. 或者一分鐘檢查一次操作次數,當操作次數達到1百萬時,SecondaryNameNode執行一次。

    <property>
      <name>dfs.namenode.checkpoint.txns</name>
      <value>1000000</value>
    <description>操作動作次數</description>
    </property>
    <property>
      <name>dfs.namenode.checkpoint.check.period</name>
      <value>60</value>
    <description>1分鐘檢查一次操作次數</description>
    </property>
    

NameNode故障處理

NameNode故障後,可以採用如下兩種方法恢複數據。

  • 方法一:將SecondaryNameNode中數據拷貝到NameNode存儲數據的目錄;

    1. kill -9 NameNode進程

    2. 刪除NameNode存儲的數據(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)

      [atguigu@hadoop101 hadoop-2.7.2]$ rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*

    3. 拷貝SecondaryNameNode中數據到原NameNode存儲數據目錄

      [atguigu@hadoop101 dfs]$ scp -r atguigu@hadoop103:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/

    4. 重新啟動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)

      [atguigu@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文件

      [atguigu@hadoop101 dfs]$ scp -r atguigu@hadoop103:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary ./
      [atguigu@hadoop101 namesecondary]$ rm -rf in_use.lock
      [atguigu@hadoop101 dfs]$ pwd
      /opt/module/hadoop-2.7.2/data/tmp/dfs
      [atguigu@hadoop101 dfs]$ ls
      data  name  namesecondary
      
    5. 導入檢查點數據(等待一會ctrl+c結束掉)

      [atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -importCheckpoint

    6. 啟動NameNode

      [atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode

集群安全模式

  1. 概述

  • 當NN中所保存的所有塊的最小副本數(預設為1) / 塊的總數 > 99.9%時,NN會在30秒之後自動離開安全模式!
  1. 基本語法

    集群處於安全模式,不能執行重要操作(寫操作)。集群啟動完成後,自動退出安全模式。

    1. bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式狀態)
    2. bin/hdfs dfsadmin -safemode enter (功能描述:進入安全模式狀態)
    3. bin/hdfs dfsadmin -safemode leave (功能描述:離開安全模式狀態)
    4. bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式狀態)
  2. 案例

    模擬等待安全模式

    1. 查看當前模式

      [atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfsadmin -safemode get Safe mode is OFF

    2. 先進入安全模式

      [atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfsadmin -safemode enter

    3. 創建並執行下麵的腳本

      [atguigu@hadoop101 hadoop-2.7.2]$ touch safemode.sh
      [atguigu@hadoop101 hadoop-2.7.2]$ vim safemode.sh
      #!/bin/bash
      hdfs dfsadmin -safemode wait
      hdfs dfs -put /opt/module/hadoop-2.7.2/README.txt /
      [atguigu@hadoop101 hadoop-2.7.2]$ chmod 777 safemode.sh
      [atguigu@hadoop101 hadoop-2.7.2]$ ./safemode.sh 
      
    4. 再打開一個視窗,執行

      [atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfsadmin -safemode leave

    5. 觀察

      1. 再觀察上一個視窗

        Safe mode is OFF

      2. HDFS集群上已經有上傳的數據了

    即等待模式輸入的命令(寫操作)會在安全模式關閉後執行.

NameNode多目錄配置

  1. NameNode的本地目錄可以配置成多個,且每個目錄存放內容相同,增加了可靠性

  2. 具體配置如下

    1. 在hdfs-site.xml文件中增加如下內容

      <property>
          <name>dfs.namenode.name.dir</name>
      <value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
      </property>
      
    2. 停止集群,刪除data和logs中所有數據。

      [atguigu@hadoop102 hadoop-2.7.2]$ xcall rm -rf data/ logs/
      
    3. 格式化集群並啟動。

      [atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode –format
      [atguigu@hadoop101 hadoop-2.7.2]$ sbin/start-dfs.sh
      
    4. 查看結果

      [atguigu@hadoop102 dfs]$ ll
      總用量 12
      drwx------. 3 atguigu atguigu 4096 12月 11 08:03 data
      drwxrwxr-x. 3 atguigu atguigu 4096 12月 11 08:03 name1
      drwxrwxr-x. 3 atguigu atguigu 4096 12月 11 08:03 name2
      

DataNode(重點)

DataNode工作機制

  1. 一個數據塊在DataNode上以文件形式存儲在磁碟上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。
  2. DataNode啟動後向NameNode註冊,通過後,周期性(1小時)的向NameNode上報所有的塊信息。
  3. 心跳是每3秒一次,心跳返回結果帶有NameNode給該DataNode的命令如複製塊數據到另一臺機器,或刪除某個數據塊。如果超過10分鐘沒有收到某個DataNode的心跳,則認為該節點不可用。
  4. 集群運行中可以安全加入和退出一些機器。

數據完整性

  1. 當DataNode讀取Block的時候,它會計算CheckSum。

  2. 如果計算後的CheckSum,與Block創建時值不一樣,說明Block已經損壞。

  3. Client讀取其他DataNode上的Block。

  4. DataNode在其文件創建後周期驗證CheckSum,如圖所示。

掉線時限參數設置

需要註意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位為毫秒,dfs.heartbeat.interval的單位為

<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
</property>
<property>
    <name> dfs.heartbeat.interval </name>
    <value>3</value>
</property>

服役新數據節點

隨著公司業務的增長,數據量越來越大,原有的數據節點的容量已經不能滿足存儲數據的需求,需要在原有集群基礎上動態添加新的數據節點。

  1. 環境準備

    1. 在hadoop103主機上再克隆一臺hadoop104主機

    2. 修改IP地址和主機名稱

    3. 刪除原來HDFS文件系統留存的文件(/opt/module/hadoop-2.7.2/data 和log)

    4. source 一下配置文件

      [atguigu@hadoop104 hadoop-2.7.2]$ source /etc/profile

  2. 服役新節點具體步驟

    1. 直接啟動DataNode,即可關聯到集群

      [atguigu@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
      [atguigu@hadoop104 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
      
    2. 在hadoop104上上傳文件

      [atguigu@hadoop104 hadoop-2.7.2]$ hadoop fs -put /opt/module/hadoop-2.7.2/LICENSE.txt /

    3. 如果數據不均衡,可以用命令實現集群的再平衡

      [atguigu@hadoop101 sbin]$ ./start-balancer.sh
      starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop101.out
      Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved
      

退役舊數據節點

添加白名單

添加到白名單的主機,都允許訪問NameNode,不在白名單的主機,都會被退出。

配置白名單的具體步驟如下:

  1. 在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下創建dfs.hosts文件(文件名稱隨意,路徑隨意)

    [atguigu@hadoop101 hadoop]$ pwd
    /opt/module/hadoop-2.7.2/etc/hadoop
    [atguigu@hadoop101 hadoop]$ touch dfs.hosts
    [atguigu@hadoop101 hadoop]$ vi dfs.hosts
    

    添加如下主機名稱(不添加hadoop104)

    hadoop101

    hadoop102

    hadoop103

  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. 配置文件分發

    [atguigu@hadoop101 hadoop]$ xsync hdfs-site.xml

  4. 刷新NameNode

    atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes

  5. 更新ResourceManager節點

    [atguigu@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes

  6. 如果數據不均衡,可以用命令實現集群的再平衡

    [atguigu@hadoop101 sbin]$ ./start-balancer.sh
    starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop101.out
    Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved
    

黑名單退役

在黑名單上面的主機都會被強制退出。

  1. 在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目錄下創建dfs.hosts.exclude文件(名稱路徑隨意)

    [atguigu@hadoop101 hadoop]$ pwd
    /opt/module/hadoop-2.7.2/etc/hadoop
    [atguigu@hadoop101 hadoop]$ touch dfs.hosts.exclude
    [atguigu@hadoop101 hadoop]$ vi dfs.hosts.exclude
    

    添加如下主機名稱(要退役的節點)

    hadoop104

  2. 在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

    [atguigu@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -refreshNodes
    Refresh nodes successful
    [atguigu@hadoop102 hadoop-2.7.2]$ yarn rmadmin -refreshNodes
    17/06/24 14:55:56 INFO client.RMProxy: Connecting to ResourceManager at hadoop102/192.168.1.102:8033
    
  4. 檢查Web瀏覽器,退役節點的狀態為decommission in progress(退役中),說明數據節點正在複製塊到其他節點

  5. 等待退役節點狀態為decommissioned(所有塊已經複製完成),停止該節點及節點資源管理器。註意:如果副本數是3,服役的節點小於等於3,是不能退役成功的,需要修改副本數後才能退役

    stopping datanode

    [atguigu@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode

    stopping nodemanager

    [atguigu@hadoop104 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager

  6. 如果數據不均衡,可以用命令實現集群的再平衡

    [atguigu@hadoop101 hadoop-2.7.2]$ sbin/start-balancer.sh 
    starting balancer, logging to /opt/module/hadoop-2.7.2/logs/hadoop-atguigu-balancer-hadoop101.out
    Time Stamp               Iteration#  Bytes Already Moved  Bytes Left To Move  Bytes Being Moved
    

    註意:不允許白名單和黑名單中同時出現同一個主機名稱。

Datanode多目錄配置

  1. DataNode也可以配置成多個目錄,每個目錄存儲的數據不一樣。即:數據不是副本

  2. 具體配置如下

    hdfs-site.xml

    <property>
     	 <name>dfs.datanode.data.dir</name>
     	 <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
    </property>
    

HDFS 2.X新特性

集群間數據拷貝

  1. scp實現兩個遠程主機之間的文件複製

    scp -r hello.txt root@hadoop102:/user/atguigu/hello.txt // 推 push

    scp -r root@hadoop102:/user/atguigu/hello.txt hello.txt // 拉 pull

    scp -r root@hadoop102:/user/atguigu/hello.txt root@hadoop103:/user/atguigu //是通過本地主機中轉實現兩個遠程主機的文件複製;如果在兩個遠程主機之間ssh沒有配置的情況下可以使用該方式。

  2. 採用distcp命令實現兩個Hadoop集群之間的遞歸數據複製

    [atguigu@hadoop101 hadoop-2.7.2]$  bin/hadoop distcp 
    hdfs://haoop101:9000/user/atguigu/hello.txt hdfs://hadoop102:9000/user/atguigu/hello.txt
    

Hadoop存檔

案例實操

  1. 需要啟動YARN進程

    [atguigu@hadoop102 hadoop-2.7.2]$ start-yarn.sh

  2. 歸檔文件

    把/user/atguigu/input目錄裡面的所有文件歸檔成一個叫input.har的歸檔文件,並把歸檔後文件存儲到/user/atguigu/output路徑下。

    [atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop archive -archiveName input.har –p /user/atguigu/input /user/atguigu/output

  3. 查看歸檔

    [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr /user/atguigu/output/input.har
    [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr har:///user/atguigu/output/input.har
    
  4. 解歸檔文件

    [atguigu@hadoop102 hadoop-2.7.2]$ hadoop fs -cp har:/// user/atguigu/output/input.har/* /user/atguigu


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 繼Golang學習系列第三天https://www.cnblogs.com/dongguangming/p/13311198.html:數組、切片、Map、結構體、指針、函數、介面類型、channel通道,今天開始學習golang操作資料庫,以PostgreSQL為例。 0. 安裝PostgreSQ ...
  • * 概念: 對錶中的數據進行限定,保證數據的正確性、有效性和完整性。 * 分類: 1. 主鍵約束:primary key 2. 非空約束:not null 3. 唯一約束:unique 4. 外鍵約束:foreign key * 非空約束:not null,值不能為null 1. 創建表時添加約束 ...
  • mongodb 基礎知識use user //進入user資料庫db.auth("username","password") //設置賬號密碼後可以用來鑒權, 先use進入資料庫,再運行否則報錯db.dropDatabase() //刪除當前所在的資料庫db.user.drop() //刪除當前數據 ...
  • 一、排除Top分頁法(自命名,非規範) 思想:所謂“排除Top分頁”,主要依靠“排除”和Top這個兩大核心步驟。首先查詢當前頁碼之前的數據,然後將該數據從總數據中排除掉,在從剩下的數據中獲取前N條記錄,就可以得到當前頁碼的數據。 舉例-分頁條件:每頁顯示2條記錄,查看第3頁 以SQLServer語法 ...
  • 在PostgreSQL資料庫之間進行跨庫操作的方式 dblink postgres_fdw 本文先說說dblink;dblink是一個支持從資料庫會話中連接到其他PostgreSQL資料庫的插件。在其他資料庫跨庫操作也是採用dblink的方式 一、安裝dblink PostgreSQL插件dblin ...
  • 什麼是大事務 運行時間比較長,長時間未提交的事務就可以稱為大事務 大事務產生的原因 操作的數據比較多 大量的鎖競爭 事務中有其他非DB的耗時操作 。。。 大事務造成的影響 併發情況下,資料庫連接池容易被撐爆 鎖定太多的數據,造成大量的阻塞和鎖超時 執行時間長,容易造成主從延遲 回滾所需要的時間比較長 ...
  • 上篇筆記講到了聚合函數的實現並且帶大家看了聚合函數是如何註冊到ClickHouse之中的並被調用使用的。這篇筆記,筆者會續上上篇的內容,將剖析一把ClickHouse聚合流程的整體實現。 第二篇文章,我們來一起看看聚合流程的實現~~ 上車! 1.基礎知識的梳理 ClickHouse的實現介面 Blo ...
  • 數據字典是oracle存放有關資料庫信息的地方,幾乎所有的系統信息和對象信息都可在數據字典中進行查詢。數據字典是oracle資料庫系統的信息核心,它是一組提供有關資料庫信息的表和視圖的集合,這些表和視圖是只讀的。它是隨著資料庫的建立而建立的,當資料庫執行特定動作時數據字典也會自動更新。數據一覽與數據 ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...