记一次使用SQOOP抽数到Hive遇到的问题

2023-05-16

记一次使用SQOOP抽数到Hive遇到的问题

前置条件
1.源端数据库类型为Mysql
2.目标端是Hive库,beeline为1.1.0
3.Hive建表时使用了分桶,并且加入了stored as orc参数,之前这么创建是为了能够实现delete等操作
处理过程
最初想要在Sqoop中使用hcatalog直接建表+抽数据,语句是这样写的:

sqoop import --connect jdbc:mysql://XX.XX.XX.XX:19100/pms_scyw --username root --password ********\
--table t_sb_zwyc_xl --null-string '\\N' --null-non-string '\\N' \
--create-hcatalog-table \
--hcatalog-database test1 \
--hcatalog-table t_sb_zwyc_xl_521 \
--hcatalog-storage-stanza "clustered by (obj_id) into 16 buckets stored as orc TBLPROPERTIES('transactional'='true')"
#查到的资料说hcatalog-storage-stanza参数会在建表的时候自动加入到create语句之后,所以这里这样写

满心期待说能直接把工作做完了,结果就报错了,报错结果如下:

19/05/21 10:03:57 INFO hcat.SqoopHCatUtilities: Executing external HCatalog CLI process with args :-f,/tmp/hcat-script-1558404237184
19/05/21 10:04:00 INFO hcat.SqoopHCatUtilities: FAILED: IllegalArgumentException Decimal precision out of allowed range [1,38]
19/05/21 10:04:00 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: HCat exited with status 64
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.executeExternalHCatProgram(SqoopHCatUtilities.java:1148)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.launchHCatCli(SqoopHCatUtilities.java:1097)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.createHCatTable(SqoopHCatUtilities.java:644)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureHCat(SqoopHCatUtilities.java:340)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureImportOutputFormat(SqoopHCatUtilities.java:802)
at org.apache.sqoop.mapreduce.ImportJobBase.configureOutputFormat(ImportJobBase.java:98)
at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:259)
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:692)
at org.apache.sqoop.manager.MySQLManager.importTable(MySQLManager.java:118)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:497)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:605)
at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
at org.apache.sqoop.Sqoop.main(Sqoop.java:236)

看信息似乎是精度超过了限制,怎么会呢,随即看了看Sqoop生成的建表语句,找到端倪了:

    `dqtz` varchar(6),
    `dszll` decimal(12,4),
    `dxmpyxkid` varchar(42),
    `dycs` decimal(65),

可以看到有个字段的类型是decimal(65),允许范围只有1-38,这显然超了,这咋办啊,只有求助谷歌大法了,查来查去也只发现这一个帖子:
帖子链接:https://kb.informatica.com/solution/23/pages/64/524288.aspx
原帖给了一种解决方法

Solution
To resolve this issue, we need to ensure that the Precision and the Scale of the Number datatype changes from 0 to a valid value.
To achieve this, add the following arguments in the JDBC parameters of the Oracle connection.
CatalogOptions=0;NumberPrecisionScale=1
Add above to the Connection string of the JDBC connection used for metadata access.
After modifying the JDBC connection string, re-import the metadata and verify if the right precision is getting imported.

意思就是说在JDBC串后面加上“CatalogOptions=0;NumberPrecisionScale=1”参数,可人家用的源库是oracle,我这是mysql,给的方法也不顶用,就很头大,没办法,只有花点时间自己建表然后把数据导进来了。
捯饬了一段时间,表建好了,ok,再抽一下试试看,这次语句变了下:

sqoop import  --connect jdbc:mysql://XX.XX.XX.XX:19100/pms_scyw --username root --password ********\
 --table t_sb_zwyc_xl --null-string '\\N' --null-non-string '\\N'  \
 --fields-terminated-by '~@!'   -m 2 \
 --hive-overwrite \
 --hcatalog-database test1 \
 --hcatalog-table t_sb_zwyc_xl_ljd \
 --verbose ; 

结果又报错了,好在不是和上次同样的错误,看看是什么问题:

ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hive.hcatalog.common.HCatException : 2016 : Error operation not supported : Store into a partition with bucket definition from Pig/Mapreduce is not supported
at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:109)
at org.apache.hive.hcatalog.mapreduce.HCatOutputFormat.setOutput(HCatOutputFormat.java:70)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureHCat(SqoopHCatUtilities.java:346)
at org.apache.sqoop.mapreduce.hcat.SqoopHCatUtilities.configureImportOutputFormat(SqoopHCatUtilities.java:768)
at org.apache.sqoop.mapreduce.ImportJobBase.configureOutputFormat(ImportJobBase.java:98)
at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:249)
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:665)

舒服了,这次直接是说不支持分桶格式了,查了下,貌似Sqoop暂时还是不支持分桶的表,但是可以通过临时表来进行一下数据的中转,那就先建个临时表,不过这个临时表不加“clustered by (obj_id) into 16 buckets”参数,只在create语句后加上stored as orc TBLPROPERTIES(‘transactional’=‘true’) 就行了,随后就是先把数据抽进临时表,在从临时表insert到目标表去就可以了。
一通操作做完以后验证一下表内的数据也是ok的。
虽然目的是达到了,但是发现了一个问题,在目标表中进行查询时,select后面加了limit的话,Hive服务会直接宕机掉,日志也没有ERROR级别的,很奇怪,只能后面再找找原因

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记一次使用SQOOP抽数到Hive遇到的问题 的相关文章

随机推荐

  • Java例15.13——使用MVC结构计算三角形面积

    MVC是一种通过模型 视图 控制器构造一个软件或组件的理想办法 在例15 13中首先编一个封装三角形的类 xff0c 然后再编写一个窗口 要求窗口使用3个文本框和1个文本区为三角形对象中的数据提供视图 xff0c 其中3个文本框用来显示和更
  • 网卡远程唤醒功能

    远程唤醒功能配置文档 功能简介 网络唤醒功能可以让用户从一个局域网或者是跨网络环境中远程管理一台或者是多台计算机的开关机状态 下面是在ubuntu桌面版上实现远程唤醒功能的设置步骤 第一步 xff1a 计算机BIOS设置 在计算机开机时按F
  • Python 典藏篇-Microsoft Visual C++ 14.0 is required,官方vc++运行库工具一键式解决!

    Python 典藏篇 Microsoft Visual C 43 43 14 0 is required xff0c 官方vc 43 43 运行库工具一键式解决 xff01 前言 xff1a error Microsoft Visual C
  • LwIP在stm32上的无操作系统移植

    LwIP是一个轻型IP协议 xff0c 有无操作系统的支持都可以运行 这里的移植是无操作系统移植 LwIP虽然是一个轻型的IP协议 xff0c 但是TCP IP基本功能都有 而且占用的资源不多 xff0c 非常适合用于嵌入式系统 移植的平台
  • HTML5初体验——蛮神奇的

    记得去年在一个公司实习的时候 xff0c 听当时的领导说起过HTML5 xff0c 当时就大体了解了一下 知道了是新的下一代HTML的新标准 xff0c 去掉了HTML4中的一些标签 xff0c 扩展了一些标签内容 其他的就没有继续深入的去
  • Serilog初识(一)————分别Console、Web程序简单使用Serilog

    Serilog简介 Serilog是 NET应用程序的诊断日志库 它易于设置 xff0c 具有干净的API xff0c 并可在所有最新的 NET平台上运行 虽然它在最简单的应用程序中也很有用 xff0c 但Serilog对结构化日志记录的支
  • intellij idea 开发中,创建Maven项目中的子模块以及相关错误解决

    现在开发 xff0c 很多企业都用Maven来进行项目构建 xff0c 关于Maven的优点 xff0c 本文在此不再赘述 而平时我们学习或者做练习基本用到的都是 单项目 单模块模式 xff0c 即一个Maven项目仅包含一个模块 xff0
  • Windows server 2012 出现大量无名已断开连接用户解决办法

    打开cmd命令窗口 xff0c 执行 taskkill f im winlogon exe t
  • 关于HDFS Balancer的一些小技巧

    关于HDFS Balancer的一些小技巧 前言正文原因分析Balancer工具做均衡带宽设置限定均衡范围参数调优 结语 前言 使用HDFS的过程中 xff0c 难免会出现数据不均衡的情况 xff0c 直观表现就是有的服务器磁盘使用率高的吓
  • 【安全】Goby使用初探

    Goby使用初探 基础配置语言设置npcap安装 使用记录端口扫描 基础配置 语言设置 这里使用的环境是Windows10 64机器 xff0c 下载的方式不再多说 xff0c 直接官网无脑下载即可 xff0c 解压即用 xff0c 不需要
  • 【LDAP】在Centos7环境搭建LDAP服务端

    在Centos7环境搭建LDAP服务端 前言正文OpenLDAP介绍LDIF文件书写规则OpenLDAP部署安装服务配置ldap修改管理员密码初始化配置直接修改配置文件 不建议 使用ldapmodify 建议 添加模式其他配置修改修改服务端
  • 【HDFS】JN回滚大量edit日志导致Namenode主备切换的故障记录

    JN回滚大量edit日志导致Namenode主备切换的故障记录 前言正文问题排查调度服务状态HDFS服务状态 问题分析NameNode日志JN服务器主机指标JN日志 故障恢复 结语过程复盘思考 前言 集群大了 xff0c 这莫名其妙的问题就
  • 【Linux】关于我删文件力度过大导致IO占用太高的解决思路

    关于我删文件力度过大导致IO占用太高的解决思路 前言正文现象描述问题分析处理过程nice命令限制优先级ionice命令限制改造perl脚本 结语 前言 书接上回 xff0c 前两天刚找到删文件性能比较OK的方式后 xff0c 测试没啥问题就
  • ‘docker0‘ already bound to a zone 问题解决

    1 检查firewall cmd中是否存在docker zone 96 firewall cmd get active zones 96 2 如果 docker 区域可用 xff0c 将接口更改为 docker0 xff08 非持久化 xf
  • 【Go】内存模型中的内存可见性

    前言 使用go必然会使用到协程以及其他的并发操作 xff0c 初期学习的时候 xff0c 经常在启动协程时操作变量出现问题 xff0c 要么就是变量没更新 xff0c 要么就是各种崩溃 xff0c 或者vscode报告警之类的 xff0c
  • 【Go】基于telegraf进行自定义插件开发(一)

    基于telegraf进行插件的自定义 xff08 一 xff09 前言正文环境准备目录结构插件结构示例代码注册插件 结语 前言 以长期使用Prometheus和各种exporter的经验来说 xff0c 大量的exporter会占用物理机的
  • 【Go】基于telegraf进行自定义插件开发(二)

    基于telegraf进行自定义插件开发 xff08 二 xff09 前言正文设计开发过程单个服务的处理结构体同时定义了string和数值类型适配本机服务或者多个ip来源 程序打包 结语 前言 书接上会 xff0c 这次记录一下我基于tele
  • 【DataX】数据同步到PG时遇到的分区不存在问题

    数据同步到PG时遇到的分区不存在问题 前言正文问题分析解决方法 结语 前言 大概说下这个问题牵扯出来的背景 xff0c 一个外场项目 xff0c 选型用PG存业务数据 xff0c 然后客户要求保存保留一年的数据 xff0c 运行到现在服务器
  • 【Linux】Sudo的隐晦bug引发的一次业务问题排查

    Sudo的隐晦bug引发的一次业务问题排查 写在前面问题描述问题排查高负载现象排查日志排查跟踪任务调度过程Sudo引发的问题手动复现 问题分析处理方案 写在前面 记录一次生产环境sudo启动进程频繁被Kill且不报错的异常处理过程 xff0
  • 记一次使用SQOOP抽数到Hive遇到的问题

    记一次使用SQOOP抽数到Hive遇到的问题 前置条件 1 源端数据库类型为Mysql 2 目标端是Hive库 xff0c beeline为1 1 0 3 Hive建表时使用了分桶 xff0c 并且加入了stored as orc参数 xf