分享

hive学习笔记

 海浪浪浪浪 2022-04-27

1. metastore是元数据服务,Metastore服务的作用是管理metadata元数据,metadata元数据存储在mysql数据库中,或内置的derby中。

metastore服务配置有3中模式: 内嵌模式,本地模式,远程模式。

a).内嵌模式: 元数据存储在内置的derby中,并且derby和metastore都嵌入到hiveserver进程中,不需要额外开启metastore服务。 一次值能支持一个活动用户。

b).本地模式:只是把derby改成了独立的mysql服务,但启动一个hive服务会一起内嵌启动一个metastore;

c)、远程模式: 独立的mysql服务,独立的metastore服务;

2. hive需要hadoop上运行,所以hadoop中core-site.xml配置文件加上:

<property>
            <name>hadoop.proxyuser.root.hosts</name>
            <value>*</value>
        </property>
        <property>
            <name>hadoop.proxyuser.root.groups</name>
            <value>*</value>
         </property>

3. 服务安装和配置

3.1 hive-site.xml中增加mysql的配置,指定metastore服务地址
                <property>
                    <name>hive.metastore.uris</name>
                    <value>thrift://nodel:9083</value>
                </property>

3.2 同时执行bin/schematool -initSchema -dbType mysql -verbos

3.3 hive --service metastore

4. 客户端

   4.1 bin/hive 第一代客户端 => metastore => mysql

       bin/beeline 第二代客户端 => hiveServer2 => metastore => mysql    

   4.2 使用beeline客户端

    hive --service hiveServer2 启动hiveServer2服务

    ! connect jdbc:hive2://node1:10000

   4.3 idea工具

5. hive读写文件机制

5.1 SerDe: Serializer,Deserializer的简称,目的是用于序列号和反序列化

Read 反序列化: HDFS files => InputFileFormat -> <key,value> => Deserializer -> Row object

Write 序列化: Row object ->Serializer -> <key,value> -> OutputFileFormat -> HDFS files 

5.2 desc formatted tablename命令

5.3 在创建表的时候,有个 row format delimited | serde, 就是 delimited和serde二选其一。默认的分隔符是 ’\001'。

6. 加载静态分区

load data local inpath '/home/hadoop/data/emp.txt' overwrite into table emp partition(分区字段='分区值');

7. 动态分区

set hive.exec.dynamic.partition=true; //是否开启动态分区功能

#指定动态分区模式,分为nonstrict非严格模式和strict严格模式;

#strict模式要求至少有一个分区为静态分区

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

8. 分桶表

8.1 CLUSTERED BY col_name SORTED BY col_name ASC INTO num_buckets BUCKETS;

8.2 set hive.enforce.bucketing=true;

8.3 分桶表数据,需要通过insert into table1 select * from table2来完成数据插入; 

8.4 分桶规则是 hash_function(分桶字段)%num_buckets

8.5 分桶好处: join的字段对标进行分桶操作减少笛卡尔积数量

9. 数据倾斜-join

方案一: 提前过滤,将大数据变成小数据,实现mapjoin

方案二: 使用Bucket Join,如果使用方案一,过滤后数据依旧是大表,那么可以把两张表的数据构建成桶表,实现Bucket Map Join,避免数据倾斜;

方案三: 使用Skew Join,产生数据倾斜的使用Mapjoin,没产生数据倾斜的使用ReduceJoin

10. 自定义udf

10.1 上传udf的jar包:在hive2客户端,使用 add jar hive-udf-1.0-SNAPSHOT.jar;

10.2 create temporary function 函数名 as '类的包路径'; //临时函数

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多