Sqoop数据迁移(Import、Export)学习

1.概述

  • sqoop是一款“Hadoop和关系数据库服务器之间传送数据”的工具;
  • 将导入或导出命令翻译成mapreduce程序来实现,在翻译出的mapreduce中主要是对inputformat和outputformat进行定制;
  • 导入数据(Import): MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
  • 导出数据(Export): 从Hadoop的文件系统中导出数据到关系数据库mysql等;
    在这里插入图片描述

2.启动

  • Ambari安装完毕Sqoop组件;
  • 验证启动
[root@managerhd ~]# cd /usr/hdp/3.1.0.0-78/sqoop
[root@managerhd sqoop]# ./bin/sqoop-version

在这里插入图片描述

3.导入【Import】

3.1 测试Sqoop与MySQL之间的连通性

  • [root@managerhd sqoop]# ./bin/sqoop-list-databases --connect jdbc:mysql://managerhd.bigdata:3306 --username root --password bigd*****3
    在这里插入图片描述
    在这里插入图片描述
  • ./bin/sqoop-list-tables --connect jdbc:mysql://managerhd.bigdata:3306/userdb --username root --password bigd*****3
    在这里插入图片描述

3.2 将MySQL数据表导入HDFS指定目录

  • 将 userdb 数据库中的 test_1 表导入HDFS /sqooptest 目录
    在这里插入图片描述
- 切换 hdfs 用户
[root@managerhd sqoop]# su  hdfs
[hdfs@managerhd sqoop]$ ./bin/sqoop import \				# import导入
> --connect jdbc:mysql://managerhd.bigdata:3306/userdb \	# mysql jdbc连接
> --username root \						# 数据库用户名
> --password bigd*****3 \				# 数据库密码
> --table test_1 \						# 指定mysql数据表
> --target-dir /sqooptest \				# hdfs 目录 
> --fields-terminated-by ',' \			# 数据分隔符
> --split-by id \						# 拆分数据
> --m 2									# 指定2个maptask数量,默认指定4个maptask数量

在这里插入图片描述

3.3 将MySQL数据表导入Hive

  • 将 userdb 数据库中的 test_1 表导入Hive
[root@managerhd sqoop]# su hive
[hive@managerhd sqoop]$ ./bin/sqoop import \
> --connect jdbc:mysql://managerhd.bigdata:3306/userdb \
> --username root \
> --password bigd*****3 \
> --table test_1 \
> --hive-import \
> --fields-terminated-by ',' \
> --split-by id \
> --m 2

在这里插入图片描述

3.4 导入表数据子集

在这里插入图片描述

[root@managerhd sqoop]# su hdfs
[hdfs@managerhd sqoop]$ bin/sqoop import \
> --connect jdbc:mysql://managerhd.bigdata:3306/userdb \
> --username root \
> --password bigd*****3 \
> --table test_1 \
> --where "sex ='female'" \
> --target-dir /wherequery \
> --fields-terminated-by ',' \
> --split-by id \
> --m 1

在这里插入图片描述

3.5 选择导入【增量导入 --query】

  • mysql test_1 数据表新增三条数据,选择导入 id 不大于6,id,name,sex字段;
    在这里插入图片描述
[hdfs@managerhd sqoop]$ bin/sqoop import \
> --connect jdbc:mysql://managerhd.bigdata:3306/userdb \
> --username root \
> --password bigd*****3 \
> --query 'SELECT id,name,sex FROM `test_1` where id <=5 and $CONDITIONS' \
> --target-dir /wherequery2 \
> --fields-terminated-by ',' \
> --split-by id \
> --m 1

在这里插入图片描述

3.6 增量导入

  • 参考4:将 userdb 数据库中的 test_1 表导入HDFS /sqooptest 目录;
  • mysql test_1 数据表新增三条数据;
    在这里插入图片描述
    在这里插入图片描述
[hdfs@managerhd sqoop]$ bin/sqoop import \
> --connect jdbc:mysql://managerhd.bigdata:3306/userdb \
> --username root \
> --password bigd*****3 \
> --table test_1 \
> --target-dir /sqooptest \
> --fields-terminated-by ',' \
> --split-by id \
> --m 1 \
> --incremental append \
> --check-column id \
> --last-value 5

在这里插入图片描述

4.导出【Export】

4.1 将HDFS目录数据导出到MySQL

  • 将HDFS目录导出到 userdb 数据库中的 test_2 的空表中;
    在这里插入图片描述
[hdfs@managerhd sqoop]$ bin/sqoop export \
> --connect jdbc:mysql://managerhd.bigdata:3306/userdb \
> --username root \
> --password bigd*****3 \
> --input-fields-terminated-by ',' \
> --table test_2 \
> --export-dir /sqooptest/

在这里插入图片描述

4.2 将hive的表数据(hdfs的文件)导出到mysql

在这里插入图片描述

[root@managerhd sqoop]# su hive
[hive@managerhd sqoop]$ bin/sqoop export \
> --connect jdbc:mysql://managerhd.bigdata:3306/userdb \
> --username root \
> --password bigd*****3 \
> --table test_3 \
> --input-fields-terminated-by ',' \
> --export-dir /warehouse/tablespace/managed/hive/test_1/delta_0000001_0000001_0000/

在这里插入图片描述

发布了153 篇原创文章 · 获赞 122 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Happy_Sunshine_Boy/article/details/104899398
今日推荐