大数据知识点梳理-Hadoop生态之Hive

1.3.1 *描述-下Hive动态分区和分桶使用场景和使用方法?

    1.分区

      按照数据表的某列或某些列分为多个分区,分区从形式上可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。那其实
这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字 段不存放实际的数据内容,仅仅是分区的表示(伪列)。

      (1) 静态分区
    create table if not exists sopdm.wyp2(id int,name string,tel string)
    partitioned by(age int) row format delimited fields terminated by ,' stored as textfile;
    --overwrite是覆盖,into 是追加
    insert into table sopdm.wyp2 partition(age='25') select id,name,tel from sopdm.wyp;
      (2)动态分区
    --设置为true表示开启动态分区功能(默认为false)
    set hive.exec.dynamic.partition=true;
    -设置为nonstrict,表示允许所有分区都是动态的(默认为strict)
    set hive.exec.dynamic.partition.mode=nonstrict;
    --insert overwrite是覆盖,insert into是追加
    set hive.exec. dynamic.partition.mode=nonstrict;
    insert overwrite table sopdm.wyp2 partition(age) select id,name,tel,age from sopdm.wyp;
      (3)静态分区和动态分区的区别
    静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说:
    静态分区:
      ➢ 静态分区是 在编译期间指定的指定分区名。
      ➢ 支持load和insert 两种插入方式。
      ➢ 适用于分区数少, 分区名可以明确的数据。
    动态分区:
      ➢ 根据分区 字段的实际值,动态进行分区。
      ➢ 是在sql执行的时候进行分区。
      ➢ 需要先将动态分区 设置打开。
          set hive.exec.dynamic.partition.mode=nonstrict
      ➢ 只能用insert方式。
      ➢ 通过普通表选出的字段包含分区字段,分区字段放置在最后,多个分区字段按照分区顺序放置。

 


    2.分桶

      分桶;是相对分区进行更细粒度的划分。分桶将整个数据内容安装某列属性值得hash值进行区分,如要安装name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到
一个文件,取模为2的数据存放到一个文件。
      CREATE TABLE bucketed_ _user (id INT) name STRING) CLUSTERED BY (id) INTO 4 BUCKETS;
      对于每一一个表(table) 或者分区,Hive 可以进一步组 织成桶,也就是说桶是更为细粒度的数据范围划分。Hive 也是针对某- -列进行桶的组织。Hive 采用对列值哈希,然后除以桶|的个数求余的方式决定该条记录存放在哪个桶当中。把表(或者分区)组织成桶( Bucket)
有两个理由: 
    (1)获得更高的查询处理效率
      桶为表加.上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接.两个在(包含连接列的)相同列上划分了桶的表,可以使用Map端连接(Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有-一个相同的列,如果对这两个表都进
行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。
    (2)使取样(sampling) 更高效
      在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

【面试指导&技巧】
      一般问到Hive分区,基本上都会问动态分区和静态分区的区别。所以要能够答出他们之间的区别。同时要清晰用法和应用场景。
      另外,需要能够结合项目说,自己在项目中,哪些地方用了动态分区。-般涉及按日期分区的,比较多是动态分区。
【注意】
      对于分桶表,工作中实际应用场景不多,但需要了解其原理(分桶不要求重点掌握)。

 


1.3.2 Hive是怎么集成HBase的?具体讲讲?

1.首先我们需要将HBase的客户端jar拷入Hive lib目录下。
2.修改hive/conf'下的hive site.xml配置文件,在最后添加如下属性。

<property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop</value>
</property>

3.启动Hive,创建表管理表hbase_ table_ 1,指定数据存储在HBase表中。
类似下面的方式:

stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties
("hbase.columns.mapping"=":key,accuracy:total score,accuracy:question_ count,accuracy:accuracy")
tblproperties("hbase.table.name" = "exam:analysis");

4.往Hive表hbase_ table_ 1表中插入数据。

【注意】
      CDH版本不需要额外操作,相同CDH版本下的软件,已经做过整合。

【面试指导&技巧】
      如果使用CDH版本,回答重点放在集成的代码上。相关的代码格式需要掌握,需要能够答出Stored by的类型,HBaseStorageHandler 的类。
      如果使用的Apache版本,还需要能够答出大致的整合步骤。
 


1.3.3 Hive查询的时候on和where有什么区别?为什么?

    左右关联时:
      ➢ 条件不为主表条件时, 放在on和whe

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值