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的创建与使用

  1. 创建
// 注意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'
  1. 查看job
sqoop job --list
  1. 执行job
sqoop job --exec myjob
  1. 删除job
sqoop job --delete myjob
  1. 自动化执行脚本
    编写完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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值