sqoop面試題

来源:https://www.cnblogs.com/flyer-ovo/archive/2022/11/28/16933508.html
-Advertisement-
Play Games

Sqoop面試題答案 Sqoop 在工作中的定位是會用就行 Q1:Sqoop導入hdfs的參數 /opt/module/sqoop/bin/sqoop import \--connect \ # 特殊的jdbc連接的字元串--username \--password \--target-dir \ ...


Sqoop面試題答案

 

Sqoop 在工作中的定位是會用就行

 

Q1:Sqoop導入hdfs的參數

/opt/module/sqoop/bin/sqoop import \
--connect \ # 特殊的jdbc連接的字元串
--username \
--password \
--target-dir \  # hdfs目標的目錄
--delete-target-dir \ # 導入的目標目錄如果存在則刪除那個目錄
--num-mappers \   #相當於 -m ,並行導入時map task的個數
--fields-terminated-by   \
--query "$2"  ' and $CONDITIONS;' # 指定滿足sql和條件的數據導入

 

Q2:Sqoop導入hive時的參數

一步將表結構和數據都導入到hive中

bin/sqoop import \
--connect jdbc的url字元串 \
--table mysql中的表名\
--username 賬號 \
--password 密碼\
--hive-import \
--m mapTask的個數\
--hive-database hive中的資料庫名;

 

Q3: RDBMS的增量數據導入

--check-column 欄位名 \  #指定判斷檢查的依據欄位
--incremental 導入模式\  # 用來指定增量導入的模式(Mode),append和lastmodified
--last-value 上一次導入結束的時間\
--m mapTask的個數 \
--merge-key 主鍵

補充: ·如果使用merge-key合併模式 如果是新增的數據則增加,因為incremental是lastmodified模式,那麼當有數據更新了,而主鍵沒有變,則會進行合併。 ·--check-column欄位當數據更新和修改這個欄位的時間也要隨之變化,mysql中建表時該欄位修飾符,欄位名timestamp default current_timestamp on update current_timestamp

 

Q4: Sqoop Null一致性問題

Hive中的Null在底層是以“\N”來存儲,而MySQL中的Null在底層就是Null,為了保證數據兩端的一致性,轉化的過程中遇到null-string,null-non-string數據都轉化成指定的類型,通常指定成"\N"。在導出數據時採用–input-null-string “\N” --input-null-non-string “\N” 兩個參數。導入數據時採用–null-string “\N” --null-non-string “\N”。

 

Q5:Sqoop數據導出一致性

1)場景1:如Sqoop在導出到Mysql時,使用4個Map任務,過程中有2個任務失敗,那此時MySQL中存儲了另外兩個Map任務導入的數據,此時老闆正好看到了這個報表數據。而開發工程師發現任務失敗後,會調試問題並最終將全部數據正確的導入MySQL,那後面老闆再次看報表數據,發現本次看到的數據與之前的不一致,這在生產環境是不允許的。

使用—staging-table選項,將hdfs中的數據先導入到輔助表中,當hdfs中的數據導出成功後,輔助表中的數據在一個事務中導出到目標表中(也就是說這個過程要不完全成功,要不完全失敗)。

為了能夠使用staging這個選項,staging表在運行任務前或者是空的,要不就使用—clear-staging-table配置,如果staging表中有數據,並且使用了—clear-staging-table選項,sqoop執行導出任務前會刪除staging表中所有的數據。

註意:–direct導入時staging方式是不可用的,使用了—update-key選項時staging方式也不能用。

sqoop export \
--connect url \
--username root \
--password 123456 \
--table app_cource_study_report \
--columns watch_video_cnt,complete_video_cnt,dt \
--fields-terminated-by "\t" \
--export-dir "/user/hive/warehouse/tmp.db/app_cource_study_analysi_${day}" \
--staging-table app_cource_study_report_tmp \
--clear-staging-table \
--input-null-string '\\N' \
--null-non-string "\\N"

2)場景2:設置map數量為1個(不推薦,面試官想要的答案不只這個)

多個Map任務時,採用–staging-table方式,仍然可以解決數據一致性問題。

 

Q6:Sqoop底層運行的是什麼

只有Map階段,沒有Reduce階段的任務。

 

Q7:Map task並行度設置大於1

並行度導入數據的 時候 需要指定根據哪個欄位進行切分 該欄位通常是主鍵或者是自增長不重覆的數值類型欄位,否則會報下麵的錯誤。

Import failed: No primary key could be found for table. Please specify one with --split-by or perform a sequential import with ‘-m 1’.

那麼就是說當map task並行度大於1時,下麵兩個參數要同時使用

–split-by id 指定根據id欄位進行切分

–m n 指定map並行度n個

 

Q8:Sqoop導出一次多長時間

每天晚上00:30開始執行,Sqoop任務一般情況40 -50分鐘的都有。取決於數據量(11:11,6:18等活動在1個小時左右)

Q9:Sqoop一天導入多少數據

100萬日活=》 10萬訂單,1人10條,每天1g左右業務數據。Sqoop每天將1G的數據量導入到數倉。

 

Q10: Sqoop導入 數據傾斜

https://blog.csdn.net/lizhiguo18/article/details/103969906

Sqoop抽數的並行化主要涉及到兩個參數:num-mappers:啟動N個map來並行導入數據,分成4個;拆分為:按照併列來切分表的工作單元。

通過ROWNUM()生成一個嚴格的均勻分佈的細分,然後指定為分割分段

 

Q11:Sqoop數據導出Parquet

數據用Sqoop往MySql中導入數據的時候,如果用了orc(Parquet)不能導入,需轉化成文本格式

(1)創建臨時表,把Parquet中表數據導入到臨時表,把臨時表轉換到目標表用於可視化

(2)Sqoop裡面有參數,可以直接把Parquet轉換為text

(3)建表的時候就不要建Parquet表

 

Q12:Sqoop是什麼

Sqoop-“SQL to Hadoop and Hadoop to SQL”(翻譯:從SQL到Hadoop和從Hadoop到SQL)Apache Sqoop是一種有效的hadoop工具,用於將數據從RDBMS(如MySQL,Oracle等)導入到HBase,Hive或HDFS中。 Sqoop hadoop還可以用於將數據從HDFS導出到RDBMS。 Apache Sqoop是一個命令行解釋器,即Sqoop命令一次由解釋器執行。

 

Q13:Sqoop的不同功能/特性

下麵是Sqoop支持的功能列表: 滿載和增量載入;數據壓縮技術;導入SQL查詢結果;所有主要資料庫的數據連接器;直接將數據載入支持到Hadoop文件系統中;安全配置,例如Kerberos;併發導入或導出功能;

 

Q14:列舉一些Sqoop導入命令

導入控制命令用於導入RDBMS數據

Append:將數據追加到HDFS中的現有數據集。 Columns:要從表中導入的列。 Where:在導入期間使用的where子句。

Q15:Sqoop如何處理大對象

常見的大型對象是Blog和Clob,假設對象小於16 MB,則與其餘數據一起內聯存儲。 如果有大對象,則將它們臨時存儲在名為_lob的子目錄中。 這些數據然後在存儲器中實現以進行處理。 如果我們將lob limit設為零(0),則它將存儲在外部存儲器中。

 

Q16:Sqoop導入BLOB和CLOB

對於CLOB和BLOB對象,Sqoop不支持直接導入功能。 因此,如果必須導入大型對象,則可以使用基於JDBC的導入。 無需引入import實用程式的直接參數即可完成此操作。

 

Q17:Sqoop導入預設文件格式

Sqoop允許使用兩種文件格式導入數據。它們如下: 分隔文本文件格式序列文件格式 分隔文本文件格式:這是使用Sqoop導入數據的預設文件格式。 可以使用Sqoop中import命令的–as-textfile參數明確指定此文件格式。 將其作為參數傳遞給命令將在輸出文件中產生所有記錄的基於字元串的表示形式,併在行和列之間使用定界字元。 序列文件格式:這是一種二進位文件格式,其中記錄以特定於記錄的定製數據類型存儲,這些數據類型顯示為Java類。 Sqoop自動創建這些數據類型並將其顯示為java類。

 

Q18:Sqoop工作原理

下圖顯示了Sqoop的工作流程:

Sqoop工作原理

Sqoop導入

導入工具將單個表從RDBMS導入到HDFS。 表中的每一行都被視為HDFS中的一條記錄。 所有記錄都作為文本數據存儲在文本文件中,或者作為二進位數據存儲在Avro和Sequence文件中。

Sqoop導出

導出工具將一組文件從HDFS導出回RDBMS。 作為Sqoop輸入的文件包含記錄,這些記錄稱為表中的行。 讀取這些記錄並將它們解析為一組記錄,並使用用戶指定的定界符定界。

 

Q19:Sqoop的前提條件

需要基本的核心Java知識,SQL的資料庫概念,Hadoop文件系統以及任何Linux操作系統版本。

Q20:Sqoop導入使用語法

以下語法用於Sqoop導入:

$ sqoop import (generic-args) (import-args) Shell

Q21:Sqoop導出使用什麼語法

以下語法用於Sqoop導出:

$ sqoop export (generic-args) (export-args) Shell

Q22:Sqoop支持關係資料庫

Sqoop當前支持的關係資料庫有:

MySQLPostgreSQLOracleMSSQLTeradataIBM的Netezza作為關係資料庫的一部分。 Sqoop使用MySQL作為預設資料庫。

 

Q23:Sqoop支持Hadoop資源

當前支持的Hadoop生態系統目標服務是:

HDFC Hive HBase H Catalog Accumulo

Q24:Sqoop的主要功能

Sqoop有4個主要關鍵功能:

批量導入:Sqoop可以將單個表或整個資料庫導入HDFS。 數據存儲在HDFS文件系統的本機目錄和文件中。

直接輸入:Sqoop可以將SQL(關係)資料庫直接導入和映射到Hive和HBase。

數據交互:Sqoop可以生成Java類,以便您可以通過編程方式與數據進行交互。

數據導出:Sqoop可以使用基於目標資料庫詳細信息的目標表定義將數據直接從HDFS導出到關係資料庫中。

 

Q25:JDBC在Sqoop中的作用

要連接到不同的關係資料庫,sqoop需要一個連接器。 幾乎每個資料庫供應商都可以將該連接器用作特定於該資料庫的JDBC驅動程式。 因此,Sqoop需要與之交互的每個資料庫的JDBC驅動程式。

 

Q26:JDBC能將sqoop連資料庫

不能。Sqoop同時需要JDBC和連接器才能連接到資料庫。

Q27:target和warehouse使用

要在HDFS中指定特定目錄,請使用–target-dir,但要指定所有sqoop作業的父目錄,請使用–warehouse-dir。 在這種情況下,sqoop將在父目錄下創建一個與表同名的目錄。

Q28:Sqoop預設資料庫

有,MySQL是預設資料庫。

 

Q29:Sqoop列出表的所有列

與sqoop-list-tables和sqoop-list-databases不同,沒有像sqoop-list-columns這樣的直接命令來列出所有列。 實現此目的的間接方法是檢索所需表的列並將其重定向到一個文件,該文件可以手動查看,其中包含特定表的列名。

Sqoop import \
–m 1
–connect ‘jdbc: sqlserver: //nameofmyserver; database=nameofmydatabase; username=DeZyre; password=mypassword’ \
–query “SELECT column_name, DATA_TYPE FROM INFORMATION_SCHEMA.Columns WHERE table_name=’mytableofinterest’ AND \$CONDITIONS” \
–target-dir ‘mytableofinterest_column_name’

 

Q30:從特定的行或列導入數據

Sqoop允許根據where子句從數據表中導出和導入數據。 語法是: –columns –where –query 示例:

sqoop import –connect jdbc:mysql://db.one.com/corp –table INTELLIPAAT_EMP –where “start_date> ’2016-07-20’ ” sqoopeval –connect jdbc:mysql://db.test.com/corp –query “SELECT * FROM intellip...

 

Q31: import命令的目標類型

Sqoop支持將數據導入以下服務:

HDFS

Hive

Hbase

Hcatalog

Accumulo

Q32:target和warehouse

Warehouse-dir指向要導入數據的Hive文件夾(在批量導入表時使用),而通過查詢導入到Hive(sqoop錯誤要求)時,需要–target-dir。在後一種情況下,它用作映射器的臨時區域,後跟LOAD INPATH。(要麼)即 我們使用–target-dir在HDFS中指定特定目錄。 而我們使用–warehouse-dir指定所有sqoop作業的父目錄。 因此,在這種情況下,sqoop將在父目錄下創建一個與表同名的目錄。

Q33:Sqoop中的distcp類

distCP(Hadoop中的分散式副本)和Sqoop都並行傳輸數據,但是唯一的區別是distCP命令可以將任何類型的數據從一個Hadoop群集傳輸到另一個Hadoop群集,而Sqoop則在RDBMS和Hadoop生態系統中的其他組件(例如HBase, Hive, HDFS等)之間傳輸。

Q34:Sqoop在Java程式

可以通過在類路徑中包含sqoop jar並調用Sqoop.runTool()方法,從Java代碼內部運行sqoop。 就像命令行一樣,必須以編程方式為Sqoop創建必要的參數。

 

Q35:Sqoop存在的所有表

使用Sqoop檢查單個資料庫中存在的所有表的列表的命令如下-

Sqoop list-tables –connect jdbc: mysql: //localhost/user;

 

Q36:sqoop全部載入

根據Sqoop用戶指南,為了對RDMS執行all-or-nothing載入,可以使用登臺表。 然後,只有在臨時載入成功後,才將其載入到最終目標表中。 但是,此選項似乎僅在出口中可用。 當執行從HDServer的導入(從SQLServer導入)時,選項–staging-table不存在。

 

Q37:防止import中密碼

-P選項從標準輸入中詢問密碼而不回顯,而–password-file選項讀取存儲在其他文件中的密碼值。

 

Q38:Sqoop使用什麼壓縮

Sqoop沒有任何內置代碼來執行文件壓縮。 它依賴Hadoop的壓縮設置。

 

Q39:使用Oozie安排Sqoop

Oozie具有內置的sqoop動作,我們可以在其中提及要執行的sqoop命令。

 

Q40:不使用where子句

我們可以在資料庫上運行過濾查詢,並將結果保存到資料庫中的臨時表中。

然後,使用sqoop import命令而不使用–where子句。

 

Q41:compress參數

使用–compress參數從sqoop導入生成的文件的預設擴展名是:.gz

 

Q42:password-file好處

-password-file選項可在sqoop腳本內使用,而-P選項可從標準輸入中讀取,從而防止自動化。

 

Q43:表HDFS數據同步

將導出的表與刪除了某些行的HDFS數據同步:截斷目標表並再次載入它。

 

Q44:在Sqoop輸入自由格式

Sqoop可以使用任何SQL查詢而不是僅使用表名和列名以及參數從關係資料庫中導入數據。

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、什麼是MQTT? MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基於發佈/訂閱(publish/subscribe)模式的"輕量級"通訊協議,該協議構建於TCP/IP協議上,由IBM在1999年發佈。MQTT最大優點在於,可以以極 ...
  • 問題: Win7下在嘗試搭建簡單http伺服器的時候,執行httpListener.Start();報錯HttpListener拒絕訪問異常 代碼如下: HttpListener httpListener = new HttpListener();//創建伺服器監聽 httpListener.Pre ...
  • 簡介 本文的初衷是希望幫助那些有其它平臺視覺演算法開發經驗的人能快速轉入Halcon平臺下,通過文中的示例開發者能快速瞭解一個Halcon項目開發的基本步驟,讓開發者能把精力完全集中到演算法的開發上面。 首先,你需要安裝Halcon,HALCON 18.11.0.1的安裝包會放在文章末尾。安裝包分開發和 ...
  • 進程信號介紹: 操作系統通過信號來通知進程系統中發生了某種預先規定好的事件(一組事件中的一個),它也是用戶進程之間通信和同步的一種原始機制。一個鍵盤中斷或者一個錯誤條件(比如進程試圖訪問它的虛擬記憶體中不存在的位置等)都有可能產生一個信號。Shell也使用信號向它的子進程發送作業控制信號 簡易來說,信 ...
  • 對於提供了MMU(存儲管理器,輔助操作系統進行記憶體管理,提供虛實地址轉換等硬體支持)的處理器而言,Linux提供了複雜的存儲管理系統,使得進程所能訪問的記憶體達到4GB。 進程的4GB記憶體空間被人為的分為兩個部分--用戶空間與內核空間。用戶空間地址分佈從0到3GB(PAGE_OFFSET,在0x86中 ...
  • 一、阻塞和非阻塞簡介 當應用程式對設備驅動進行操作的時候,如果不能獲取到設備資源,那麼阻塞式 IO 就會將應用程式對應的線程掛起,直到設備資源可以獲取為止。對於非阻塞 IO,應用程式對應的線程不會掛起,它要麼一直輪詢等待,直到設備資源可以使用,要麼就直接放棄。 二、阻塞訪問(等待隊列) 阻塞訪問最大 ...
  • 我們拿到一臺新的雲伺服器之後, 應該如何設置, 使伺服器更適合自己使用? 本文將以 CentOS7 為例, 介紹如何設置新伺服器. ...
  • 多表查詢的兩種方法 方式1:連表操作 語法: select * from (表1) inner\right\left\union join (表2) on (拼接條件) inner join 內連接 select * from emp inner join dep on emp.dep_id=dep ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...