閱讀500 返回首頁    go 阿裏雲


ODPSWriter__Writer插件_使用手冊_數據集成-阿裏雲

1 快速介紹

ODPSWriter插件用於實現往ODPS插入或者更新數據,主要提供給etl開發同學將業務數據導入odps,適合於TB,GB數量級的數據傳輸。

ODPS讀寫插件不適合做ODPS內部數據交換使用,對於同集群數據傳輸,請直接使用ODPS SQL完成,不要再使用CDP數據落入第三方係統傳遞。

2 實現原理

在底層實現上,ODPSWriter是通過DT Tunnel寫入ODPS係統的,有關ODPS的更多技術細節,集團內部用戶請參看 ODPS主站 https://odps.alibaba-inc.com/ 和ODPS產品文檔 https://odps.alibaba-inc.com/doc/。

外部用戶請參看阿裏雲對外ODPS雲產品介紹有關Tunnel章節。

注意: 如果你需要使用ODPSReader/Writer插件,請務必使用JDK 1.6-32及以上版本

使用java -version查看Java版本號

3 功能說明

3.1 配置樣例
{
    "type": "job",
    "traceId": "您可以在這裏填寫您作業的追蹤ID,建議使用業務名+您的作業ID",
    "version": "1.0",
    "configuration": {
        "reader": {
            "plugin": "sqlserver",
            "parameter": {
                "instanceName": "rds.aliyun.com",
                "username": "username",
                "password": "XXX",
                "table": "table",
                "column": [
                    "a",
                    "b"
                ],
                "where": "1 = 1"
            }
        },
        "writer": {
            "plugin": "odps",
            "parameter": {
                "accessId": "bazhen.csy",
                "accessKey": "XXX",
                "project": "project",
                "column": [
                    "*"
                ],
                "table": "table",
                "partition": "pt=20140501",
                "truncate": true
            }
        }
    }
}
3.2 參數說明
  • accessId

    • 描述:ODPS係統登錄ID
    • 必選:是
    • 默認值:無
  • accessKey

    • 描述:ODPS係統登錄Key
    • 必選:是
    • 默認值:無
  • project

    • 描述:ODPS表所屬的project,注意:Project隻能是字母+數字組合,請填寫英文名稱。在雲端等用戶看到的ODPS項目中文名隻是顯示名,請務必填寫底層真實地Project英文標識名。
    • 必選:是
    • 默認值:無
  • table

    • 描述:寫入數據的表名,不能填寫多張表,因為CDP不支持同時導入多張表。
    • 必選:是
    • 默認值:無
  • partition

    • 描述:需要寫入數據表的分區信息,必須指定到最後一級分區。例如把數據寫入一個三級分區表,必須配置到最後一級分區,例如pt=20150101/type=1/biz=2。 對於非分區表,該值務必不要填寫,表示直接導入到目標表;ODPSWriter不支持數據路由寫入,對於分區表請務必保證寫入數據到最末一級分區。
    • 必選:否
    • 默認值:無
  • column

    • 描述:需要導入的字段列表,當導入全部字段時,可以配置為"column": ["*"], 當需要插入部分odps列填寫部分列,例如"column": "id, name"。ODPSWriter支持列篩選、列換序,例如表有a,b,c三個字段,用戶隻同步c,b兩個字段。可以配置成"c, b", 在導入過程中,字段a自動補空,設置為null。

      column必須用戶顯示指定同步的列集合,不允許為空!

    • 必選:是

    • 默認值:無

  • truncate

    • 描述:ODPSWriter通過配置"truncate": "true",保證寫入的冪等性,即當出現寫入失敗再次運行時,ODPSWriter將清理前述數據,並導入新數據,這樣可以保證每次重跑之後的數據都保持一致。 truncate選項不是原子操作!因為ODPSWriter利用ODPS SQL進行數據清理工作,SQL無法做到原子性。因此當多個任務同時向一個Table/Partition清理分區時候,可能出現並發時序問題,請務必注意!針對這類問題,我們建議盡量不要多個作業DDL同時操作同一份分區,或者在多個並發作業啟動前,提前創建分區。
      • 必選:是
    • 默認值:無
3.3 類型轉換

類似ODPSReader,目前ODPSWriter支持大部分ODPS類型,但也存在部分個別類型沒有支持的情況,請注意檢查你的類型。

下麵列出ODPSWriter針對ODPS類型轉換列表:

CDP 內部類型 ODPS 數據類型
Long bigint
Double double
String string
Date datetime
Boolean bool

4 插件特點

4.1 關於列篩選的問題
  • ODPS本身不支持列篩選、重排序、補空等等,但是CDP ODPSWriter完成了上述需求,支持列篩選、重排序、補空。例如需要導入的字段列表,當導入全部字段時,可以配置為"column": ["*"],odps表有a,b,c三個字段,用戶隻同步c,b兩個字段,在列配置中可以寫成"column": ["c","b"],表示會把reader的第一列和第二列導入odps的c字段和b字段,而odps表中新插入紀的錄的a字段會被置為null.
4.2 列配置錯誤的處理
  • 為了保證寫入數據的可靠性,避免多餘列數據丟失造成數據質量故障。對於寫入多餘的列,ODPSWriter將報錯。例如ODPS表字段為a,b,c,但是ODPSWriter寫入的字段為多於3列的話ODPSWriter將報錯。
4.3 分區配置注意事項
  • ODPSWriter隻提供 寫入到最後一級分區 功能,不支持寫入按照某個字段進行分區路由等功能。假設表一共有3級分區,那麼在分區配置中就必須指明寫入到某個三級分區,例如把數據寫入一個表的第三級分區,可以配置為 pt=20150101/type=1/biz=2,但是不能配置為pt=20150101/type=1或者pt=20150101。
4.4 任務重跑和failover
  • ODPSWriter通過配置"truncate": true,保證寫入的冪等性,即當出現寫入失敗再次運行時,ODPSWriter將清理前述數據,並導入新數據,這樣可以保證每次重跑之後的數據都保持一致。如果在運行過程中因為其他的異常導致了任務中斷,是不能保證數據的原子性的,數據不會回滾也不會自動重跑,需要用戶利用冪等性這一特點重跑去確保保證數據的完整性。truncate為true的情況下,會將指定分區表的數據全部清理,請謹慎使用!

5 性能報告(線上環境實測)

5.1 環境準備
5.1.1 數據特征

建表語句:

use cdo_datasync;
create table CDP3_odpswriter_perf_10column_1kb_00(
s_0 string,
bool_1 boolean,
bi_2 bigint,
dt_3 datetime,
db_4 double,
s_5 string,
s_6 string,
s_7 string,
s_8 string,
s_9 string
)PARTITIONED by (pt string,year string);

單行記錄類似於:

s_0    : 485924f6ab7f272af361cd3f7f2d23e0d764942351#$%^&fdafdasfdas%%^(*&^^&*
bool_1 : true
bi_2   : 1696248667889
dt_3   : 2013-07-0600: 00: 00
db_4   : 3.141592653578
s_5    : 100dafdsafdsahofjdpsawifdishaf;dsadsafdsahfdsajf;dsfdsa;fjdsal;11209
s_6    : 100dafdsafdsahofjdpsawifdishaf;dsadsafdsahfdsajf;dsfdsa;fjdsal;11fdsafdsfdsa209
s_7    : 100DAFDSAFDSAHOFJDPSAWIFDISHAF;dsadsafdsahfdsajf;dsfdsa;FJDSAL;11209
s_8    : 100dafdsafdsahofjdpsawifdishaf;DSADSAFDSAHFDSAJF;dsfdsa;fjdsal;11209
s_9    : 12~!2345100dafdsafdsahofjdpsawifdishaf;dsadsafdsahfdsajf;dsfdsa;fjdsal;11209
5.1.2 機器參數
  • 執行CDP的機器參數為:
    1. cpu : 24 Core Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz cache 15.36MB
    2. mem : 50GB
    3. net : 千兆雙網卡
    4. jvm : -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError
    5. disc: CDP 數據不落磁盤,不統計此項
5.2 測試報告
並發任務數 blockSizeInMB CDP速度(Rec/s) CDP流量(MB/S) 網卡流量(MB/S) CDP運行負載
1 32 30303 13.03 14.5 0.12
1 64 38461 16.54 16.5 0.44
1 128 46454 20.55 26.7 0.47
1 256 52631 22.64 26.7 0.47
1 512 58823 25.30 28.7 0.44
4 32 114816 49.38 55.3 0.75
4 64 147577 63.47 71.3 0.82
4 128 177744 76.45 83.2 0.97
4 256 173913 74.80 80.1 1.01
4 512 200000 86.02 95.1 1.41
8 32 204480 87.95 92.7 1.16
8 64 294224 126.55 135.3 1.65
8 128 365475 157.19 163.7 2.89
8 256 394713 169.83 176.7 2.72
8 512 241691 103.95 125.7 2.29
16 32 420838 181.01 198.0 2.56
16 64 458144 197.05 217.4 2.85
16 128 443219 190.63 210.5 3.29
16 256 315235 135.58 140.0 0.95
16 512 OOM

說明:

  1. OdpsWriter 影響速度的是channel 和 blockSizeInMB。blockSizeInMB 取3264時,速度比較穩定,過分大的 blockSizeInMB 可能造成速度波動以及內存OOM。
  2. channel 和 blockSizeInMB 對速度的影響都很明顯,建議綜合考慮配合選擇。
  3. channel 數目的選擇,可以綜合考慮源端數據特征進行選擇,對於StreamReader,在16個channel時將網卡打滿。

6 FAQ

1 導數據到 odps 的日誌中有以下報錯,該怎麼處理呢?"ODPS-0420095: Access Denied - Authorization Failed [4002], You doesn‘t exist in project example_dev“

解決辦法 :找ODPS Prject 的 owner給用戶的雲賬號授權,授權語句:

grant Describe,Select,Alter,Update on table [tableName] to user XXX

2 可以導入數據到odps的視圖嗎?

目前不支持通過視圖到數據到odps,視圖是ODPS非實體化數據存儲對象,技術上無法向視圖導入數據。

最後更新:2016-11-23 16:03:59

  上一篇:go PostgreSQLWriter__Writer插件_使用手冊_數據集成-阿裏雲
  下一篇:go OTSWriter__Writer插件_使用手冊_數據集成-阿裏雲