Sqoop 面試問題



尊敬的讀者們,這些 **Sqoop 面試問題** 是專門為了讓您熟悉在 Sqoop 相關面試中可能遇到的問題型別而設計的。根據我的經驗,優秀的 interviewers 很少會提前計劃好要問哪些具體問題,通常問題會從該主題的一些基本概念開始,然後根據後續討論和您的回答繼續深入。

為了連線不同的關係型資料庫,Sqoop 需要一個聯結器。幾乎每個資料庫廠商都會提供一個特定於該資料庫的 JDBC 驅動程式作為聯結器。因此,Sqoop 需要與之互動的每個資料庫的 JDBC 驅動程式。

不。Sqoop 需要 JDBC 驅動程式和聯結器才能連線到資料庫。

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

透過在 sqoop import 語句中使用 WHERE 子句,我們可以只匯入一部分行。

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

然後使用 sqoop import 命令,無需使用 --where 子句。

--password-file 選項可以在 Sqoop 指令碼中使用,而 -P 選項從標準輸入讀取,阻止自動化。

.gz

為了使 Sqoop import 的輸出檔案採用 .gz 之外的其他格式,例如 .bz2,我們使用 --compress-codec 引數。

資料庫使用的支援更快載入的原生實用程式不適用於 SequenceFile 等二進位制資料格式。

引數 --num-mappers 用於控制 Sqoop 命令執行的 Mapper 數量。我們應該從選擇少量 Map 任務開始,然後逐步擴充套件,因為最初選擇大量 Mapper 可能會降低資料庫端的效能。

使用命令

sqoop import-all-tables

--connect

--username

--password

--exclude-tables table1,table2 ..

這將匯入除 --exclude-tables 子句中提到的表之外的所有表。

Sqoop 有兩種方法。

a - 使用 --incremental 引數和 append 選項,檢查某些列的值,只有在修改值的情況下,才將該行作為新行匯入。

b - 使用 --incremental 引數和 lastmodified 選項,檢查源中日期列中自上次匯入後已更新的記錄。

Sqoop 中的選項檔案用於在一個檔案中指定命令列值,並在 Sqoop 命令中使用它。

例如,--connect 引數的值和 --username 值可以儲存在一個檔案中,並在不同的 Sqoop 命令中重複使用。

是的,我們可以使用 --exec 選項在執行時向儲存的作業新增引數。

sqoop job --exec jobname -- --newparameter

透過使用 --query 引數代替 --table 引數,我們可以指定一個 SQL 查詢。查詢的結果將被匯入。

使用 --split-by 引數,我們指定列名,Sqoop 將根據該列名將要匯入的資料分成多個塊,以並行執行。

透過使用 --mapreduce-job-name 引數。以下是命令示例。

sqoop import \
--connect jdbc:mysql://mysql.example.com/sqoop \
--username sqoop \
--password sqoop \
--query 'SELECT normcities.id, \
countries.country, \
normcities.city \
FROM normcities \
JOIN countries USING(country_id) \
WHERE $CONDITIONS' \
--split-by id \
--target-dir cities \
--mapreduce-job-name normcities

我們可以使用 --boundary-query 引數,在其中指定列的最小值和最大值,根據該值可以將資料分成多個 MapReduce 任務。這使其速度更快,因為 --boundary-query 引數內的查詢會先執行,並且作業會在執行主查詢之前準備好有關要建立多少個 MapReduce 任務的資訊。

引數“sqoop.export.records.per.statement”指定每個 INSERT 語句中將使用的記錄數。

但是引數“sqoop.export.statements.per.transaction”指定在事務期間可以並行處理多少個 INSERT 語句。

使用 staging-table 選項,我們首先將資料載入到暫存表中,然後只有在暫存載入成功後才將其載入到最終目標表中。

透過指定 --clear-staging-table 選項,我們可以在載入之前清除暫存表。這可以重複進行,直到我們在暫存表中獲得正確的資料。

引數 --update-key 可用於更新現有行。其中,使用逗號分隔的列列表唯一標識一行。所有這些列都將用於生成的 UPDATE 查詢的 WHERE 子句中。所有其他表列都將用於查詢的 SET 部分中。

截斷目標表並重新載入。

透過使用 --columns 引數,我們可以在其中將所需的列名作為逗號分隔的值列表。

透過使用 --input-null-string 引數,我們可以指定一個預設值,這將允許將行插入到目標表中。

Oozie 在內建的 Sqoop 操作中,我們可以提及要執行的 Sqoop 命令。

一些匯入的記錄在所有列中可能都具有空值。由於 HBase 不允許在一行中出現所有空值,因此這些行將被丟棄。

$ sqoop list-databases --connect jdbc:mysql://database.example.com/

Sqoop 可以使用任何 SQL 查詢從關係資料庫匯入資料,而不僅僅是使用表和列名引數。

透過在 import 命令中使用 --m 1 子句,Sqoop 只建立一個 MapReduce 任務,該任務將順序匯入行。

MapReduce 叢集配置為執行 4 個並行任務。因此,Sqoop 命令必須具有小於或等於 MapReduce 叢集的並行任務數。

--split-by 子句提到列名,根據該列名的值,資料將被分成多個記錄組。這些記錄組將由 MapReduce 任務並行讀取。

它將資料從資料庫匯入到位於 /dest 目錄中的名為 foo 的 HDFS 檔案中。

使用 --append 引數,Sqoop 將資料匯入到臨時目錄,然後以不會與該目錄中現有檔名衝突的方式將檔案重新命名到普通目標目錄。

透過使用 --map-column-java 屬性,我們可以配置之間的對映。

以下是一個示例

$ sqoop import ... --map-column-java id = String, value = Integer

透過使用`lastmodified`模式。如果檢查列中包含的時間戳比使用`--last-value`指定的時間戳新,則匯入相應的行。

分隔文字檔案和Sequence檔案。

$ sqoop import --connect jdbc:mysql://host/dbname --table EMPLOYEES \
   --columns "employee_id,first_name,last_name" 
$ sqoop import --connect jdbc:mysql://host/dbname --table table_name\
   -m 8

它匯入2012年11月9日之後入職的員工。

$ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \
   --split-by dept_id

在已經匯入表的前100,000行之後,它執行增量匯入以匯入新資料。

sqoop import-all-tables --connect jdbc:mysql://host/DB1
$ sqoop export --connect jdbc:mysql://host/DB1 --call proc1 \
   --export-dir /Dir1

它是一個工具,Sqoop使用它來託管共享的元資料儲存庫。多個使用者和/或遠端使用者可以定義和執行在此元資料儲存庫中定義的已儲存作業(使用`sqoop job`建立)。

客戶端必須配置為連線到`sqoop-site.xml`中的元資料儲存庫,或使用`--meta-connect`引數。

合併工具組合兩個資料集,其中一個數據集中的條目應覆蓋舊資料集中的條目,僅保留兩個資料集之間記錄的最新版本。

`sqoop job --list`

`sqoop job --show myjob`

執行`sqoop-metastore`會在當前機器上啟動一個共享的HSQLDB資料庫例項。

元資料儲存庫資料庫可以託管在Hadoop叢集內或叢集外部的任何位置。

下一步是什麼?

接下來,您可以回顧一下您過去完成的作業,確保您能夠自信地談論它們。如果您是應屆畢業生,面試官不會期望您回答非常複雜的問題,而是要確保您的基本概念非常紮實。

其次,如果您無法回答一些問題,其實並不重要,重要的是您回答的任何問題都必須充滿自信。所以在面試中要自信。Tutorialspoint祝您面試順利,並祝您未來的事業一切順利!乾杯 :-)

sqoop_questions_answers.htm
廣告