sqoop2用法介绍

sqoop通俗讲就是支持将mysql,oracle等关系型数据库数据导入到hdfs中的工具。
用的是mapreduce这种计算模式,只要在一台服务器上安装,整个服务器集群都能开启服务。

例子1:

项目需求:mysql——>hdfs ——>hive
       其中mysql数据到hdfs就是由sqoop完成,hdfs数据导入到hive则是通过在hive中建表,通过load....overwrite....hive命令导入建好的hive表。

       我是在两台服务器上运行sqoop,一台作为服务端,一台作为客户端。 找到sqoop安装目录,进入bin目录,里面有一个1.sqoop2-server服务端脚本,启动服务端命令

./sqoop2-server start

2.在另一台服务器上打开bin目录,看到有sqoop2-shell客户端脚本,启动客户端命令

./sqoop2-shell

3.接着让客户端连接上服务端

set server --host 客户端服务器ip --port 12000 --webapp sqoop

到此,连接建立成功。

数据导入到hdfs

     在客户端创建link,link是基于connector的,创建link的过程相当于是connector的实例化,将指定链接的地址、用户名密码等信息。有了link之后就可以创建job,job对应两个link,一个连接数据源一个连接数据目的地。job创建完成后并没有实际执行数据的传输,可以在任意时间启动创建成功的job。

4.创建link1,link1为hdfs的链接

create link -c hdfs-connector

5.创建link2,link2为关系型数据库的链接

create link -c generic-jdbc-connector

 6.link创建好后,创建job,一个job对应mysql数据库的一张表

create job -f link2名称 -t link1名称

7.启动job,开启服务

start job --id job的id

8.hdfs数据到hivehive建表,表结构与mysql数据库中表结构一样。

create table configure_detection_area(
    id bigint,
    cameraId bigint
) partitioned by(resource_scheme STRING)
row  format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties(
"separatorChar"=",",
"quoteChar"="'",
"escapeChar"="\\"
)stored as textfile;

9.导数据

load data inpath'hdfs中存mysql数据的目录' overwrite into table configure_detection_area 
partition(resource_scheme='suidao');

例子2:

需求:将 bbs_product 表中的前100条数据导 导出来  只要id  brand_id和 name 这3个字段 

1.先将mysql一张表的数据用sqoop导入到hdfs中

数据存在 hdfs 目录   /user/xuyou/sqoop/imp_bbs_product_sannpy_  下

 加了 direct 属性在导出mysql数据库表中的数据会快一点 执行的是mysq自带的导出功能

bin/sqoop import \
--connect jdbc:mysql://172.16.71.27:3306/babasport \
--username root \
--password root \
--query 'select id, brand_id,name from bbs_product  where $CONDITIONS LIMIT 100' \
--target-dir /user/xuyou/sqoop/imp_bbs_product_sannpy_ \
--delete-target-dir \
--num-mappers 1 \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \
--direct \
--fields-terminated-by '\t'

2.启动hive 在hive中创建一张表 

drop table if exists default.hive_bbs_product_snappy ;
create table default.hive_bbs_product_snappy(
 id int,
 brand_id int,
  name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;

3.将hdfs中的数据导入到hive中

load data inpath '/user/xuyou/sqoop/imp_bbs_product_sannpy_' into table default.hive_bbs_product_snappy ;

结果展示(重要):

此时hdfs 中原数据没有了

进入hive的hdfs存储位置,已迁移过来

原文地址:1:https://blog.csdn.net/weixin_42515384/article/details/81206197 

原文地址2:https://www.cnblogs.com/xuyou551/p/7998846.html

猜你喜欢

转载自blog.csdn.net/SunWuKong_Hadoop/article/details/84563380
今日推荐