• / 19
  • 下載費用:30 金幣  

一種將MAPREDUCE轉換為SQL的方法和裝置.pdf

摘要
申請專利號:

CN201410114193.3

申請日:

2014.03.25

公開號:

CN104951286A

公開日:

2015.09.30

當前法律狀態:

授權

有效性:

有權

法律詳情: 授權|||實質審查的生效 IPC(主分類):G06F 9/44申請日:20140325|||公開
IPC分類號: G06F9/44 主分類號: G06F9/44
申請人: 阿里巴巴集團控股有限公司
發明人: 徐常亮
地址: 英屬開曼群島大開曼資本大廈一座四層847號郵箱
優先權:
專利代理機構: 北京國昊天誠知識產權代理有限公司11315 代理人: 許志勇
PDF完整版下載: PDF下載
法律狀態
申請(專利)號:

CN201410114193.3

授權公告號:

||||||

法律狀態公告日:

2018.07.06|||2015.11.04|||2015.09.30

法律狀態類型:

授權|||實質審查的生效|||公開

摘要

本申請公開了一種將MapReduce轉換為SQL的方法和裝置,屬于計算機技術領域。所述方法包括:獲取用戶通過MapReduce框架輸入的映射化簡MapReduce;解析MapReduce,得到所述MapReduce的函數類型;根據所述MapReduce的函數類型,查詢得到與所述函數類型相應的MapReduce與結構化查詢語言SQL映射關系,以及SQL模板;根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce轉換為SQL。所述裝置包括:獲取模塊、解析模塊、查詢模塊和轉換模塊。本發明可以將MapReduce自動轉換成SQL,實現簡單便捷。

權利要求書

權利要求書
1.  一種將MapReduce轉換為SQL的方法,其特征在于,所述方法包括:
獲取用戶通過MapReduce框架輸入的映射化簡MapReduce;
解析所述MapReduce,得到所述MapReduce的函數類型;其中,所述MapReduce的函數類型為只包括有映射Map函數的Map類型,或同時包括有Map函數和化簡Reduce函數的MapReduce類型;
根據所述MapReduce的函數類型,查詢得到與所述函數類型相應的MapReduce與結構化查詢語言SQL映射關系,以及SQL模板;
根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce轉換為SQL。

2.  如權利要求1所述的方法,其特征在于,當所述MapReduce的函數類型為所述Map類型時,根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce轉換為SQL,包括:
獲取所述MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
根據所述輸入定義信息中包括的輸入數據來源,生成與所述Map類型相應的SQL模板中包括的Map函數的來自from功能的元素;
提取所述MapReduce中包括的Map函數的輸入和輸出;
將所述MapReduce中包括的Map函數的輸入和輸出,分別作為與所述Map類型相應的SQL模板中包括的Map函數的輸入和輸出;
將生成的與所述Map類型相應的SQL模板中包括的Map函數的from功能的元素,與所述Map類型相應的SQL模板中包括的Map函數的輸入和輸出,分別添加到與所述Map類型相應的SQL模板的相應位置,得到所述SQL。

3.  如權利要求2所述的方法,其特征在于,當所述MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,提取所述MapReduce中包括的Map函數的輸入和輸出,包括:
從所述MapReduce中包括的Map函數的注釋annotate中提取輸入和輸出。

4.  如權利要求1所述的方法,其特征在于,當所述MapReduce的函數類型為MapReduce類型時,根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce轉換為SQL,包括:
獲取所述MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
根據所述輸入定義信息中包括的輸入數據來源,生成與所述MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素;
提取所述MapReduce中包括的Map函數的輸入和輸出;
將所述MapReduce中包括的Map函數的輸入和輸出,分別作為與所述MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出;
提取所述MapReduce中包括的Map函數的鍵值信息、所述MapReduce的分區排序需求信息;
根據所述MapReduce中包括的Map函數的鍵值信息、所述MapReduce的分區排序需求信息,確定與所述MapReduce類型相應的SQL模板中包括的發布distribute by功能的鍵值、排序sort by功能的鍵值;
提取所述MapReduce中包括的Reduce函數的輸入和輸出;
將所述MapReduce中包括的Reduce函數的輸入和輸出,分別作為與所述MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出;
將生成的與所述MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素,與所述MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出,與所述MapReduce類型相應的SQL模板中包括的distribute by功能的鍵值、sort by功能的鍵值,與所述MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出,分別添加到與所述MapReduce類型相應的SQL模板的相應位置,得到所述SQL。

5.  如權利要求4所述的方法,其特征在于,當所述MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,提取所述MapReduce中 包括的Map函數的輸入和輸出,包括:
從所述MapReduce中包括的Map函數的annotate中提取輸入和輸出;
相應地,提取所述MapReduce中包括的Reduce函數的輸入和輸出,包括:
從所述MapReduce中包括的Reduce函數的annotate中提取輸入和輸出。

6.  如權利要求1-5任一權利要求所述的方法,其特征在于,將所述MapReduce轉換為SQL之后,還包括:
生成與所述SQL對應的用戶自定義函數UDF適配器,其中,所述UDF適配器用于直接調用所述SQL中的Map函數,或所述SQL中的Map函數和Reduce函數。

7.  一種將MapReduce轉換為SQL的裝置,其特征在于,所述裝置包括:
獲取模塊,用于獲取用戶通過MapReduce框架輸入的映射化簡MapReduce;
解析模塊,用于解析所述MapReduce,得到所述MapReduce的函數類型;其中,所述MapReduce的函數類型為只包括有映射Map函數的Map類型,或同時包括有Map函數和化簡Reduce函數的MapReduce類型;
查詢模塊,用于根據所述MapReduce的函數類型,查詢得到與所述函數類型相應的MapReduce與結構化查詢語言SQL映射關系,以及SQL模板;
轉換模塊,用于根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce轉換為SQL。

8.  如權利要求7所述的裝置,其特征在于,當所述MapReduce的函數類型為所述Map類型時,所述轉換模塊包括:
第一獲取單元,用于獲取所述MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
第一生成單元,用于根據所述輸入定義信息中包括的輸入數據來源,生成與所述Map類型相應的SQL模板中包括的Map函數的來自from功能的元素;
第一提取單元,用于提取所述MapReduce中包括的Map函數的輸入和輸出;
第一處理單元,用于將所述MapReduce中包括的Map函數的輸入和輸出,分別作為與所述Map類型相應的SQL模板中包括的Map函數的輸入和輸出;
第一添加單元,用于將生成的與所述Map類型相應的SQL模板中包括的Map函數的from功能的元素,與所述Map類型相應的SQL模板中包括的Map函數的輸入和輸出,分別添加到與所述Map類型相應的SQL模板的相應位置,得到所述SQL。

9.  如權利要求8所述的裝置,其特征在于,當所述MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,所述第一提取單元包括:
第一提取子單元,用于從所述MapReduce中包括的Map函數的注釋annotate中提取輸入和輸出。

10.  如權利要求7所述的裝置,其特征在于,當所述MapReduce的函數類型為MapReduce類型時,所述轉換模塊包括:
第二獲取單元,用于獲取所述MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
第二生成單元,用于根據所述輸入定義信息中包括的輸入數據來源,生成與所述MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素;
第二提取單元,用于提取所述MapReduce中包括的Map函數的輸入和輸出;
第二處理單元,用于將所述MapReduce中包括的Map函數的輸入和輸出,分別作為與所述MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出;
第三提取單元,用于提取所述MapReduce中包括的Map函數的鍵值信息、所述MapReduce的分區排序需求信息;
確定單元,用于根據所述MapReduce中包括的Map函數的鍵值信息、 所述MapReduce的分區排序需求信息,確定與所述MapReduce類型相應的SQL模板中包括的發布distribute by功能的鍵值、排序sort by功能的鍵值;
第四提取單元,用于提取所述MapReduce中包括的Reduce函數的輸入和輸出;
第三處理單元,用于將所述MapReduce中包括的Reduce函數的輸入和輸出,分別作為與所述MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出;
第二添加單元,用于將生成的與所述MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素,與所述MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出,與所述MapReduce類型相應的SQL模板中包括的distribute by功能的鍵值、sort by功能的鍵值,與所述MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出,分別添加到與所述MapReduce類型相應的SQL模板的相應位置,得到所述SQL。

11.  如權利要求10所述的裝置,其特征在于,當所述MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,所述第二提取單元包括:
第二提取子單元,用于從所述MapReduce中包括的Map函數的annotate中提取輸入和輸出;
相應地,所述第四提取單元包括:
第三提取子單元,用于從所述MapReduce中包括的Reduce函數的annotate中提取輸入和輸出。

12.  如權利要求7-11任一權利要求所述的裝置,其特征在于,所述裝置還包括:
生成模塊,用于生成與所述SQL對應的UDF適配器,其中,所述UDF適配器用于直接調用所述SQL中的Map函數,或所述SQL中的Map函數和Reduce函數。

說明書

說明書一種將MapReduce轉換為SQL的方法和裝置
技術領域
本申請涉及計算機技術領域,具體涉及一種將MapReduce轉換為SQL的方法和裝置。
背景技術
隨著大數據時代的到來,為了解決大規模數據并行化計算的需求,出現了分布式運行系統(簡稱分布式系統)。為了滿足數據分析人員的需求,常見的分布式系統都會提供SQL(Structured Query Language,結構化查詢語言)功能。但SQL缺乏清晰的變量聲明、循環分支等一般編程語言都具備的基礎功能,使得很多編程人員不習慣于用SQL來表述復雜邏輯,而MapReduce(映射化簡)則可以滿足此類需求,并且在表述復雜邏輯時,比SQL還可能更清晰。
然而并不是所有提供SQL功能的分布式系統都提供MapReduce功能,目前沒有存在有將MapReduce自動轉換為SQL的方法,使用戶可以通過MapReduce編程后運行于提供SQL功能的分布式系統。
發明內容
本申請所要解決的技術問題在于提供一種將MapReduce轉換為SQL的方法和裝置,可以將MapReduce自動轉換成SQL,用戶只需編寫簡單的MapReduce,就可以運行在提供SQL功能的分布式系統上,實現簡單便捷。
為了解決上述問題,本申請公開了一種將MapReduce轉換為SQL的方法,所述方法包括:
獲取用戶通過MapReduce框架輸入的映射化簡MapReduce;
解析所述MapReduce,得到所述MapReduce的函數類型;其中,所述 MapReduce的函數類型為只包括有映射Map函數的Map類型,或同時包括有Map函數和化簡Reduce函數的MapReduce類型;
根據所述MapReduce的函數類型,查詢得到與所述函數類型相應的MapReduce與結構化查詢語言SQL映射關系,以及SQL模板;
根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce轉換為SQL。
進一步地,當所述MapReduce的函數類型為所述Map類型時,根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce轉換為SQL,包括:
獲取所述MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
根據所述輸入定義信息中包括的輸入數據來源,生成與所述Map類型相應的SQL模板中包括的Map函數的來自from功能的元素;
提取所述MapReduce中包括的Map函數的輸入和輸出;
將所述MapReduce中包括的Map函數的輸入和輸出,分別作為與所述Map類型相應的SQL模板中包括的Map函數的輸入和輸出;
將生成的與所述Map類型相應的SQL模板中包括的Map函數的from功能的元素,與所述Map類型相應的SQL模板中包括的Map函數的輸入和輸出,分別添加到與所述Map類型相應的SQL模板的相應位置,得到所述SQL。
進一步地,當所述MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,提取所述MapReduce中包括的Map函數的輸入和輸出,包括:
從所述MapReduce中包括的Map函數的注釋annotate中提取輸入和輸出。
進一步地,對所述壓縮包進行解壓縮時,還包括:
當所述MapReduce的函數類型為MapReduce類型時,根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce 轉換為SQL,包括:
獲取所述MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
根據所述輸入定義信息中包括的輸入數據來源,生成與所述MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素;
提取所述MapReduce中包括的Map函數的輸入和輸出;
將所述MapReduce中包括的Map函數的輸入和輸出,分別作為與所述MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出;
提取所述MapReduce中包括的Map函數的鍵值信息、所述MapReduce的分區排序需求信息;
根據所述MapReduce中包括的Map函數的鍵值信息、所述MapReduce的分區排序需求信息,確定與所述MapReduce類型相應的SQL模板中包括的發布distribute by功能的鍵值、排序sort by功能的鍵值;
提取所述MapReduce中包括的Reduce函數的輸入和輸出;
將所述MapReduce中包括的Reduce函數的輸入和輸出,分別作為與所述MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出;
將生成的與所述MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素,與所述MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出,與所述MapReduce類型相應的SQL模板中包括的distribute by功能的鍵值、sort by功能的鍵值,與所述MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出,分別添加到與所述MapReduce類型相應的SQL模板的相應位置,得到所述SQL。
進一步地,當所述MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,提取所述MapReduce中包括的Map函數的輸入和輸出,包括:
從所述MapReduce中包括的Map函數的annotate中提取輸入和輸出;
相應地,提取所述MapReduce中包括的Reduce函數的輸入和輸出,包括:
從所述MapReduce中包括的Reduce函數的annotate中提取輸入和輸出。
進一步地,將所述MapReduce轉換為SQL之后,還包括:
生成與所述SQL對應的用戶自定義函數UDF適配器,其中,所述UDF適配器用于直接調用所述SQL中的Map函數,或所述SQL中的Map函數和Reduce函數。
為了解決上述問題,本申請還公開了一種將MapReduce轉換為SQL的裝置,所述裝置包括:
獲取模塊,用于獲取用戶通過MapReduce框架輸入的映射化簡MapReduce;
解析模塊,用于解析所述MapReduce,得到所述MapReduce的函數類型;其中,所述MapReduce的函數類型為只包括有映射Map函數的Map類型,或同時包括有Map函數和化簡Reduce函數的MapReduce類型;
查詢模塊,用于根據所述MapReduce的函數類型,查詢得到與所述函數類型相應的MapReduce與結構化查詢語言SQL映射關系,以及SQL模板;
轉換模塊,用于根據與所述函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將所述MapReduce轉換為SQL。
進一步地,當所述MapReduce的函數類型為所述Map類型時,所述轉換模塊包括:
第一獲取單元,用于獲取所述MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
第一生成單元,用于根據所述輸入定義信息中包括的輸入數據來源,生成與所述Map類型相應的SQL模板中包括的Map函數的來自from功能的元素;
第一提取單元,用于提取所述MapReduce中包括的Map函數的輸入和輸出;
第一處理單元,用于將所述MapReduce中包括的Map函數的輸入和輸出,分別作為與所述Map類型相應的SQL模板中包括的Map函數的輸入和輸出;
第一添加單元,用于將生成的與所述Map類型相應的SQL模板中包括的Map函數的from功能的元素,與所述Map類型相應的SQL模板中包括的Map函數的輸入和輸出,分別添加到與所述Map類型相應的SQL模板的相應位置,得到所述SQL。
進一步地,當所述MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,所述第一提取單元包括:
第一提取子單元,用于從所述MapReduce中包括的Map函數的注釋annotate中提取輸入和輸出。
進一步地,當所述MapReduce的函數類型為MapReduce類型時,所述轉換模塊包括:
第二獲取單元,用于獲取所述MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
第二生成單元,用于根據所述輸入定義信息中包括的輸入數據來源,生成與所述MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素;
第二提取單元,用于提取所述MapReduce中包括的Map函數的輸入和輸出;
第二處理單元,用于將所述MapReduce中包括的Map函數的輸入和輸出,分別作為與所述MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出;
第三提取單元,用于提取所述MapReduce中包括的Map函數的鍵值信息、所述MapReduce的分區排序需求信息;
確定單元,用于根據所述MapReduce中包括的Map函數的鍵值信息、所述MapReduce的分區排序需求信息,確定與所述MapReduce類型相應的SQL模板中包括的發布distribute by功能的鍵值、排序sort by功能的鍵值;
第四提取單元,用于提取所述MapReduce中包括的Reduce函數的輸入和輸出;
第三處理單元,用于將所述MapReduce中包括的Reduce函數的輸入和 輸出,分別作為與所述MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出;
第二添加單元,用于將生成的與所述MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素,與所述MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出,與所述MapReduce類型相應的SQL模板中包括的distribute by功能的鍵值、sort by功能的鍵值,與所述MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出,分別添加到與所述MapReduce類型相應的SQL模板的相應位置,得到所述SQL。
進一步地,當所述MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,所述第二提取單元包括:
第二提取子單元,用于從所述MapReduce中包括的Map函數的annotate中提取輸入和輸出;
相應地,所述第四提取單元包括:
第三提取子單元,用于從所述MapReduce中包括的Reduce函數的annotate中提取輸入和輸出。
進一步地,所述裝置還包括:
生成模塊,用于生成與所述SQL對應的UDF適配器,其中,所述UDF適配器用于直接調用所述SQL中的Map函數,或所述SQL中的Map函數和Reduce函數。
與現有技術相比,本申請可以獲得包括以下技術效果:
可以將MapReduce自動轉換成SQL,用戶只需編寫簡單的MapReduce,就可以運行在提供SQL功能的分布式系統上,實現簡單便捷。用戶使用MapReduce編程,可以免去非數據分析的編程人員需要學習SQL的門檻,節約用戶時間,并也可以降低用戶直接使用SQL來表述復雜邏輯的不方便之處。生成與SQL對應的UDF適配器,使得可以在不同的SQL系統上運行。
當然,實施本申請的任一產品必不一定需要同時達到以上所述的所有技術效果。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
圖1是本申請實施例的第一種將MapReduce轉換為SQL的方法流程圖;
圖2是本申請實施例的第二種將MapReduce轉換為SQL的方法流程圖;
圖3是本申請實施例的第三種將MapReduce轉換為SQL的方法流程圖;
圖4是本申請實施例的一種MapReduce示意圖;
圖5是本申請實施例的一種SQL示意圖;
圖6是本申請實施例的第一種將MapReduce轉換為SQL的裝置結構示意圖;
圖7是本申請實施例的第二種將MapReduce轉換為SQL的裝置結構示意圖。
具體實施方式
以下將配合附圖及實施例來詳細說明本申請的實施方式,藉此對本申請如何應用技術手段來解決技術問題并達成技術功效的實現過程能充分理解并據以實施。
在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網絡接口和內存。
內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flashRAM)。內存是計算機可讀介質的示例。
計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限于相變內存 (PRAM)、靜態隨機存取存儲器(SRAM)、動態隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(CD-ROM)、數字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括非暫存電腦可讀媒體(transitory media),如調制的數據信號和載波。
實施例描述
下面以一實施例對本申請方法的實現作進一步說明。如圖1所示,為本申請實施例的一種將MapReduce轉換為SQL的方法流程圖,該方法包括:
S101:獲取用戶通過MapReduce框架輸入的MapReduce。
具體地,MapReduce是一種用于大規模數據并行化運算的編程模型,用戶可以使用函數式編程的思想來表述業務邏輯,只需實現Map(映射)、Reduce(化簡),而不用關心并行化的細節。由于MapReduce編程模型簡單,基本不涉及并行化細節,同時可以完成大部分并行計算需求,所以被廣泛接受。
具體地,MapReduce中可能只包括有Map函數,也可能包括有Map函數和Reduce函數。
S102:解析MapReduce,得到MapReduce的函數類型。
其中,MapReduce的函數類型為只包括有Map函數的Map類型,或同時包括有Map函數和Reduce函數的MapReduce類型。
S103:根據MapReduce的函數類型,查詢得到與函數類型相應的MapReduce與SQL映射關系,以及SQL模板。
具體地,可以根據MapReduce的函數類型,預先設置與函數類型相應的MapReduce與SQL映射關系,以及SQL模板。如預先設置與Map類型相應的MapReduce與SQL映射關系,以及SQL模板;與MapReduce類型相應的MapReduce與SQL映射關系,以及SQL模板。
具體地,對于標準SQL而言,具有選擇select、來自from等重要功能,除此之外,各類SQL方言系統還提供了分布distribute by、排序sort by或者等價功能來完成用戶對輸入數據分區、排序然后來分組的需求。對于MapReduce編程模型而言,則有以下要素:輸入/輸出的定義;Map函數和Reduce函數;分區、排序來達到分組的能力。將MapReduce的各要素與SQL的各個功能一一對應映射,建立相應的對應關系,相應的模板,通過相應的對應關系,相應的模板,將MapReduce自動轉換為SQL。
S104:根據與函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將MapReduce轉換為SQL。
其中,當MapReduce的函數類型為Map類型時,參見圖2,根據與函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將MapReduce轉換為SQL,包括:
S104a1:獲取MapReduce對應的輸入定義信息。
其中,輸入定義信息包括輸入數據來源(如來源于哪個文件中的哪部分數據等),MapReduce中包括的Map函數的存儲地址(出處)等。如果MapReduce中包括Reduce函數,輸入定義信息還包括Reduce函數的存儲地址。
S104a2:根據輸入定義信息中包括的輸入數據來源,生成與Map類型相應的SQL模板中包括的Map函數的from功能的元素。
S104a3:提取MapReduce中包括的Map函數的輸入和輸出。
S104a4:將MapReduce中包括的Map函數的輸入和輸出,分別作為與Map類型相應的SQL模板中包括的Map函數的輸入和輸出;
S104a5:將生成的與Map類型相應的SQL模板中包括的Map函數的from功能的元素,與Map類型相應的SQL模板中包括的Map函數的輸入和輸出,分別添加到與Map類型相應的SQL模板的相應位置,得到SQL。
其中,當MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,提取MapReduce中包括的Map函數的輸入和輸出包括:
從MapReduce中包括的Map函數的注釋annotate中提取輸入和輸出。
其中,當MapReduce的函數類型為MapReduce類型時,參見圖3,根據與函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將MapReduce轉換為SQL,包括:
S104b1:獲取MapReduce對應的輸入定義信息。
其中,輸入定義信息包括輸入數據來源(如來源于哪個文件中的哪部分數據等),MapReduce中包括的Map函數的存儲地址(出處)、Reduce函數的存儲地址等。
S104b2:根據輸入定義信息中包括的輸入數據來源,生成與MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素。
S104b3:提取MapReduce中包括的Map函數的輸入和輸出。
S104b4:將Map函數的輸入和輸出,分別作為與MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出。
S104b5:提取MapReduce中包括的Map函數的鍵值信息、MapReduce的分區排序需求信息。
S104b6:根據MapReduce中包括的Map函數的鍵值信息、MapReduce的分區排序需求信息,確定與MapReduce類型相應的SQL模板中包括的distribute by功能的鍵值、sort by功能的鍵值。
S104b7:提取MapReduce中包括的Reduce函數的輸入和輸出。
S104b8:將MapReduce中包括的Reduce函數的輸入和輸出,分別作為與MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出。
S104b9:將生成的與MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素,與MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出,與MapReduce類型相應的SQL模板中包括的distributeby功能的鍵值、sort by功能的鍵值,與MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出,分別添加到與MapReduce類型相應的SQL模板的相應位置,得到SQL。
其中,當MapReduce中包括的Map函數的輸入和輸出是通過動態方式 定義時,提取MapReduce中包括的Map函數的輸入和輸出,包括:
從MapReduce中包括的Map函數的annotate中提取輸入和輸出;
相應地,提取MapReduce中包括的Reduce函數的輸入和輸出,包括:
從MapReduce中包括的Reduce函數的annotate中提取輸入和輸出。
其中,將MapReduce轉換為SQL之后,還包括:
生成與SQL對應的UDF(User-Defined Function,用戶自定義函數)適配器。
其中,UDF適配器用于直接調用SQL中的Map函數,或SQL中的Map函數和Reduce函數。UDF適配器在同一個SQL系統內變化不大,基本通用,還以通用于對UDF有不同規則定義的SQL系統(主要的業務邏輯則還是依賴于用戶提供的Map函數和Reduce函數),如:Hive、Impala、Presto、tajo、Stinger、Drill等。
本實施例所述的將MapReduce轉換為SQL的方法,可以將MapReduce自動轉換成SQL,用戶只需編寫簡單的MapReduce,就可以運行在提供SQL功能的分布式系統上,實現簡單便捷。用戶使用MapReduce編程,可以免去非數據分析的編程人員需要學習SQL的門檻,節約用戶時間,并也可以降低用戶直接使用SQL來表述復雜邏輯的不方便之處。生成與SQL對應的UDF適配器,使得可以在不同的SQL系統上運行。
為了便于說明,下面以MapReduce的經典示例WordCount(詞頻統計)為例,對本申請方法的實現作進一步說明(以Python語言作為示例),參見圖4,為WordCount的MapReduce(通過Python語言實現)。
從圖4可以看到Map函數(圖中Mapper部分)和Reduce函數(圖中Reducer部分)這兩個用戶定義函數,以及注釋annotate,annotate包括它所標記的每個函數輸入(箭頭左邊)、輸出(箭頭右邊)的個數和類型。
假設輸入數據來源是words表、列名是word,上述函數定義存儲在文件wc.py中,則輸入定義信息可以通過提供如下參數的形式實現:
--input“words(word)”#表明輸入是words表的word列
--mapper wc.mapper#表明函數對應關系和出處
--reducer wc.reducer#表明函數對應關系和出處
通過與MapReduce類型相應的MapReduce與SQL映射關系,以及SQL模板,自動生成如圖5所示的SQL,圖5方框中的內容是根據不同Map和Reduce定義函數和輸入輸出而生成的可替換的參數,方框外的數字標記表示轉換順序,結合圖5,說明一下MapReduce和SQL的轉換過程:
SQL最內層的from功能子句:①--select word from words,由用戶提供的輸入表名(words)和列名(word)決定,即本MapReduce輸入。
SQL次內層SQL的mapper輸入(in_0)②和輸出(key_0,value_0)③即對應到圖4中的用戶mapper輸入和輸出。對用戶mapper輸入,in_0即原始輸入表words中的word;對mapper輸出,默認設定第一個列為key(在這個例子里是key_0),剩余組成value(在這個例子里是value_0)。如果需要表示有多個列組成key,可以在annotate上加括號標注。key的作用在下面將會體現。
SQL再往外一層:④,最關鍵的是distribute by/sort by的鍵值,在這個詞頻統計的例子里是key_0,默認對應于用戶mapper的輸出的第一個值。通過識別annotate的標識,確認key所包含列的個數以及分區和排序的需求,從而填補到distribute by/sort by的模板處。如果分區和排序的值不同,比如要做二次排序時,也可以通過annotate分組標記來完成分發和排序是不同列的功能。
SQL最外層,reducer輸入(key_0,value_0)⑤和輸出(out_0,out_1)⑥的對應關系和圖4中的用戶reducer annotate標識的輸入和輸出參數一樣,輸出的對應關系也一樣,但輸入的參數含義有很大區別。SQL的輸入表面上是key_0,value_0一一對應,但在用戶reducer函數里,相同的key_0被做了分組,然后組內的所有value_0則被集合成了一個列表(list),可以從圖41reducer annotate的輸入看出。
在該實施例中MapReduce通過Python語言實現,由于Python語言對函數輸入輸出的動態定義特性,所以通過annotate來輔助提供輸入輸出的信息,如果MapReduce通過Java語言等靜態語言實現,則函數定義本身就明確了 輸入輸出,則不需要通過annotate來輔助提供輸入輸出的信息。
如圖6所示,是本申請實施例的一種將MapReduce轉換為SQL的裝置結構圖,該裝置包括:
獲取模塊201,用于獲取用戶通過MapReduce框架輸入的映射化簡MapReduce;
解析模塊202,用于解析MapReduce,得到MapReduce的函數類型;其中,MapReduce的函數類型為只包括有映射Map函數的Map類型,或同時包括有Map函數和化簡Reduce函數的MapReduce類型;
查詢模塊203,用于根據MapReduce的函數類型,查詢得到與函數類型相應的MapReduce與結構化查詢語言SQL映射關系,以及SQL模板;
轉換模塊204,用于根據與函數類型相應的MapReduce與SQL映射關系,以及SQL模板,將MapReduce轉換為SQL。
優選地,當MapReduce的函數類型為Map類型時,轉換模塊204包括:
第一獲取單元,用于獲取MapReduce對應的輸入定義信息;其中,所述輸入定義信息包括輸入數據來源;
第一生成單元,用于根據輸入定義信息中包括的輸入數據來源,生成與Map類型相應的SQL模板中包括的Map函數的來自from功能的元素;
第一提取單元,用于提取MapReduce中包括的Map函數的輸入和輸出;
第一處理單元,用于將MapReduce中包括的Map函數的輸入和輸出,分別作為與Map類型相應的SQL模板中包括的Map函數的輸入和輸出;
第一添加單元,用于將生成的與Map類型相應的SQL模板中包括的Map函數的from功能的元素,與Map類型相應的SQL模板中包括的Map函數的輸入和輸出,分別添加到與Map類型相應的SQL模板的相應位置,得到SQL。
優選地,當MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,第一提取單元包括:
第一提取子單元,用于從MapReduce中包括的Map函數的注釋annotate中提取輸入和輸出。
優選地,當MapReduce的函數類型為MapReduce類型時,轉換模塊204包括:
第二獲取單元,用于獲取MapReduce對應的輸入定義信息;其中,輸入定義信息包括輸入數據來源;
第二生成單元,用于根據輸入定義信息中包括的輸入數據來源,生成與MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素;
第二提取單元,用于提取MapReduce中包括的Map函數的輸入和輸出;
第二處理單元,用于將MapReduce中包括的Map函數的輸入和輸出,分別作為與MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出;
第三提取單元,用于提取MapReduce中包括的Map函數的鍵值信息、MapReduce的分區排序需求信息;
確定單元,用于根據MapReduce中包括的Map函數的鍵值信息、MapReduce的分區排序需求信息,確定與MapReduce類型相應的SQL模板中包括的發布distribute by功能的鍵值、排序sort by功能的鍵值;
第四提取單元,用于提取MapReduce中包括的Reduce函數的輸入和輸出;
第三處理單元,用于將MapReduce中包括的Reduce函數的輸入和輸出,分別作為與MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出;
第二添加單元,用于將生成的與MapReduce類型相應的SQL模板中包括的Map函數的from功能的元素,與MapReduce類型相應的SQL模板中包括的Map函數的輸入和輸出,與MapReduce類型相應的SQL模板中包括的distribute by功能的鍵值、sort by功能的鍵值,與MapReduce類型相應的SQL模板中包括的Reduce函數的輸入和輸出,分別添加到與MapReduce類型相應的SQL模板的相應位置,得到SQL。
優選地,當MapReduce中包括的Map函數的輸入和輸出是通過動態方式定義時,第二提取單元包括:
第二提取子單元,用于從MapReduce中包括的Map函數的annotate中提取輸入和輸出;
相應地,第四提取單元包括:
第三提取子單元,用于從MapReduce中包括的Reduce函數的annotate中提取輸入和輸出。
優選地,圖7,該裝置還包括:
生成模塊205,用于生成與SQL對應的UDF適配器,其中,UDF適配器用于直接調用SQL中的Map函數,或SQL中的Map函數和Reduce函數。
本實施例所述的將MapReduce轉換為SQL的裝置,可以將MapReduce自動轉換成SQL,用戶只需編寫簡單的MapReduce,就可以運行在提供SQL功能的分布式系統上,實現簡單便捷。用戶使用MapReduce編程,可以免去非數據分析的編程人員需要學習SQL的門檻,節約用戶時間,并也可以降低用戶直接使用SQL來表述復雜邏輯的不方便之處。生成與SQL對應的UDF適配器,使得可以在不同的SQL系統上運行。
所述裝置與前述的方法流程描述對應,不足之處參考上述方法流程的敘述,不再一一贅述。
上述說明示出并描述了本申請的若干優選實施例,但如前所述,應當理解本申請并非局限于本文所披露的形式,不應看作是對其他實施例的排除,而可用于各種其他組合、修改和環境,并能夠在本文所述發明構想范圍內,通過上述教導或相關領域的技術或知識進行改動。而本領域人員所進行的改動和變化不脫離本申請的精神和范圍,則都應在本申請所附權利要求的保護范圍內。

關 鍵 詞:
一種 MAPREDUCE 轉換 SQL 方法 裝置
  專利查詢網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:一種將MAPREDUCE轉換為SQL的方法和裝置.pdf
鏈接地址:http://www.rgyfuv.icu/p-6381532.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服客服 - 聯系我們

[email protected] 2017-2018 zhuanlichaxun.net網站版權所有
經營許可證編號:粵ICP備17046363號-1 
 


收起
展開
山东11选5中奖结果走势图