Hive简介及安装

 
 ======================================================================Hive=================================================================================================

 1.数据库存储业务数据,而数据仓库存储的是历史数据!
   数据仓库的设计是反范式的,保证数据的完整性,数据库是根据范式设计的;
   数据仓库主要是面向数据分析,数据挖掘用的!而数据库是面向我们编程的业务的!
 
 2.HIve运行时,元数据存储在关系型数据库里面(性能高),放在HDFS上就不是很合适了,HIve默认自带的一个In-Memory的Derby数据库!
 3.HUE:图形化工具!
 4.Hive这一块北风网讲解的不错!
 5.Hive运行的三种方式:(根据:元数据存储位置和元数据管理来划分的)
     1).local模式(本地模式):利用Hive自带的Derby数据库!--------自己开发测试的时候用!
     2).单用户模式:通过网络连接到一个数据库中,但是这种模式:同一个时间只能允许同一个用户访问,即不能同时访问!------》测试的时候用!
     3).远程服务器模式(多用户模式):利用MetaStoreServer(单独的一台服务器来跑,用来管理元数据信息,但是元数据信息是存储在mysql数据库中的)--------》项目上线的时候用!
      单用户模式与远程服务服务器模式的区别:MetaStoreServer和Hive Client 客户端 都在同一台机器上!
    
     注:远程服务器模式。用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库
    
    
  Hive在工作中一般不会再专门找一台服务器去做,一般会在当前Hadoop集群的机器上(HDFS+YARN)工作!
  要先启动Hadoop集群(尤其是HDFS集群),然后再启动Hive,因为Hive的数据是存在HDFS中,当HDFS还处于安全模式的时候,有可能启动Hive也会失败,所以最好先启动HDFS一会儿之后再启动Hive,当然也可以强行退出安全模式,最好不这样整(HDFS在安全模式下会对元数据整理)!
 
 
6.在单用户模式和远程服务器模式的时候:Hive运行时,元数据存储在关系型数据库里面
 
7.Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
 
8.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任务)。  

    
    
9.企业中很少对hive做高可用,因为它的数据是保存在HDFS上的,不会丢失,而元数据是保存在mysql数据库中的也不会丢失,如果hive挂了,再启动一个Hive就好或者再搭建一个HIve就好!

10.Hive的数据类型
    1) primitive_type
        –| array_type
        –| map_type
        –| struct_type
    2) primitive_type
        –|TINYINT
        –| SMALLINT
        –| INT
        –| BIGINT
        –| BOOLEAN
        –| FLOAT
        –| DOUBLE
        –| STRING    
    
11.hive sql分析结构化的文本文件数据的时候,就可以用row_format来指定分隔符!
  具体由:fields terminated by来指定:通过拆分将文本文件对应到数据仓库中的表中!
          collection items指定集合的每一项是怎么分割的;
          Map keys terminated by指定map键值对之间是怎么分割的!
          lines terminated by指定行与行之间的分割符,默认就是换行符!
          
  file_format:对应文件在HDFS上存储的格式:stored as 默认是TextFile格式的!
              当然可以压缩:减少数据占用的空间,但压缩和加压缩都需要时间,同时带来CPU上的消耗!
              
 
 12.load data local(local用来表示你存储的数据是在本地还是HDFS上!)
 
 13.可以用location指定数据存在HDFS上的位置!
 
 14.external外部表与内部表的区别:内部表删除数据后,HDFS上的数据和内存中的元数据也丢失了,外部表数据删除之后,HDFS上的数据是不会丢失的,外部表只是删除了元数据!
 
 15.创建表的几种方式:
    1.create table db01(age int,name string)
    2.create table db02... as select * from db03;(这种情况做了两件事:1.根据db03的字段创建db02; 2.将db03中的数据放入到db02中)--------》一般用在创建中间表的时候!
    3.create table db02 like db03(这种方式:只是将db03的表结构给db02)!
    
 
   
11.在实际生产中用load命令向表中加载数据,而不是insert命令,执行效率太慢!

12.hive对类SQL进行了优化,有一部分数据是经过优化的,不需要转化为MapReduce,有一部分是需要转化为MapReduce的!

13.配置项: hive.metastore.warehouse 代表数据在HDFS上(不是本地哦,因为Hive中的数据是存储在HDFS上) 的数据存储目录!


14.在Hive中数据类型没有varchar,有String!



==================================Hive配置===================================================    

第一种: 注:这里把 hive 的服务端和客户端都放在同一台服务器上了。服务端和客户端可以拆开,
    
9.METADATA和客户端的管理在一起的时候的配置!

  yum install mysql-server!不要写成mysql哦,这仅仅是客户端(node01上)!
  service mysqld start!
  输入mysql进入mysql命令行:
   grant all privileges on *.* TO 'root'@'%' identified by '123' with grant option;
   
  删除多余会对权限造成影响的数据delete from user where Host !=‘%’
  flush privileges;(刷新权限)
   
  select host ,user from user
  将数据库表中的user中的数据其余数据都删掉(否则权限验证有冲突),有的需要验证,有的不需要验证!
 
10.hive安装到node02:
   配置环境变量Hive的
   source /etc/profile
   
   hive的配置文件夹下:
   改为:hive-site.xml
   并设置里面的内容!
       <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.255.11/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>
   
   导入mysql的jar包到hive的lib包下!
   
   hadoop的驱动包在hadoop的安装目录的share/hadoop/目录下!
   将hive的lib包中的jline包替换Hadoop的share/hadoop/yarn/lib目录下的jline包(jar包版本不一致!),删掉Hadoop下的share/hadoop/yarn/lib目录下jline的jar包!
 
 =========================================第二种Hive安装================================================= ====================
 
第二种:多用户安装的时候(metaServer与hive客户端是分开的时候):
 
 多用户安装:
   node01安装mysql
   安装hive
   配置环境变量并source /etc/profile
   node03:安装metaserver(服务端配置);将连接mysql的驱动包jar包加入到hive下的lib包下!
   
   <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.255.11: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>
   
   
   node04:安装 hive客户端
    配置node04的conf文件夹下的配置文件:
   <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.255.13:9083</value>
    </property>
    </configuration>
   
   
   安装hive mv hive-default... hive-site.xml
   
   配置环境变量     并  source /etc/profile

   
     将hive的lib包中的jline包替换Hadoop的share/hadoop/yarn/lib目录下的jline包(jar包版本不一致!),删掉Hadoop下的share/hadoop/yarn/lib目录下jline的jar包!

   
   
   在node03启动 hive 服务端程序
   hive --service metastore(也可以在命令下加&字符,后台运行) ---metaServer默认启动的端口号是:9083
   
   在node04客户端直接使用 hive 命令即可
 
   启动的时候先启动metaServer,再启动hive,需要用hive客户端连接metaServer服务器!
   
   
   
   
   客户端启动的时候要注意:
    [ERROR] Terminal initialization failed; falling back to unsupported
    java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
    at jline.TerminalFactory.create(TerminalFactory.java:101)
    错误的原因: Hadoop jline 版本和 hive 的 jline 不一致
 
==================================================HIVE中的HQL练习==============================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值