前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【踩坑实录】-bucketId out of range: -1 (state=,code=0)

【踩坑实录】-bucketId out of range: -1 (state=,code=0)

作者头像
chimchim
发布2022-11-13 13:25:19
8060
发布2022-11-13 13:25:19
举报
文章被收录于专栏:chimchim要努力变强啊

目录

目录

一、背景

二、代码

1.hive 建表语句

2.datax自定义json

3.查询语句

三、定位问题

四、解决方案

1.load data

2.设置参数

3.文件格式



一、背景

datax同步postgre库表数据到hive表,同步完成后select报错

java.io.IOException: java.lang.IllegalArgumentException: Bucket ID out of range: -1

二、代码

1.hive 建表语句

代码语言:javascript
复制
create table if not exists hive_table_name(

col1 string,

col2 srting)

row format delimited fields terminated by '\t'
stored as orc;

2.datax自定义json

代码语言:javascript
复制
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "postgresqlreader",
                    "parameter": {
                        "connection": [
                            {
                                "jdbcUrl": ["jdbc:postgresql://ip:port/db"],
                                "querySql": ["select col1,col2 from pg_table_name"],
                            }
                        ],
                        "username": "user",
                        "password": "pwd"
                    }
                },
               "writer": {
                                "name": "hdfswriter",
                                "parameter": {
                                        "defaultFS": "hdfs://ip:port",
                                        "fileType": "orc",
                                        "path": "/user/hive/warehouse/db_name.db/hive_table_name",
                                        "fileName": "hive_table_name",
                                         "column": [
                                                    {"name":"col1","type":"string"},
                                                    {"name":"col2","type":"string"}
                                                    ],
                                        "writeMode": "append",
                                        "fieldDelimiter": "\t",
                                        "encoding": "utf-8"
                                }
                        }
                }],
                "setting": {
                        "speed": {
                                "channel": "1"
                        },
                        "errorLimit": {
                                "record": 0,
                                "percentage": 0.02
                        }
                }
        }
}

3.查询语句

代码语言:javascript
复制
select * from hive_table_name;

三、定位问题

hive3.1默认是桶表,但是我没有分桶,桶数量就是-1,这里就会报错。

定位原因为hdfs文件在hive中不可访问,没有加载到hive表中。

hadoop3.1建表默认创建acid表,acid表只支持ORC格式

四、解决方案

1.load data

手动将hdfs文件映射到hive表中

代码语言:javascript
复制
load data inpath '/user/hive/warehouse/db_name.db/hive_table_name' 
overwrite into table hive_table_name; 

2.设置参数

hive.fetch.task.conversion

这个属性有3个可选的值:

none :关闭fetch task优化

minimal:只在select *、使用分区列过滤、带有limit的语句上优化

more:在minimal的基础上,select 不仅可以是*,还可以单独选择几列,并且fitler也不再局限于分区字段,同时支持虚拟列(别名)

代码语言:javascript
复制
set hive.fetch.task.conversion=none; 

3.文件格式

建表语句建成textfile格式(一劳永逸)

代码语言:javascript
复制
create table if not exists hive_table_name(

col1 string,

col2 srting)

row format delimited fields terminated by '\t'
stored as textfile;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、代码
    • 1.hive 建表语句
      • 2.datax自定义json
        • 3.查询语句
        • 三、定位问题
        • 四、解决方案
          • 1.load data
            • 2.设置参数
              • 3.文件格式
              相关产品与服务
              大数据
              全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档