大數據“復活”記
3030
2025-04-01
數據并行導入過程中,需要通過創建外表時設置的導入模式和數據源文件位置等參數,來定位數據源文件。LibrA支持的導入模式有Normal(推薦使用)、Shared和Private。請從支持的導入模式的擴展性、可操作性、支持的數據格式等維度分析,規劃適合的并行導入模式。并根據所規劃的導入模式,配置相應的數據服務器,存放數據源文件,文檔采用Noremal模式(詳情請查閱:產品文檔-開發者指南-導入數據-創建外表-規劃導入模式)。
通過GDS外表設置的導入模式、導入數據格式等信息來識別數據源文件,利用多DN并行的方式,將數據從數據源文件導入到數據庫中,從而提高整體導入性能。數據源文件存放在普通文件系統中,不支持在HDFS文件系統直接指定數據源。
優勢:
1.?CN只負責任務的規劃及下發,把數據導入的工作交給了DN,釋放了CN的資源,使其有能力處理外部請求。
2.?通過使各DN都參與數據導入,充分利用各設備的計算能力及網絡帶寬。
3.?支持導入過程中對數據做預處理。
4.?支持在導入過程中,針對數據格式錯誤設置導入容錯性,并可在導入結束后根據錯誤信息定位錯誤數據。
劣勢:
需要創建外表,并且對于NORMAL模式需要啟動GDS服務。
適用場景:
高并發、大數據量導入。
通過外表并行導入數據:
相關概念:
數據源文件:存儲有數據的TEXT、CSV或FIXED結尾的文件。文件中保存的是待導入數據庫的數據。
外表:用于存放數據源文件的位置、文件格式、存放位置、編碼格式、數據間的分隔符等信息,關聯數據文件與數據庫實表的對象。
GDS:數據服務工具。向LibrA導入數據時,需要將此工具部署到數據源文件所在的服務器上,使DN可以通過該工具獲取數據。
數據庫普通表:數據庫中的表,數據源文件中的數據最終導入到這些表中存儲,包括行存表和列存表。
數據服務器:數據源文件所在的服務器稱為數據服務器。由于使用GDS工具導入時,GDS需要安裝在數據服務器上(可以理解為客戶端),因此數據服務器也是GDS服務器。
2.GDS導入流程
3.操作步驟
此處引用text格式作為數據源文件,CSV格式和FIXED?格式詳見產品文檔-開發者指南-導入數據-創建外表-識別導入數據格式章節;
關于數據容錯性 請見產品文檔-開發者指南-導入數據-創建外表-規劃導入容錯性。
3.1以root用戶登錄用于存放數據源文件的服務器(又稱數據服務器或GDS服務器);確認libra到gds客戶端的網絡鏈路是通的,ip白名單已添加客戶端IP。
3.2創建數據文件存放目錄“/input_data”。
mkdir -p /input_data將數據源文件上傳至上一步所創建的目錄中。
3.3在數據服務器上安裝配置并啟動GDS,
gds -d /input_data/ -p client_ip:5000 -H 0.0.0.0/0 -l /log/gds_log.txt -D -t 2
with error_t1_foreign;
-d?待導入數據文件目錄;
-p?設置GDS**IP和端口。未指定時,IP的默認值為127.0.0.1,端口的默認值為8098(請確認網關和端口是開放的);
-H?設置允許連接到GDS的主機(參數為CIDR格式,僅支持linux系統);
-l?設置GDS日志文件;
-D?設置GDS后臺運行,一般都指定該選項;
3.4?添加用戶和用戶組?groupadd wheel,(數據庫用戶及所屬用戶組已存在,可跳過本步驟)。
1.useradd -g wheel omm若出現以下提示,
useradd: Account 'omm' already exists.
groupadd: Group 'wheel' already exists.
3.5?修改數據源文件目錄屬主為omm
chown -R omm:wheel /input_data?通過URL方式設置外表創建時的參數“location”,用于指定數據源文件。
URL末尾必須指定文件的匹配模式或者文件名。多個URL之間使用‘|’間隔。
URL個數應小于DN個數,且不能使用多個地址相同的URL。
3.6?創建外表
create foreign table t1_foreign(a1 varchar2(10), a2 int)
SERVER gsmpp_server?OPTIONS (location 'gsfs:// client_ip:5000/t1.txt',
format?‘text’, encoding?‘utf8’, delimiter?‘^’, null?‘’)per node reject limit?‘value’
3.7?參數介紹
with error_t1_foreign;
gsfs:該外表對應的文件或者路徑,可以指定多個文件或目錄并行導入;
format:數據源文件的格式,有三種text、csv、fixed(定長),默認是text;
encoding:數據源文件編碼格式,默認是數據庫編碼格式;
delimiter:數據源文件行數據的字段分隔符,支持多字符;如果csv格式,還要指定quote選項;
null:數據源文件中把什么字符識別為null;
per node reject_limit:指定本次數據導入過程中每個DN實例上允許出現的數據格式錯誤的數量,如果有一個DN實例上錯誤數量大于設定值,本次導入失敗,報錯退出。
with?數據導入過程中出現的數據格式錯誤信息將被寫入error_table_name指定的錯誤信息表中。
示例:
GDS數據服務器IP為192.168.0.90,假定啟動GDS時設置的**端口為5000,設置的數據文件存放目錄為“/input_data”,實際的數據文件存放目錄為“/input_data/import/”。
根據以上情況,在創建外表時,指定參數“location”為“gsfs://192.168.0.90:5000/import/*”。如有多個gds服務location可以“|”?為分隔符連接多個gds,location gsfs://192.168.0.90:5000/*| gsfs://192.168.0.91:5000/*',
3.9導入數據
1.?驗證數據源是否能正常查詢出數據,
Select * from? foreign_table_name limit 10;
2.?通過查詢外表將數據插入內表
Insert into inner_tablename_select * from ??foreign_table_name;
3.?查詢錯誤信息表err_tpcds_reasonS,處理數據加載錯誤。
SELECT * FROM err_tpcds_reasonS
4.?處理錯誤表詳見:產品文檔-開發者指南-導入數據-創建外表-處理錯誤表
4.注意事項
1.導入數據時源數據不能放在dn節點,否則會出現數據傾斜,造成gds性能不佳;(dn數據離源數據越近 越容易獲取數據(數據的親源性),而其他的數據節點會出現負載嚴重偏離的情況,可以1.top??查看gds??進程號?2.gstack? pid查看進程?3.iostat -x 1 10?查看Io速率)
2.導入數據時 可以將源數據放在相同服務器的不同磁盤下面 并且保證數據文件的唯一性(有重復的文件會導致??導入表數據的冗余,目前Gds還無法識別相同文件數據)
3.保證表的數據列哈希值得唯一性??(如果數值不唯一則會形成數據被存儲到單個dn?造成數據傾斜)
4.一臺服務器可以啟動3個gds服務??分不同端口??性能最佳
5. GDS數據導出
規劃數據服務器與集群處于同一內網,數據服務器和數據節點不在同一集群,數據源文件格式為CSV,所以規劃的并行導出模式為Remote模式。
1.?客戶端創建數據接收目錄
1.mkdir -p /out_date
2.添加用戶和組?groupadd wheel;useradd -g wheel omm
3.?chown -R?omm:wheel /output_data
4.?啟動GDS服務
/opt/bin/gds/gds -d /output_data -p? 192.168.0.90:5005 -H 10.10.0.1/24 –D
5.??在數據庫中創建外表foreign_tpcds_reasonS用于接收數據服務器上的數據。
由于啟動GDS時,設置的導出數據文件存放目錄為“/output_data/”,GDS**端口為5005。創建的導出數據文件存放目錄為“/output_data/”。所以設置參數“location”為“gsfs://192.168.0.90:5005/”。
6.相關參數說明
數據文件格式(format)為CSV。
編碼格式(encoding)為UTF-8。
字段分隔符(delimiter)為E'\x08'。
引號字符(quote)為0x1b。
數據文件中空值(null)為沒有引號的空字符串。
逃逸字符(escape)為默認值雙引號。
數據文件是否包含標題行(header)為默認值false,即導入時數據文件第一行被識別為數據。
7.創建的外表
CREATE FOREIGN TABLE foreign_tpcds_reasonS
(
r_reason_sk??? integer??????? not null,
r_reason_id??? char(16)?????? not null,
r_reason_desc? char(100)
) SERVER gsmpp_server OPTIONS (location 'gsfs://192.168.0.90:5005/', format 'CSV',encoding 'utf8',delimiter E'\x08', quote E'\x1b', null '') WRITE ONLY;在數據庫上,通過外表foreign_tpcds_reasonS,將數據導出到數據文件中。
INSERT INTO foreign_tpcds_reasonS SELECT * FROM reasonS;
8.以omm用戶登錄數據服務器,停止GDS。
ps -ef|grep gds
omm 128954????? 1? 0 15:03 ???????? 00:00:00 gds -d /output_data -p 192.168.0.90:5005 -D
omm 129003 118723? 0 15:04 pts/0??? 00:00:00 grep gds
kill -9 128954
EI企業智能 Gauss AP 數據倉庫服務 GaussDB(DWS)
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。