本發(fā)明專利技術(shù)提供了一種哈希連接的方法及裝置,該方法包括:S1:獲取待操作的第一表中待操作的第一數(shù)據(jù)和待操作的第二表中待操作的第二數(shù)據(jù);S2:計算每個第一數(shù)據(jù)的哈希值,根據(jù)每個第一數(shù)據(jù)的哈希值,確定每個第一數(shù)據(jù)對應(yīng)的分區(qū)號,并計算每個第二數(shù)據(jù)的哈希值,根據(jù)每個第二數(shù)據(jù)的哈希值,確定每個第二數(shù)據(jù)對應(yīng)的分區(qū)號;S3:將對應(yīng)相同分區(qū)號的數(shù)據(jù)讀入到內(nèi)存的同一個分區(qū)中;S4:分別將同一個分區(qū)中的第一數(shù)據(jù)和第二數(shù)據(jù)進(jìn)行哈希連接hash?join操作。本發(fā)明專利技術(shù)提供了一種哈希連接的方法及裝置,能夠提高join效率。
【技術(shù)實現(xiàn)步驟摘要】
本專利技術(shù)涉及計算機
,特別涉及一種哈希連接的方法及裝置。
技術(shù)介紹
Spark是一個基于內(nèi)存計算的開源的集群計算系統(tǒng),目的是讓數(shù)據(jù)分析更加快速。Spark非常小巧玲瓏,由加州伯克利大學(xué)AMP實驗室的Matei為主的小團隊所開發(fā)。使用的語言是Scala,雖然Spark與Hadoop有相似之處,但它提供了具有有用差異的一個新的集群計算框架。首先,Spark是為集群計算中的特定類型的工作負(fù)載而設(shè)計,即那些在并行操作之間重用工作數(shù)據(jù)集(比如機器學(xué)習(xí)算法)的工作負(fù)載。為了優(yōu)化這些類型的工作負(fù)載,Spark引進(jìn)了內(nèi)存集群計算的概念,可在內(nèi)存集群計算中將數(shù)據(jù)集緩存在內(nèi)存中,以縮短訪問延遲。在hadoop 發(fā)展過程中,為了 給熟悉 RDBMS (Relat1nal Database ManagementSystem,關(guān)系數(shù)據(jù)庫管理系統(tǒng))但又不理解MapReduce的技術(shù)人員提供快速上手的工具,hive應(yīng)運而生,是當(dāng)時唯一運行在hadoop上的SQL-on-Hadoop工具。但是,MapReduce計算過程中大量的中間磁盤落地過程消耗了大量的1/0,降低的運行效率,為了提高SQL-on-Hadoop 的效率,大量的 SQL-on-Hadoop 工具開始產(chǎn)生,MapR 的 Drill、Cloudera 的Impala、Shark都是在這一背景下產(chǎn)生的工具,其中Shark是伯克利實驗室spark生態(tài)環(huán)境的組件之一,它修改了下圖所示的右下角的內(nèi)存管理、物理計劃、執(zhí)行三個模塊,并使之能運行在spark引擎上,從而使得SQL查詢的速度得到10-100倍的提升。隨著Spark的發(fā)展,Shark對于hive的太多依賴(如采用hive的語法解析器、查詢優(yōu)化器等等),制約了 spark各個組件的相互集成,所以提出了 sparkSQL項目。SparkSQL拋棄原有Shark的代碼,汲取了 Shark的一些優(yōu)點,如內(nèi)存列存儲(In-Memory ColumnarStorage)、Hive兼容性等,重新開發(fā)了 SparkSQL代碼,由于擺脫了對hive的依賴性,SparkSQL無論在數(shù)據(jù)兼容、性能優(yōu)化、組件擴展方面都得到了極大的方便。Hive中join操作主要有map join和reduce join組成,這兩種join操作均使用的是mapreduce的計算架構(gòu),sparksql上的join操作針對mapreduce架構(gòu)內(nèi)存利用不足的問題提出了自己的計算模型。現(xiàn)有的hash join(哈希連接)操作中,將整個需要實現(xiàn)join操作的數(shù)據(jù)表存儲到內(nèi)存中進(jìn)行hash join,無法利用現(xiàn)有空閑的內(nèi)存,只能利用較大的內(nèi)存進(jìn)行處理,join效率較低。
技術(shù)實現(xiàn)思路
有鑒于此,本專利技術(shù)提供了一種哈希連接的方法及裝置,能夠提高join效率?!矫?,本專利技術(shù)提供了一種哈希連接的方法,包括:S1:獲取待操作的第一表中待操作的第一數(shù)據(jù)和待操作的第二表中待操作的第二數(shù)據(jù);S2:計算每個第一數(shù)據(jù)的哈希值,根據(jù)每個第一數(shù)據(jù)的哈希值,確定每個第一數(shù)據(jù)對應(yīng)的分區(qū)號,并計算每個第二數(shù)據(jù)的哈希值,根據(jù)每個第二數(shù)據(jù)的哈希值,確定每個第二數(shù)據(jù)對應(yīng)的分區(qū)號;S3:將對應(yīng)相同分區(qū)號的數(shù)據(jù)讀入到內(nèi)存的同一個分區(qū)中;S4:分別將同一個分區(qū)中的第一數(shù)據(jù)和第二數(shù)據(jù)進(jìn)行哈希連接hash join操作。進(jìn)一步地,該方法還包括:實時檢測所述內(nèi)存的剩余量是否小于等于預(yù)設(shè)值,如果是,則將所述內(nèi)存的任一分區(qū)中的未進(jìn)行hash join操作的第一數(shù)據(jù)和/或第二數(shù)據(jù)移出內(nèi)存,否則,將從內(nèi)存中移出的未進(jìn)行hash join操作的數(shù)據(jù)讀入到所述內(nèi)存中。進(jìn)一步地,所述S2中,所述根據(jù)每個第一數(shù)據(jù)的哈希值,確定每個第一數(shù)據(jù)對應(yīng)的分區(qū)號,包括:根據(jù)公式一確定每個第一數(shù)據(jù)對應(yīng)的分區(qū)號,其中,公式一為:numl = a | mod length ;其中,numl是第一數(shù)據(jù)對應(yīng)的分區(qū)號,a為第一數(shù)據(jù)的哈希值,length為預(yù)設(shè)的內(nèi)存中分區(qū)的數(shù)量;所述S2中,所述根據(jù)每個第二數(shù)據(jù)的哈希值,確定每個第二數(shù)據(jù)對應(yīng)的分區(qū)號,包括:根據(jù)公式二確定每個第二數(shù)據(jù)對應(yīng)的分區(qū)號,其中,公式二為:num2 = b | mod length ;其中,nUm2是第二數(shù)據(jù)對應(yīng)的分區(qū)號,b為第二數(shù)據(jù)的哈希值,length為預(yù)設(shè)的內(nèi)存中分區(qū)的數(shù)量。進(jìn)一步地,在所述SI之前,還包括:Dl:分別在存儲所述第一表的第一磁盤中和存儲所述第二表的第二磁盤中,劃分出哈希桶,為每個哈希桶分配哈希桶號;D2:計算每個第一數(shù)據(jù)的哈希值,根據(jù)每個第一數(shù)據(jù)的哈希值,確定每個第一數(shù)據(jù)對應(yīng)的哈希桶號,并計算每個第二數(shù)據(jù)的哈希值,根據(jù)每個第二數(shù)據(jù)的哈希值,確定每個第二數(shù)據(jù)對應(yīng)的哈希桶號;D3:根據(jù)每個第一數(shù)據(jù)對應(yīng)的哈希桶號,將每個第一數(shù)據(jù)存儲在所述第一磁盤中的具有相同哈希桶號的哈希桶中,并根據(jù)每個第二數(shù)據(jù)對應(yīng)的哈希桶號,將每個第二數(shù)據(jù)存儲在所述第二磁盤中的具有相同哈希桶號的哈希桶中;所述SI,包括:分別從第一磁盤和第二磁盤中的具有相同哈希桶號的哈希桶中獲取所述第一數(shù)據(jù)和所述第二數(shù)據(jù)。進(jìn)一步地,所述S4,包括:為每個分區(qū)分配hash join操作線程,通過每個分區(qū)對應(yīng)的所述hash join操作線程,將每個分區(qū)中的第一數(shù)據(jù)和第二數(shù)據(jù)進(jìn)行hash join操作。另一方面,本專利技術(shù)提供了一種哈希連接的裝置,包括:獲取單元,用于獲取待操作的第一表中待操作的第一數(shù)據(jù)和待操作的第二表中待操作的第二數(shù)據(jù);分區(qū)號確定單元,用于計算每個第一數(shù)據(jù)的哈希值,根據(jù)每個第一數(shù)據(jù)的哈希值,確定每個第一數(shù)據(jù)對應(yīng)的分區(qū)號,并計算每個第二數(shù)據(jù)的哈希值,根據(jù)每個第二數(shù)據(jù)的哈希值,確定每個第二數(shù)據(jù)對應(yīng)的分區(qū)號;讀入單元,用于將對應(yīng)相同分區(qū)號的數(shù)據(jù)讀入到內(nèi)存的同一個分區(qū)中;操作單元,用于分別將同一個分區(qū)中的第一數(shù)據(jù)和第二數(shù)據(jù)進(jìn)行哈希連接hashjoin操作。進(jìn)一步地,該裝置還包括:檢測單元,用于實時檢測所述內(nèi)存的剩余量是否小于等于預(yù)設(shè)值,如果是,則將所述內(nèi)存的任一分區(qū)中的未進(jìn)行hash join操作的第一數(shù)據(jù)和/或第二數(shù)據(jù)移出內(nèi)存,否則,將從內(nèi)存中移出的未進(jìn)行hash join操作的數(shù)據(jù)讀入到所述內(nèi)存中。進(jìn)一步地,所述分區(qū)號確定單元,在執(zhí)行所述根據(jù)每個第一數(shù)據(jù)的哈希值,確定每個第一數(shù)據(jù)對應(yīng)的分區(qū)號時,具體執(zhí)行:根據(jù)公式一確定每個第一數(shù)據(jù)對應(yīng)的分區(qū)號,其中,公式一為:numl = a | mod length ;其中,numl是第一數(shù)據(jù)對應(yīng)的分區(qū)號,a為第一數(shù)據(jù)的哈希值,length為預(yù)設(shè)的內(nèi)存中分區(qū)的數(shù)量;所述分區(qū)號確定單元,在執(zhí)行根據(jù)每個第二數(shù)據(jù)的哈希值,確定每個第二數(shù)據(jù)對應(yīng)的分區(qū)號時,具體執(zhí)行:根據(jù)公式二確定每個第二數(shù)據(jù)對應(yīng)的分區(qū)號,其中,公式二為:num2 = b | mod length ;其中,nUm2是第二數(shù)據(jù)對應(yīng)的分區(qū)號,b為第二數(shù)據(jù)的哈希值,length為預(yù)設(shè)的內(nèi)存中分區(qū)的數(shù)量。進(jìn)一步地,該裝置還包括:分桶單元,用于分別在存儲所述第一表的第一磁盤中和存儲所述第二表的第二磁盤中,劃分出哈希桶,為每個哈希桶分配哈希桶號;桶號確定單元,用于計算每個第一數(shù)據(jù)的哈希值,根據(jù)每個第一數(shù)據(jù)的哈希值,確定每個第一數(shù)據(jù)對應(yīng)的哈希桶號,并計算每個第二數(shù)據(jù)的哈希值,根據(jù)每個第二數(shù)據(jù)的哈希值,確定每個第本文檔來自技高網(wǎng)...
【技術(shù)保護點】
一種哈希連接的方法,其特征在于,包括:S1:獲取待操作的第一表中待操作的第一數(shù)據(jù)和待操作的第二表中待操作的第二數(shù)據(jù);S2:計算每個第一數(shù)據(jù)的哈希值,根據(jù)每個第一數(shù)據(jù)的哈希值,確定每個第一數(shù)據(jù)對應(yīng)的分區(qū)號,并計算每個第二數(shù)據(jù)的哈希值,根據(jù)每個第二數(shù)據(jù)的哈希值,確定每個第二數(shù)據(jù)對應(yīng)的分區(qū)號;S3:將對應(yīng)相同分區(qū)號的數(shù)據(jù)讀入到內(nèi)存的同一個分區(qū)中;S4:分別將同一個分區(qū)中的第一數(shù)據(jù)和第二數(shù)據(jù)進(jìn)行哈希連接hash?join操作。
【技術(shù)特征摘要】
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:盧軍佐,曹連超,亓開元,房體盈,趙仁明,
申請(專利權(quán))人:浪潮集團有限公司,
類型:發(fā)明
國別省市:山東;37
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。