sqoop初学习

Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。


Sqoop配置很简单,只需要修改conf下的sqoop-env.sh即可

我们这里只添加了hadoop和hive的路径


主要操作就是一些命令 

查看相关命令参数
bin/sqoop help


这里练习一些导入导出操作

1、列出MySQL中的数据库表

bin/sqoop list-databases \
--connect jdbc:mysql://yourAddress:3306 \
--username root \
--password 1234 \


2、将MySQL中的数据导入到HDFS
//mysql中准备数据

create table user(
id tinyint(4) not null auto_increment,
name varchar(255) default null,
passwd varchar(255) default null,
primary key (id)
)

insert into user values ('1','a','a');
insert into user values ('2','b','b');
insert into user values ('3','c','c');
insert into user values ('4','d','d');
insert into user values ('5','e','e');
//导入数据

目录默认在hdfs user目录下
bin/sqoop import \
--connect jdbc:mysql://yourAddress:3306/yourDB \
--username root \
--password 1234 \
--table user 
目录默认在hdfs user目录下

自定义目录
bin/sqoop import \
--connect jdbc:mysql://yourAddress:3306/yourDB \
--username root \
--password 1234 \
--table user \
--target-dir /user/BPF/sqoop/imp_user \
--num-mappers 1

sqoop的底层实现就是mapreduce,对于import操作来说,仅仅运行map task

>>>>>>>>>>>>>>>>以parquet导入>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bin/sqoop import \
--connect jdbc:mysql://yourAddress:3306/yourDB \
--username root \
--password 1234 \
--table user \
--target-dir /user/BPF/sqoop/imp_user_parquet \
--num-mappers 1 \
--as-parquetfile
在hive中创建一张表进行检验之前导入的数据
create table default.user(
id int,
name string,
passwd string
)
row format delimited fields terminated by ','
stored as parquetfile

load data inpath '/user/yourAddress/sqoop/imp_user_parquet' into table default.user;
在实际项目中,要处理数据往往需要进行初步清洗(--query 查询语句)
bin/sqoop import \
--connect jdbc:mysql://yourAddress:3306/yourAddress \
--username root \
--password 1234 \
--query 'select id, name from user where $CONDITIONS' \
--target-dir /user/yourAddress/sqoop/imp_user_query \
--num-mappers 1 \
=============================================================================
SNAPPY压缩
bin/sqoop import \
--connect jdbc:mysql://yourAddress:3306/yourAddress \
--username root \
--password 1234 \
--table user \
--delete-target-dir \
--target-dir /user/yourAddress/sqoop/imp_user_compress \
--num-mappers 1 \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \
--fields-terminated-by '\t'
测试snappy数据
create table default.user_snappy(
id int,
name string,
passwd string
)
row format delimited fields terminated by '\t'


load data inpath '/user/yourAddress/sqoop/imp_user_compress' into table default.user_snappy;

MYSQL---->导出数据(可以进行压缩如snappy)---->HDFS---->加载数据---->HIVE的表---->查询整理

3、将HDFS中的数据导出到MySQL

bin/sqoop export \
--connect jdbc:mysql://yourAddress:3306/yourDB \
--username root \
--password 1234 \
--table user \
--export-dir /user/BPF/sqoop/exp/user \
--num-mappers 1


4、MySQL直接导入到Hive(本质上还是先导到HDFS)
bin/sqoop import \
--connect jdbc:mysql://yourAddress:3306/yourDB \
--username root \
--password 1234 \
--table user \
--fields-terminated-by '\t' \
--delete-target-dir \
--num-mappers 1 \
--hive-database default \
--hive-import \
--hive-table user_hive


5、HIVE导出到MySQL

MySQL创建表
create table user2(
id tinyint(4) not null auto_increment,
name varchar(255) default null,
passwd varchar(255) default null,
primary key (id)
)
导出
bin/sqoop export \
--connect jdbc:mysql://yourAddress:3306/yourDB \
--username root \
--password 1234 \
--table user2 \
--export-dir /user/hive/warehouse/user_hive \
--num-mappers 1 \
--input-fields-terminated-by '\t'


6、方便使用可以将sqoop相关指令写入脚本文件中

sqoop --options-file /opt/cdh-5.5.0/datas/sqoop_import-hdfs.txt

sqoop_import-hdfs.txt内容:
import
--connect
jdbc:mysql://yourAddress:3306/yourAddress
--username
root
--password
1234
--table
user
--target-dir
/user/BPF/sqoop/imp_user_option
--num-mappers
1














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章