Druid數據遷移小計


Druid數據遷移小計

Druid 官方網站上講了相關的 Dump SegmentInsert Segment 相關的功能,但是經過測試這些功能都不好用,報 Guice 的依賴錯誤,懶得找具體原因了,換一種方式: 冷遷移

Druid 的數據存儲

既然要冷遷移就需要了解一下 Druid 的存儲相關的知識了。Druid 的數據存儲主要是以 segment 為單位進行的,Druid 不僅要把 segment 保存到文件目錄下,還需要在 metadata 里面把該 segment 相關的信息記錄下來好進行管理。

# get druid deep storage directory
cat $DRUID_HOME/conf/druid/_common/common.runtime.properties | grep druid.storage
# ger druid metadata storage 
cat $DRUID_HOME/conf/druid/_common/common.runtime.properties | grep metadata.storage

根據上面配置文件我們就可以分別拿到 segment 的路徑和 metadata 中的 segment 配置。

Deep Storage

Druid 的 Deep Storage 目錄組織得還是非常清晰的:{dataSourceName}/{timeRangeStart}_{timeRangeEnd}/{time} 所以我們的數據遷移可以只遷移指定時間范圍內的。既然連目錄都知道了,那就很簡單了,把想要遷移的數據按目錄復制出來就行了。

metadata

Druid 不管是用什么數據庫做元數據存儲表肯定都一樣,記錄 segment 位置的就是 druid_segments 表了。

字段 解釋
dataSource 數據集名稱
created_date 創建日期
start 開始日期
end 結束日期
payload 配置信息(此列為二進制存儲,內容為一個 JSON需要進行轉換后才能看到)

注意事項: payload 中的配置息寫死了 segment 的位置,如果你遷移數據后不能在新服務器中的數據目錄與原服務器一致則需要修改這個 payload 內容,下方代碼即為數據轉換代碼可以把數據解析並修改后再通過下方在代碼生成回 HEX String 並更新到數據庫表中。

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

import java.util.Scanner;

/**
 * @author sunzq
 */
public class HexConvert {
    public static void main(String[] args) throws DecoderException {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            String s = scanner.nextLine();
            if (s.equals("q")) {
                return;
            }
            // maven dependency: commons-codec
            if (s.startsWith("{")) {
                System.out.println(Hex.encodeHexString(s.getBytes()));
            } else {
                System.out.println(new String(Hex.decodeHex(s)));
            }
        }
    }
}

遷移到新服務器

拿到導出的 segment 文件放到新服務器的指定位置,再去數據庫里面插入此 segment 對應的記錄就完成了數據的遷移,還是很簡單的。

驗證

用瀏覽器訪問 coornidator 節點的 API http://ip:port/druid/v2/datasources 看看 datasource 添加了沒有,如果沒有更新上可以試試重啟 coordinator 節點和 historical 節點。


免責聲明!

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



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