实验目的

了解hive的原理和安装方式

学习使用MySQL数据库

使用hive进行基本操作

实验原理

1.Hive
  Hive是一个数据仓库技术,包括解释器、编译器、优化器,一次将一个sql语句装化为mapreduce代码,然后对代码进行编译,最后优化执行。实质是一个客户端程序,类似jsp和servlet的关系,实际上jsp也是被转化为servlet的的。hive运行时,元数据是存储在一个关系型数据库里面的。
  Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉 MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。
  Hive没有专门的数据格式。Hive可以很好的工作在 Thrift之上,控制分隔符,也允许用户指定数据格式。

  Hive的设计特点:

支持索引,加快数据查询。

不同的存储类型,例如,纯文本文件、HBase中的文件。

将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。

可以直接使用存储在Hadoop文件系统中的数据。

内置大量用户函数UDF来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF函数来完成内置函数无法实现的操作。

类SQL的查询方式,将SQL查询转换为MapReduce的job在Hadoop集群上执行。

  Hive的缺点

Hive的HQL表达能力有限:有些复杂运算用HQL不易表达;

Hive效率低:Hive自动生成MR作业,通常不够智能;HQL调优困难,粒度较粗;可控性差;

2.Hive系统架构
  1)元数据存储(Metastore)
  Hive的数据由两部分组成:数据文件和元数据;
  元数据存储,Derby只能用于一个Hive连接,一般存储在MySQL。

  2)驱动(Driver):编译器、优化器、执行器
  用户通过下面的接口提交Hive给Driver,由Driver进行HQL语句解析,此时从Metastore中获取表的信息,先生成逻辑计划,再生成物理计划,再由Executor生成Job交给Hadoop运行,然后由Driver将结果返回给用户。

编译器(Hive的核心):1,语义解析器(ParseDriver),将查询字符串转换成解析树表达式;2,语法解析器(SemanticAnalyzer),将解析树转换成基于语句块的内部查询表达式;3,逻辑计划生成器(Logical Plan Generator),将内部查询表达式转换为逻辑计划,这些计划由逻辑操作树组成,操作符是Hive的最小处理单元,每个操作符处理代表一道HDFS操作或者是MR作业;4,查询计划生成器(QueryPlan Generator),将逻辑计划转化成物理计划(MR Job)。

优化器:优化器是一个演化组件,当前它的规则是:列修剪,谓词下压。

执行器:编译器将操作树切分成一个Job链(DAG),执行器会顺序执行其中所有的Job;如果Task链不存在依赖关系,可以采用并发执行的方式进行Job的执行。

  3)接口:CLI、HWI、ThriftServer

CLI(Common LineInterface):为命令行工具,默认服务。bin/hive或bin/hive--service cli;

HWI(Hive WebInterface):为Web接口,可以用过浏览器访问Hive,默认端口9999,启动方式为bin/hive --service hwi;

ThriftServer:通过Thrift对外提供服务,默认端口是10000,启动方式为bin/hive --service hiveserver;

  4)其他服务(bin/hive --service -help)
  metastore(bin/hive --service metastore)、hiveserver2(bin/hive --service hiveserver2);

HiveServer2是HieServer改进版本,它提供给新的ThriftAPI来处理JDBC或者ODBC客户端,进行Kerberos身份验证,多个客户端并发,HS2还提供了新的CLI:BeeLine,是Hive 0.11引入的新的交互式CLI,基于SQLLine,可以作为Hive JDBC Client 端访问HievServer2,启动一个beeline就是维护了一个session。

metastore:在默认的情况下,metastore和hive服务运行在同一个进程中,使用这个服务,可以让metastore作为一个单独的(远程)进程运行。通过METASTOE_PORT环境变量(或者使用-p命令选项)来指定监听的端口号(默认为9083)。

  5)Hadoop:用HDFS进行存储,用MapReduce进行计算
  表中的一个Partition对应表下的一个子目录,每一个Bucket对应一个文件;Hive的默认数据仓库目录是/user/hive/warehouse,在hive-site.xml中由hive.metastore.warehouse.dir项定义;

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

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

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

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

3.Hive安装
  hive一共有三种安装模式,第一种是本地模式,这种模式下hive使用自带的In memory数据库保存元数据,一般用于Unit Test,配置也比较简单。第二种是单用户模式。通过网络连接到一个数据库中,是最经常使用到的模式,第三种是远程服务器模式。用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。我们将会介绍后两种安装方法,这两种都是用的最多比较多的。

4.Hive的数据模型

Database

Table

Partition

Bucket

File(文件格式:TextFile,RCFile,)

  数据类型:
  Numeric(Tinyint,Smallint,Bigint,Float,Double,Decimal(Hive 0.13.0可以自定义精度进行扩展)),Date/Time(TIMESTAMP,DATE(0.12.0支持)),String(STRING,VARCHAR(0.12),CHAR(0.13)),Misc(BOLLEAN,BINARY),Complex(ARRAY、MAP、STRUCT、UNIONTYPE)。

5.Metastore
  metatore是hive元数据的集中存放地。metatore包括两部分:服务和后台数据的存储。默认情况下,metastore服务和hive服务运行同一个JVM中,他包含一个内嵌的以本地磁盘作为存储的Derby数据库实例。这称为metastore配置。
  metastore最大的缺陷是不支持多个客户端同时连接到metastore上,因此只适合用于学习测试的目的,要在实际生产上使用Hive需要将metastore配置为本地模式或者远程模式。

实验环境

1.操作系统
  服务器1:Linux_Centos
  服务器2:Linux_Centos
  服务器3:Linux_Centos
  服务器4:Linux_Centos
  操作机:Windows_7
  服务器1默认用户名:root,密码:123456
  服务器2默认用户名:root,密码:123456
  服务器3默认用户名:root,密码:123456
  服务器4默认用户名:root,密码:123456
  操作机默认用户名:hongya,密码:123456

2.实验工具
  1.Xshell

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_数据

 

Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。  Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。实验中我们用到XShell5,其新增功能有:
  1.有效保护信息安全性;Xshell支持各种安全功能,如SSH1/SSH2协议,密码,和DSA和RSA公开密钥的用户认证方法,并加密所有流量的各种加密算法。重要的是要保持用户的数据安全与内置Xshell安全功能,因为像Telnet和Rlogin这样的传统连接协议很容易让用户的网络流量受到任何有网络知识的人的窃取。Xshell将帮助用户保护数据免受黑客攻击。
  2.最好的终端用户体验;终端用户需要经常在任何给定的时间中运用多个终端会话,以及与不同主机比较终端输出或者给不同主机发送同一组命令。Xshell则可以解决这些问题。此外还有方便用户的功能,如标签环境,广泛拆分窗口,同步输入和会话管理,用户可以节省时间做其他的工作。
  3.代替不安全的Telnet客户端;Xshell支持VT100,VT220,VT320,Xterm,Linux,Scoansi和ANSI终端仿真和提供各种终端外观选项取代传统的Telnet客户端。
  4. Xshell在单一屏幕实现多语言;Xshell中的UTF-8在同类终端软件中是第一个运用的。用Xshell,可以将多种语言显示在一个屏幕上,无需切换不同的语言编码。越来越多的企业需要用到UTF-8格式的数据库和应用程序,有一个支持UTF-8编码终端模拟器的需求在不断增加。Xshell可以帮助用户处理多语言环境。  5. 支持安全连接的TCP/IP应用的X11和任意;在SSH隧道机制中,Xshell支持端口转发功能,无需修改任何程序,它可以使所有的TCP/IP应用程序共享一个安全的连接。

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_02

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_03

 

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_04

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_服务器_05

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_06

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_07

 

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_08

 

 

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_服务器_09

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_10

 

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_11

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_12

 

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_服务器_13

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_数据_14

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_15

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_服务器_16

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_17

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_18

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_java_19

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_20

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_数据_21

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_java_22

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_23

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_24

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_java_25

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_服务器_26

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_27

 

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_数据_28

 

 

<configuration>

<!-- hive数据存储位置 -->

<property>  

  <name>hive.metastore.warehouse.dir</name>  

  <value>/user/hive_alone/warehouse</value>  

</property>  

   <!-- local模式 -->

<property>  

  <name>hive.metastore.local</name>  

  <value>true</value>  

</property>  

   <!-- 连接语句-->

<property>  

  <name>javax.jdo.option.ConnectionURL</name>  

  <value>jdbc:mysql://node9:3306/hive?createDatabaseIfNotExist=true</value>  

</property>  

   <!-- 连接connector-->

<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>123456</value>  

</property>

</configuration>

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_服务器_29

 

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_30

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_服务器_31

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_32

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_数据_33

 

 

<configuration>

<property>

  <name>hive.metastore.warehouse.dir</name>

    <value>/user/hive_remote/warehouse</value>

    </property>

 

<property>

  <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://node9: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>123456</value>

    </property>

    </configuration>

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_服务器_34

 

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_35

 

 

<configuration>

<property>

  <name>hive.metastore.warehouse.dir</name>

    <value>/user/hive_remote/warehouse</value>

    </property>

 

<property>

  <name>hive.metastore.local</name>

    <value>false</value>

    </property>

 

<property>

  <name>hive.metastore.uris</name>

    <value>thrift://node7:9083</value>

    </property>

    </configuration>

吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_java_36

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_37

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_客户端_38

 

 

 

 

 

 

 

 

 

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_hive_39

 吴裕雄--天生自然HADOOP操作实验学习笔记:hive安装_java_40