zoukankan      html  css  js  c++  java
  • 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自己创建的表信息

     系列来自尚学堂视频

  • 相关阅读:
    PAT 1097. Deduplication on a Linked List (链表)
    PAT 1096. Consecutive Factors
    PAT 1095. Cars on Campus
    PAT 1094. The Largest Generation (层级遍历)
    PAT 1093. Count PAT's
    PAT 1092. To Buy or Not to Buy
    PAT 1091. Acute Stroke (bfs)
    CSS:word-wrap/overflow/transition
    node-webkit中的requirejs报错问题:path must be a string error in Require.js
    script加载之defer和async
  • 原文地址:https://www.cnblogs.com/wenbronk/p/7351951.html
Copyright © 2011-2022 走看看