sqoop将mysql数据导入hbase、hive的常见异常处理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: sqoop将mysql数据导入hbase、hive的常见异常处理一、需求:1、将以下这张表(test_goods[id,goods_name,goods_price])数据导入Hbase由此,编写如下sqoop导入命令sqoop import -D sqoop.

sqoop将mysql数据导入hbase、hive的常见异常处理
一、需求:
1、将以下这张表(test_goods[id,goods_name,goods_price])数据导入Hbase

由此,编写如下sqoop导入命令

sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://192.168.1.9/spider --username root --password root --table test_goods --hbase-create-table --hbase-table t_goods --column-family cf --hbase-row-key id -m 1
一切看着都很正常,接下来开始执行命令,报如下错误:

Error during import: No primary key could be found for table *

报错原因就是指定的mysql表名不是大写,所以mysql表名必须大写

Could not insert row with null value for row-key column

报错原因是没有指定mysql的列名,所以必须指定列名,并且hbase-row-key id 中的id,必须在–columns中显示。 --columns ID,GOODS_NAME, GOODS_PRICE

Error parsing arguments for import Unrecognized argument

报错原因是在指定mysql的列名时,用逗号隔开的时候我多加了空格,所以在
Columns后显示的列名只能用逗号隔开,不要带空格

将以上三个问题排除后:我的最新导入命令变为如下:

sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://192.168.1.9:3306/spider --username root --password root --table TEST_GOODS --columns ID,GOODS_NAME,GOODS_PRICE --hbase-create-table --hbase-table t_goods --column-family cf --hbase-row-key ID --where "ID >= 5" -m 1
注意:这里有个小问题:记得将id>=5引起来,ok,查看hbase,数据已经成功导入!!!

2、将导入命令写成一个脚本来执行(通过sqoop –options-file xxx.file 执行导入命令)
错误写法如下:

import
-D sqoop.hbase.add.row.key=true
--connect jdbc:mysql://192.168.1.9:3306/spider
--username root
--password root
--table TEST_GOODS
--columns ID,GOODS_NAME,GOODS_PRICE
--hbase-create-table
--hbase-table test_goods
--column-family cf
--hbase-row-key ID
--where "ID >= 5"
-m 1
错误原因:参数的名称和参数的值没有进行回车换行

正确写法:

import
-D
sqoop.hbase.add.row.key=true
--connect
jdbc:mysql://192.168.1.9:3306/spider
--username
root
--password
root
--table
TEST_GOODS
--columns
ID,GOODS_NAME,GOODS_PRICE
--hbase-create-table
--hbase-table
tt_goods
--column-family
cf
--hbase-row-key
ID
--where
ID>=5
-m
1
注:参数含义解释

-D sqoop.hbase.add.row.key=true 是否将rowkey相关字段写入列族中,默认为false,默认情况下你将在列族中看不到任何row key中的字段。注意,该参数必须放在import之后。
--connect 数据库连接字符串
--username –password mysql数据库的用户名密码
--table Test_Goods表名,注意大写
--hbase-create-table 如果hbase中该表不存在则创建
--hbase-table 对应的hbase表名
--hbase-row-key hbase表中的rowkey,注意格式
--column-family hbase表的列族
--where 导入是mysql表的where条件,写法和sql中一样
--split-by CREATE_TIME 默认情况下sqoop使用4个并发执行任务,需要制订split的列,如果不想使用并发,可以用参数 --m 1
二、定时增量导入
1、Sqoop增量导入
sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://192.168.1.9:3306/spider --username root --password root --table TEST_GOODS --columns ID,GOODS_NAME,GOODS_PRICE --hbase-create-table --hbase-table t_goods --column-family cf --hbase-row-key ID --incremental lastmodified --check-column U_DATE --last-value '2017-06-27' --split-by U_DATE

--incremental lastmodified 增量导入支持两种模式 append 递增的列;lastmodified时间戳。
--check-column 增量导入时参考的列
--last-value 最小值,这个例子中表示导入2017-06-27到今天的值
2、Sqoop job
sqoop job --create testjob01 --import --connect jdbc:mysql://192.168.1.9:3306/spider --username root --password root --table TEST_GOODS --columns ID,GOODS_NAME,GOODS_PRICE --hbase-create-table --hbase-table t_goods --column-family cf --hbase-row-key ID -m 1
设置定时执行以上sqoop job
使用linux定时器:crontab -e
例如每天执行

0 0 * /opt/local/sqoop-1.4.6/bin/sqoop job ….
--exec testjob01
三、数据从mysql导入hive中后,出现数据不一致情况
我们运行hadoop fs -cat /user/hadoop/student/part-m-00000,可以看到原来字段与字段之间都用‘,’分隔开,这是sqoop默认的,这时候,如果一个字段值当中包含‘,’,再向hive中插入数据时分隔就会出错。因为hive也是用‘,’分隔的。

解决方法:建议用‘001'来进行sqoop 导入数据时的 分割。也就是--fields-terminated-by 参数。
例子:

sqoop import --connect "jdbc:oracle:thin:@//localhost:1521/student" --password "" --username "" --query "select * from student where name='zhangsan' and class_id='003' and $CONDITIONS" --target-dir "/user/hadoop/student" --fields-terminated-by "001" --verbose -m 1
四、总结
这些只是工作中一些小问题的解决,希望对大家有所帮助~~
原文出处https://www.cnblogs.com/baixianlong/p/10700700.html

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9月前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之如何处理数据同步时(mysql->hive)报:Render instance failed
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
152 0
|
1月前
|
SQL 存储 分布式数据库
分布式存储数据恢复—hbase和hive数据库数据恢复案例
分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件被误删除,数据库不能使用。要求恢复hbase和hive数据库。
76 12
|
7月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
220 3
|
7月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
218 0
|
9月前
|
SQL 存储 关系型数据库
从Hive建表语句到MySQL的转换
【8月更文挑战第11天】
466 7
|
10月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
11月前
|
SQL 关系型数据库 MySQL
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
475 0
|
11月前
|
SQL 关系型数据库 HIVE
sqoop笔记——一次从Hive到PostgreSql的数据迁移
sqoop笔记——一次从Hive到PostgreSql的数据迁移
381 0
|
8月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
176 4
|
7月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
149 4

热门文章

最新文章