本申請涉及互聯(lián)網(wǎng)
技術領域:
:,尤其涉及一種數(shù)據(jù)導入方法及裝置。
背景技術:
::隨著互聯(lián)網(wǎng)的不斷發(fā)展,以及社交網(wǎng)絡、智能設備的發(fā)展和應用,使得數(shù)據(jù)量呈爆炸式增長。在海量數(shù)據(jù)分析例如olap(onlineanalyticalprocessing,聯(lián)機分析處理)的應用中,傳統(tǒng)的關系型數(shù)據(jù)庫(sql數(shù)據(jù)庫)已經(jīng)無法滿足大規(guī)模數(shù)據(jù)處理的場景了,取而代之的是各種非關系型數(shù)據(jù)庫(nosql數(shù)據(jù)庫),例如hbase。hbase(hadoopdatabase)是一個分布式、面向列的開源數(shù)據(jù)庫,利用hbase可以在廉價pcserver上搭建大規(guī)模結構化存儲集群,從而高效地進行大規(guī)模數(shù)據(jù)處理。一般的,由于依然有好多數(shù)據(jù)存儲在關系型數(shù)據(jù)庫中,所以在業(yè)務處理過程中,常常需要先將存儲在關系型數(shù)據(jù)庫中的數(shù)據(jù),導入到非關系型數(shù)據(jù)庫中,然后才能進行大規(guī)模數(shù)據(jù)處理?,F(xiàn)有技術中,數(shù)據(jù)導入的方式通常有如下:一種方法,是調(diào)用非關系型數(shù)據(jù)庫提供的api接口,逐條將存儲在關系型數(shù)據(jù)庫中的數(shù)據(jù)插入到非關系型數(shù)據(jù)庫中。這種方式由于涉及到大量客戶端、服務器交互、操作日志落地等不必要的網(wǎng)絡、i/o操作,所以會使得導入效率較低,如今大多采用下一種方式。另一種方法,是使用非關系型數(shù)據(jù)庫(如hbase)提供的原生bulkload功能(即快速導入的功能)。該功能實現(xiàn)的過程為:a,將存儲在關系型數(shù)據(jù)庫中的數(shù)據(jù)上傳至hdfs(hadoopdistributedfilesystem,分布式文件系統(tǒng));b,創(chuàng)建一個region;所述region是非關系型數(shù)據(jù)庫中負載均衡的基本單元;c,運行映射歸納(mapreduce)程序,生成數(shù)據(jù)存儲文件;d,將所生成的數(shù)據(jù)存儲文件(如hfile)移動至非關系型數(shù)據(jù)庫的預設目錄下。但是,這種方式?jīng)]有考慮數(shù)據(jù)分布,而非關系型數(shù)據(jù)庫是分布式數(shù)據(jù)庫,如果導入的數(shù)據(jù)分布不均勻,就會造成非關系型數(shù)據(jù)庫的數(shù)據(jù)查詢效率較低。技術實現(xiàn)要素:本申請?zhí)峁?shù)據(jù)導入方法及裝置,以解決現(xiàn)有存在有導入非關系型數(shù)據(jù)庫中的數(shù)據(jù)出現(xiàn)分布不均勻的情況下,會造成數(shù)據(jù)查詢效率較低的問題。根據(jù)本申請實施例提供的一種數(shù)據(jù)導入方法,所述方法應用于非關系型數(shù)據(jù)庫,所述方法包括:解析分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)的數(shù)據(jù)分布;根據(jù)所述原始數(shù)據(jù)的數(shù)據(jù)分布,將所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)均勻地進行劃分;基于映射歸納算法,將均勻劃分后的每一部分數(shù)據(jù)寫入到對應的數(shù)據(jù)存儲文件中;將所述數(shù)據(jù)存儲文件移至非關系型數(shù)據(jù)庫的預設目錄下??蛇x的,所述方法還包括:在解析分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)的數(shù)據(jù)分布之前,將待導入的原始數(shù)據(jù)移至分布式文件系統(tǒng)。可選的,所述將待導入的原始數(shù)據(jù)移至分布式文件系統(tǒng),具體包括:導出關系型數(shù)據(jù)庫中的原始數(shù)據(jù),并所述原始數(shù)據(jù)上傳至分布式文件系統(tǒng);或者,使用預設工具從關系型數(shù)據(jù)庫中提取原始數(shù)據(jù)至分布式文件系統(tǒng)。可選的,所述解析分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)的數(shù)據(jù)分布,具體包括:基于分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)創(chuàng)建hive外表;基于所述hive外表,解析所述原始數(shù)據(jù)的數(shù)據(jù)分布??蛇x的,所述基于所述hive外表,解析所述原始數(shù)據(jù)的數(shù)據(jù)分布,具體包括:根據(jù)所述原始數(shù)據(jù)大小與region大小,計算得出預分配的region個數(shù);所述region為非關系型數(shù)據(jù)庫中進行負載均衡的基本單元;統(tǒng)計所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù);根據(jù)所述原始數(shù)據(jù)的總條數(shù)和所述region個數(shù),計算得出每個region能容納的條數(shù);將所述原始數(shù)據(jù)的總條數(shù)和所述條數(shù)取余,將余數(shù)為0的行號確定為region的終止行??蛇x的,在所述基于映射歸納算法,將均勻劃分后的每一部分數(shù)據(jù)寫入到對應的數(shù)據(jù)存儲文件中之前,所述方法還包括:統(tǒng)一在配置文件中設置參數(shù)??蛇x的,所述參數(shù)包括:非關系型數(shù)據(jù)庫主鍵、非關系型數(shù)據(jù)庫列簇名、導入數(shù)據(jù)列編號、原始數(shù)據(jù)分隔符、非關系型數(shù)據(jù)庫表名、數(shù)據(jù)存儲文件的存儲目錄??蛇x的,所述非關系型數(shù)據(jù)庫主鍵為聯(lián)合主鍵,所述聯(lián)合主鍵為多個主鍵。可選的,所述非關系型數(shù)據(jù)庫包括hbase;所述分布式文件系統(tǒng)包括hdfs;所述數(shù)據(jù)存儲文件包括hfile。根據(jù)本申請實施例提供的一種數(shù)據(jù)導入裝置,所述裝置應用于非關系型數(shù)據(jù)庫,所述裝置包括:解析單元,解析分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)的數(shù)據(jù)分布;劃分單元,根據(jù)所述原始數(shù)據(jù)的數(shù)據(jù)分布,將所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)均勻地進行劃分;寫入單元,基于映射歸納算法,將均勻劃分后的每一部分數(shù)據(jù)寫入到對應的數(shù)據(jù)存儲文件中;移動單元,將所述數(shù)據(jù)存儲文件移至非關系型數(shù)據(jù)庫的預設目錄下。可選的,在所述解析單元之前,所述裝置還包括:移動子單元,將待導入的原始數(shù)據(jù)移至分布式文件系統(tǒng)??蛇x的,所述移動子單元,具體包括:第一移動子單元,導出關系型數(shù)據(jù)庫中的原始數(shù)據(jù),并所述原始數(shù)據(jù)上傳至分布式文件系統(tǒng);或者,第二移動子單元,使用預設工具從關系型數(shù)據(jù)庫中提取原始數(shù)據(jù)至分布式文件系統(tǒng)??蛇x的,所述解析單元,具體包括:創(chuàng)建子單元,基于所述分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)創(chuàng)建hive外表;解析子單元,基于所述hive外表,解析所述原始數(shù)據(jù)的數(shù)據(jù)分布。可選的,所述解析子單元,具體包括:第一計算子單元,根據(jù)所述原始數(shù)據(jù)大小與region大小,計算得出預分配的region個數(shù);所述region為非關系型數(shù)據(jù)庫中進行負載均衡的基本單元;統(tǒng)計子單元,統(tǒng)計所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù);第二計算子單元,根據(jù)所述原始數(shù)據(jù)的總條數(shù)和所述region個數(shù),計算得出每個region能容納的條數(shù);確定子單元,將所述原始數(shù)據(jù)的總條數(shù)和所述條數(shù)取余,將余數(shù)為0的行號確定為region的終止行可選的,在所述寫入單元之前,所述裝置還包括:配置單元,統(tǒng)一在配置文件中設置參數(shù)??蛇x的,所述參數(shù)包括:非關系型數(shù)據(jù)庫主鍵、非關系型數(shù)據(jù)庫列簇名、導入數(shù)據(jù)列編號、原始數(shù)據(jù)分隔符、非關系型數(shù)據(jù)庫表名、數(shù)據(jù)存儲文件的存儲目錄??蛇x的,所述非關系型數(shù)據(jù)庫主鍵為聯(lián)合主鍵,所述聯(lián)合主鍵為多個主鍵??蛇x的,所述非關系型數(shù)據(jù)庫包括hbase;所述分布式文件系統(tǒng)包括hdfs;所述數(shù)據(jù)存儲文件包括hfile。本申請實施例中,通過hive外表解析原始數(shù)據(jù)的分布情況,從而均勻地將原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)進行劃分,并通過映射歸納算法將均勻劃分后的每一部分數(shù)據(jù)寫入到對應的數(shù)據(jù)存儲文件中,最后將所述數(shù)據(jù)存儲文件轉(zhuǎn)移到非關系型數(shù)據(jù)庫的預設目錄下,如此完成數(shù)據(jù)導入過程。由于導入過程中解析了原始數(shù)據(jù)的數(shù)據(jù)分布,使得導入后的原始數(shù)據(jù)分布均勻,所以提高了非關系型數(shù)據(jù)庫進行數(shù)據(jù)查詢時的查詢效率,避免了因現(xiàn)有技術中數(shù)據(jù)分布不均勻?qū)е碌臄?shù)據(jù)查詢效率低。并且由于hive外表解析時無需移動原始數(shù)據(jù)到hive外表中,所以可以避免消耗系統(tǒng)i/o資源。附圖說明圖1是本申請一實施例提供的hbase的系統(tǒng)結構圖;圖2是本申請一實施例提供的region的示意圖;圖3是本申請一實施例提供的數(shù)據(jù)導入方法的流程圖;圖4是本申請一實施例提供的創(chuàng)建hbase表的流程圖;圖5是本申請?zhí)峁┑臄?shù)據(jù)導入裝置所在設備的一種硬件結構圖;圖6是本申請一實施例提供的數(shù)據(jù)導入裝置的模塊示意圖。具體實施方式這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。在本申請使用的術語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指并包含一個或多個相關聯(lián)的列出項目的任何或所有可能組合。應當理解,盡管在本申請可能采用術語第一、第二、第三等來描述各種信息,但這些信息不應限于這些術語。這些術語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應于確定”。圖1所示為本申請一實施例提供的hbase的系統(tǒng)架構圖。本實施例中非關系型數(shù)據(jù)庫以hbase為例,一般的,在hbase系統(tǒng)中,可以有一臺masterserver(主服務器)以及若干臺regionserver(從屬服務器)。數(shù)據(jù)可以是根據(jù)region分布在regionserver上的。所述region為hbase中負載均衡的基本單元。每個region都會有一個起始行(startkey)和一個終止行(endkey),通過所述起始行和終止行可以確定一個region限定的區(qū)間,對于某一條數(shù)據(jù)在哪個region上就是由所述起始行和終止行限定的。例如,某region的startkey:111,endkey:222,則rowkey=200的數(shù)據(jù)落在該region上,rowkey=1111的數(shù)據(jù)也是落在該region上,rowkey=111a也是落在該region上。如圖2所示為region的示意圖,某個regionserver上有4個region分別是:region1,region2,region3,region。其中,region1的stratkey:-∞;endkey:100;region2的stratkey:100;endkey:200;region3的stratkey:200;endkey:300;region4的stratkey:300;endkey:+∞。一段數(shù)據(jù)的rowkey為:15,208,115,7000;由于15是位于-∞到100之間,所以15的數(shù)據(jù)位于region1上;由于208是位于100到200之間,所以208的數(shù)據(jù)位于region2上;由于115是位于200到300之間,所以115的數(shù)據(jù)位于region3上;由于7000是位于300到+∞之間,所以7000的數(shù)據(jù)位于region4上。每個regionserver可以有多個region,但每個region只能對一個regionserver提供服務。如圖1所示,regionserver1中具有3個region分別為regiona,regionb,regionc;regionserver2中具有2個region分別為regiond,regione。通常,最初每個regionserver中都只創(chuàng)建一個region,所述region可以有大小限制,當region負載的數(shù)據(jù)超過閾值(本身的大小)的情況下,該region將會分裂,成為兩個新的region。分裂會消耗系統(tǒng)i/o資源。由于現(xiàn)有的非關系型數(shù)據(jù)庫不感知原始數(shù)據(jù)的數(shù)據(jù)分布,所以region的stratkey和endkey容易設置的不合理,從而造成導入的數(shù)據(jù)分布不均勻。例如2個region,原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)為10000條,rowkey從1-10000,由于不感知原始數(shù)據(jù)的數(shù)據(jù)分布,假設regiona的startkey=1,endkey=10000;regionb的startkey=10000,endkey=20000。這樣原始數(shù)據(jù)只會寫到regiona中,從而造成導入的數(shù)據(jù)分布不均勻,在非關系型數(shù)據(jù)庫并行進行查詢時,少量region被查詢多就會成為熱點,從而導致查詢效率下降。為了解決上述問題,請參見圖3,為本申請一實施例提供的數(shù)據(jù)導入方法的流程圖,所述方法應用于非關系型數(shù)據(jù)庫,包括以下步驟:步驟110:將待導入的原始數(shù)據(jù)移至分布式文件系統(tǒng)。本實施例中,非關系型數(shù)據(jù)庫存儲需要依賴分布式文件系統(tǒng)(hadoopdistributedfilesystem,hdfs),所述hdfs是一種高度容錯性的系統(tǒng),適合部署在廉價的pcserver上,適用于大規(guī)模數(shù)據(jù)的應用。將待導入的原始數(shù)據(jù)移至hdfs(hadoopdistributedfilesystem,分布式文件系統(tǒng)),可以通過如下方式實現(xiàn):第一種,導出關系型數(shù)據(jù)庫中的原始數(shù)據(jù),并所述原始數(shù)據(jù)上傳至分布式文件系統(tǒng)(hdfs)。具體地,從關系型數(shù)據(jù)庫中導出的原始數(shù)據(jù)后,所述原始數(shù)據(jù)為文本格式,之后,將所述文本格式上傳至hdfs。通過如下命令可以將原始數(shù)據(jù)移動上傳至hdfs:hadoopfs–putlocafilepathdestfilepath第二種,使用預設工具從關系型數(shù)據(jù)庫中提取原始數(shù)據(jù)至分布式文件系統(tǒng)(hdfs)。所述預設工具可以用于在將一個關系型數(shù)據(jù)庫中的數(shù)據(jù)導入到hadoop的hdfs中。例如soop,所述sqoop是一款開源的主要用于在hadoop(hive)與傳統(tǒng)的關系型數(shù)據(jù)庫之間進行數(shù)據(jù)傳遞的工具,使用該sqoop可以將一個關系型數(shù)據(jù)庫中的數(shù)據(jù)導入到hdfs中;也可以將hdfs中的數(shù)據(jù)導入到關系型數(shù)據(jù)庫中。以soop為例,需要配置如下所示的參數(shù):db_connect_url//數(shù)據(jù)庫連接字符串user_name=alipay//數(shù)據(jù)庫用戶名password=ali88//數(shù)據(jù)庫密碼hdfs_path=tmp/bulkload/userinfo//hdfs原始數(shù)據(jù)目錄map_count=10//map個數(shù)table_name=user_info//數(shù)據(jù)表名columns=user_id,user_name,addr/原始源數(shù)據(jù)表列名sperator=’\001’//分隔符并通過如下所示的命令進行轉(zhuǎn)移:sqoopimport--append--connect$db_connect_url--username$user_name--password$password--target-dir$hdfs_path--num-mappers$map_count--table$table_name--columns$columns--fields-terminated-by$sperator需要說明的是,上文提及的代碼僅為本實施例將原始數(shù)據(jù)轉(zhuǎn)移至hdfs的部分代碼示例,為將本實施例闡述得清楚簡潔,對于本實施例發(fā)全部代碼在此不作贅述。本步驟是數(shù)據(jù)導入方法的準備步驟,在某些實施例中,如果分布式文件系統(tǒng)中已經(jīng)存在有原始數(shù)據(jù),那么可以沒有本步驟,直接從步驟120開始。步驟120:解析分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)的數(shù)據(jù)分布。本實施例中,所述解析原始數(shù)據(jù)的數(shù)據(jù)分布情況后,進一步地可以將其數(shù)據(jù)總條數(shù)均勻地進行劃分。具體地,所述步驟120,可以包括如下步驟:a1:基于分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)創(chuàng)建hive外表;本實施例中,hive外表可以直接基于存儲在hdfs上的原始數(shù)據(jù)創(chuàng)建,利用hive外表可以統(tǒng)計原始數(shù)據(jù)的數(shù)據(jù)分布情況,而且無需將原始數(shù)據(jù)到hive外表中,如此,可以避免消耗系統(tǒng)i/o資源。使用hive外表只要掌握hivesql這種非常通用的語法就可以,簡單方便。hive是基于hadoop的一個數(shù)據(jù)倉庫工具,可以將原始數(shù)據(jù)映射為一張數(shù)據(jù)庫表,并可以提供一些簡單的sql查詢功能。并可以將sql語句轉(zhuǎn)換為mapreduce任務進行運行。值得一提的是,在創(chuàng)建hive外表過程中,需要設置如下內(nèi)容:設置hive外表的表名;設置字段;設置原始數(shù)據(jù)在hdfs的目錄;設置原始數(shù)據(jù)分隔符。其中,所述字段與原始數(shù)據(jù)的列具有一一對應的映射關系。如下表1所示的原始數(shù)據(jù):表1idnameage1張三222李四183王二40………1000趙六75創(chuàng)建hive外表時需要確定字段(a,b,c)表示的原始數(shù)據(jù),根據(jù)原始數(shù)據(jù)的列順序,可以確定字段id=a,name=b,age=c。值得一提的是,所述原始數(shù)據(jù)分隔符與必須與前述的分隔符一致。例如,前述soop方式中,設置分隔符為’\001’,則此處設置原始數(shù)據(jù)分隔符也必須是’\001’。a2:基于所述hive外表,解析所述原始數(shù)據(jù)的數(shù)據(jù)分布。本實施例中,在創(chuàng)建hive外表后,基于該hive外表,可以解析所述原始數(shù)據(jù)的數(shù)據(jù)分布。本實施例中,為了使得原始數(shù)據(jù)均勻分布,需要讓所述原始數(shù)據(jù)均勻地負載到各region上,即使每個region上的數(shù)據(jù)的條數(shù)相同。為此,需要做如下所示的處理:首先:根據(jù)所述原始數(shù)據(jù)大小與region大小,計算得出預分配的region個數(shù);所述region為非關系型數(shù)據(jù)庫中進行負載均衡的基本單元;計算出需要創(chuàng)建的region個數(shù),可以通過如下公式計算得到:region個數(shù)=原始數(shù)據(jù)大小/region大小舉例說明:假設原始數(shù)據(jù)為2tb,region為4gb。首先,將2tb換算成gb為2000gb,需要保持與region單位一致。根據(jù)上述公式計算:region個數(shù)=2000/4=500個。所以,需要創(chuàng)建的region個數(shù)為500個。值得一提的,region大小不宜設置過小,過小容易在有新增數(shù)據(jù)的情況下導致頻繁的分裂,分裂會消耗系統(tǒng)資源。也不宜過大,過大容易造成region個數(shù)較少,從而并行度就小了,在查詢大量數(shù)據(jù)時效率較低。接著:統(tǒng)計所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù);本實施例,可以通過selectcount(*)fromhive_user_info,統(tǒng)計hive外表名詞為hive_user_info的原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)。之后:根據(jù)所述原始數(shù)據(jù)的總條數(shù)和所述region個數(shù),計算得出每個region能容納的條數(shù);本實施例中,沿用前述例子,假設統(tǒng)計原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)為100000000條,region數(shù)據(jù)為500個;所以計算得出每個region條數(shù)=100000000/500=200000條。最后,將所述原始數(shù)據(jù)的總條數(shù)和所述條數(shù)取余,將余數(shù)為0的行號確定為region的終止行。如前所述,每個rogion都具有一個開始行startkey和終止行endkey。假設當前數(shù)據(jù)的行號為rn,region上數(shù)據(jù)條數(shù)為num_per_region,則當rn%num_per_region=0時,將所行號為n確定為終止行。確定終止行的代碼如下所示:上述代碼中a,b,c即為創(chuàng)建hive外表時,設置的字段。需要說明的是,上文提及的代碼僅為本實施例確定終止行的部分代碼示例,為將本實施例闡述得清楚簡潔,對于本實施例發(fā)全部代碼在此不作贅述。在本實施例中,在確定所有的終止行后,還可以根據(jù)所確定的終止行創(chuàng)建預分配region的目標數(shù)據(jù)表。所述目標數(shù)據(jù)表包括hbase表,用于記錄確定的終止行。如圖4所示為創(chuàng)建預分配region的目標數(shù)據(jù)表的流程示意圖:b1:將所確定的終止行寫入文本文件中。所述文本文件例如txt。b2:創(chuàng)建二位數(shù)組。例如split[][],所述二位數(shù)組的長度為region個數(shù)。b3:讀取當前終止行。第一次讀取時,是以文本文件的第一行為當前終止行的。即從第一行開始,逐行讀取的。b4:判斷所述當前終止行是否為空。在當前終止行為空的情況下,說明已經(jīng)讀取完所有的終止行,可以執(zhí)行b6;在當前終止行不為空的情況下,說明還沒有讀取完所有的終止行,可以執(zhí)行b5。b5:在所述當前終止行不為空的情況下,將所述終止行存入所述二維數(shù)組中,并將所述當前終止行的下一終止行確定為當前終止行,重復b3。值得一提的是,所述文本文件中的終止行數(shù)據(jù)類型為string,而二位數(shù)組的數(shù)據(jù)類型為byte,所以需要先將所述終止行的數(shù)據(jù)類型轉(zhuǎn)換為byte后,才能存入到而二維數(shù)組中。b6:在所述當前終止行為空的情況下,根據(jù)所述二位數(shù)組,創(chuàng)建目標數(shù)據(jù)表。以hbase為例,通過調(diào)用hbase提供的用于創(chuàng)建hbase表的api,具體地,如下所示:hbaseadmin.createtable(htable,split[][])通過上述api調(diào)用的createtable方法,根據(jù)二維數(shù)組createtable,創(chuàng)建目標數(shù)據(jù)表即htable。步驟130:基于映射歸納算法,將均勻劃分后的每一部分數(shù)據(jù)寫入到數(shù)據(jù)存儲文件中。本實施例中,映射歸納算法即mapreduce是一種編程模型,可以用于大規(guī)模數(shù)據(jù)的并行計算。map(映射)是指定一個map函數(shù),用來把一組鍵值對(keyvalue)映射成一組新的鍵值對;reduce(歸納)是指定并發(fā)的reduce函數(shù),用來保證所述映射的鍵值對都共享相同的鍵組。以hbase為例,通過hbase中自帶的導入工具importtsv,運行mapreduce,將上述原始數(shù)據(jù)寫入到regino中,從而生成hfile文件。hfile文件是hbase中的數(shù)據(jù)存儲文件,為二進制格式文件。在本實施例中,通過mapreduce,將均勻劃分的原始數(shù)據(jù)寫入到hfile文件中。在本申請的一個具體地實施例中,所述步驟130之前所述方法還可以包括:統(tǒng)一在配置文件中設置參數(shù)。所述參數(shù)可以包括:非關系型數(shù)據(jù)庫主鍵、非關系型數(shù)據(jù)庫列簇名、導入數(shù)據(jù)列編號、原始數(shù)據(jù)分隔符、非關系型數(shù)據(jù)庫表名、數(shù)據(jù)存儲文件的存儲目錄。值得一提的是,所述非關系型數(shù)據(jù)庫主鍵為聯(lián)合主鍵,所述聯(lián)合主鍵為多個主鍵如下以hbase為例所示的配置文件:/**hbase主鍵涉及數(shù)據(jù)列編號*/rowkey:0,1,2/**hbase列簇名*/column_family:cf/**導入數(shù)據(jù)列編號*/columns:3,4,5/**原始數(shù)據(jù)分隔符*/seperator:’\001’/**hbase表名*/table_name:hbase_user_info/**hfile的存儲目錄*/hfile_path:/tmp/hfile/userinfo通過將原本零散在命令行中設置的參數(shù),統(tǒng)一在配置文件中進行設置。如此,方便查看和修改。在配置文件中設置好參數(shù)后,可以通過解析該配置文件中的參數(shù),可以設置上下文變量;設置數(shù)據(jù)輸入格式,例如textinputformat.class設置鍵(key)的輸出格式,例如immutablebyteswritable.class設置值(value)的輸出格式,例如put.class在所述map階段:根據(jù)上述上下文變量,獲取作業(yè)參數(shù)如非關系型數(shù)據(jù)庫表名、列簇名、原始數(shù)據(jù)分隔符等。在本實施例中,在通過基于map算法之后,可以通過reduce算法將所述map算法輸出的key值和value值進行收集整理??梢詫ap算法的輸出作為reduce算法的輸入,然后reduce算法便可以將map算法輸出的key值和value值寫入到數(shù)據(jù)存儲文件中。例如,使用hbase提供的reduce方法hfileoutputformat2.configureincrementaiload()通過上述代碼來實現(xiàn)reduce的過程。需要說明的是,上文提及的代碼僅為本實施例reduce的部分代碼示例,為將本實施例闡述得清楚簡潔,對于本實施例發(fā)全部代碼在此不作贅述。步驟150:將所述數(shù)據(jù)存儲文件轉(zhuǎn)移到非關系型數(shù)據(jù)庫的預設目錄中。本實施例中,以hbase為例,可以通過completebulkload方法將hfile移至hbase的預設目錄下。例如,hfile的路徑為:/tmp/hfile/userinfo;hbase表名為:hbase_user_info;那么,可以使用如下命令:/**設置hfile路徑**/outpath=/tmp/hfile/userinfo/**設置hbase表名**/tablename=hbase_user_infohadoopjarhbase-server-0.94.jarcompletebulkload$outputpath$tablename需要說明的是,上文提及的代碼僅為本實施例將hfile轉(zhuǎn)移到hbase中的部分代碼示例,為將本實施例闡述得清楚簡潔,對于本實施例發(fā)全部代碼在此不作贅述。通過本實施例,利用hive外表解析原始數(shù)據(jù)的分布情況,從而均勻地將所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)進行劃分,并通過映射歸納算法將均勻劃分后的每一部分數(shù)據(jù)寫入到對應的數(shù)據(jù)存儲文件中,最后將所述數(shù)據(jù)存儲文件轉(zhuǎn)移到非關系型數(shù)據(jù)庫的預設目錄下,如此完成數(shù)據(jù)導入過程。由于導入過程中解析了原始數(shù)據(jù)的數(shù)據(jù)分布,使得導入后的原始數(shù)據(jù)分布均勻,所以提高了非關系型數(shù)據(jù)庫進行數(shù)據(jù)查詢時的查詢效率,避免了因現(xiàn)有技術中數(shù)據(jù)分布不均勻?qū)е碌臄?shù)據(jù)查詢效率低。并且由于hive外表解析時無需移動原始數(shù)據(jù)到hive外表中,所以可以避免消耗系統(tǒng)i/o資源。與前述數(shù)據(jù)導入方法實施例相對應,本申請還提供了數(shù)據(jù)導入方法裝置的實施例。本申請數(shù)據(jù)導入方法裝置的實施例可以分別應用在服務器設備上。裝置實施例可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內(nèi)存中運行形成的。從硬件層面而言,如圖5所示,為本申請數(shù)據(jù)導入裝置所在設備的一種硬件結構圖,除了圖5所示的處理器、網(wǎng)絡接口、內(nèi)存以及非易失性存儲器之外,實施例中裝置所在的設備通常根據(jù)該數(shù)據(jù)導入的實際功能,還可以包括其他硬件,對此不再贅述。請參見圖6,為本申請一實施例提供的數(shù)據(jù)導入裝置的模塊示意圖,所述裝置應用于非關系型數(shù)據(jù)庫,所述裝置包括:解析單元210、劃分單元220、寫入單元230和轉(zhuǎn)移單元240。其中,所述解析單元210,解析分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)的數(shù)據(jù)分布;所述劃分單元220,根據(jù)所述原始數(shù)據(jù)的數(shù)據(jù)分布,將所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)均勻地進行劃分;所述寫入單元230,基于映射歸納算法,將均勻劃分后的每一部分數(shù)據(jù)寫入到對應的數(shù)據(jù)存儲文件中;所述第二移動單元240,將所述數(shù)據(jù)存儲文件移至非關系型數(shù)據(jù)庫的預設目錄下。在一個可選的實現(xiàn)方式中:在所述解析單元210之前,所述裝置還包括:移動子單元,將待導入的原始數(shù)據(jù)移至分布式文件系統(tǒng)。在一個可選的實現(xiàn)方式中:所述移動子單元,具體包括:第一移動子單元,導出關系型數(shù)據(jù)庫中的原始數(shù)據(jù),并所述原始數(shù)據(jù)上傳至分布式文件系統(tǒng);或者,第二移動子單元,使用預設工具從關系型數(shù)據(jù)庫中提取原始數(shù)據(jù)至分布式文件系統(tǒng)。在一個可選的實現(xiàn)方式中:所述解析單元210,具體包括:創(chuàng)建子單元,基于所述分布式文件系統(tǒng)中待導入的原始數(shù)據(jù)創(chuàng)建hive外表;解析子單元,基于所述hive外表,解析所述原始數(shù)據(jù)的數(shù)據(jù)分布。在一個可選的實現(xiàn)方式中:所述解析子單元,具體包括:第一計算子單元,根據(jù)所述原始數(shù)據(jù)大小與region大小,計算得出預分配的region個數(shù);所述region為hbase中進行負載均衡的基本單元;統(tǒng)計子單元,統(tǒng)計所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù);第二計算子單元,根據(jù)所述原始數(shù)據(jù)的總條數(shù)和所述region個數(shù),計算得出每個region能容納的條數(shù);確定子單元,將所述原始數(shù)據(jù)的總條數(shù)和所述條數(shù)取余,將余數(shù)為0的行號確定為region的終止行。在一個可選的實現(xiàn)方式中:在所述寫入單元230之前,所述裝置還包括:配置單元,統(tǒng)一在配置文件中設置參數(shù)。在一個可選的實現(xiàn)方式中:所述參數(shù)包括:非關系型數(shù)據(jù)庫主鍵、非關系型數(shù)據(jù)庫列簇名、導入數(shù)據(jù)列編號、原始數(shù)據(jù)分隔符、非關系型數(shù)據(jù)庫表名、數(shù)據(jù)存儲文件的存儲目錄。在一個可選的實現(xiàn)方式中:所述非關系型數(shù)據(jù)庫主鍵為聯(lián)合主鍵,所述聯(lián)合主鍵為多個主鍵。在一個可選的實現(xiàn)方式中:所述非關系型數(shù)據(jù)庫包括hbase;所述分布式文件系統(tǒng)包括hdfs;所述數(shù)據(jù)存儲文件包括hfile。綜上所述,通過申請本實施例,利用hive外表解析原始數(shù)據(jù)的分布情況,從而均勻地將所述原始數(shù)據(jù)的數(shù)據(jù)總條數(shù)進行劃分,并通過映射歸納算法將均勻劃分后的每一部分數(shù)據(jù)寫入到對應的數(shù)據(jù)存儲文件中,最后將所述數(shù)據(jù)存儲文件轉(zhuǎn)移到非關系型數(shù)據(jù)庫的預設目錄下,如此完成數(shù)據(jù)導入過程。由于導入過程中解析了原始數(shù)據(jù)的數(shù)據(jù)分布,使得導入后的原始數(shù)據(jù)分布均勻,所以提高了非關系型數(shù)據(jù)庫進行數(shù)據(jù)查詢時的查詢效率,避免了因現(xiàn)有技術中數(shù)據(jù)分布不均勻?qū)е碌臄?shù)據(jù)查詢效率低。并且由于hive外表解析時無需移動原始數(shù)據(jù)到hive外表中,所以可以避免消耗系統(tǒng)i/o資源。上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應步驟的實現(xiàn)過程,在此不再贅述。對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本申請方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。本領域技術人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本申請的一般性原理并包括本申請未公開的本
技術領域:
:中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權利要求指出。應當理解的是,本申請并不局限于上面已經(jīng)描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本申請的范圍僅由所附的權利要求來限制。當前第1頁12當前第1頁12