您好,登錄后才能下訂單哦!
這篇文章主要介紹“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>
免責聲明:本站發(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)容。