Sqoop入门

Sqoop简介

官网:http://sqoop.apache.org/

Apache Sqoop(TM)是一种工具,用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据 。
Sqoop于2012年3月成功从孵化器毕业,现在是一个顶级Apache项目: 更多信息
最新的稳定版本是1.4.7(下载文档)。Sqoop2的最新剪辑是1.99.7(下载文档)。请注意,1.99.7与1.4.7不兼容且功能不完整,不适用于生产部署。

Sqoop的诞生:在Hadoop刚出现之时,很多公司为了把存储在传统型数据库的数据导入到HDFS中,需要编写大量的MapReduce代码,MapReduce代码很繁琐,为了简化这些过程,于是就有了Sqoop。Sqoop实际是对Map阶段的一个封装,因为只是把数据进行传输,所以Sqoop不包括Reduce阶段。

Sqoop安装部署

  1. 下载安装包:
    http://www.apache.org/dyn/closer.lua/sqoop/1.4.7
  2. 解压
    tar -zxvf .tar
  3. 修改配置
vi sqoop-env.sh
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/even/hd/hadoop-2.8.4

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/even/hd/hadoop-2.8.4

#Set the path to where bin/hive is available
export HIVE_HOME=/home/even/hd/hive-1.2.2

#Set the path for where zookeper config dir is
export ZOOCFGDIR=/home/even/hd/zookeeper-3.4.10/conf
  1. 安装mysql驱动到sqoop/lib下,网上自行下载
    在这里插入图片描述
  2. 检测是否安装成功
    /bin/sqoop help
    在这里插入图片描述

Sqoop使用

import命令

  1. MySql整表导入到hdfs中。
sqoop import \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root \
--password 123 \
--table user \
--target-dir /sqoop/datas \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by '\t';

–connect是连接mysql数据库,–target-dir是要存储的目标目录,在hdfs上。–delete-target-dir是如果目标目录存在则删除,因为Sqoop实际是在跑一个MapReduce程序,如果目标目录已存在会报错。–num-mappers是MapTask数,–fields-terminated-by 是切割符。

  1. MySql Select数据导入hdfs中
sqoop import \
> --connect jdbc:mysql://localhost:3306/sqoop \
> --username root \
> --password 19940710 \
> --target-dir /sqoop/selectdemo \
> --delete-target-dir \
> --num-mappers 1 \
> --fields-terminated-by '\t' \
> --query 'select * from user where id <=1 and $CONDITIONS';
  1. where参数筛选MySql数据
sqoop import \
> --connect jdbc:mysql://localhost:3306/sqoop \
> --username root \
> --password 19940710 \
> --target-dir /sqoop/selectdemo \
> --delete-target-dir \
> --num-mappers 1 \
> --fields-terminated-by '\t' \
> --table user \
> --where "id<=1";
  1. mysql导入到hive
在此之前先创建hive表
hive 
create table user1(id int,name string) \
>row format \
>dilimited fields \
>terminated by '\t';

然后修改环境变更:vi ~/.bash_profile
export HADOOP_CLASSPATH=$HADOOP_CLASSPASS:/home/even/hd/hive-1.2.2/lib/*
因为hadoop要把数据存入到hive,因此需要依赖hive的lib。

最后sqoop命令:
sqoop import \
>--connect jdbc:mysql://localhost:3306/sqoop \
>--username root \
>--password 123 \
>--table user \
>--num-mappers 1 \
>--delete-target-dir \
>--hive-import \
>--field-terminated-by '\t' \
>--hive-overwrite \
>--hive-table user1;

从MySql到Hive的过程中,首先会在hdfs的/user/root/下生成一个临时目录,然后再把这个目录的数据剪切到hive表。–delete-target-dir表示如果临时目录已存在,则删除。

export命令

把Hive的数据导入到MySQL表中,根据Hive表字段创建MySQL表。
#清空表数据
truncate user;

编写Sqoop命令

sqoop export \
> --connect jdbc:mysql://localhost:3306/sqoop \
> --username root \
> --password 123 \
> --table user \
> --num-mappers 1 \
> --export-dir /user/hive/warehouse/user1 \
> --input-fields-terminated-by '\t';

打包脚本使用

  1. 创建脚本
vi sqoop_job.opt
export --connect
jdbc:mysql://localhost:3306/sqoop
--username
root
--password
123
--table
user
--export-dir
/user/hive/warehouse/user1
--num-mappers
1
--input-fields-terminated-by
'\t'
# 注意:一行命令一行值的格式。
  1. 执行脚本:
sqoop --options-file sqoop_job.opt

Sqoop常用参数

参数说明
–connect连接关系型数据库URL
–connection­manager指定连接管理类
–driverJDBC的driver class
–username连接数据库的用户名
–password连接数据库的密码
–verbose在控制台中打印详细信息
–help查看帮助
–hive­import将关系型数据库导入到hive表中
–hive­overwrite覆盖掉hive表中已存在的数据
–create­hive­table创建hive表
–hive­table接入hive表
–table指定关系型数据库的表名
–delete-target-dir如果目标目录存在,就删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值