利用sqoop進行全量抽取和增量抽取

2021-09-28 07:39:07 字數 2045 閱讀 7678

sqoop是apache開源的一款在hadoop和關聯式資料庫伺服器之間傳輸資料的工具。主要用於在hadoop與關係型資料庫之間進行資料轉移,可以將乙個關係型資料庫(mysql ,oracle等)中的資料匯入到hadoop的hdfs中,也可以將hdfs的資料匯出到關係型資料庫中。

​ sqoop支援的另乙個表修改策略叫做lastmodified模式。當源表的資料行可能被修改,並且每次修改都會更新乙個last-modified列為當前時間戳時,應該使用lastmodified模式。那些被檢查列的時間戳比–last-value給出的時間戳新的資料行被匯入。

​ 增量匯入命令執行後,在控制台輸出的最後部分,會列印出後續匯入需要使用的last-value。當週期性執行匯入時,應該用這種方式指定–last-value引數的值,以確保只匯入新的或修改過的資料。可以通過乙個增量匯入的儲存作業自動執行這個過程,這是適合重複執行增量匯入的方式。

建立口令檔案

echo

-n "123456" > sqooppwd.

pwdhdfs dfs -mkdir -p /sqoop/

pwdhdfs dfs -put sqooppwd.

pwd/sqoop/

pwdhdfs dfs -chmod 400 /sqoop/

pwd/sqooppwd.

pwd可以在 sqoop 的 job 中增加:

--password-file /sqoop/

pwd/sqooppwd.

pwd

sqoop import \

--connect jdbc:mysql:/

/node2:3306/sales_source \

--username root \

--password-file /sqoop/

pwd/sqooppwd.

pwd \

--table sales_order \

--fields-terminated-by '\t' \

--lines-terminated-by '\n' \

--hive-import \

--hive-table ods.sales_order \

--check-column entry_date \

--last-value '1900-1-1'

​ 採用整體拉取的方式抽取資料。etl通常是按乙個固定的時間間隔,週期性定時執行,因此對於整體拉取的方式而言,每次匯入的資料需要覆蓋上次匯入的資料。sqop中提供了 hive-overwrite引數實現覆蓋匯入。 hive-overwrite的另乙個作用是提供了乙個冪等操作的選擇。所謂冪等操作指的是其執行任意多次所產生的影響均與次執行的影響相同。這樣就能在匯入失敗或修復bug後可以再次執行該操作,而不用擔心重複執行會對系統造成資料混亂。具體sqoop命令如下,其中 hive-import引數表示向hive表匯入,hive- table引數指定目標hive庫表。

-- 全量匯入hive表

sqoop import \

--connect jdbc:mysql://node2:3306/sales_source \

--username root \

--password-file /sqoop/pwd/sqooppwd.pwd \

--table sales_order \

--fields-terminated-by '\t' \

--lines-terminated-by '\n' \

--hive-import \

--hive-table ods.sales_order \

--hive-delims-replacement ' '

–node2就是主機的對映位址,就是主機ip

–hive-import :指定是匯入 hive

–hive-table:匯入 hive 中的資料庫名和表名

–hive-delims-replacement 匯入到hive時

用自定義的字元替換掉 \n, \r, and \01

ETL資料抽取 全量 增量

在根據使用者需求選擇需要抽取的字段之外,我們通常需要選擇採用全量或者增量的方法進行資料抽取。全量抽取指的是從源系統中將表內資料不加行的篩選,全部抽取 增量抽取指的是只抽取前次抽取之後發生變化或者新增的資料 增量抽取的資料難度較大,要保證資料不能多抽取,漏抽取 在源表資料量較大,大部分資料一經入庫改動...

Sqoop的全量匯入和增量匯入

增量匯入 2.lastmodify方式 基於時間列 sqoop import connect jdbc mysql username scfl password scfl123 query select from test table where conditions target dir user...

Sqoop 資料匯出 全量 增量 更新

sqoop支援直接從hive表到rdbms表的匯出操作,也支援hdfs到rdbms表的操作,當前需求是從hive中匯出資料到rdbms,有如下兩種方案 從hive表到rdbms表的直接匯出 該種方式效率較高,但是此時相當於直接在hive表與rdbms表的資料之間做全量 增量和更新對比,當hive表記...