Hive(一)基础知识

一、Hive的基本概念 (安装的是Apache hive 1.2.1)

1、hive简介

Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表, 并提供类 SQL 查询功能, hive 底层是将 SQL 语句转换为 MapReduce 任务运行(类似于插件Pig\impala\Spark Sql)
                 结构化:有行有列,格式整齐标准

非结构化:格式不统一,不标准,有长有短
               半结构化:参差不齐,有规律,并不是完全有规律

2、为什么使用HIVE

直接使用 Hadoop 所面临的问题:
                 人员学习成本太高
                 项目周期要求太短
                 MapReduce 实现复杂查询逻辑开发难度太大
            为什么要使用 Hive
                   操作接口采用类 SQL 的语法,提供快速开发的能力
                  避免了写 MapReduce,减少开发人员的学习成本
                  功能扩展很方便

3、hive的特点

可扩展性(横向扩展)
                   Hive 可以自由的扩展集群的规模,而且一般情况下不需要重启服务
           延展性
                  Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
           容错
                 良好的容错性,可以保障即使有节点出现问题, SQL 语句仍可完成执行

( 横向扩展:通过分担压力的方式扩展集群规模            纵向扩展:扩展线程,扩展内存等这种方式就是纵向扩展 )

4、hive架构

用户接口:

CLI, shell 终端命令行,最常用(学习,调试,生产)
                    JDBC/ODBC,是 hive 的基于 JDBC 操作提供的客户端, 用户(开发员,运维人员) 通过 这连接至 hive server
                    Web UI ,通过浏览器访问 hive

元数据存储:
                      元数据,通俗的讲, 就是存储在 Hive 中的数据的描述信息。
                      Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录

Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存 储目录不固定。数据库跟着 hive 走,极度不方便管理
                      解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程)

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

执行流程:

HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 Metastore 中的元数据 进行类型检测和语法分析,生成一个逻辑方案(logical plan),然后通过的优化处理,产生一 个 MapReduce 任务。

5、hive和hadoop的关系

Hive 依赖于 HDFS 存储数据
             Hive 将 HQL 转换成 MapReduce 执行
             所以说 Hive 是基于 hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计 算框架
       6、hive和RDBMS的对比

总结: hive 具有 sql 数据库的外表,但应用场景完全不同, hive 只适合用来做批量海量数据 统计分析
       7、hive的数据存储

(1) Hive 中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持 Text,SequenceFile, ParquetFile, RCFILE 等)
                     SequenceFile 是 hadoop 中的一种文件格式:文件内容是以序列化的 kv 对象来组织的
              (2) 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符, Hive 就可以解析数据
              (3) Hive 中包含以下数据模型:
                       db:在 hdfs 中表现为${hive. metastore.warehouse.dir}目录下一个文件夹
                    table:在 hdfs 中表现所属 db 目录下一个文件夹
                   external table:与 table 类似,不过其数据存放位置可以在任意指定路径
                   partition:在 hdfs 中表现为 table 目录下的子目录
                   bucket:在 hdfs 中表现为同一个表目录下根据 hash 散列之后的多个文件

(内界表,删除时,元数据和数据都删除;外界表删除时,表中数据还在,删除的是元数据信息)

二、hive环境搭建

第一种版本:内嵌Derby版本

1、 上传安装包 apache-hive-1.2.1-bin.tar.gz
         2、 解压安装包 tar –zxvf apache-hive-1.2.1-bin.tar.gz
         3、 进入到 bin 目录,运行 hive 脚本: [[email protected] bin]$ ./hive

第二种版本:外置mysql版本

1、 安装 MySQL
               2、 上传安装包 apache-hive-1.2.1-bin.tar.gz
               3、 解压安装包 tar –zxvf apache-hive-1.2.1-bin.tar.gz
               4、 修改配置文件
                    [[email protected] conf]# vi hive-site.xml

<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop02:3306/hivedb?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>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>

5、 一定要记得加入 mysql 的驱动包( mysql-connector-java-5.1.31-bin.jar)
       6、 启动 hive

三、hive使用方式,即三种连接方式

1、CLI

2

时间: 2024-08-28 12:23:36

Hive(一)基础知识的相关文章

最全的Spark基础知识解答

最全的Spark基础知识解答 时间:2016-12-12 12:00:50      阅读:19      评论:0      收藏:0      [点我收藏] 原文:http://www.cnblogs.com/sanyuanempire/p/6163732.html 一. Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架. dfsSpark基于mapreduce算法实现的分布式计算,拥有HadoopMa

Hive框架基础(二)

* Hive框架基础(二) 我们继续讨论hive框架 * Hive的外部表与内部表 内部表:hive默认创建的是内部表 例如: create table table001 (name string , age string) location '/input/table_data'; 此时:会在HDFS上新建一个table001表的数据存放地 接着执行: load data inpath'/input/data 'into table table001;(注意,load关键字后没有跟local关

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

linux入门基础知识及简单命令介绍

linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

BroadcastReceive基础知识总结

BroadcastReceive基础知识总结 1.BroadcastReceive简介 BroadcastReceive也就是"广播接收者"的意思,顾名思义,就是用来接收来自系统和应用中的广播 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能,当网络状态改变时,系统会产生一条广播,接收到这条广播,就能及时的做出提示和保存数据等操作,当电池的电量改变的时候,系统会产生一条广播,接收到这条广播就能在电量低的时候告知用户

基础知识--:before伪元素和:after伪元素

http://book.51cto.com/art/201108/285688.htm 3.7  替换指定位置 大家都知道before和after是前.后的意思.但是奇怪的是,CSS中的:before伪元素和:after伪元素是为源文档中不存在的内容设置样式的. 没有内容怎么设置样式呢?别急!它们有一个content属性,一起使用就可以为某个选择器前.后的内容设置样式了. 下面就来了解一下:before伪元素和:after伪元素的用法. 视频教学:光盘/视频/3/3.7  替换指定位置.avi 

20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能

Vim编辑器可以让用户按照需求来定制一些使用属性. 一.窗口属性定义 1)显示行号 行号不是内容,只是用来帮助用户确认文本所在的行.在vim编辑器中,如果要显示行号,可以在末行模式下输入: set number 如果想关闭,则可以在功能名称前面加上no,即: set nonumber 命令可以被简写,如set number 可以简写为 set nu:set nonumber 可以简写为 set nonu. 注意,上述设定仅对当前vim的进程有效,一旦当前进程关闭,这些设定就会失效,如果要使设定永

web基础知识(一)关于ajax传值最基础东西

HTTP方法之 GET对比POST GET:从指定的资源请求数据, POST:向指定的资源提交要被处理的数据 GET方法: 请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的: /test/demo_form.asp?name1=value1&name2=value2 有关 GET 请求的其他一些注释: GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求不应在处理敏感数据时使用 GET 请求有长度限制 GET 请求只应当用于取回

线程基础知识

什么是线程: 在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列" 一切进程至少都有一个执行线程 进程与线程 进程是资源竞争的基本单位 线程是程序执行的最小单位 线程共享进程数据,但也拥有自己的一部分数据 线程ID 一组寄存器 栈 errno 信号状态 优先级 fork和创建新线程的区别 当一个进程执行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它自己的PID.这个新进程的运行时间是独立的,它在执行时几乎