Hive 概念与安装

Hive 概念与安装

1.概述与特点

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。

本质是:将HQL转化成MapReduce程序

  • Hive处理的数据存储在HDFS

  • Hive分析数据底层的实现是MapReduce

  • 执行程序运行在Yarn上

2.hive的优缺点

优点

  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)

  • 避免了去写MapReduce,减少开发人员的学习成本。

  • Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合;

  • Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。

  • Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

缺点

  • Hive的HQL表达能力有限,迭代式算法无法表达,数据挖掘方面不擅长 。

  • Hive的效率比较低,Hive自动生成的MapReduce作业,通常情况下不够智能化,Hive调优比较困难,粒度较粗

3.基本组成

Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。

  • 用户接口:包括 CLI、JDBC/ODBC、WebGUI。
    CLI为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive

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

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

4. Hive的数据存储
  1. Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)

  2. 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive就可以解析数据。

  3. Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。

  4. db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹

  5. table:在hdfs中表现所属db目录下一个文件夹

  6. external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径,普通表: 删除表后, hdfs上的文件都删了,External外部表删除后, hdfs上的文件没有删除, 只是把文件删除了

  7. partition:在hdfs中表现为table目录下的子目录

  8. bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中

5. hive的安装

```
 5.1 解压安装包  tar -zxvf apache-hive-1.1.0-bin.tar.gz

 5.2 添加环境变量  vi /etc/profile
 
	导入下面的环境变量
	export HIVE_HOME=/apps/hive
	export PATH=$PATH:$HIVE_HOME/bin
    
	使其有效 source /etc/profile

 5.3 创建文件hive/conf/hive-site.xml,内容如下
	<?xml version="1.0" encoding="UTF-8" standalone="no"?>
	<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
	<configuration>
  <!-- 数据库的URL,与数据库名称 -->
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost:3306/hive?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>Driver class name for a JDBC metastore</description>
	</property>
	<!-- 数据库的用户名 -->
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
		<description>username to use against metastore database</description>
	</property>
	<!-- 数据库的密码 -->
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>zhmcode</value>
		<description>password to use against metastore database</description>
	</property>
 </configuration>
 
	5.4 拷贝mysql-connector-java-5.1.6-bin.jar 到hive 的lib下面
	mv /mysql-connector-java-5.1.6-bin.jar /apps/hive/lib/
	
	5.5 把jline-2.12.jar拷贝到hadoop相应的目录下,替代jline-0.9.94.jar,否则启动会报错
	//先把/apps/hadoop/share/hadoop/yarn/lib下的jline删除掉,然后在将高版本的jline拷入到其包中
	cp /apps/hive/lib/jline-2.12.jar /apps/hadoop/share/hadoop/yarn/lib/
	
	5.6 创建hive临时文件夹
	mkdir /hadoopdata/hive/iotmp
	
	5.7 启动测试hive,启动hadoop后,执行hive命令
	    // 启动hive前要确保hadoop与mysql成功启动
		hive
		测试输入 show database;
		hive> show databases;
 ```

6. hive日志配置

修改日志级别:

  1. 控制台修改: hive --hiveconf hive.root.logger=DEBUG,console,此种方法修改,对本次运行有效。
  2. 在${HIVE_HOME}/conf/hive-log4j.properties文件中找到hive.root.logger属性,将其修改为 hive.root.logger=DEBUG,console,这种方式修改对所有的用户有效。

hive-log4j.properties说明
系统日志存储: 在hive/conf/hive-log4j.properties文件中记录了Hive日志的存储情况,
默认的存储情况:
hive.root.logger=WARN,DRFA
hive.log.dir= /tmp/hivelog # 默认的存储位置
hive.log.file=hive.log # 默认的文件名

7. SQL与HQL的区别###

  1. SQL 支持数据库的事务、索引以及更新,HQL不支持数据库的事务、更新,虽然Hive支持建立索引,但是它还不能提升数据的查询速度。
  2. SQL数据保存本地文件系统,HQL保存在HDFS
  3. SQL可扩展性低,HQL可扩展性高
  4. SQL延时低,HQL延时高
  5. SQL数据规模小,HQL数据规模大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值