测试连接
bin/sqoop list-databases \
--connect jdbc:mysql://com.james:3306 \
--username root \
-
-password-file file:///home/taojiamin/data/passwd.pwd
密码文件
本地文件: file:///home/user/password
hdfs文件: /user/user/password
注意: 密码文件直接vim编辑会报错, 应采用重定向追加或覆盖写入操作
echo -n "password" >> /
home/taojiamin/data/passwd.pwd
&&
chmod 400 /home/taojiamin/data/passwd.pwd
echo -n 不换行输出;
bin/sqoop import \
--connect jdbc:mysql://apache.bigdata.com:3306/testdb \
--username root \
-P \
--table user \
--append \ //将mysql表的数据追加到HDFS上已存在的数据集
--target-dir /input/sqoop/import \
-m 1 \
--fields-terminated-by ","
bin/sqoop import \
--connect jdbc:mysql://com.hadoop05:3306/testdb \
--username root \
--password-file file:///home/hadoop/mypasswd \
--table user \
--target-dir /sqoop/input \
-m 1 \
--fields-terminated-by '\t' \
--delete-target-dir
全量导入例如:
bin/sqoop import \
(输入命令)
--connect jdbc:mysql://bigdata.ibeifeng.com:3306/testdb \
(指定连接jdbc端口和数据库名称)
--username root \
(数据库用户名)
--password root123 \
(密码 若不适用明文指定数据库密码 则可以用-P)
--table user \
(指定数据库中的一张表)
--target-dir /input/import \
(指定数据导入到HDFS上的目录)
--delete-target-dir \
//如果目标目录已存在,则先删除
--num-mappers 1 \
(指定使用导入数据的map个数,mapreduce(V1)中的方式可以用-m 1 代替(过时))
--fields-terminated-by ","
(目标文件的分隔符, 默认情况下,导入HDFS的每行数据分隔符是逗号)
部分字段导入:
bin/sqoop import \
--connect jdbc:mysql://com.apache.bigdata:3306/sqoop \
--username root \
-P \
--table user \
--columns "id,account" \
--target-dir /sqoop/query1 \
-m 1 \
--delete-target-dir \
--fields-terminated-by "\t"
查询导入:
//待复习
query,where子句必须有$CONDITONS(固定写法)
不能使用 --table
bin/sqoop import \
--connect jdbc:mysql://bigdata.ibeifeng.com:3306/testdb \
--username root \
-P \
--
query 'select id,account from user where account="fff" and $CONDITIONS' \
--target-dir /input/query \
-m 1 \
--delete-target-dir \
--fields-terminated-by "\t"
增量导入
3个参数
注意:
1.
--append and
--delete-target-dir can not be used together.
2.--check-column 不是使用CHAR/NCHAR/VARCHAR/VARNCHAR/ LONGVARCHAR/LONGNVARCHAR这样的数据类型
后面跟 唯一 不重复的列 类似主键
3.--incremental 支持两种模式
append 告诉sqoop是整型数据自增长的方式来区分从哪里开始增量导入
lastmodified 告诉sqoop是最后一次修改文件的时间戳来区分从哪里开始增量导入
bin/sqoop import \
--connect jdbc:mysql://com.apache.bigdata:3306/sqoop \
--username root \
-P \
--table user \
--num-mappers 1 \
--target-dir /sqoop/incremental \
--fields-terminated-by "|" \
--check-column id \
选择ID 作为主键
--incremental append \
选择ID来区分从哪里开始增量导入
--last-value 3
选择从id为3之后的行开始导入数据
通过【--options-file】指定文件,运行程序
可以将Sqoop的命令选项写在文件,通过【--options-file】指定文件,进行运行程序。
vim sqoop_script
export
--connect
jdbc:mysql://bigdata.ibeifeng.com:3306/testdb
--username
root
--password
root123
--table
hive2mysql
--num-mappers
1
--export-dir
/user/hive/warehouse/db01.db/dept
--fields-terminated-by
"\t"
$ bin/sqoop --options-file ~/sqoop_script
列出mysql数据库中的所有数据库
sqoop list-databases –connect jdbc:mysql://localhost:3306/ –username root –password 123456
连接mysql并列出test数据库中的表
sqoop list-tables –connect jdbc:mysql://localhost:3306/test –username root –password 123456
命令中的test为mysql数据库中的test数据库名称 username password分别为mysql数据库的用户密码
将关系型数据的表结构复制到hive中,只是复制表的结构,表中的内容没有复制过去。
sqoop create-hive-table –connect jdbc:mysql://localhost:3306/test
–table sqoop_test –username root –password 123456 –hive-table
test
其中 –table sqoop_test为mysql中的数据库test中的表 –hive-table
test 为hive中新建的表名称