Hadoop学习之Hive学习指南

来源:互联网 发布:lol网络异常 编辑:程序博客网 时间:2024/05/16 10:50
  • Hive介绍
  • Hive安装
  • Hive的技术架构
  • Hive和关系型数据的区别

Hive介绍

  1. Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射成一张数据库表,并提供完整的sql查询功能,可以将SQL语句转换为MapReduce任务进行运行,其优点是学习成本低,可以通过SQL语句快速实现简单的MapReduce统计,不必开发新的MapReduce应用,十分适合数据仓库的统计分析。
  2. Hive是建立在Hadoop上的数据仓库基础架构。它提供了一系列的工具,可以用来对数据进行提取转换加载(ETL)。这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的数据库查询语言,叫做HQL。它允许熟悉SQL的用户查询数据,同时这个语言也允许熟悉MapReduce的开发者开发自定义的Map和Reduce来处理内建的Map和Reduce无法完成的复杂的分析工作。

Hive的安装

  1. 官方文档提供两种下载Hive的方法,一种直接下载安装包,另外一种方式是下载源文件,并编译。这里我用的是第一种方法,简单方便,有兴趣学习源码的童鞋可以采用第二种方法。
  2. 下载完成之后,解压安装包,这里以apache-hive-2.1.0为例,并设置Hive的环境变量,即配置HIVE_HOME,确保HADOOP_HOME已经设置好(Linux系统下配置环境变量的方法就不在此累述了)。
  3. 然后在HDFS创建目录来保存数据。

    hadoop fs -mkdir /tmp
    hadoop fs -mkdir /user/hive/warehouse
    hadoop fs -chmod g+w /tmp
    hadoop fs -chmod g+w /user/hive/warehouse

  4. 在启动hive之前,首先要启动hdfs。
    新版本的HiveServer2已经代替了之前的HiveServer2,现在我们用HiveServer2来启动hive。

    • 先用schematool工具来配置数据库schematool,如果使用mysql进行配置,拷贝MySQL驱动文件到hive的lib目录下,修改hive-site.xml文件如下

      <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://localhost:3306/mysql?createDatabaseIfNotExist=
      true</value>
      <description>JDBC connect string for a JDBC metastore
      </description>
      </property>
      <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      </description>
      </property>
      <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>hive</value>
      <description>username to use against metastore database
      </description>
      </property>
      <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>hive</value>
      </description>
      </property>

      bin/schematool -dbType derby -initSchema或
      bin/schematool -dbType mysql -initSchema

    • HiveServer2拥有自己的CLI叫做Beeline。使用Beeline运行Hive如下

      bin/hiveserver2
      bin/beeline -ujdbc:hive2://$HS2_HOST:$HS2_PORT
      测试可用bin/beeline -u jdbc:hive2://
      注意启动hive之前,先把HIVE_HOME下jdbc目录下的jar放到lib目录下。

    • 启动Hcatalogserver

      $HIVE_HOME/hcatalog/sbin/hcat_server.sh

      使用Hcatalog

      $HIVE_HOME/hcatalog/bin/hcat

      运行网页版

      $HIVE_HOME/hcatalog/sbin/webhcat_server.sh

Hive的技术架构

首先我们来看一下架构图:
这里写图片描述

Hive架构包括以下组件:
1. Driver组件:该组件包括Complier、Optimizer和Executor,它们的作用是将我们写的HQL进行解析、编译优化、生成执行计划,然后调用底层的mapreduce计算框架。
2. MetaStore组件:元数据服务组件,Hive的元数据存储在关系型数据库里,Hive支持的关系型数据库有Derby、MySql。元数据对Hive非常重要,因此Hive支持把MetaStore服务独立出来,安装到远程的服务器集群里,从而解耦Hive服务和MetaStore服务,保证Hive运行的健壮性。
3. 解释器、编译器和优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成,生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。
4. Thrift服务组件:thrift是facebook开发的一个软件架构,它用来进行可扩展且跨语言的服务开发,Hive集成了该服务,能让不同的编程语言调用Hive接口。
5. CLI组件:command line interface命令行接口。
6. Thrift客户端组件:上面的架构图没有写Thrift客户端,但是Hive的许多客户端是建立在Thrift客户端基础上的,包括ODBC、JDBC接口。
7. WEBGUI组件:Hive提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的hwi组件(Hive web interface),使用之前要启动hwi。
重点介绍一下MetaStore,MetaStore包括两个部分:MetaStore服务和后台数据的存储,后台数据存储的介质就是关系型数据库,例如Hive默认的嵌入式磁盘数据库是Derby,还有MySql。MetaStore服务是建立在后台数据介质之上,并且可以和Hive服务进行交互的服务组件,默认情况下,默认情况下MetaStore服务和Hive服务是安装在一起的,运行在同一个进程中,也可以把MetaStore服务剥离出来,独立安装在一个集群里,Hive远程调用MetaStore服务,这样我们就可以把元数据放到防火墙之后,客户端访问Hive服务,就可以连接到元数据这层,从而提供了更好的管理性和安全保障。使用远程MetaStore服务可以让Hive服务和MetaStore服务运行在不同的进程里,保障了Hive的稳定性以及以及提成了服务的效率。参考下图:

这里写图片描述

Hive和关系型数据库的区别

  1. Hive和关系型数据库存储的文件系统不同,Hive使用的是Hadoop的HDFS,关系型数据库则是服务器本地的文件系统。
  2. Hive使用的模型是MapReduce,而关系型数据库是自己设计的计算模型。
  3. 关系型数据库都是为实时查询的业务设计的,而Hive则是为海量数据进行数据挖据设计的,实时性很差。
  4. Hive很容易扩展自己的存储能力和计算能力,这个是继承Hadoop的,而关系型数据库就差很多。
0 0
原创粉丝点击