Sqoop 应用 利用Sqoop导数
本文参考链接:Sqoop基本原理及常用方法
本文中的案例 Sqoop版本为:sqoop-1.4.6 sqoop-1.4.7有点问题
一、Sqoop基本原理
1.1、何为Sqoop?
Sqoop(SQL-to-Hadoop)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。
1.2、为什么需要用Sqoop?
我们通常把有价值的数据存储在关系型数据库系统中,以行和列的形式存储数据,以便于用户读取和查询。但是当遇到海量数据时,我们需要把数据提取出来,通过MapReduce对数据进行加工,获得更符合我们需求的数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。为了能够和HDFS系统之外的数据库系统进行数据交互,MapReduce程序需要使用外部API来访问数据,因此我们需要用到Sqoop。
二、Sqoop常用方法
mysql已有存量数据(10351条数据)
2.1、RDBMS => HIVE
2.1.1、全表导入
命令:
Hive 查看数据
SELECT count(*) from test_hive_db.oss_image ;
导入成功
2.2、HIVE=> RDBMS(导出重点)
2.2.1、全表导入
命令:
sqoop export \ --connect jdbc:mysql://192.168.253.130:3306/testDb \ --username root \ --password root \ --table oss_image \ --export-dir /user/hive/warehouse/test_hive_db.db/oss_image \ -m 1
报错:Sqoop 从 Hive数据读书后 不能解析
解决方案:导出命令没有配
--fields-terminated-by '\0x01' \
分割符号怎么看?(此处参考链接:https://www.jianshu.com/p/38a4bf37f674)
1 查看hive表分区的location
hadoop fs -ls -R / #显示根目录下的所有文件和目录显示目录下的所有文件可以加 -R 选项示例
2 将文件下载到本地
hadoop fs -get /user/hive/warehouse/test_hive_db.db/oss_image/part-m-00000 .
用XFTP等工具传到本地
用编辑器打开 我这里用的是 Sublime Text 可以看到数据的分割符号为 0x01
命令:
sqoop export \ --connect jdbc:mysql://192.168.253.130:3306/testDb \ --username root \ --password root \ --table oss_image \ --export-dir /user/hive/warehouse/test_hive_db.db/oss_image \ --fields-terminated-by '\0x01' \ --input-null-string "\\\\N" \ --input-null-non-string "\\\\N" \ -m 1
虽然有异常但是确实是导入成功了