500
阿裏雲
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同時操作同一份分區,或者在多個並發作業啟動前,提前創建分區。
- 必選:是
- 默認值:無
- 描述: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的機器參數為:
- cpu : 24 Core Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz cache 15.36MB
- mem : 50GB
- net : 千兆雙網卡
- jvm : -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError
- 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 |
說明:
- OdpsWriter 影響速度的是channel 和 blockSizeInMB。blockSizeInMB 取
32
和64
時,速度比較穩定,過分大的 blockSizeInMB 可能造成速度波動以及內存OOM。 - channel 和 blockSizeInMB 對速度的影響都很明顯,建議綜合考慮配合選擇。
- 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
上一篇:
PostgreSQLWriter__Writer插件_使用手冊_數據集成-阿裏雲
下一篇:
OTSWriter__Writer插件_使用手冊_數據集成-阿裏雲
圖模型開發和調試__圖模型_大數據計算服務-阿裏雲
Redis-cli連接__連接實例_快速入門_雲數據庫 Redis 版-阿裏雲
創建ODPS表__基礎示例—完整數據開發_場景教程_大數據開發套件-阿裏雲
CreateVirtualMFADevice__用戶管理接口_RAM API文檔_訪問控製-阿裏雲
ALIYUN::KVSTORE::Instance__資源列表_資源編排-阿裏雲
SMTP之Ruby調用示例__SMTP接口說明_郵件推送-阿裏雲
批量消費消息__隊列接口規範_API使用手冊_消息服務-阿裏雲
查詢批量生成的設備信息__接口列表_服務器端API_阿裏雲物聯網套件-阿裏雲
釋放彈性公網 IP__網絡相關接口_API 參考_雲服務器 ECS-阿裏雲
測試__產品簡介_推薦引擎-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲