• 22-hadoop-hive搭建


    1, hive简介

    hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。是为了非java人员对hdfs进行mapreduce操作的

    数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制,简而言之,数据仓库是用来做查询分析的数据库,基本不用来做插入,修改,删除

    hive的本质为: 线下数据挖掘和分析使用的工具

    解释器: 解释sql语句
    编译器: (将sql编译为maperduce), 
    优化器: 对编译过程优化

    2, hive结构

     (1)用户接口主要有三个:CLI,Client 和WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。WUI是通过浏览器访问Hive。

    (2)Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

    (3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

    (4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

    执行: 

    •编译器将一个Hive QL转换操作符
    •操作符是Hive的最小的处理单元
    •每个操作符代表HDFS的一个操作或者一道MapReduce作业

    3, 实现原理

    Operator都是hive定义的一个处理过程
    •Operator都定义有:
    •protected List <Operator<?  extends Serializable >> childOperators; 
    •protected List <Operator<?  extends Serializable >> parentOperators; 
    •protected boolean done; // 初始化值为false
    •所有的操作构成了 Operator图,hive正是基于这些图关系来处理诸如limit, group by, join等操作

    使用Antlr解析hql语句的

     

    4, 执行流程

    hive通过 ExecMapper 和 ExecReduce 执行mapreduce任务

    TableScanOperator    扫描hive表数据
    ReduceSinkOperator    创建将发送到Reducer端的<Key,Value>对
    JoinOperator    Join两份数据
    SelectOperator    选择输出列
    FileSinkOperator    建立结果数据,输出至文件
    FilterOperator    过滤输入数据
    GroupByOperator    GroupBy语句
    MapJoinOperator    /*+mapjoin(t) */
    LimitOperator    Limit语句
    UnionOperator    Union语句

     5, 三种模式

    Derby: 单用户, 内置数据库
    Mysql: 单用户, 使用mysql
    meta: 多用户, 区分客户端和服务端

    需要Mysql, ( http://www.cnblogs.com/wenbronk/p/6840484.html )

    1) derby模式的搭建: 

    1, 上传解压

    2, 修改配置文件

    cp hive-default.xml.template hive-site.xml

    将hive-site.xml中的所有信息删除, 更换为一下配置文件

    <configuration>
        <property>  
        <name>javax.jdo.option.ConnectionURL</name>  
            <value>jdbc:derby:;databaseName=metastore_db;create=true</value>  
        </property>  
           
        <property>  
          <name>javax.jdo.option.ConnectionDriverName</name>  
            <value>org.apache.derby.jdbc.EmbeddedDriver</value>  
        </property>  
           
        <property>  
              <name>hive.metastore.local</name>  
            <value>true</value>  
        </property>  
           
        <property>  
              <name>hive.metastore.warehouse.dir</name>  
              <value>/user/hive/warehouse</value>  
        </property>  
    </configuration>

    3, 更改hadoop的jline.jar

    因为hadoop安装的为2.5.1, hive的版本是1,2,1 , 所以更换hadoop的hive链接包, jline

    将 HADOOP_HOME//share/hadoop/yarn/lib 下的jline 更换为  jline.2.12.jar

    4, 添加环境变量(可选)

    将 HIVE_HOME 添加到环境变量中

    export HIVE_HOME=/opt/apache-hive-1.2.1-bin
    export PATH=$PATH:$HIVE_HOME/bin

    5, 启动

    hive

    2) mysql模式安装

    1, 需要mysql的环境

    此处mysql和hive为同一台机器

    /* 创建hive的专用数据库(需要创建, 不然报错) */

    create database hive;

    2, 将 mysql的链接jar放进jdbc中

    3, 更改配置文件

    <configuration>
    <property>  
      <name>hive.metastore.warehouse.dir</name>  
        <value>/user/hive_remote/warehouse</value>  
        </property>  
           
    <property>  
      <name>hive.metastore.local</name>  
        <value>true</value>  
        </property>  
           
    <property>  
      <name>javax.jdo.option.ConnectionURL</name>  
        <value>jdbc:mysql://192.168.208.109:3306/hive_remote?createDatabaseIfNotExist=true</value>  
        </property>  
           
    <property>  
      <name>javax.jdo.option.ConnectionDriverName</name>  
        <value>com.mysql.jdbc.Driver</value>  
        </property>  
           
    <property>  
      <name>javax.jdo.option.ConnectionUserName</name>  
        <value>root</value>  
        </property>  
           
    <property>  
      <name>javax.jdo.option.ConnectionPassword</name>  
        <value>123</value>  
        </property>  
    
    </configuration>

    4, 启动

    ./hive

    3), metastore 模式

    配置文件不同: 

    service端

    <configuration>  
      
    <property>  
      <name>hive.metastore.warehouse.dir</name>  
      <value>/user/hive/warehouse</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionURL</name>  
      <value>jdbc:mysql://192.168.208.109:3306/hive?createDatabaseIfNotExist=true</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionDriverName</name>  
      <value>com.mysql.jdbc.Driver</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionUserName</name>  
      <value>root</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionPassword</name>  
      <value>123</value>  
    </property>  
    </configuration>  

    client端: 

    <configuration>  
      
    <property>  
      <name>hive.metastore.warehouse.dir</name>  
      <value>/user/hive/warehouse</value>  
    </property>  
       
    <property>  
      <name>hive.metastore.local</name>  
      <value>false</value>  
    </property>  
      
    <property>  
      <name>hive.metastore.uris</name>  
      <value>thrift://192.168.208.109:9083</value>  
    </property>  
      
    </configuration>  

    2, 启动hive服务端程序

     hive --service metastore  

    3, 客户端直接使用hive命令即可

    root@my188:~$ hive   

    Hive history file=/tmp/root/hive_job_log_root_201301301416_955801255.txt  

    hive> show tables;  

    OK  

    test_hive  

    Time taken: 0.736 seconds  

      4, 验证是否成功

    进入hive后, 创建一个表, 看表信息是否存储在mysql中了( 此处使用的第二种模式) 

    CREATE TABLE xp(id INT,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '	';

    然后进入mysql下, 在hive或 hive_remote 数据库下, 有hive自己创建的表信息

     系列来自尚学堂视频

  • 相关阅读:
    Linux 命令二
    配置文件加载
    线程 wait 等待与notify 唤醒 使用 java 代码
    maven setting.xml
    Spring Boot入门——文件上传与下载
    写入txt 、读取csv、读取txt
    Java使用HttpClient上传文件
    kafka实战
    文本去除html标签
    sprig aop事务配置
  • 原文地址:https://www.cnblogs.com/wenbronk/p/7351951.html
Copyright © 2020-2023  润新知