摘要:為了避免這種情況,可以針對表短期內(nèi)被兩個以上的語句所加載執(zhí)行一個大的數(shù)據(jù)壓縮。通常,對一張大表執(zhí)行數(shù)據(jù)壓縮會花費大量的時間幾分鐘到幾小時不等。
本文介紹了如何將數(shù)據(jù)從現(xiàn)有的RDBMS遷移到Trafodion數(shù)據(jù)庫。從其它的RDBMS或外部數(shù)據(jù)源向Trafodion集群中導入大量的重要數(shù)據(jù),可以通過下面兩步完美實現(xiàn):
在Trafodion集群中,將數(shù)據(jù)從源頭導入Hive表。使用下列方法之一:
在Trafodion系統(tǒng)中,使用一個類似Apache Sqoop的工具,將數(shù)據(jù)從遠程的RDBMS(例如,MySQL或Oracle)遷移到Hive表。更多信息,請參閱使用Sqoop將數(shù)據(jù)導入Hive。
在Trafodion集群中,將需要導入Trafodion的數(shù)據(jù)復制到HDFS。使用Hive外部表,使這些數(shù)據(jù)能從Hive中看到。更多信息,請參閱創(chuàng)建Hive外部表。
使用Trafodion的LOAD語句,將數(shù)據(jù)從Hive導入Trafodion表。更多信息,請參閱使用BulkLoad將數(shù)據(jù)加載到Trafodion表。
使用Sqoop將數(shù)據(jù)導入Hive使用Apache SqoopTM工具,在關(guān)系型數(shù)據(jù)庫和Apache Hadoop生態(tài)系統(tǒng)之間實現(xiàn)高效的海量數(shù)據(jù)傳輸。
默認情況下,Sqoop并非安裝在Trafodion集群中。可以通過Ambari或Cloudera Manager GUI,在Trafodion集群中安裝并啟動Sqoop。更多信息,請參閱Scoop用戶指南。
安裝必需軟件在Trafodion集群中安裝JDK 1.8 and the Oracle JDBC 驅(qū)動,僅用于將數(shù)據(jù)從RDBMS導入Hive表。請設(shè)置以下環(huán)境變量:
export JAVA_HOME=/opt/java/jdk1.8.0_11 export JAVA_OPTIONS=-Dmapred.child.java.opts=-Djava.security.egd=file:/dev/urandom+
以下是使用sqoop命令的幾個示例。關(guān)于可與sqoop一起使用的更多選項,請參閱Scoop用戶指南。
列出所有Oracle表sqoop list-tables –driver oracle.jdbc.OracleDriver –connect jdbc:oracle:thin:@:/ –username –password將數(shù)據(jù)導入Hive
sqoop import –connect jdbc:oracle:thin:@/ –username –password –table –split-by –hive-import –create-hive-table –hive-table –hive-overwrite –null-string ” –null-non-string ” –hive-drop-import-delims –verbose
參數(shù) | 說明 |
---|---|
–split-by | 默認情況下,如果未指定拆分列,sqoop會使用主鍵列作為拆分列,但這在大多數(shù)時候并非最優(yōu)。此外,如果表未定義主鍵列,您必須手動指定拆分列。 |
–null-string | 表示字符串(string)列中的空值。 |
–null-non-string | 表示非字符串(string)列中的空值。 |
–hive-drop-import-delims | 導入Hive時,丟掉n、r和01字符串域。注意:如果數(shù)據(jù)包含n或r,并且您不使用–hive-drop-import-delims選項,那么數(shù)據(jù)將會被清除。在數(shù)據(jù)遷移期間,可以通過定義你想要使用的分隔符(不存在于數(shù)據(jù)中),使用額外的Sqoop選項。 |
Hive表必須從Hive接口(例如,Hive shell)中創(chuàng)建。在加載期間使用Hive的外部表會非常方便。你可以將源數(shù)據(jù)文件復制到單個HDFS文件夾下,并創(chuàng)建一個指向該文件夾的Hive外部表,從而將數(shù)據(jù)輕松導入Hive表。
Hive表各列的數(shù)據(jù)類型必須與源數(shù)據(jù)一致。關(guān)于創(chuàng)建外部表的語法,請參閱Hive wiki。關(guān)于Hive表可用的數(shù)據(jù)類型,請參閱Hive語言手冊類型。
可以通過Trafodion的整型、字符串型和字符型的列,訪問Hive表。若要填充外部表,請使用以下類型的Hadoop命令,將數(shù)據(jù)復制到HDFS文件夾下:
hadoop fs -copyFromLocal新建Trafodion表和索引
使用包含SALT USING PARTITIONS子句(salting)的CREATE TABLE語句,新建Trafodion表。例如:
CREATE TABLE TRAFODION.SCH.DEMO ( demo_sk int not null, name varchar(100), primary key (demo_sk) ) SALT USING 8 PARTITIONS ON (demo_sk);
表中任何的索引都可能被鹽粒分布(salted),也可能未被鹽粒分布(salted)。如果被鹽粒分布了,則鹽粒分布的鍵和分區(qū)數(shù)必須與表一致。
CREATE INDEX demo_ix ON sch.demo(name) SALT LIKE TABLE;選擇一個主鍵
必須根據(jù)訪問表的工作負載,選擇Trafodion表的主鍵。由于HBase是鍵值(key-value)存儲,所以通過鍵來訪問Trafodion表非常有效率。當您知道一些語句在斷言(predicate)和連接(join)條件之外來訪問一張表,您可以選擇一個主鍵,使頭鍵列有很高的選擇斷言。這會限制在HBase中需要被掃描的行數(shù)。如果斷言只出現(xiàn)在邊鍵列而非頭鍵列中,Trafodion使用MDAM來限制被掃描的行數(shù)。如果頭鍵列(沒有斷言出現(xiàn))的唯一條目數(shù)(unique entry count)很低,MDAM能很好工作。
鹽粒分布(Salting)一張表Trafodion表能被鹽粒分布,以避免熱污點(hot-spotting)。在一些工作負載下,有了排列分區(qū)數(shù)據(jù),數(shù)據(jù)的某種鍵的排列會比另一些排列有更多對表的訪問量。這會導致某些HBase RegionServers處理大多數(shù)的加載,從而出現(xiàn)不平衡的使用行為。
對于本機HBase表,往往可以通過設(shè)計合適的鍵來處理。在Trafodion中,一旦您選擇了表的鍵(請參閱選擇一個主鍵),就可以使用鹽粒分布(salting)來均勻分布數(shù)據(jù)。鹽粒分布對salt鍵使用一個哈希函數(shù),并且根據(jù)該哈希的值來將數(shù)據(jù)分布到分區(qū)中。這個哈希的值被物理存儲在表中,作為頭鍵值。表的每次拆分只會有一個salt鍵值。salting鍵可以是主鍵的任意子集(包括主鍵本身)。
保持salting鍵盡可能小,這是一個很好的實踐。這個鍵必須提供數(shù)據(jù)平均分配。當鍵值有很大的唯一條目數(shù)(unique entry count)并沒有嚴重傾斜的時候,能夠?qū)崿F(xiàn)數(shù)據(jù)的平均分配。在創(chuàng)建表的時候,必須指定分區(qū)數(shù)。分區(qū)數(shù)取決于集群的大小和表的期望大小。
如果添加的數(shù)據(jù)量超出了原本的預期,則鹽粒分布的表就能被拆分。這會導致有多個分區(qū)具有salt值相同的行,也可能產(chǎn)生基于該表的次優(yōu)執(zhí)行計劃。
您也可以選擇不鹽粒分布Trafodion表,這就與傳統(tǒng)RDBMS的range分區(qū)類似。分區(qū)數(shù)隨著表的增大而增多,并且range的邊界由HBase根據(jù)指定的拆分策略而確定。
使用Bulk Load將數(shù)據(jù)加載到Trafodion表(將數(shù)據(jù)從Hive加載到Trafodion)使用命令接口工具(例如,trafci),設(shè)置控制查詢默認(Control Query Defaults,CQD),從而提高加載性能:
cqd hive_max_string_length ‘1000’; // if the widest column is 1KB
如果目標的Trafodion表具有時間相關(guān)的列,則需要進行以下設(shè)置:
cqd allow_incompatible_assignment ‘on’;
使用LOAD語句,將數(shù)據(jù)從Hive加載到Trafodion表。例如:
LOAD WITH NO POPULATE INDEXES INTO trafodion.sch.demo SELECT * FROM hive.hive.demo;
關(guān)于LOAD語句的語法,請參閱《Trafodion SQL 參考手冊》.
如果多次調(diào)用LOAD語句,向單個目標表逐漸加載數(shù)據(jù)集,則目標表的每個分區(qū)會有多個HFile。這會導致SELECT查詢期間無效率的訪問,也可能導致數(shù)據(jù)壓縮(基于HBase設(shè)置中的配置策略)。為了避免這種情況,可以針對表(短期內(nèi)被兩個以上的LOAD語句所加載)執(zhí)行一個大的數(shù)據(jù)壓縮。使用以下的HBase shell命令,執(zhí)行這樣的壓縮:
major_compact ‘TRAFODION.SCH.DEMO’
這個命令不需要等待時間,并且會立即返回。通常,對一張大表執(zhí)行數(shù)據(jù)壓縮會花費大量的時間(幾分鐘到幾小時不等)。您可以通過HBase Master Web UI,監(jiān)控數(shù)據(jù)壓縮的進程。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/17789.html
摘要:而支持事務(wù)處理,尤其是分布式情況下的事務(wù)和數(shù)據(jù)一致性是很復雜的事情。 Trafodion是Apache基金會的一個開源項目,提供了一個成熟的企業(yè)級SQL-on-HBase解決方案。Trafodion的主要設(shè)計思想是處理operational類型的工作負載,或者是傳統(tǒng)的OLTP應(yīng)用。此外,對于需要保證數(shù)據(jù)一致性、需要標準SQL開發(fā)接口,或者需要實時數(shù)據(jù)讀寫分析的應(yīng)用,Trafodion也...
摘要:而支持事務(wù)處理,尤其是分布式情況下的事務(wù)和數(shù)據(jù)一致性是很復雜的事情。 Trafodion是Apache基金會的一個開源項目,提供了一個成熟的企業(yè)級SQL-on-HBase解決方案。Trafodion的主要設(shè)計思想是處理operational類型的工作負載,或者是傳統(tǒng)的OLTP應(yīng)用。此外,對于需要保證數(shù)據(jù)一致性、需要標準SQL開發(fā)接口,或者需要實時數(shù)據(jù)讀寫分析的應(yīng)用,Trafodion也...
閱讀 1669·2021-11-19 09:40
閱讀 2924·2021-09-24 10:27
閱讀 3215·2021-09-02 15:15
閱讀 1876·2019-08-30 15:54
閱讀 1202·2019-08-30 15:54
閱讀 1369·2019-08-30 13:12
閱讀 626·2019-08-28 18:05
閱讀 2794·2019-08-27 10:53