天天看點

大資料:Starrocks 備份/恢複操作流程(hdfs)

作者:明少三年

導語

總體流程可歸納如下:

  1. 先建立雲端倉庫用于備份與恢複(新老叢集都要建立雲端倉庫, REPOSITORY 名字要相同, brokerName 需要對應叢集的 broker 名稱);
  2. 在老叢集準備好需要進行遷移備份的表, backup 到雲端倉庫;
  3. 再從雲端倉庫 restore 到新叢集。
  4. 新叢集當中不用事先建立好需要備份恢複的表,因為在進行 restore 操作會自動建立。

操作過程

  • 建立REPOSITORY遠端倉庫

通過 CREATE REPOSITORY 建立遠端倉庫,該語句用于建立倉庫。倉庫用于屬于備份或恢複。僅 root 或 superuser 使用者可以建立倉庫。

  • 這裡以 HDFS 為例
CREATE REPOSITORY `hdfs_RepositoryName`
WITH BROKER `hdfs_broker`
ON LOCATION "hdfs://hadoop-name-node:prot/*******/******/******/"
PROPERTIES
(
    "username" = "user",
    "password" = "password"
);           

說明:

  1. 一個叢集可以建立多個倉庫。隻有擁有 ADMIN 權限的使用者才能建立倉庫。
  2. 任何使用者都可以通過 SHOW REPOSITORIES; 指令檢視已經建立的倉庫。
  3. 在做資料遷移操作時,需要在源叢集和目的叢集建立完全相同的倉庫,以便目的叢集可以通過這個倉庫,檢視到源叢集備份的資料快照。
  • 備份資料到雲端倉庫

說明:

  1. 該語句用于備份指定資料庫下的資料。該指令為異步操作。送出成功後,需通過 SHOW BACKUP 指令檢視進度。僅支援備份 OLAP 類型的表。
  2. 同一資料庫下隻能有一個正在執行的 BACKUP 或 RESTORE 任務。
  3. 備份操作會備份指定表或分區的基礎表及物化視圖,并且僅備份一副本。
  4. 備份操作的效率取決于資料量、Compute Node 節點數量以及檔案數量。備份資料分片所在的每個 Compute Node 都會參與備份操作的上傳階段。節點數量越多,上傳的效率越高,檔案資料量隻涉及到的分片數,以及每個分片中檔案的數量。如果分片非常多,或者分片内的小檔案較多,都可能增加備份操作的時間。
  5. ON 子句中辨別需要備份的表和分區。如果不指定分區,則預設備份該表的所有分區。
  6. EXCLUDE 子句中辨別不需要備份的表和分區。備份除了指定的表或分區之外這個資料庫中所有表的所有分區資料。
  7. PROPERTIES 目前支援以下屬性:(“type” = “full”:表示這是一次全量更新(預設,目前僅支援full);“timeout” = “3600”:任務逾時時間,預設為一天。機關秒,最小隻能調整為10min。)
  • 這裡以備份整張表為例(全量備份 example_db 下的表 example_tbl 到倉庫 example_repo 中):
BACKUP SNAPSHOT example_db.snapshot_label1
TO example_repo
ON (example_tbl)
PROPERTIES ("type" = "full");           
  • 檢視雲端倉庫任務

可以通過 SHOW BACKUP FROM example_db; 獲得example_db下最後一次BACKUP任務 ,檢視雲端倉庫中已有的備份 ,該記錄中僅顯示最近一次 的BACKUP 任務。

輸出的各列含義如下:

大資料:Starrocks 備份/恢複操作流程(hdfs)
  • 恢複雲端資料到叢集

确認完快照資訊後到新叢集進行恢複操作,該語句用于将之前通過 BACKUP 指令備份的資料,恢複到指定資料庫下。該指令為異步操作。送出成功後,需通過 SHOW RESTORE 指令檢視進度。僅支援恢複 OLAP 類型的表。

文法:

RESTORE SNAPSHOT [db_name].{snapshot_name}
FROM `repository_name`
[ON|EXCLUDE] (
    `table_name` [PARTITION (`p1`, ...)] [AS `tbl_alias`],
    ...
)
PROPERTIES ("key"="value", ...);           

舉例:

RESTORE SNAPSHOT example_db1.`snapshot_1`
FROM `example_repo`
ON ( `backup_tbl` )
PROPERTIES
(
    "backup_timestamp"="2023-05-04-10-52-38-380",
    "replication_num" = "1"
);           

說明:

  1. 同一資料庫下隻能有一個正在執行的恢複操作。
  2. 可以将倉庫中備份的表恢複替換資料庫中已有的同名表,但須保證兩張表的表結構完全一緻。表結構包括:表名、列、分區、物化視圖等等。
  3. 當指定恢複表的部分分區時,系統會檢查分區範圍是否能夠比對。
  4. 恢複操作的效率:在叢集規模相同的情況下,恢複操作的耗時基本等同于備份操作的耗時。如果想加速恢複操作,可以先通過設定 replication_num 參數,僅恢複一個副本,之後在通過調整副本數:ALTER TABLE将副本補齊。
  5. 如果需要取消正在執行的RESTORE 任務,可以參考下方的文檔指令 取消RESTORE任務。
  • 檢視最近恢複的job

SHOW RESTORE FROM 資料庫名; 進行檢視job任務,到此備份恢複完成。

可簡單執行count語句進行新老叢集表資料條數對比,或者運用sum函數相加下後面的值看是否相等,來進行校驗恢複是否成功。