【hive】hive入门详解

Apache Hive是一个由Facebook开源的用于大数据分析的SQL-like工具,它将SQL查询转化为MapReduce任务运行在Hadoop上。本文介绍了Hive的基本概念、与MySQL的差异、常用版本、安装步骤、元存储管理以及数据加载和运行模式。学习Hive前需了解Hadoop、MapReduce和MySQL基础。

hive 介绍
    Apache 的顶级项目,(是一个 java 程序)
    Facebook 公司 (2008 年) 开源给 Apache 基金会!
    hive 官网: http://hive.apache.org/
    hive 到底是干什么的
        将 SQL 转换成 MapReduce 程序,并将程序提交到 YARN 集群运行,不会自动生成结果文件,
        直接读取 HDFS 上的数据进行处理.
        sql query (查询):它的查询类似于 MySQL 数据库中 SQL 查询!
---------------------------------------------------------------------------------------------------------------------------

概念

    SQL on hadoop (不仅仅是数据库)
        阵营:建立在 Hadoop 之上的提供 SQL 方式分析数据的框架
        hive 框架是此类型框架的基础框架
----------------------------------------------------------------------------------------------------------------------------

学好 hive 前置:

        Hadoop:MapReduce,YARN,HDFS
        mysql:DDL (对表的操作)/DML (对数据的操作)
-----------------------------------------------------------------------------------------------------------------------------

程序对比:    

      数据:
        hadoop hive spark sqoop
        java     hadoop    spark
        
      mapreduce 的 wordcount 程序:
        map: 分割,转换
        (hadoop,1),hive,1),spark,1)...
        reduce: 相加
      
      hive 的 wordcount 功能:
      select count (单词字段) from 表 group by 单词字段
-----------------------------------------------------------------------------------------------------------------------------

hive 常用版本

    0.13.1    2014 年发布,经典版本
    1.2.1: 较新版本 (常用) 底层推荐使用 MapReduorce;
    2.X:2017 年发布,底层推荐使用 spark,TeZ 分析数据,而不是 MapReduce
    hive1.2 版本的下载地址: https://archive.apache.org/dist/hive/hive-1.2.1/
------------------------------------------------------------------------------------------------------------------------------hive 安装
    上传、解压、重命名
    修改配置
        hive-env.sh (Hadoop_home)
    创建数据仓库:
        hive 数据需要保持到 HDFS 上,(hdfs 上需要有 hive 所运行的路径和权限!)
         创建对应的目录和赋予权限
            bin/hdfs dfs -mkdir -p /tmp
            bin/hdfs dfs -mkdir -p /user/hive/warehouse
            bin/hdfs dfs -chmod g+w /tmp
            bin/hdfs dfs -chmod g+w /user/hive/warehouse
        hive 配置官方网址: https://cwiki.apache.org/confluence/display/Hive/GettingStarted
------------------------------------------------------------------------------------------------------------------------------hive 和 mysql 的差异:
    共性:
    database:数据库,命名空间
        将同一类的表放到此空间下,方便进行管理操作
    table:表,字段:数据类型和字段名称
    
    区别:
    hive 没有真正意义上的数据表;它的数据表是
        映射表和对应的数据文件所组成的!
        对应的数据文件就是存储在 HDFS 上的文件。
----------------------------------------------------------------------------------------------------------------------------

使用 hive:

    交互式命令 (command line interface) (理解为客户端!CLI)

    bin/hive
----------------------------------------------------------------------------------------------------------------------------
metastore (元存储:记录表信息和映射信息等的信息)
    hive 中无论是创建的表还是数据库,他们元数据 metaData 需要存储
    默认情况下,存在 derby 数据库中,(因为 derby 数据库只支持一个会话,所以要是将元文件存储在 derby 数据库中,hive 就只能开启一个会话,
    为了让 hive 能打开多个会话,所以要将元数据存储到 mysql 上!因为 mysql 能开启多个会话!)
    derby 是嵌入式数据库
        每次仅支持一个会话访问
    在企业开发中,我们通常将 metaData 存储到 MySQL 数据库中(官方推荐)    
    
    将 metaData 存储到 MySQL 中
        删除 metastore_db 和 derby.log
        在 mysql 上创建一个存放元数据的数据库:
            create databases Metastore
        
        配置
            创建 conf/hive-site.xml (在 hive 的 cong 目录下)
            配置 hive-site.xml 文件
                官方配置:https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin
                
                -> 指定元数据存放在 mysql 上
                                    javax.jdo.option.ConnectionURL                

                                    jdbc:mysql:// 所在的数据库 / 数据库名?createDatabaseIfNotExist=true

                -> 设置 mysql 的驱动 (保证数 hive 的 lib 目录下有 jar 包存在)
                    javax.jdo.option.ConnectionDriverName

                                    com.mysql.jdbc.Driver        

                -> 告知数据库的用户名
                    javax.jdo.option.ConnectionUserName

                        <user name>

                -> 告知数据库的用户密码
                    javax.jdo.option.ConnectionPassword

                           <password>

导入 MySQL 驱动包 (https://pan.baidu.com/s/1p4g998gJgrIApuktMMbq-A)

                将 jar 包导入到 hive 的 lib 目录下

验证:
            -1-> 多个窗口启动交互式命令(bin/hive)
            -2-> 去 MySQL 看看 metastore 数据库是否存在
            -3-> 瞅瞅 metastore_db 和 derby.log 是否存在

----------------------------------------------------------------------------------------------------------------------------
为方便开发调试,设置 hive-site.xml 文件
    显示当前所在数据库
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>
    设置 hive 的结果显示字段名
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>

导入数据方式
    方式一:使用 load 加载数据
        加载本地数据
            LOAD DATA LOCAL INPATH '/opt/datas/sw17-top11-dl-sh.anon.csv' 
        加载 hdfs: 将文件移动(mv)到了表对应的目录下面
            LOAD DATA  INPATH '/opt/datas/sw17-top11-dl-sh.anon.csv'
            
    方式二:使用 HDFS 的 PUT 功能
        直接使用 HDFS 的 Put 上传命令,将数据上传到指定目录
        企业中用的比较多

----------------------------------------------------------------------------------------------------------------------------

运行模式
    MapReduce 的运行模式
        集群模式:YARN
        本地模式:IDEA (Linux 系统时常用)
        
    hive 的运行模式:
    当然 hive 也有两种模式;
        集群模式:就是在 yarn 上运行,生成 MapReduce 程序到 yarn 上运行!
        本地模式:就是不编译 MapReduce 程序,直接当做数据库操作!(但是只有小于 128M 的文件才信)
    
    设置方式:
        -> 配置文件中 hive-site.xml
            <property>
                <name>hive.exec.mode.local.auto</name>
                <value>true</value> 
            </property>
        ->hive cli :仅当前会话有效
            设置:set hive.exec.mode.local.auto=true
            查看:set hive.exec.mode.local.auto
    功能:
        如果设置为 true,
        hive 框架会根据一定的条件判定,走本地模式还是集群模式
            如果处理的数据块 < 128M 且 mapTask 个数 < 5 才能走本地,
            要是不满足这两个条件,就会走集群模式!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值