sqoop基本使用方法
库与表的查看
示例1:列出数据库mysql中所有的库
# username root sqoop使用用户
# password ok 所使用数据库密码
# connect jdbc:mysql://192.168.56.20:3306 jdbc连接mysql数据库
[root@jzy1 ~]# sqoop list-databases \
> --connect jdbc:mysql://192.168.56.20:3306
> --username root \
> --password ok
示例2:列出mysql数据库mydemo下的所有表
[root@jzy1 ~]# sqoop list-tables \
> --connect jdbc:mysql://192.168.56.20:3306/mydemo
> --username root \
> --password ok
从RDB导入数据到HDFS
导入表到hdfs基本格式
sqoop import \
--connect jdbc:mysql://localhost:3306/hr \
--driver com.mysql.jdbc.Driver \
--table user \
--username root \
--password hadoop \
--target-dir /data/user \
--m 3
# --target-dir 表示导入到指定目录
# -m3 表示Mapper数量
示例:将mydemo中的表customs导入到hdfs /tmp/customs目录下
[root@jzy1 ~]# sqoop import \
> --connect jdbc:mysql://192.168.56.20:3306/mydemo \
> --driver com.mysql.jdbc.Driver \
> --table customs \
> --username root \
> --password ok \
> --target-dir /tmp/customs
> --m 3
使用where语句进行过滤
sqoop import --connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--table orders \
--where "order_id<500" \
--username root \
--password ok \
--target-dir /data/retail_db/orders \
-m 3
使用columns过滤
sqoop import --connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--table customers \
--columns "customer_id,customer_fname,customer_lname" \
--username root \
--password ok \
--delete-target-dir \
--target-dir /data/retail_db/customers \
-m 3
使用query方式导入数据
基本格式:
sqoop import
--connect jdbc:mysql://localhost:3306/hr
--driver com.mysql.jdbc.Driver
--query "查询语句 and \$CONDITIONS"
--username root
--password hadoop
--split-by host
--target-dir /data/user -m 3
#split-by 用于分割数据的列,一般默认为主键,如果有主键可以不写
Append 增量导入
sqoop import \
--connect jdbc:mysql://jzy1:3306/mydemo \
--driver com.mysql.jdbc.Driver \
--table orders \
--username root \
--password ok \
--incremental append \
--check-column order_date \
--target-dir /data/retail_db/orders \
--m 1
从RDB导入数据到Hive
//导入数据到hive
先在hive中建库
hive -e "create database if not exists retail_db"
// 在sqoop语句中直接写创建table的语句 该方式快捷但是不安全
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--table orders \
--username root \
--password 889700 \
--hive-import \
--create-hive-table \
--hive-database retail_db \
--hive-table orders \
--m 3
// 正常导入方式 hive中建库建表结构后执行以下语句
// 全量方式
// 全量导入 hdfs上的路径不能存在,如果存在使用--delete,不存在可以忽略
sqoop import \
--connect jdbc:mysql://jzy1:3306/sales_source \
--username root \
--password ok \
--table customer \
--hive-import \
--hive-table sales_rds.customer \
--hive-overwrite \
--delete-target-dir \
--target-dir temp
//增量方式 需要选择一个自增列,从last-value开始增加,last-value可忽略
sqoop import \
--connect jdbc:mysql://jzy1:3306/sales_source \
--username root \
--password ok \
--table sales_order \
--hive-import \
--hive-table sales_rds.sales_order \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--check-column entry_date \
--incremental append \
--last-value '1900-1-1'
//查询导入数据到hive
//删除Hive表
drop table if exists orders;
sqoop import \
--connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--query "select order_id,order_status from orders where order_date>='2013-11-03' and order_date <'2013-11-04' and \$CONDITIONS" \
--username root \
--password 889700 \
--delete-target-dir \
--target-dir /data/retail_db/orders \
--split-by order_status \
--hive-import \
--hive-database retail_db \
--hive-table orders \
--hive-partition-key "order_date" \
--hive-partition-value "2013-11-03" \
--m 3
导入数据到HBase
//在hbase中建相对应导入的表
create 'emp_hbase_import','details'
sqoop import \
--connect jdbc:mysql://localhost:3306/sqoop \
--driver com.mysql.jdbc.Driver \
--username root \
--password 889700 \
--table emp \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--hbase-table emp_hbase_import \
--column-family details \
--hbase-row-key EMPNO \
-m 1
导出HDFS数据到MySQL
//建表复制表结构
create table customers_demo as select * from customers where 1=2;
sqoop export \
--connect jdbc:mysql://localhost:3306/retail_db \
--driver com.mysql.jdbc.Driver \
--username root \
--password 889700 \
--table customers_demo \
--export-dir /customerinput \
--m 1
sqoop job的创建与使用
- 创建
// 注意import前面有空格
sqoop job \
--create myjob \
-- import \
--connect jdbc:mysql://jzy1:3306/sales_source \
--username root \
--password ok \
--table sales_order \
--hive-import \
--hive-table sales_rds.sales_order \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--check-column entry_date \
--incremental append \
--last-value '1900-1-1'
- 查看job
sqoop job --list
- 执行job
sqoop job --exec myjob
- 删除job
sqoop job --delete myjob
- 自动化执行脚本
编写完sqoop job 的脚本后,编写自动化执行,克隆表达式
//这里表示梅泰诺凌晨两点执行该脚本
crontab -e
0 2 * * * /root/ods_full_load.sh
分,时,日,月,周
附:
Hive中建立外部表将地址指向对应HBase在HDFS存放的地址
create external table myhbtab(
kw string,
stuno string,
username string,
age string,
likes string)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping"=":key,base:stuno,base:username,base:age,externals:likes")
tblproperties("hbase.table.name"="mydemo:userinfos");
hbase 导入外部文件
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator=, \
-Dimporttsv.columns="HBASE_ROW_KEY,order:numb,order:date" \
customer file:///opt/hbase_import_data.csv