国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用dataX批量從ob遷移表到oracle

IT那活兒 / 2926人閱讀
使用dataX批量從ob遷移表到oracle

點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!!!


  

某核心系統業務部分業務遷移到國產數據庫OceanBase,但是歷史數據仍然需要遷移到Oracle數據庫,對數據實時性要求不高,只需要清理前完成1個月的數據遷移即可 。

開始一段時間使用的是OMS遷移,但是OMS遷移不支持單個分區的遷移,只能全表遷移,數據量較大,遷移時間較長。并且后續還有業務遷移到國產數據庫OceanBase需要備份,所以考慮使用dataX遷移數據


DataX

1.1 DataX簡介

DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具,致力于實現包括:關系型數據庫(MySQL、Oracle等)、HDFS、Hive、HBase、ODPS、FTP等各種異構數據源之間穩定高效的數據同步功能。

為了解決異構數據源同步問題,DataX將復雜的網狀的同步鏈路變成了星型數據鏈路,DataX作為中間傳輸載體負責連接各種數據源。當需要接入一個新的數據源的時候,只需要將此數據源對接到DataX,便能跟已有的數據源做到無縫數據同步。
1.2 DataX 3.0 框架

DataX本身作為離線數據同步框架,采用Framework + plugin架構構建。

將數據源讀取和寫入抽象成為Reader/Writer插件,納入到整個同步框架中,比較簡潔。

  • Reader:Reader為數據采集模塊,負責采集數據源的數據,將數據發送給Framework。

  • Writer:Writer為數據寫入模塊,負責不斷向Framework取數據,并將數據寫入到目的端。

  • Framework:Framework用于連接reader和writer,作為兩者的數據傳輸通道,并處理緩沖,流控,并發,數據轉換等核心技術問題。

datax的使用

2.1 在Oracle創建目標表的表結構
datax同步數據需要先在目標端創建相應的表結構。
在這里是使用的OMS直接從OB遷移表結構到Oracle。
2.2 創建配置文件(json格式)
Datax的基本執行語句為:
python  {DATAX_HOME}/bin/datax.py  {JSON_FILE_NAME}.json
每個任務的參數文件是一個 json 格式,主要由setting和一個 reader 和一個 writer 組成。
批量配置json為:
{
  "job": {
    "setting": {
      "speed": {
        "channel": 100,
    "bytes":0
      },
      "errorLimit": {
     "record":"",
       "percentage":
      }
    },
    "content": [
      {
        "reader": {
          "name": "oceanbasev10reader",
          "parameter": {
            "username": "",
            "password": "",
            "column": [
              "*"
            ],
            "connection": [
              {
                           "jdbcUrl":[ ""],
                            "querySql": [
                                           "select * from ${readTb} PARTITION(${readpartition}) "
                 ]
              }
            ],
            "batchSize": 1024
          }
        },
        "writer": {
          "name": "oraclewriter",
          "parameter": {
            "where": "",
            "column": ["*"],
            "preSql": [],
            "connection": [
              {
                                "jdbcUrl": "",
                                "table": ["${writeTb}"]
              }
            ],
            "username": "",
            "password": ""
          }
        }
      }
    ]
  }
}
  • channel表示任務并發數。
  • record:  出錯記錄數超過record設置的條數時,任務標記為失敗.
  • percentage: 當出錯記錄數超過percentage百分數時,任務標記為失敗.
  • bytes表示每秒字節數,默認為0(不限速)。
2.3 ${readTb} json文件中表示變量,傳輸時使用-D參數進行設置.
單個表同步:
python /home/admin/tools/datax3/bin/datax.py 
/home/admin/ob_ss/ob_to_ora_ss_tbcs5.json -p"-DreadTb=table1
-Dreadpartition=partition1 -DwriteTb=table1 "
同步完成后,job相關信息:
2.4 批量執行腳本
#!/bin/bash

v_table_list=/home/admin/ob_ss/source_table.lst
v_exec_command=/home/admin/tools/datax3/bin/datax.py
v_path_json=/home/admin/ob_ss/ob_to_ora_ss_tbcs5.json
v_path_log=/home/admin/ob_ss/log/

#從table_name.txt獲取表名、分區
for table_name in `cat $v_table_list`
Do
v_source_table_name1=`echo $table_name|awk -F ":" {print $1}`
v_source_table_partition=`echo $table_name|awk -F ":" {print $2}`
v_target_table_name=`echo $table_name|awk -F ":" {print $1}|awk -F "." {print $2}`
$v_exec_command --loglevel=info -p "
-DreadTb=${v_source_table_name1} 
-Dreadpartition=${v_source_table_partition} 
-DwriteTb=${v_target_table_name} 
"
 $v_path_json  >> "$v_path_log"$v_source_table_name1"_"$v_source_table_partition".log



DataX的并發參數

Json配置文件讀寫數據有兩種模式:

  • 一種是table模式;
  • 一種是querySql模式.
因為channel參數的實現是通過生成多個SQL語句實現的,所以 channel生效僅在能夠split出多個SQL語句的場景下,也就是table模式+spliPk下有用。
在table模式下, channel個數決定了reader和writer的個數上限,假設為m個:如果指定了splitPk字段,DataX會將mysql表中數據按照splitPk切分成n段,n大致為5倍的channel個數。
splitPk的字段限制了必須是整型或者字符串類型。由于DataX的實現方式是按照spliPk字段分段查詢數據庫表,那么spliPk字段的選取應該盡可能的選擇分布均勻且有索引的字段,比如主鍵id、唯一鍵等字段。
DataX會啟動m個reader線程,消費DataX切分好的n個查詢sql語句(task), 對應的會有m個writer線程將查詢出來的數據寫入目標數據源中,并行度為m(也就是配置的channel個數),如果不指定splitPk字段,DataX將不會進行數據的切分,并行度直接退化成1。
需要指出的是,oceanbasev10readerplitPk的字段限制了必須是整型


遇到的問題

  • 原因:TBCS.SYS_C0038005是全局索引,當在json的preSql設置”alter table **  truncate partition **” 時導致索引失效。
  • 解決辦法:rebuild重建索引,preSql設置” truncate  table  **”.

文章結語:dataX的總體使用相對比較簡單,作為數據同步框架,將不同數據源的同步抽象為從源頭數據源讀取數據的 Reader 插件,以及向目標端寫入數據的 Writer 插件,只要有相應的讀寫插件理論上 DataX 框架可以支持任意數據源類型的數據同步工作

比較麻煩的是如何盡可能的提高同步的效率,雖然提供了 channel并發參數,但對于表本身的結構和數據要求比較高,并不是所有的表都能滿足channel的條件。另外由于表結構需要事先建立,對于批量的同步和表結構變更的情況,支持性差。

本文作者:張振浩(上海新炬王翦團隊)

本文來源:“IT那活兒”公眾號

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129386.html

相關文章

  • DataX在有贊大數據平臺的實踐

    摘要:與大數據體系交互上報運行統計數據自帶了運行結果的統計數據,我們希望把這些統計數據上報到元數據系統,作為的過程元數據存儲下來。基于我們的開發策略,不要把有贊元數據系統的嵌入源碼,而是在之外獲取,截取出打印的統計信息再上報。一、需求 有贊大數據技術應用的早期,我們使用 Sqoop 作為數據同步工具,滿足了 MySQL 與 Hive 之間數據同步的日常開發需求。 隨著公司業務發展,數據同步的場景越...

    JerryWangSAP 評論0 收藏0
  • Oceanbase新版本復合分區添加分區操作

    Oceanbase新版本復合分區添加分區操作 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...

    不知名網友 評論0 收藏2700
  • 表到里學習JVM實現

    在社會化分工、軟件行業細分專業化的趨勢下,會真的參與到底層系統實現的人肯定是越來越少(比例上說)。真的會參與到JVM實現的人肯定是少數。 但如果您對JVM是如何實現的有興趣、充滿好奇,卻苦于沒有足夠系統的知識去深入,那么可以參考RednaxelaFX整理的這個書單。 showImg(http://segmentfault.com/img/bVbGzn); 本豆列的脈絡是:    1. JV...

    Cristic 評論0 收藏0
  • SparkSQL 在有贊的實踐

    摘要:在有贊的技術演進。業務數據量正在不斷增大,這些任務會影響業務對外服務的承諾。監控需要收集上執行的的審計信息,包括提交者執行的具體,開始結束時間,執行完成狀態。還有一點是詳細介紹了的原理,實踐中設置了的比默認的減少了以上的時間。 前言 有贊數據平臺從2017年上半年開始,逐步使用 SparkSQL 替代 Hive 執行離線任務,目前 SparkSQL 每天的運行作業數量5000個,占離線...

    hzx 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<