溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sqoop內(nèi)部結(jié)構(gòu)是怎樣的

發(fā)布時間:2021-12-22 17:30:21 來源:億速云 閱讀:104 作者:iii 欄目:云計算

這篇文章主要介紹“sqoop內(nèi)部結(jié)構(gòu)是怎樣的”,在日常操作中,相信很多人在sqoop內(nèi)部結(jié)構(gòu)是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”sqoop內(nèi)部結(jié)構(gòu)是怎樣的”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.1  Sqoop內(nèi)部結(jié)構(gòu)

Sqoop程序是由的主類com.cloudera.sqoop.Sqoop驅(qū)動。有限數(shù)量的額外的類在同一個包:SqoopOptions (如前所述),ConnFactory(即熟練操作ManagerFactory實例)。

1.1.1    一般程序流程

一般的程序流程如下:

com.cloudera.sqoop.Sqoop是主類和實現(xiàn)了Tool,一個新的實例ToolRunner被推出,Sqoop的第一個參數(shù)是一個字符串,并在SqoopTool中定義并執(zhí)行,SqoopTool來執(zhí)行用戶的各種請求操作(如: import, export, codegen等)。

SqoopTool將解析其余的參數(shù),設置相應的字段在SqoopOptions類,然后執(zhí)行。

在SqoopTool 的run()方法中,import 、export或者其他正確的指令被執(zhí)行。一般情況下ConnManager一般在SqoopOptions數(shù)據(jù)的基礎上進行實例化。ConnFactory被用于從ManagerFactory中獲取一個ConnManager。這在前面的部分已經(jīng)進行了描述。Imports 、 exports或者其他大型數(shù)據(jù)的遷移操作通常是一個并行的、可靠的MapReduce任務。Import操作并不是一定要以MapReduce作業(yè)的方式運行,ConnManager.importTable()將確定如何以最佳的方式進行import操作。每一個主要操作實際上都有ConnMananger控制,除了生成代碼的操作,這些操作是由CompilationManager和ClassWriter做的(都在 com.cloudera.sqoop.orm 包中)。導入數(shù)據(jù)到Hive的操作是由com.cloudera.sqoop.hive.HiveImport的importTable()完成的,這樣做是為了不為使用ConnManager的實現(xiàn)都擔心。

ConnManager 的 importTable()方法接收一個類型為ImportJobContext的參數(shù),其中包含這個方法所需的各種參數(shù)值。將來,該類可擴展附加參數(shù),以實現(xiàn)功能更加強大的import操作。同樣, exportTable()方法接收的參數(shù)類型ExportJobContext。這些類包含一系列導入/導出,指向SqoopOptions對象,以及其他相關(guān)的數(shù)據(jù)。

1.1.2    子包

com.cloudera.sqoop包中的子包,包括:

※  Hive:便于數(shù)據(jù)導入到Hive

※  IO: 實現(xiàn)的java.io. *接口

※  Lib: 外部公共API(如前所述)

※  Manager: ConnManager和ManagerFactory的接口和它們的實現(xiàn)

※  Mapreduce: 新的(0.20 +)MapReduce的API接口的類

※  Orm: 代碼自動生成

※  Tool: 實現(xiàn)SqoopTool

※  Util: 各種實用工具類

IO包中的OutputStream和BufferedWriter的實現(xiàn)被用于直接向HDFS進行寫入。SplittableBufferedWriter允許為客戶端打開一個單一的BufferedWriter,在引擎之下,當達到目標值后連續(xù)的寫入文件系統(tǒng)。這允許在Sqoopimport的同時使用壓縮機制(如gzip),同時允許在MapR任務之后對數(shù)據(jù)集進行分割。大對象文件存儲系統(tǒng)的代碼也存在于IO包中。

Mapreduce包中的代碼用于直接與Hadoop MapReduce做接口,將在下一章節(jié)中詳述。

ORM包中的代碼用于生產(chǎn)代碼。它依賴于提供了com.sun.tools.javac包的JDK的tools.jar包。

UTIL包中包含用于整個Sqoop的各種工具

※  ClassLoaderStack:管理由當前線程的堆棧使用的ClassLoader的實例,這正是當以本地模式運行MapReduce任務時自動生成代碼寫入當心線程的原理。

※  DirectImportUtils:包含一些直接進行Hadoop import操作的方便方法。

※  Executor:啟動外部進程,并連接這些來生成由一個AsyncSink(見下面更詳細地)的流處理程序。

※  ExportException:當exports失敗時由ConnManagers拋出異常。

※  ImportException:當import失敗時由ConnManagers拋出異常。

※  JDBCURL:處理連接字符串的解析,這是類URL,是不規(guī)范的、不合格的。

※  PerfCounters:被用來估計用于顯示給用戶的傳輸速率。

※  ResultSetPrinter:漂亮地打印結(jié)果集。

在不同的時候,Sqoop從外部程序中讀取stdout,最簡單的模式就是由LocalMySQLManager和DirectPostgresqlManager執(zhí)行的直接模式 (direct-mode)import。之后由Runtime.exec()產(chǎn)生一個進程,該進程的標準輸出(Process.getInputStream())和潛在錯誤(Process.getErrorStream())都需要被處理。在這些流之間無法讀取更多的數(shù)據(jù)從而導致在寫入更多數(shù)據(jù)之前外部進程阻塞。因此,這些都必須處理,最好以異步的方式。

按照Sqoop的說法,“異步接收器”是一個線程需要一個InputStream和讀取完成。這些實現(xiàn)AsyncSink實現(xiàn)。com.cloudera.sqoop.util.AsyncSink抽象類定義了這家工廠必須執(zhí)行的操作。processStream()將產(chǎn)生另一個線程立即開始處理從InputStream中讀取的數(shù)據(jù)參數(shù); 它必須讀這流來完成的。 join()方法允許外部線程等待,直到處理完成。

一些"stock"被同步實現(xiàn):LoggingAsyncSink將重復InputStream上的一切在log4j INFO語句中。NullAsyncSink消耗所有的輸入和什么都不做。

各種ConnManagers使得外部進程以內(nèi)部類的方式擁有它們自己的AsyncSink實現(xiàn),它們通過數(shù)據(jù)庫tools讀取,并且促使數(shù)據(jù)流向HDFS,有可能在此期間進行格式轉(zhuǎn)換。

1.1.3    與MapReduce的接口

Sqoop調(diào)度MapReduce作業(yè)產(chǎn)生imports和exports。配置和執(zhí)行的MapReduce工作如下幾個共同的步驟(配置InputFormat配置OutputFormat設置映射的實施;等等)。這些步驟是在com.cloudera.sqoop.mapreduce.JobBase類中的。為了使用,JobBase允許一個用戶來指定InputFormat,OutputFormat,和映射器。

JobBase本身就是ImportJobBase和ExportJobBase的子集,為特定的配置步驟提供更好的支持,分別由ImportJobBase和ExportJobBase的子類。 ,ImportJobBase.runImport()將調(diào)用的配置步驟,并運行一個工作表導入HDFS。


到此,關(guān)于“sqoop內(nèi)部結(jié)構(gòu)是怎樣的”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI