精华内容
下载资源
问答
  • 使用Hive在往分桶表插入数据是报错如下 Job Submission failed with exception 'java.io.IOException(The ownership on the s taging directory /tmp/hadoop-yarn/s

    使用Hive在往分桶表插入数据是报错如下

    
    Job Submission failed with exception 'java.io.IOException(The ownership on the s                                                                                                                       taging directory /tmp/hadoop-yarn/staging/root/.staging is not as expected. It i                                                                                                                       s owned by hive. The directory must be owned by the submitter root or root)'
    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.Ma                                                                                                                       pRedTask. The ownership on the staging directory /tmp/hadoop-yarn/staging/root/.                                                                                                                       staging is not as expected. It is owned by hive. The directory must be owned by                                                                                                                        the submitter root or root
    

    在这里插入图片描述

    解决方案

    执行如下命令,把文件的所属组修改为root
    hdfs dfs -chown -R root:root /tmp
    在这里插入图片描述

    展开全文
  • 分桶语法:创建时使用clustered子句指定要分桶的字段和分桶的数量,也可以指定排序。clustered by(字段名) sorted by (排序字段) into 数量 bucketshive分桶作用:方便抽样:在处理大规模数据集时,在开发和修改...

    一:简介

    分桶规则:对分桶字段值进行哈希,哈希值除以桶的个数求余,余数决定了该条记录在哪个桶中,也就是余数相同的在一个桶中。

    分桶语法:创建表时使用clustered子句指定要分桶的字段和分桶的数量,也可以指定排序。

    clustered by(字段名) sorted by (排序字段)  into 数量 buckets

    hive分桶作用:

    1. 方便抽样:在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。
    2. 提高join查询效率: 对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大减少JOIN的数据量。

    二:示例

    1. 创建分桶表
    create table tbl_bucket(id bigint, name string)clustered by(id) sorted by (id) into 4 bucketsrow format delimitedfields terminated by ","lines terminated by "";
    2. 准备测试数据
    echo "1,name12,name23,name34,name45,name56,name67,name7" > /tmp/bucket.txt
    3. 加载数据

    插入分桶表不能直接使用load data加载数据,需要借助中间表来实现。

    -- 创建中间表hive> create table tbl_tmp(id bigint, name string)row format delimitedfields terminated by ","lines terminated by "";-- 加载数据到中间表hive> load data local inpath '/tmp/bucket.txt' into table tbl_tmp;-- 从中间表中插入数据到分桶表hive> insert into tbl_bucket select * from tbl_tmp;
    868a3a0057f7735ca027357f22ceee12.png
    4. 查看hdfs
    685ac0a7babe464febf0981112bbb79a.png
    hadoop fs -cat /data/hive/warehouse/test.db/tbl_bucket/000000_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_bucket/000001_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_bucket/000002_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_bucket/000003_0
    hive> select * from tbl_bucket;
    949d70964a348cb378cb4acac2cb9cf3.png

    三:Join操作

    1. 准备数据
    echo "1,name12,name23,name34,name45,name56,name67,name7" > /tmp/user.txtecho "1,shanghai,12,beijing,13,shenzhen,24,hangzhou,35,suzhou,46,guangzhou,47,zhengzhou,5" > /tmp/address.txt
    1. 创建分桶表并添加数据
    -- 对id进行分桶hive> create table tbl_user(id bigint, name string)clustered by(id) sorted by (id) into 4 bucketsrow format delimitedfields terminated by ","lines terminated by "";hive> create table tbl_user_tmp(id bigint, name string)row format delimitedfields terminated by ","lines terminated by "";hive> load data local inpath '/tmp/user.txt' into table tbl_user_tmp;hive> insert into tbl_user select * from tbl_user_tmp;-- 对user_id进行分桶hive> create table tbl_address(id bigint, city string, user_id bigint)clustered by(user_id) sorted by (user_id) into 4 bucketsrow format delimitedfields terminated by ","lines terminated by "";hive> create table tbl_address_tmp(id bigint, city string, user_id bigint)row format delimitedfields terminated by ","lines terminated by "";hive> load data local inpath '/tmp/address.txt' into table tbl_address_tmp;hive> insert into tbl_address select * from tbl_address_tmp;
    f9847c829d7979351aea12c59fb683ba.png
    hadoop fs -cat /data/hive/warehouse/test.db/tbl_user/000000_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_user/000001_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_user/000002_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_user/000003_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_address/000000_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_address/000001_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_address/000002_0hadoop fs -cat /data/hive/warehouse/test.db/tbl_address/000003_0

    tbluser和tbladdress相关的数据都分在同一个桶中。

    45c1b3e639d124f84aa885b53011da3c.png
    1. 多表连接
    select tu.id, tu.name, ta.city from tbl_user tuleft join tbl_address ta on tu.id = ta.user_idwhere tu.id <= 3;
    d5c1f4098c9a9ee05afb6beb05ef8d2d.png

    四:Hive 分桶和分区的区别

    hdfs文件个数:

    • 分桶的数量是在创建表时指定的,数量不能更改。如果要更改数量,需要重新插入数据。
    • 分区的数量是根据字段枚举值的个数决定的,系统决定的,分区个数是动态增长的。

    作用:

    • 分区:是用于提高查询效率(避免扫描整个表,只需要扫描相关部分即可。例如日志文件可以按日期天分区,每天一个分区)
    • 分桶:提高join查询效率,方便抽样

    值:

    • 分区中的每条数据中的分区字段值都是完全相同的
    • 分桶中的每条数据的分桶字段值余上分桶数量的结构都是一样的。即分桶中的每个分桶字段值都不一样。
    展开全文
  • 因为数据异常,需要在hive桶表插入历史分区数据,一开始的SQL: insert overwrite table桶表partition(partition='2020-10-30') select * from分区表twhere t.partition='2020-10-30' 报错: org.apache....

    主题:hive插入数据

    因为数据消费异常,需要在hive桶表中插入历史分区数据,一开始的SQL:

    insert overwrite table 桶表 partition(partition='2020-10-30')
    select * from 分区表 t where t.partition='2020-10-30' 

    报错:

    org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10295]: INSERT OVERWRITE not allowed on table with OutputFormat that implements AcidOutputFormat while transaction manager that supports ACID is in use
    	at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:266)
    	at org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:252)
    	at org.apache.hive.jdbc.HiveStatement.runAsyncOnServer(HiveStatement.java:309)
    	at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:250)
    	at org.apache.commons.dbcp2.DelegatingStatement.execute(DelegatingStatement.java:291)
    	at org.apache.commons.dbcp2.DelegatingStatement.execute(DelegatingStatement.java:291)
    	at org.apache.zeppelin.jdbc.JDBCInterpreter.executeSql(JDBCInterpreter.java:580)
    	at org.apache.zeppelin.jdbc.JDBCInterpreter.interpret(JDBCInterpreter.java:692)
    	at org.apache.zeppelin.interpreter.LazyOpenInterpreter.interpret(LazyOpenInterpreter.java:95)
    	at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:490)
    	at org.apache.zeppelin.scheduler.Job.run(Job.java:175)
    	at org.apache.zeppelin.scheduler.ParallelScheduler$JobRunner.run(ParallelScheduler.java:162)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10295]: INSERT OVERWRITE not allowed on table with OutputFormat that implements AcidOutputFormat while transaction manager that supports ACID is in use
    	at org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:388)
    	at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:193)
    	at org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:276)
    	at org.apache.hive.service.cli.operation.Operation.run(Operation.java:324)
    	at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:499)
    	at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:486)
    	at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:78)
    	at org.apache.hive.service.cli.session.HiveSessionProxy.access$000(HiveSessionProxy.java:36)
    	at org.apache.hive.service.cli.session.HiveSessionProxy$1.run(HiveSessionProxy.java:63)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at javax.security.auth.Subject.doAs(Subject.java:422)
    	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
    	at org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:59)
    	at com.sun.proxy.$Proxy33.executeStatementAsync(Unknown Source)
    	at org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:295)
    	at org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:506)
    	at org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1437)
    	at org.apache.hive.service.rpc.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1422)
    	at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
    	at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
    	at org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)
    	at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)
    	... 3 more
    

    SQL改为:

    insert into table 桶表 partition(partition='2020-10-30')
    select * from 分区表 t where t.partition='2020-10-30' 

    成功插入新数据!

    原因应该是和桶表支持事务有关系。

     

    展开全文
  • insert into table t_buck...需要在插入桶的时候hash, 也就是说向分桶表插入数据的时候必然要执行一次MAPREDUCE, 这也就是分桶表的数据基本只能通过从结果集查询插入的方式进行导入 确保reduce 的数量与表中的bu...

    insert into table t_buck select * from t_id;

    分桶的实质就是对 分桶的字段做了hash 然后存放到对应文件中,所以说如果原有数据没有按key hash ,
    需要在插入分桶的时候hash, 也就是说向分桶表中插入数据的时候必然要执行一次MAPREDUCE,
    这也就是分桶表的数据基本只能通过从结果集查询插入的方式进行导入

    确保reduce 的数量与表中的bucket 数量一致,为此有两种做法:
    1.让hive强制分桶,自动按照分桶表的bucket 进行分桶。(推荐)
    set hive.enforce.bucketing = true;

    2.手动指定reduce数量
    set mapreduce.job.reduces = num;
    set mapreduce.reduce.tasks = num;
    并在 SELECT 后增加CLUSTER BY 语句

    展开全文
  • Hive 分桶表

    千次阅读 2017-02-05 14:29:42
    hive 分桶表
  • Hive分桶表总结

    2020-10-22 16:03:53
    Hive分桶表设计原因桶原理创建分桶表载入数据按id升序排序建表桶作用提高join 查询效率提高抽样效率抽样语法 设计原因        Hive中分区表提供了一个隔离数据和优化...
  • hive分桶表详解

    千次阅读 2019-06-21 14:22:43
    为什么要用分桶表? 单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用桶技术将数据更细粒度的划分和管理 分区提供了一个隔离数据和优化查询的便利的方式.但是当分区的数量过多时,会...
  • Hive中如何向分桶表插入数据 我们知道,对于分桶表,是不能使用 load data 的方式进行插入数据的操作的,因为load data 导入数据不会有桶结构. 为了避免针对桶表使用load data 进行插入数据的操作,我们可以...
  • Hive分桶表

    千次阅读 2018-01-30 17:39:09
    1、分桶表建表 drop table xxxxxx_uid_online_buck; create table xxxxxx_uid_online_buck( `datehour` string, `halfhourtype` string, `uid` string, `roomid` string, `roomcreatoruid` string, `sta
  • Hive分桶表&分区表

    2020-10-03 11:39:04
    Hive分桶表&分区表 分区表 Hive存在的问题:hive中没有索引机制,每次查询的时候,hive会暴力扫描整张表.MySQL具有索引机制. 因为没有分区,所以hive搞了一个分区表的机制.在建表的时候,加上分区字段,然后会在表的...
  • hive 分桶表

    2019-11-28 23:13:43
    // 桶表 辅助表 create table b_tb1( id bigint, name string, love array<string>) row format delimited fields terminated by '\t'; //导入数据 load data local inpath '/data/log/tong.txt' into ta...
  • hive分桶表的学习

    2020-08-29 13:15:00
    每一个或者分区,hive都可以进一步组织成是更细粒度的数据划分,他本质不会改变或分区的目录组织方式,他会改变数据在文件中的分布方式。 分桶规则:对分桶字段值进行哈希,哈希值除以的个数求余,余数...
  • 一文彻底学会hive分桶表(实战详解)

    千次阅读 多人点赞 2020-03-30 19:05:58
    二、分桶表实战2.1、创建一个分桶表2.2、准备数据2.3、向分桶表导入数据2.3.1、错误导入示范(引出桶的本质)2.3.2、正确导入示范(引出桶规则)2.4、桶抽样三、总结3.1、分桶表的优点3.2、常用操作3.3、分桶...
  • 一、桶简介 桶是通过对指定列进行哈希计算来实现的,通过哈希值将一个列名下的数据切分为一组桶,并使每个桶对应于该列名下的一个存储文件 对于每一个表或者分区,Hive ...1. 创建桶表: create table student(...
  • Hive分桶表及抽样查询

    2019-07-18 19:24:54
    Hive分桶表 先介绍一下Hive桶。 桶是比表或分区更为细粒度的数据范围划分。针对某一列进行桶的组织,对列值哈希,然后除以桶的个数求余,决定将该条记录存放到哪个桶中。 好处: 1、获得更高的查询处理效率。 2、使...
  • Hive分桶表学习总结

    千次阅读 2018-12-12 09:24:18
    学习总结一下Hive分桶表桶规则:对桶字段值进行哈希,哈希值除以桶的个数求余,余数决定了该条记录在哪个桶中,也就是余数相同的在一个桶中。 优点:1、提高join查询效率 2、提高抽样效率 1、建表 通过...
  • 创建桶的表 create table t_buck(id int...分桶表数据不是直接导入(load)的,是从其他表里面查出来插入的 ,插入时会在语句中加入约束的语句。 hive的存储格式介绍 hive表的存储格式; ORC格式的使用 hive...
  • 问题描述:创建分桶表时按字段id进行桶,桶数为5,但实际在HDFS上存储却只有一个文件 建表语句: create table bucket_test ( id bigint comment 'ID', name string comment '名字' ) comment '分桶表测试' ...
  • 简单Hive分桶表使用

    2019-12-23 10:45:27
    如何使用分桶表 create table teacher(name string) clustered by (name) into 3 buckets row format delimited fields terminated by ’ ';
  • 在使用presto查询 hive分桶表时,遇到报错,这里整理并记录一下。 报错内容 Error running query: Hive table 'tj_tmp.student_bucket' is corrupt. The number of files in the directory (16) does not match ...
  • spark-sql执行sql语句,往hive区分桶表插入数据
  • Hive分桶

    2021-10-10 19:54:47
    作用:在往分桶表插入数据的时候,会根据 clustered by 指定的字段 进行hash分区 对指定的buckets个数 进行取余,进而可以将数据分割成buckets个数个文件,以达到数据均匀分布,可以解决Map端的“数据倾斜”问题,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,988
精华内容 1,595
关键字:

hive分桶表插入数据