参考: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'" \
;