关于sqoop常用操作

网友投稿 287 2022-11-01

关于sqoop常用操作

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常用操作,希望读者朋友看完这篇文章后有所启发。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring源码之循环依赖之三级缓存详解
下一篇:LNMP源码编译
相关文章

 发表评论

暂时没有评论,来抢沙发吧~