精华内容
下载资源
问答
  • Hive 动态分区

    2021-04-07 17:58:48
    hive可以通过分区缩小数据集,避免全表扫描,提高查询速度和性能的。 Hive的分区主要有两种:静态分区和 动态分区 ...Hive动态分区 Hive的动态分区,其实就是把静态分区中的分区值设置为动态的值 insert overwri...

    hive 可以通过分区缩小数据集,避免全表扫描,提高查询速度和性能的。

    Hive 的分区主要有两种:静态分区 和 动态分区

    Hive静态分区

    Hive的静态分区,实际上就是手动指定分区的值为静态值,这种对于小批量的分区插入比较友好。

    在插入语句中如果partition字段指定了具体 的值 ,例如:partition(year=“2020”)

    这样的分区就叫静态分区了,是不是很简单?

    Hive动态分区

    Hive的动态分区,其实就是把静态分区中的分区值设置为动态的值

    insert overwrite table dynamic_partition partition(year=year)

    select user_id, user_name, year from demo

    语句中partition(year=year)会根据具体值的变化而变化,无需手动指定,这对于大批量的分区插入是一个很方便的用法,但需要根据业务需求衡量分区数量是否合理的问题。毕竟分区会占用IO资源,数量越多,IO资源消耗越大,查询时间和性能都是有所损耗的。

    开启动态分区配置:

    -- Hive默认配置值
    -- 开启或关闭动态分区
    hive.exec.dynamic.partition=false;
    -- 设置为nonstrict模式,让所有分区都动态配置,否则至少需要指定一个分区值
    hive.exec.dynamic.partition.mode=strict;
    -- 能被mapper或reducer创建的最大动态分区数,超出而报错
    hive.exec.max.dynamic.partitions.pernode=100;
    -- 一条带有动态分区SQL语句所能创建的最大动态分区总数,超过则报错
    hive.exec.max.dynamic.partitions=1000;
    -- 全局能被创建文件数目的最大值,通过Hadoop计数器跟踪,若超过则报错
    hive.exec.max.created.files=100000;
    
    -- 根据个人需要配置
    set hive.exec.dynamic.partition=true;  
    set hive.exec.dynamic.partition.mode=nonstrict;
    set hive.exec.max.dynamic.partitions.pernode=1000;
    set hive.exec.max.dynamic.partitions=10000;
    set hive.exec.max.created.files=1000000;

     

    参考 :https://zhuanlan.zhihu.com/p/128703618

    展开全文
  • Hive动态分区

    2018-12-21 19:10:47
    Hive动态分区 参数配置及语法 HIVE动态分区参数配置 1. 修改配置 -- 开启动态分区,默认开启 set hive.exec.dynamic.partition=true; -- 严格模式要求只少有一个分区字段是指定值的 set hive.exec.dynamic....

    1. 修改配置

    -- 开启动态分区,默认开启
    set hive.exec.dynamic.partition=true;
    -- 严格模式要求只少有一个分区字段是指定值的
    set hive.exec.dynamic.partition.mode=nonstrict;
    -- 一个DML操作可以创建的最大动态分区数,默认1000
    set hive.exec.max.dynamic.partitions=100000;
    -- 每个mapper和reducer可以创建最大分区数量,默认100
    set hive.exec.max.dynamic.partitions.pernode=100000;
    

    2. 建立结果表

    create table if not exists operation_log (
      user_id bigint,
      opt_type string
    )
    partitioned by (year int, month int, day int)
    row format delimited fields terminated by '\001'
    stored as textfile;
    

    3. 插入数据

    通过 insert into/overwrite 导入数据

    insert
    into table credit.operation_log
    partition(year, month, day)
    select user_id,
      opt_type,
      year(opt_time) as year,
      month(opt_time) as month,
      day(opt_time) as day
    from credit.ods_operation_log;
    

    附:可能遇到的问题

    (1)动态分区数量过小导致的问题

    • FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
    • Fatal error occurred when node tried to create too many dynamic partitions
    • mr.ExecMapper (ExecMapper.java:map(178)) - org.apache.hadoop.hive.ql.metadata.HiveExcept
      ion: Hive Runtime Error while processing row {“user_id”:26044,“opt_type”:“2”,“opt_time”:“2008-04-11 00:01:00”}

    解决方案:增加最大动态分区数量

    (2)retry: Resource temporarily unavailable 同时可能伴随着JVM崩溃状况

    原因:数据量太大,分区数量太多

    解决方案:减少每次进行动态分区的数量,比如在上面的测试例中,手动指定年份分区值,对月和日进行动态分区

    展开全文
  • hive动态分区

    2020-11-03 15:43:35
    hive动态分区 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; 插入报错: Hive Runtime Error: Unable to deserialize reduce input key from x1x49x0x1x49x0x1x104x116x...

    hive动态分区

    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nonstrict;
    插入报错:

    Hive Runtime Error: Unable to deserialize reduce input key from x1x49x0x1x49x0x1x104x116x116x112x58x47x47x98x106x46x53x105x53x106x46x99x111x109x47x0x1x128x19x65x105x255 with properties {columns=reducesinkkey0,reducesinkkey1,reducesinkkey2,reducesinkkey3, serialization.lib=org.apache.hadoop.hive.serde2.binarysortable.BinarySortableSerDe, serialization.sort.order=++++, columns.types=string,string,string,string}
    增加

    set hive.optimize.sort.dynamic.partition = false;
    解决

    展开全文
  • HIve动态分区

    2020-04-01 19:04:07
    分区是hive存放数据的一种方式。...Hive分区分为静态分区和动态分区两种,以下是Hive的静态分区。 动态分区:分区的值是非确定的,由输入数据来确定。 动态分区的相关属性: hive.exec.dynamic.partition=true...

    分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查询效率。Hive分区分为静态分区和动态分区两种,以下是Hive的静态分区。

    动态分区:分区的值是非确定的,由输入数据来确定。

    动态分区的相关属性:

    hive.exec.dynamic.partition=true :是否允许动态分区

    hive.exec.dynamic.partition.mode=strict :分区模式设置

    strict:最少需要有一个是静态分区

    nostrict:可以全部是动态分区

    hive.exec.max.dynamic.partitions=1000 :允许动态分区的最大数量

    hive.exec.max.dynamic.partitions.pernode =100 :单个节点上的mapper/reducer允许创建的最大分区

    动态分区的操作

    ##创建临时表

    create table if not exists tmp

    (uid int,

    commentid bigint,

    recommentid bigint,

    year int,

    month int,

    day int)

    row format delimited fields terminated by '\t';

    ##加载数据

    load data local inpath '/root/Desktop/comm' into table tmp;

    ##创建动态分区表

    create table if not exists dyp1

    (uid int,

    commentid bigint,

    recommentid bigint)

    partitioned by(year int,month int,day int)

    row format delimited fields terminated by '\t';

    ##严格模式

    insert into table dyp1 partition(year=2016,month,day)

    select uid,commentid,recommentid,month,day from tmp;

    ##非严格模式

    ##设置非严格模式动态分区

    set hive.exec.dynamic.partition.mode=nostrict;

    ##创建动态分区表

    create table if not exists dyp2

    (uid int,

    commentid bigint,

    recommentid bigint)

    partitioned by(year int,month int,day int)

    row format delimited fields terminated by '\t';

    ##为非严格模式动态分区加载数据

    insert into table dyp2 partition(year,month,day)

    select uid,commentid,recommentid,year,month,day from tmp;

    分区注意细节

    (1)、尽量不要用动态分区,因为动态分区的时候,将会为每一个分区分配reducer数量,当分区数量多的时候,reducer数量将会增加,对服务器是一种灾难。

    (2)、动态分区和静态分区的区别,静态分区不管有没有数据都将会创建该分区,动态分区是有结果集将创建,否则不创建。

    (3)、hive动态分区的严格模式和hive提供的hive.mapred.mode的严格模式。

    hive提供我们一个严格模式:为了阻止用户不小心提交恶意hql

    hive.mapred.mode=nostrict : strict

    如果该模式值为strict,将会阻止以下三种查询:

    (1)、对分区表查询,where中过滤字段不是分区字段。

    (2)、笛卡尔积join查询,join查询语句,不带on条件或者where条件。

    (3)、对order by查询,有order by的查询不带limit语句。

     

    展开全文
  • hive 动态分区

    2019-10-09 05:45:57
    非常重要的动态分区属性: ...hive.exec.dynamic.partition.mode 打开动态分区后,动态分区的模式,有 strict和 nonstrict 两个值可选,strict 要求至少包含一个静态分区列,nonstrict则无此要求。各...
  • HIVE动态分区

    2018-08-12 00:00:57
    使用分区是为了提高,对数据的查询,分析效率。...这是你的数据中有时间字段,那么你就可以按时间分区,此时开启动态分区载入数据,hive会帮你按照设置好的分区自动划分数据,而不需要你再像静态分区一样手动...

空空如也

空空如也

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

hive动态分区