【大数据开发】sqoop学习总结和踩过的坑

结论(所有显示一个 - 的都是两个 – 放csdn就这个样子了,我也没办法)

1. where 子句要加单引号,query 要加双引号或者单引号,**其他都不要加单引号或者双引号**,具体区别看下面
--1. 如果使用--query 不能使用--table
--2. 如果使用--query, select语句中必须要有where子句,子句中必须要有$ CONDITIONS 
--3. select语句可以使用单引号,也可以使用双引号,如果使用双引号,那么$ 必须加转义字符
--4. 如果使用--query,需要指定切分字段,也就是参数--split-by
2. 参数--where要与--table配合使用,不能与--query一起用,语法不报错,但是不生效。
3. 在使用--table 和--columns时,--columns中可以没有主键约束的字段
4. --null-string  'value'  :  将字符串类型的null使用value来替代
--null-non-string 'value'  : 将非字符串类型的null使用value来代替
5. 导出时,mysql中的表的字段如果有主键,数据不能重复导入,否则报错。
6. 结论1:  mysql中的列少于hdfs上文件的列时,可以
结论2:  mysql中的列多于hdfs上文件的列时,不可以,但是使用--columns参数是可以的
7. 结论1:字段类型应该一致。
结论2:按照hdfs上的文件的列从左到右的属性给指定字段赋值
8. 结论1: 默认情况下,hdfs上的非字符串类型的null是不能转到mysql中。
结论2: 可以使用--input-null-non-string 'null' 将非字符串的null转到mysql中变成null。
结论3: hdfs上的null如果对应的是mysql中字符串类型,可以不用加--input-null-string 参数

9. --connect jdbc:mysql://qianfeng03:3306/sz2002 不能写成 --connect jdbc:mysql://qianfeng03:3306/sz2002/ 否则会报
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown error 1049
10. 使用sqlit-by的时候,后面添加的字段必须要在查询出来的表里,例如
sqoop import \
--connect 'jdbc:mysql://qianfeng03:3306/sz2002' \
--username root \
--password 123456 \
--query 'select ename,job,deptno from emp where deptno<20 and $CONDITIONS' \
--target-dir /sz2002/sqoop/ \
--delete-target-dir \
--split-by "ename" \
是可以执行的,但是换成 --split-by "empno"就不行了 ,会报错java.io.IOException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown error 1054

11. 如果切片时,--split-by 指定的字段有null值,则会忽略null值,含有null值的记录不会写到hdfs上
12. 目前只能将mysql的数据导入到hbase中,但是hbase中的数据不能导出到mysql中
注意:在导入到hbase中时:
--1. rowkey大小写问题
	如果是--table [--where]  那么hbase-row-key的字段名必须大写
	如果是--query并且指定了主键字段, hbase-row-key的字段名必须和query中的大小写一致,否则也要是大写的
--2. rowkey的指定问题
    --hbase-row-key,参数可以忽略,忽略情况下,主动将mysql中的主键作为rowkey
    				 也可以指定出来
    -- 如果mysql中的主键是复合键,那么此属性必须指定,并且使用逗号分隔
    -- 如果mysql中没有主键约束,那么应该指定--hbase-row-key
13. sqoop从mysql导入数据到Hive时,如果直接使用sqoop导入语句,则会自动创建一个内部表,因此导入的表会是内部表。要想导入外部表则需要先创建好Hive外部表,然后再导入数据,导入数据时不再需要指定target-dir,直接导入即可,这是因为创建外部表的语句已经有位置了

错误1:
ERROR manager.SqlManager: Error executing statement: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown error 1146
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown error 1146

解决方式:
数据库写错了,凡是针对数据库中的表进行增删查改都会报这个错误,所以要重点检查是否是操作出问题了

错误220/09/12 23:06:23 ERROR mapreduce.TextExportMapper: Dumping data is not allowed by default, please run the job with -Dorg.apache.sqoop.export.text.dump_data_on_error=true to get corrupted line.
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper: On input file: hdfs://qianfeng01:8020/sz2002/sqoop/emp/part-m-00002
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper: At position 0
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper:
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper: Currently processing split:
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper: Paths:/sz2002/sqoop/emp/part-m-00002:0+94,/sz2002/sqoop/emp/part-m-00002:94+94
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper:
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper: This issue might not necessarily be caused by current input
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper: due to the batching nature of export.
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper:
20/09/12 23:06:23 INFO mapreduce.AutoProgressMapper: Auto-progress thread is finished. keepGoing=false
20/09/12 23:06:23 INFO mapred.LocalJobRunner: Starting task: attempt_local51738395_0001_m_000002_0
20/09/12 23:06:23 INFO mapred.Task:  Using ResourceCalculatorProcessTree : [ ]
20/09/12 23:06:23 INFO mapred.MapTask: Processing split: Paths:/sz2002/sqoop/emp/part-m-00000:0+91,/sz2002/sqoop/emp/part-m-00001:0+93
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper:
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper: Exception raised during data export
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper:
20/09/12 23:06:23 ERROR mapreduce.TextExportMapper: Exception:
java.lang.RuntimeException: Can't parse input data: '20'

解决方式:
重点看抛出什么异常,查看'20'在哪个字段,再进行分析
结论1:  mysql中的列少于hdfs上文件的列时,可以
结论2:  mysql中的列多于hdfs上文件的列时,不可以,但是使用--columns参数是可以的


错误320/09/12 23:12:46 ERROR mapreduce.TextExportMapper: Dumping data is not allowed by default, please run the job with -Dorg.apache.sqoop.export.text.dump_data_on_error=true to get corrupted line.
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper: On input file: hdfs://qianfeng01:8020/sz2002/sqoop/emp/part-m-00003
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper: At position 0
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper:
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper: Currently processing split:
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper: Paths:/sz2002/sqoop/emp/part-m-00003:0+134,/sz2002/sqoop/emp/part-m-00003:134+135
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper:
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper: This issue might not necessarily be caused by current input
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper: due to the batching nature of export.
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper:
20/09/12 23:12:46 INFO mapreduce.AutoProgressMapper: Auto-progress thread is finished. keepGoing=false
20/09/12 23:12:46 INFO mapred.LocalJobRunner: Starting task: attempt_local2102975756_0001_m_000001_0
20/09/12 23:12:46 INFO mapred.Task:  Using ResourceCalculatorProcessTree : [ ]
20/09/12 23:12:46 INFO mapred.MapTask: Processing split: Paths:/sz2002/sqoop/emp/part-m-00002:0+94,/sz2002/sqoop/emp/part-m-00002:94+94
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper:
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper: Exception raised during data export
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper:
20/09/12 23:12:46 ERROR mapreduce.TextExportMapper: Exception:
java.lang.RuntimeException: Can't parse input data: 'SALESMAN'

解决方式:
重点看最后一句抛出异常,这是由于指定的字段类型不匹配导致的,parse:分析的意思,因此在导入的时候应该将字段的顺序类型匹配好来
结论1:字段类型应该一致。
结论2:按照hdfs上的文件的列从左到右的属性给指定字段赋值


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(Mysql、Postgresql...)间进行数据的传递,可以将一个关系 型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速 的迭代开发Sqoop独立成为一个Apache项目。目前主要有Sqoop1 和 Sqoop2 两大版本。 Sqoop简介 大数据-sqoop全文共16页,当前为第1页。 Sqoop1 和 Sqoop2 结构图。左图是Sqoop1 架构,右图是Sqoop2 架构 Sqoop架构图 大数据-sqoop全文共16页,当前为第2页。 Sqoop版本区别 Sqoop1与Sqoop2优缺点比较。 优点比较: Sqoop1的优点——架构部署简单。 Sqoop2的优点——多种交互方式,命令行,web UI,rest API,conncetor集中化管理,所有的链接安装在Sqoop server上,完善权限管理机制,connector规范化,仅仅负责数据的读写。 缺点比较: Sqoop1的缺点——命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏, 安装需要root权限,connector必须符合JDBC模型 。 Sqoop2的缺点——架构稍复杂,配置部署更繁琐。 大数据-sqoop全文共16页,当前为第3页。 Sqoop2和Sqoop1的功能性对比 Sqoop的版本区别 功能 Sqoop1 Sqoop2 用于所有主要 RDBMS 的连接器 支持 不支持解决办法: 使用已在以下数据库上执行测试的通用 JDBC 连接器: Microsoft SQL Server 、 PostgreSQL 、 MySQL 和 Oracle 。 此连接器应在任何其它符合 JDBC 要求的数据库上运行。但是,性能可能无法与 Sqoop 中的专用连接器相比 Kerberos 安全集成 支持 不支持 数据从 RDBMS 传输至 Hive 或 HBase 支持 不支持解决办法: 按照此两步方法操作。 将数据从 RDBMS 导入 HDFS 在 Hive 中使用相应的工具和命令(例如 LOAD DATA 语句),手动将数据载入 Hive 或 Hbase 大数据-sqoop全文共16页,当前为第4页。 Sqoop版本区别 功能 Sqoop1 Sqoop2 数据从 Hive 或 HBase 传输至 RDBMS 不支持解决办法: 按照此两步方法操作。 从 Hive 或 HBase 将数据提取至 HDFS (作为文本或 Avro 文件) 使用 Sqoop 将上一步的输出导出至 RDBMS 不支持按照与 Sqoop 1 相同的解决方法操作 大数据-sqoop全文共16页,当前为第5页。 Sqoop的用途 Sqoop可以在HDFS/Hive和关系型数据库之间进行数据的导入导出,其中主要使用了import和export这两个工具。 这两个工具非常强大,提供了很多选项帮助我们完成数据的迁移和同步。比如,下面两个潜在的需求: 1、业务数据存放在关系数据库中,如果数据量达到一定规模后需要对其进行分析或统计,单纯使用关系数据 库可能会成为瓶颈,这时可以将数据从业务数据库数据导入(import)到Hadoop平台进行离线分析。 2、对大规模的数据在Hadoop平台上进行分析以后,可能需要将结果同步到关系数据库中作为业务的辅助数据, 这时候需要将Hadoop平台分析后的数据导出(export)到关系数据库。 大数据-sqoop全文共16页,当前为第6页。 提纲 1 sqoop简介 2 sqoop安装 3 sqoop数据操作 大数据-sqoop全文共16页,当前为第7页。 环境软件准备: 1:Centos 6.8虚拟机 2:含有导入数据的Mysql数据库 3:Sqoop 安装包 下载地址: https://mirrors.cnnic.cn/apache/sqoop/ Sqoop安装 大数据-sqoop全文共16页,当前为第8页。 配置环境变量加入Sqoop的安装路径: 1、进入存放sqoop-1.4.7.tar.gz安装的目录执行下面的命令 sudo tar -zxvf /home/thinkgamer/下载/sqoop-1.4.7.tar.gz –C sudo mv sqoop-1.4.7/ sqoop 2、编辑/etc/profile文件,声明Sqoop的home路径和在path加入bin的路径: vi /etc/profile 在文件最底部添
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值