hive架构及其安装和简单使用

目录

一、hive是什么

二、hive的概念及架构

1、概念

2、架构

三、hive的安装及使用

四、hive的基本操作


一、hive是什么

        HIve是建立在Hadoop上的数据仓库基础架构。
        

二、hive的概念及架构

1、概念

它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop  中的大规模数据的机制。Hive 定义了简单的类 SQL  查询语言,称为 HQL ,它允许熟悉 SQL  的用户查询数据。同时,这个语言也允许熟悉 MapReduce  开发者的开发自定义的 mapper  和 reducer  来处理内建的 mapper 和 reducer  无法完成的复杂的分析工作。

        数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

        Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。

        Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据。

        Hive相当于hadoop的客户端工具,部署时不一定放在集群管理节点中,可以放在某个节点上

2、架构

1)hive与传统数据库比较

查询语言

HiveQL

SQL

数据存储位置

HDFS

Raw Device or 本地FS

数据格式

用户定义

系统决定

数据更新

不支持(1.x以后版本支持)

(insert into)

支持(insert into)

索引

新版本有,但弱

执行

MapReduce

Executor

执行延迟

可扩展性

数据规模

1. 查询语言。类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发。

2. 数据存储位置。所有 Hive 的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统中。

3. 数据格式。Hive 中没有定义专门的数据格式。而在数据库中,所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。

4. 数据更新。Hive 对数据的改写和添加比较弱化,0.14版本之后支持,需要启动配置项。而数据库中的数据通常是需要经常进行修改的。

5. 索引。Hive 在加载数据的过程中不会对数据进行任何处理。因此访问延迟较高。数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询。

6. 执行计算。Hive 中执行是通过  MapReduce 来实现的而数据库通常有自己的执行引擎。

7. 数据规模。由于 Hive 建立在集群上并可以利用 MapReduce 进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。 

2)hive的储存格式

Hive的数据存储基于Hadoop HDFS。 Hive没有专门的数据文件格式,常见的有以下几种。

TextFile(常用)

 TEXTFILE 即正常的文本格式,是Hive默认文件存储格式,因为大多数情况下源数据文件都是以text文件格式保存(便于查看验数和防止乱码)。此种格式的表文件在HDFS上是明文,可用hadoop fs -cat命令查看,从HDFS上get下来后也可以直接读取。         TEXTFILE 存储文件默认每一行就是一条记录,可以指定任意的分隔符进行字段间的分割。但这个格式无压缩,需要的存储空间很大。虽然可结合Gzip、Bzip2、Snappy等使用,使用这种方式,Hive不会对数据进行切分,从而无法对数据进行并行操作。 一般只有与其他系统由数据交互的接口表采用TEXTFILE 格式,其他事实表和维度表都不建议使用。

SEQUENCEFILE

 SequenceFile是Hadoop API 提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部使用Hadoop 的标准的Writable 接口实现序列化和反序列化。它与Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile 继承自Hadoop API 的SequenceFile,不过它的key为空,使用value 存放实际的值, 这样是为了避免MR 在运行map 阶段的排序过程。         SequenceFile支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。 SequenceFile最重要的优点就是Hadoop原生支持较好,有API,但除此之外平平无奇,实际生产中不会使用。

AVRO

 Avro是一种用于支持数据密集型的二进制文件格式。它的文件格式更为紧凑,若要读取大量数据时,Avro能够提供更好的序列化和反序列化性能。并且Avro数据文件天生是带Schema定义的,所以它不需要开发者在API 级别实现自己的Writable对象。Avro提供的机制使动态语言可以方便地处理Avro数据。最近多个Hadoop 子项目都支持Avro 数据格式,如Pig 、Hive、Flume、Sqoop和Hcatalog。

RCFile:

Record Columnar的缩写。是Hadoop中第一个列文件格式。能够很好的压缩和快速的查询性能。通常写操作比较慢,比非列形式的文件格式需要更多的内存空间和计算量。 RCFile是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。

ORCFile:(常用)

Hive从0.11版本开始提供了ORC的文件格式,ORC文件不仅仅是一种列式文件存储格式,最重要的是有着很高的压缩比,并且对于MapReduce来说是可切分(Split)的。因此,在Hive中使用ORC作为表的文件存储格式,不仅可以很大程度的节省HDFS存储资源,而且对数据的查询和处理性能有着非常大的提升,因为ORC较其他文件格式压缩比高,查询任务的输入数据量减少,使用的Task也就减少了。ORC能很大程度的节省存储和计算资源,但它在读写时候需要消耗额外的CPU资源来压缩和解压缩,当然这部分的CPU消耗是非常少的

Parquet:

   通常我们使用关系数据库存储结构化数据,而关系数据库中使用数据模型都是扁平式的,遇到诸如List、Map和自定义Struct的时候就需要用户在应用层解析。但是在大数据环境下,通常数据的来源是服务端的埋点数据,很可能需要把程序中的某些对象内容作为输出的一部分,而每一个对象都可能是嵌套的,所以如果能够原生的支持这种数据,这样在查询的时候就不需要额外的解析便能获得想要的结果。         Parquet的灵感来自于2010年Google发表的Dremel论文,文中介绍了一种支持嵌套结构的存储格式,并且使用了列式存储的方式提升查询性能。Parquet仅仅是一种存储格式,它是语言、平台无关的,并且不需要和任何一种数据处理框架绑定。这也是parquet相较于orc的仅有优势:支持嵌套结构。Parquet 没有太多其他可圈可点的地方,比如他不支持update操作(数据写成后不可修改),不支持ACID等.

三、hive的安装及使用

我们的版本约定:

        JAVA_HOME=/usr/local/soft/jdk1.8.0_171

        HADOOP_HOME=/usr/local/soft/hadoop-2.7.6

        HIVE_HOME=/usr/local/soft/hive-1.2.1     

前提:需要安装完Mysql和hadoop,需保证hadoop在启动状态

开始安装hive

1.解压

tar -zxvf /usr/local/moudle/apache-hive-1.2.1-bin.tar.gz -C /usr/local/soft/

2.修改目录名称为hive-1.2.1

cd /usr/local/soft/

mv apache-hive-1.2.1-bin/ hive-1.2.1

3.备份配置文件

cd /usr/local/soft/hive-1.2.1/conf

cp hive-env.sh.template hive-env.sh

hive-default.xml.template hive-site.xml

4.修改配置文件

vim hive.env.sh

新加三行配置(路径不同就更具实际情况来):

HADOOP_HOME=/usr/local/soft/hadoop-2.7.6

JAVA_HOME=/usr/local/soft/jdk1.8.0_171

HIVE_HOME=/usr/local/soft/hive-1.2.1

5.修改配置文件

vim hive-site.xml

修改对应的配置参数

<property>

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

<value>jdbc:mysql://master:3306/hive?characterEncoding=UTF-8&createDatabaseIfNotExist=true&useSSL=false</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>

<property>

<name>hive.querylog.location</name>

<value>/usr/local/soft/hive-1.2.1/tmp</value>

</property>

<property>

<name>hive.exec.local.scratchdir</name>

<value>/usr/local/soft/hive-1.2.1/tmp</value>

</property>

<property>

<name>hive.downloaded.resources.dir</name>

<value>/usr/local/soft/hive-1.2.1/tmp</value>

</property>

6.复制mysql连接工具包到hive/lib

cd /usr/local/soft/hive-1.2.1

cp /usr/local/moudle/mysql-connector-java-5.1.49.jar  /usr/local/soft/hive-1.2.1/lib/

7.删除hadoop中自带的jline-2.12.jar

位置在/usr/local/soft/hadoop-2.7.6/share/hadoop/yarn/lib/jline-2.12.jar

                rm -rf /usr/local/soft/hadoop-2.7.6/share/hadoop/yarn/lib/jline-2.12.jar

8.把hive自带的jline-2.12.jar复制到hadoop中

hive中所在位置 /usr/local/soft/hive-1.2.1/lib/jline-2.12.jar

cp  /usr/local/soft/hive-1.2.1/lib/jline-2.12.jar /usr/local/soft/hadoop-2.7.6/share/hadoop/yarn/lib/

9、添加环境变量、然后刷新

刷新配置:source  /etc/profile 

10.启动

        hive

11、出现一下界面代表安装成功

 12、测试hive

        01、在hive中创建test1数据库

                create database test1;

        02、切换test1数据库:

                use test1;

        03、创建students表:

                create table students(

                    id bigint comment '学生id',

                    name string comment '学生姓名',

                    age int comment '学生年龄',

                    gender string comment '学生性别',

                    clazz string comment '学生班级'

                ) comment '学生信息表'

                ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

                以','结束的行格式分隔字段

                [ row format delimited fields terminated by ‘,’   ]

        04、创建score表:

                create table score(

                    id bigint comment '学生id',

                    score_id bigint  comment '科目id',

                    score int comment '学生成绩'

                ) comment '学生成绩表'  

                ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';  

        05、查看表信息:

                desc students;

                desc score;

四、hive的基本操作

常用的2个:CLI,JDBC/ODBC

        CLI,即Shell命令行

        JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似。

        Hive 将元数据存储在数据库中(metastore),目前只支持 mysql、derby。

        Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等;由解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapReduce 调用执行。

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

Hive的metastore

        metastore是hive元数据的集中存放地。

        metastore默认使用内嵌的derby数据库作为存储引擎         

        Derby引擎的缺点:一次只能打开一个会话 使用MySQL作为外置存储引擎,多用户同时访问

        metastore是hive元数据的集中存放地。 metastore默认使用内嵌的derby数据库作为存储引擎         Derby引擎的缺点:一次只能打开一个会话 使用MySQL作为外置存储引擎,多用户同时访问         元数据库详解见:查看mysql SDS表和TBLS表         https://blog.csdn.net/haozhugogo/article/details/73274832

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值