參考:https://blog.csdn.net/zhongqi2513/article/details/53281255
Sqoop是一個用來将Hadoop和關系型資料庫中的資料互相轉移的工具,可以将一個關系型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也可以将HDFS的資料導進到關系型資料庫中。
通過sqoop help指令檢視其指令選項:
[[email protected] ~]# sqoop help
Warning: /opt/cloudera/parcels/CDH-5.4.11-1.cdh5.4.11.p0.5/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
19/10/21 14:35:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5-cdh5.4.11
usage: sqoop COMMAND [ARGS]
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
import Import a table from a database to HDFS
import-all-tables Import tables from a database to HDFS
import-mainframe Import datasets from a mainframe server to HDFS
job Work with saved jobs
list-databases List available databases on a server
list-tables List available tables in a database
merge Merge results of incremental imports
metastore Run a standalone Sqoop metastore
version Display version information
See 'sqoop help COMMAND' for information on a specific command.
這些指令中使用最多的是import和export(導入導出都是站在HDFS角度來說的),下面着重記錄一下這兩個指令使用。
1.eval
eval指令可以讓sqoop使用sql語句對資料庫進行操作,如查詢表結構,删除資料等。
sqoop eval --connect jdbc:mysql://192.168.0.1:3306/mem --username aaa --password 123456 --query "select * from mem limit 10;"
sqoop eval \
--connect jdbc:postgresql://$olc_host:$olc_port/$olc_dbname \
--username $olc_uname \
--password $olc_upass \
--query "truncate table mem" \
;
2.export
從HDFS中将資料導出到關系型資料庫中,參數如下:
舉例:
目标庫中建一張與hive庫中一樣的表,且使用者有插入權限
sqoop export \
--connect jdbc:postgresql://$olc_host:$olc_port/$olc_dbname \
--username $olc_uname \
--password $olc_upass \
--table olc_user \
--update-mode allowinsert \
--fields-terminated-by '\001' \
--export-dir '/user/hive/olc_user.db/olc_user' \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
;
3.import
從關系型資料庫中将資料導入到HDFS中,與export指令正好相反,參數如下:
舉例:
sqoop import --connect jdbc:postgresql://$olc_host:$olc_port/$olc_dbname \
--username $olc_uname \
--password $olc_upass \
--table product \
--target-dir '/user/hive/product/20191022T005417/' \
--delete-target-dir \
--fields-terminated-by '\0x01' \
--lines-terminated-by n \
--compress \
--compression-codec org.apache.hadoop.io.compress.GzipCodec \
--null-string '\N' \
--null-non-string '\N' \
--split-by id
-m 4 \
--where "to_char(create_time,'yyyy-MM-dd')>='2016-08-24'" \
;