1. 程式人生 > >hdfs haadmin使用,DataNode動態上下線,NameNode狀態切換管理,資料塊的balance,HA下hdfs-api變化(來自學習資料)

hdfs haadmin使用,DataNode動態上下線,NameNode狀態切換管理,資料塊的balance,HA下hdfs-api變化(來自學習資料)

1.2.4叢集運維測試

HA叢集中兩個namenode狀態的管理命令

[root@mini2 hadoop-2.6.4]# bin/hdfs haadmin

Usage: DFSHAAdmin [-ns <nameserviceId>]

    [-transitionToActive <serviceId> [--forceactive]]

    [-transitionToStandby <serviceId>]

    [-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]

    [-getServiceState <serviceId>]

    [-checkHealth <serviceId>]

    [-help <command>]

示例: 切換nn2為active

bin/hdfs haadmin -transitionToActive nn2--forcemanual

1、Datanode動態上下線

Datanode動態上下線很簡單,步驟如下:

a)   準備一臺伺服器,設定好環境

b)   部署hadoop的安裝包,並同步叢集配置

c)   聯網上線,新datanode會自動加入叢集

d)   如果是一次增加大批datanode,還應該做叢集負載重均衡

(start-balancer.sh -threshold 8  ##指定磁碟利用率,詳情見下節 3)

2、Namenode狀態切換管理

使用的命令上hdfs  haadmin

可用 hdfs  haadmin –help檢視所有幫助資訊

可以看到,狀態操作的命令示例:

檢視namenode工作狀態  

hdfs haadmin -getServiceState nn1

將standby狀態namenode切換到active

hdfs haadmin –transitionToActive nn1

將active狀態namenode切換到standby

hdfs haadmin –transitionToStandby nn2

3、資料塊的balance

啟動balancer的命令:

start-balancer.sh -threshold 8

執行之後,會有Balancer程序出現:

上述命令設定了Threshold為8%,那麼執行balancer命令的時候,首先統計所有DataNode的磁碟利用率的均值,然後判斷如果某一個DataNode的磁碟利用率超過這個均值Threshold,那麼將會把這個DataNode的block轉移到磁碟利用率低的DataNode,這對於新節點的加入來說十分有用。Threshold的值為1到100之間,不顯示的進行引數設定的話,預設是10。

1.2.5 HA下hdfs-api變化

客戶端需要nameservice的配置資訊,其他不變

/**

 * 如果訪問的是一個ha機制的叢集

 * 則一定要把core-site.xml和hdfs-site.xml配置檔案放在客戶端程式的classpath下

 * 以讓客戶端能夠理解hdfs://ns1/中  “ns1”是一個ha機制中的namenode對——nameservice

 * 以及知道ns1下具體的namenode通訊地址

 * @author

 *

 */

public class UploadFile {

         public static void main(String[] args) throws Exception  {

                  Configuration conf = new Configuration();

                  conf.set("fs.defaultFS", "hdfs://ns1/");

                  FileSystem fs = FileSystem.get(new URI("hdfs://ns1/"),conf,"hadoop");

                  fs.copyFromLocalFile(new Path("g:/eclipse-jee-luna-SR1-linux-gtk.tar.gz"), new Path("hdfs://ns1/"));

                  fs.close();

         }

}