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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...