hive入门

1、什么是hive

  • hive 是建立在Hadoop HDFS上的数据仓库基础架构
  • Hive可以用来进行数据提取转化加载(ETL)
  • Hive定义了简单的类似SQL查询语言,称为HQL它允许熟悉SQL的用户查询数据
  • hive允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作
  • Hive是SQL解析引擎,他将SQL语句转移成M/R Job然后在Hadoop执行
  • Hive的表其实就是HDFS的目录/文件

2、Hive的体系结构

  • Hive的元数据
- hive将元数据存储在数据库中,支持mysql、derby、Oracle等数据库默认是derby
- hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等

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


3、hive的安装

hive下载地址:
http://hive.apache.org/downloads.html
也可以在
http://archive.apache.org/
在这个链接下有apache的所有产品及其版本也包括了hive
我这里下载的就是hive的0.13.0版本

hive安装有三种模式
  • 嵌入模式
-元数据信息被存储在hive自带的derby数据库中
-只允许创建一个连接
-多用于demo
  • 本地模式
-元数据信息被存储在Mysql数据库中
-mysql数据库与Hive运行在同一台物理机器上
-多用于开发和测试
  • 远程模式


将hive的安装包解压后,将mysql的connect 的jar包放入hive的Lib目录下,然后在hive的conf目录下新建

hive-site.xml文件,里面写上

<?xml version="1.0"?>  

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  

  

<configuration>  

    <property> 

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

        <value>jdbc:mysql://127.0.0.1:3306/你的数据库名称?characterEncoding=UTF-8</value>  

    </property>  

    <property>  

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

        <value>com.mysql.jdbc.Driver</value>  

    </property>  

    <property>  

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

        <value>Mysql用户名</value>  

    </property>  

    <property>  

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

        <value>mysql用户密码</value>  

    </property>  

</configuration>

然后hive就可启动了,注意在操作hive的时候一定要先启动Hadoop

4、Hive的管理

hive的启动方式

-CLI(命令行)方式
-Web界面方式
-远程服务启动方式
CLI(命令行方式)
-直接输入#<HIVE_HOME>/bin/hive的执行程序
-或者输入#hive --service cli
  常用的CLI命令
  • 清屏: Ctrl+L或者 !clear
  • 查看数据仓库中的表 -show tables;
  • 查看数据仓库中内置的函数 -show functions;
  • 查看表结构 -desc表名
  • 查看HDFS上的文件 -dfs -ls目录
  • 执行操作系统的命令 -!命令
  • 执行HQL语句 -select ***from***
  • 执行SQL的脚本 -source SQL文件
Web界面方式
-端口号9999
-启动方式:#hive --service hwi &
-通过浏览器来访问:http://<IP地址>:9999/hwi/
首先把jar包拷贝进入hive的lib下面:jdk中lib下的tools.jar 包 commons-el-1.0.jar ,jasper-runtime-5.5.23.jar ,jasper-compiler-5.5.23.jar,然后将apache-hive-0.13.0-src(hive源码)下的hwi打包成为war包 jar cvfM0 hive-hwi-0.13.0.war -C web/ .将打包好的war包拷贝到hive的lib下
然后在之前新建的hive-site.xml中添加

 <property>

        <name>hive.hwi.listen.host</name>

        <value>0.0.0.0</value>(如果是本地就是0.0.0.0远程配置远程Ip)

    </property>   

    <property>

        <name>hive.hwi.listen.port</name>

        <value>9999</value>

    </property> 

<property>

        <name>hive.hwi.war.file</name>

        <value>/lib/hive-hwi-0.13.0.war</value>

    </property> 

然后在命令行中执行:

hive --service hwi命令即可

在浏览器上打开

localhost:9999/hwi/即可看到如下界面


注意在web上只能做查询操作

hive远程服务

    远程服务启动方式

-端口号10000

-启动方式:#hive --service hiveserver &

注意:以JDBC或ODBC的程序登陆到hive中操作数据时,必须选用远程服务启动方式

5、hive的基本数据类型

基本数据类型

-tinyint/smallint/int/bigint:整数型
-float/double:浮点类型
-boolean:布尔类型
-string:字符串类型

复杂数据类型

-Array:数组类型,由一系列相同数据类型的元素组成
-Map:集合类型,包含key->value键值对,可以通过key来访问元素。
-struct:结构类型,可以包含不同数据类型的元素。这些元素可以通过“点语法”的方式来得到所需要的元素

时间数据类型

-Date:从hive0.12.0开始支持
-Timestamp:从hive0.8.0开始支持

6、hive的数据存储

  • 基于HDFS
  • 没有专门的数据存储格式
  • 存储结构主要包括:数据库、文件、表、视图
  • 可以直接加载文本文件(.txt文件等)
  • 创建表时,指定hive数据的列分隔符与行分隔符
-table内部表
与数据库中的Table在概念上是类似
每一个Table在Hive中都有一个相应的目录存储数据
所有的Table数据(不包括External Table)都保存在这个目录中
删除表时,元数据与数据都会被删除
一般创建表的时候会默认放在hadoop的user目录下,但也可以指定目录存放,如
create table student(sid int,sname string) location 'txr/hive ';
指定表元素分隔符
create table s2(sid int,sname string) row format delimited fields terminated by ',';
以查询形式创建一张表
create table s3 as select * from s2;
设置数据的分隔符
create table s4 row format delimited fields terminated by ','
as select * from s2;
在已经创建的表中增加字段
alter table student add columns (English int);
删除一张表
drop table student;--但这是移除到Hadoop的回收站中,可以通过一定的方式还原回来

-Partition 分区表
Partition对应于数据的Partition列的密集索引
在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中
如:
create table partition_table(sid int,sname,string) partitioned by(gender string) row format delimited fields terminated by ',';
插入性别是M的学生
 -External Table外部表
指向已经在HDFS中存在的数据,可以创建Partition
它和内部表在元素据的组织上是相同的,而实际数据的存储则有较大的差异
外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,紧删除该链接。
external table external_student(sid int,sname string,age int) row format delimited fields terminated by ',' location '/input';
-Bucket Table 桶表
 桶表是对数据进行哈希取值,然后放到不同文件中存储。
create table bucket_table(sid int ,sname string,  age int )clustered by (sname)(这表示以哪一列来进行ha sh运算)

视图
视图是一种虚表,是一个逻辑概念;可以跨越多张表
视图建立在已有表的基础上,视图赖以建立的这些表称为基表
视图可以简化复杂的查询










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值