Sqoop简介
Sqoop主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间传递数据。
传统的应用管理系统,也就是与关系型数据库的使用RDBMS应用程序的交互,是产生大数据的来源之一。这样大的数据,由关系数据库生成的,存储在关系数据库结构关系数据库服务器。
下图描述了sqoop的工作流程
下面介绍一些Sqoop常用操作
1.import和export工具有些通用的选项,如下表所示:
选项 含义说明
—connect 指定JDBC连接字符串
—connection-manager 指定要使用的连接管理器类
—driver 指定要使用的JDBC驱动类
—hadoop-mapred-home 指定$HADOOP_MAPRED_HOME路径
—hel 打印用法帮助信息
—password-file 设置用于存放认证的密码信息文件的路径
-P 从控制台读取输入的密码
—password 设置认证密码
—username 设置认证用户名
—verbose 打印详细的运行信息
—connection-param-file 可选,指定存储数据库连接参数的属性文件
2.import工具,是将HDFS平台外部的结构化存储系统中的数据导入到 Hadoop平台,便于后续分析。我们先看一下import工具的基本选项及其含义,如下表所示:
选项 含义说明
—append 将数据追加到HDFS上一个已存在的数据集上
—as-avrodatafile 将数据导入到Avro数据文件
—as-sequencefile 将数据导入到SequenceFile
—as-textfile 将数据导入到普通文本文件(默认)
—boundary-query 边界查询,用于创建分片(InputSplit)
从表中导出指定的一组列的数据
—delete-target-dir 如果指定目录存在,则先删除掉
—direct 使用直接导入模式(优化导入速度)
—direct-split-size 分割输入stream的字节大小(在直接导入模式下)
—fetch-size 从数据库中批量读取记录数
—inline-lob-limit 设置内联的LOB对象的大小
-m,—num-mappers 使用n个map任务并行导入数据
-e,—query 导入的查询语句
—split-by 指定按照哪个列去分割数据
—table 导入的源表表名
—target-dir 导入HDFS的目标路径
—warehouse-dir HDFS存放表的根路径
—where 指定导出时所使用的查询条件
-z,—compre 启用压缩
—compression-codec 指定Hadoop的codec方式(默认gzip)
—null-string 果指定列为字符串类型,使用指定字符串替换值为null的该类列的值
—null-non-string 如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值
3.export工具,是将HDFS平台的数据,导出到外部的结构化存储系统中, 可能会为一些应用系统提供数据支持。我们看一下export工具的基本选项及其含义,如下表所示:
选项 含义说明
—validate 启用数据副本验证功能,仅支持单表拷贝,可以指定验证使用的实现类
—validation-threshold 指定验证门限所使用的类
—direct 使用直接导出模式(优化速度)
—export-dir 导出过程中HDFS源路径
-m,—num-mappers 使用n个map任务并行导出
—table 导出的目的表名称
—call 导出数据调用的指定存储过程名
更新参考的列名称,多个列名使用逗号分隔
—update-mode 指定更新策略,包括:updateonly(默认)、allowinsert
—input-null-string 使用指定字符串,替换字符串类型值为null的列
—input-null-non-string 使用指定字符串,替换非字符串类型值为null的列
—staging-table 在数据导出到数据库之前,数据临时存放的表名称
—clear-staging-table 清除工作区中临时存放的数据
—batch 使用批量模式导出
4.执行导入命令将alarm_info表导入到hdfs:
sqoop import —connect jdbc:mysql://192.168.1.118:3306/data —username xxxxx —P —table alarm_info -m 1 [—target-dir /directory]
密码:xxxxx
语法备注:
sqoop import —connect jdbc:mysql://mysqlserver_IP/database_name —username 数据库用户名 —P —table 表名 -m 并发数
通过Sqoop将Hive表数据导出到Mysql通常有两种情况。
第一种是将hive上某张表的全部数据导出到mysql对应的表中。
第二种是将hive上某张表中的部分数据导出到mysql对应的表中。
两种方式的区别在于第二种情况需要指定要导出数据的列名称。两种情况的导出方式分别如下:
1)全部导出
Sqoop export —connect jdbc:mysql://127.0.0.1:3306/dbname —username 数据库用户名 —password 密码 —table student(mysql上的表) —hcatalog-database sopdm(hive上的schema) —hcatalog-table student(hive上的表)
2)部分导出
Sqoop export —connect jdbc:mysql://127.0.0.1:3306/dbname —username mysql(mysql用户名) —password 密码 —table student(mysql上的表) —columns “id,name,age” —hcatalog-database sopdm(hive上的schema) —hcatalog-table student(hive上的表)
5.查看postgresql中库是否有表
sqoop list-tables —connect jdbc:postgresql://10.17.0.1:5432/CartoOSM —username postgres —password postgres
数据导入,指数据从关系型数据库将数据导入到hdfs集群里;
执行导入命令将alarm_info表导入到hdfs:
sqoop import —connect jdbc:mysql://192.168.1.1:3306/data —username gdtec —P —table alarm_info -m 1
出现警告时Warning: /usr/lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
可以建立文件 sudo mkdir /var/lib/accumulo
并在conf/sqoop-env.sh文档下加入export ACCUMULO_HOME=’/var/lib/accumulo’
6.postgresql导入hive已经创建好的表中
如果存在路径先删除路径
出现ERROR orm.ClassWriter: No Java type for SQL type 1111 for column geom 错误,可以用-map-column-java ‘geom’=String
出现ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive does not support the SQL type for column geom错误,可以用—map-column-hive ‘geom’=String
sqoop import —connect jdbc:postgresql://10.17.0.1/CartoOSM —username postgres —table bts —hive-import -m 5 —hive-table bts -map-column-java ‘geom’=String —map-column-hive ‘geom’=String —fields-terminated-by ‘|’
7.将关系型数据库数据导到指定hdfs目录上,并指定分隔符
—split-by指根据哪个字段进行分区(数值类型)
sqoop import —connect jdbc:postgresql://10.17.0.1:5432/CartoOSM —username postgres —password postgres —query ‘select * from bts where id < 10 and $CONDITIONS’ —target-dir “/DATA/PUBLIC/NOCE/AGG/TMP_ZZ” —split-by “id” -map-column-java ‘geom’=String —fields-terminated-by ‘|’
8.Hive 导出到postgresql已经创建好的表中
出现ERROR tool.ExportTool: Error during export: Export job failed! 问题是因为 分隔符不对,也有可能是字段对不上。
sqoop export —connect jdbc:postgresql://10.17.0.1:5432/CartoOSM —username postgres —password postgres —table bts_test1 —fields-terminated-by “|” —export-dir /user/hive/warehouse/bts
以上就是关于sqoop常用操作,希望读者朋友看完这篇文章后有所启发。