Sqoop 導入數據到hdfs和hive總結

 

  • 使用幫助

Sqoop help 查看所有的sqoop的幫助

Sqoop help import 查看import命令的幫助

 

Eg: sqoop導入到HDFS的一個簡單示例:
sqoop import 
        --connect jdbc:mysql://192.168.56.121:3306/metastore 
        --username hiveuser 
        --password redhat 
        --table TBLS

 

  • 導入到HDFS

Eg:

sqoop import 
--connect jdbc:mysql://192.168.56.121:3306/metastore 
--username hiveuser 
--password redhat 
--table TBLS 
--target-dir /user/hive/result

注意:

  •  mysql jdbc url 請使用 ip 地址
  • 如果重複執行,會提示目錄已經存在,可以手動刪除
  • 如果不指定 --target-dir,導入到用戶家目錄下的 TBLS 目錄

其他參數說明

參數

說明

--append

將數據追加到hdfs中已經存在的dataset中。使用該參數,sqoop將把數據先導入到一個臨時目錄中,然後重新給文件命名到一個正式的目錄中,以避免和該目錄中已存在的文件重名。

--as-avrodatafile

將數據導入到一個Avro數據文件中|

--as-sequencefile

將數據導入到一個sequence文件中

--as-textfile

將數據導入到一個普通文本文件中,生成該文本文件後,可以在hive中通過sql語句查詢出結果。

--boundary-query <statement>

邊界查詢,也就是在導入前先通過SQL查詢得到一個結果集,然後導入的數據就是該結果集內的數據,格式如:--boundary-query 'select id,no from t where id = 3',表示導入的數據爲id=3的記錄,或者 select min(<split-by>), max(<split-by>) from <table name>,注意查詢的字段中不能有數據類型爲字符串的字段,否則會報錯

--columns<col,col>

指定要導入的字段值,格式如:--columns id,username

--direct

直接導入模式,使用的是關係數據庫自帶的導入導出工具。官網上是說這樣導入會更快

--direct-split-size

在使用上面direct直接導入的基礎上,對導入的流按字節數分塊,特別是使用直連模式從PostgreSQL導入數據的時候,可以將一個到達設定大小的文件分爲幾個獨立的文件。

--inline-lob-limit

設定大對象數據類型的最大值

-m,--num-mappers

啓動Nmap來並行導入數據,默認是4個,最好不要將數字設置爲高於集羣的節點數

--query-e <sql>

從查詢結果中導入數據,該參數使用時必須指定–target-dir–hive-table,在查詢語句中一定要有where條件且在where條件中需要包含 \$CONDITIONS,示例:--query 'select * from t where \$CONDITIONS ' --target-dir /tmp/t –hive-table t

--split-by <column>

表的列名,用來切分工作單元,一般後面跟主鍵ID

--table <table-name>

關係數據庫表名,數據從該表中獲取

--delete-target-dir

刪除目標目錄

--target-dir <dir>

指定hdfs路徑

--warehouse-dir <dir>

 --target-dir 不能同時使用,指定數據導入的存放目錄,適用於hdfs導入,不適合導入hive目錄

--where

從關係數據庫導入數據時的查詢條件,示例:--where "id = 2"

-z,--compress

壓縮參數,默認情況下數據是沒被壓縮的,通過該參數可以使用gzip壓縮算法對數據進行壓縮,適用於SequenceFile, text文本文件, Avro文件

--compression-codec

Hadoop壓縮編碼,默認是gzip

--null-string <null-string>

可選參數,如果沒有指定,則字符串null將被使用

--null-non-string <null-string>

可選參數,如果沒有指定,則字符串null將被使用|


 

 

2.3 創建 hive

Eg:
sqoop 
        create-hive-table 
        --connect jdbc:mysql://192.168.56.121:3306/metastore 
        --username hiveuser 
        --password redhat 
        --table TBLS 

參數

說明

--hive-home <dir>

Hive的安裝目錄,可以通過該參數覆蓋掉默認的hive目錄

--hive-overwrite

覆蓋掉在hive表中已經存在的數據

--create-hive-table

默認是false,如果目標表已經存在了,那麼創建任務會失敗

--hive-table

後面接要創建的hive

--table

指定關係數據庫表名

導入數據到 hive

執行下面的命令會將 mysql 中的數據導入到 hdfs 中,然後創建一個hive 表,最後再將 hdfs 上的文件移動到 hive 表的目錄下面。
sqoop import 
        --connect jdbc:mysql://192.168.56.121:3306/metastore 
        --username hiveuser --password redhat 
        --table TBLS 
        --fields-terminated-by "\t" 
        --lines-terminated-by "\n" 
        --hive-import 
        --hive-overwrite 
        --create-hive-table 
        --hive-table dw_srclog.TBLS 
        --delete-target-dir

 

具體可以參照:https://segmentfault.com/a/1190000002532293

 

關於sqoop的導出使用從hive中導出到mysql:

 

Sqoop export

--connect jdbc:mysql://xxxxxx:3306/bbg_real_data?characterEncoding=utf-8

--username root  #表示數據庫用戶名

--password root  #表示數據庫密碼

--table deal_data  #表示數據表名

--hcatalog-database default  #hive中的數據庫名

--hcatalog-table deal_bbg_data_2  #表示hive中的表名

 

注意導出的時候,mysql的字段名要和hive裏面的字段名一樣,這樣才能對應的導入和導出。字段類型也要一樣,我全部都是varchar(40)。

Mysql表明和字段名不能是關鍵字例如:all等等

 

Hive tutorrials

  1. Create schema/table

Create schema[table] schema_name/table_name

  1. Delete schema/table

Drop  database[table] if exists database_name[table_name] 

 

Detail please look at as follow:

http://www.yiibai.com/hive/hive_drop_table.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章