Hadoop:

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用来开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。  
Hadoop框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算。

Hadoop体系结构:

hive:

一、什么是hive

Hive是部署在hadoop集群上的数据仓库工具。        
数据库和数据仓库的区别:
数据库(如常用关系型数据库)可以支持实时增删改查。
数据仓库不仅仅是为了存放数据,它可以存放海量数据,而且可以查询、分析和计算存储在Hadoop 中的大规模数据。但他有一个弱点,他不能进行实时的更新、删除等操作。也就是一次写入多次读取。

Hive 也定义了简单的类 SQL 查询语言,称为 QL ,它允许熟悉 SQL  的用户查询数据。现在hive2.0也支持更新、索引和事务,几乎SQL的其它特征都能支持。
Hive支持SQL92大部分功能,我们暂时可以把 hive理解成一个关系型数据库,语法和MySQL是几乎是一样的。
Hive是Hadoop 上的数据仓库基础构架之一,是SQL解析引擎,它可以将SQL转换成MapReduce任务,然后在Hadoop执行。

二、hive的部署与安装

Hive只在一个节点上安装即可

1.上传tar包

apache-hive-1.2.1-bin.tar.gz

2.解压

tar -zxvf hive-0.9.0.tar.gz -C /cloud/

3.配置mysql  metastore 元数据库(切换到root用户)

配置HIVE_HOME环境变量

rpm -qa | grep mysql

rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps

rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm

rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm

修改mysql的密码

/usr/bin/mysql_secure_installation

(注意:删除匿名用户,允许用户远程连接)

登陆mysql

mysql -u root -p

4.配置hive

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

修改hive-site.xml(删除所有内容,只留一个<property></property>)

添加如下内容:

<property>

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

    <value>jdbc:mysql://xcloud36: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>123</value>

<description>password to use against metastore database</description>

</property>

5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下

如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)

mysql -uroot -p

#(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;

FLUSH PRIVILEGES;

6.启动hive

进入hive的安装的home目录下的bin目录

[Neo@iZ25at60yr9Z bin]$ pwd

/home/Neo/apache-hive-1.2.1-bin/bin

执行hive脚本

[Neo@iZ25at60yr9Z bin]$ ./hive

Cannot find hadoop installation: $HADOOP_HOME or $HADOOP_PREFIX must be set or hadoop must be in the path

三、Hive的系统架构

• 用户接口,包括 CLI(Shell命令行),JDBC/ODBC,WebUI
• MetaStore元数据库,通常是存储在关系数据库如 mysql, derby 中
• Driver 包含解释器、编译器、优化器、执行器
• Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算

Hive的表和数据库,对应的其实是HDFS( Hadoop分布式文件系统)的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在MapReduce Job里使用这些数据。

四、hive的元数据库以及数据存储方式

Hive的MetaStore,集中存储元数据的一个库,可以叫它元数据库。
元数据库保存的是不是我们要计算的数据?不是,元数据库中并没有保存我们要计算的数据,我们要计算的数据是存放在HDFS(分布式文件系统)里。
Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等表的描述信息。真正要处理的数据在HDFS里。
元数据通常是存储在关系数据库如 mysql, derby 中。

Metastore默认使用内嵌的derby数据库作为存储引擎
Derby引擎的缺点:不支持多链接,一次只能打开一个会话
使用MySql作为外置存储引擎,支持多用户同时访问,所以一般将MySQL作为Hive的MetaStore。
Hive 的数据存储在 HDFS 中,大部分SQL转换成 MapReduce 任务来完成。(全表扫描,比如 select * from table 不会就生成 MapRedcue 任务)

hive> create table test(id int,name string) row format delimited fields terminated by '\t';

hive> load data local inpath ‘/home/hadoop/test/test.txt’ into table test;

五、hive 数据类型

Hive数据类型分为基础数据类型和复杂数据类型。
基础数据类型包括:
数字  TINYINT,SMALLINT,INT/INTEGER,BIGINT,FLOAT,DOUBLE
字符串:
    STRING,CHAR,VARCHAR
日期/时间类型
  TIMESTAMP,DATE,INTERVAL     (没有datetime)
其他类型
    BOOLEAN

复杂类型包括  ARRAY,MAP,STRUCT,UNION,这些复杂类型是由基础类型组成的。
arrays: ARRAY<data_type>
maps: MAP<primitive_type, data_type>
structs: STRUCT<col_name : data_type [COMMENT col_comment],...>
union: UNIONTYPE<data_type, data_type,...>

六、hive与依赖环境的交互

与linux交互:

hive> !pwd;                          #查看路径
hive> !ls; #查看有哪些文件

与hdfs交互:

hive> dfs -ls / ;                      #查看hdfs下目录
hive> dfs -mkdir /haha; #hdfs下创建目录haha

七、hive表的基本操作

Hive的数据模型-表的分类:
Table  内部表
External Table  外部表
Partition  分区表
Bucket  Table 桶表

Hive的数据模型-内部表
与数据库中的 Table 在概念上是类似,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 test,它在 HDFS 中的路径为:/warehouse/test。
warehouse是在 hive-site.xml 中由${hive.metastore.warehouse.dir} 指定的数据仓库目录。
所有的 Table 数据(不包括 External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除(对应目录和文件都会被删除)

创建数据文件inner_table.dat
创建表

hive>create table inner_table (id int,key string);

加载数据

hive>load data local inpath  '/var/lib/hadoop-hdfs/test/inner_table.dat'  into table inner_table;

查看数据

select * from inner_table
select count(*) from inner_table (也可以排序)

删除表

 drop table inner_table

Hive的数据模型- External Table 外部表

指向已经在 HDFS 中存在的数据,可以创建 partition
它和内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
内部表的创建过程和数据加载过程,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。
外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个 外部表 时,仅删除该链接。

创建数据文件

/data/student/text.txt

创建外部表:

create external table ext_student(id int,
name string) row format delimited fields terminated by '\t' location '/data/student';

加载数据

load data inpath '/home/external_table1.dat' into table ext_student;

查看数据

select * from ext_student;
select count(*) from ext_student;

删除表

drop table ext_student;

Hive的数据模型-分区表

创建分区是为了提高查询效率,在数据量非常大的时候一定要优先考虑分区,
partition 分区对应于数据库的 partition 列的密集索引
在 Hive 中,表中的一个 partition 分区对应于表下的一个目录,所有的 partition 数据都存储在对应的目录中

例如:test表中包含 date 和 city 两个 partition,
   则对应于date=20130201, city = bj 的 HDFS 子目录为:

/user/hive/warehouse/test/date=20130201/city=beijing

对应于date=20130202, city=sh 的HDFS 子目录为:

 /user/hive /warehouse/test/date=20130202/city=shanghai

创建数据文件

beauty_ch.txt    beauty_uk.txt     beauty_us.txt

创建外部分区表:

create external table beauties(id bigint,name string,age double) partitioned by (nation string) row format delimited fields terminated by '\t' location '/data/beauty';

加载数据到分区

 load data local inpath
'/var/lib/hadoop-hdfs/test/beauty_ch.txt' into table beauties partition (nation='China');

修改表分区

alter table beauties add partition (nation='UK') location '/data/beauty/nation=UK';

•  查看数据

select * from partition_table
select count(*) from partition_table

•  删除表

 drop table partition_table

Hive的数据模型—桶表
桶表是对数据进行哈希取值,然后放到不同文件中存储。数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。
创建表

    create table bucket_t1(id string) clustered by(id) into 6 buckets;
------表里的数据根据ID分成了6桶

加载数据

create table t2(id string);

load data local inpath '/var/lib/hadoophdfs/test/bucket_test' into table t2;

insert overwrite table bucket_t1 select id from t2;

删除表时,元数据与数据都会被删除(对应目录和文件都会被删除)

   drop table bucket_table;

桶表专门用于抽样查询,是很专业性的,不是日常用来存储数据的表,需要抽样查询时,才创建和使用桶表。

抽样查询:

select * from bucket_table tablesample(bucket 1 out of 4 on id);

八、Hive的JDBC/ODBC接口

用户可以像连接传统关系数据库一样使用JDBC或ODBC连接Hive

JDBC的具体连接过程
1.使用jdbc的方式连接Hive,首先做的事情就是需要启劢hive的Thrift Server,否则连接hive的时候会报connection refused的错误。
启动命令如下:
    hive --service hiveserver
2.新建java项目,然后将hive/lib下的所有jar包和hadoop的核心jar包hadoop-0.20.2-core.jar添加到项目的类路径上。Jar包版本要和hive版本一致。

HIVE---基于Hadoop的数据仓库工具讲解的更多相关文章

  1. Hive和SparkSQL: 基于 Hadoop 的数据仓库工具

    Hive: 基于 Hadoop 的数据仓库工具 前言 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,将类 SQL 语句转 ...

  2. Hive -- 基于Hadoop的数据仓库分析工具

    Hive是一个基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库 ...

  3. 基于hadoop的数据仓库工具:Hive概述

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习成本低,可以通过类 ...

  4. Hive和SparkSQL:基于 Hadoop 的数据仓库工具

    Hive 前言 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,将类 SQL 语句转换为 MapReduce 任务执行. ...

  5. 基于Hadoop的数据仓库Hive

    Hive是基于Hadoop的数据仓库工具,可对存储在HDFS上的文件中的数据集进行数据整理.特殊查询和分析处理,提供了类似于SQL语言的查询语言–HiveQL,可通过HQL语句实现简单的MR统计,Hi ...

  6. 大数据之路week07--day05 (一个基于Hadoop的数据仓库建模工具之一 HIve)

    什么是Hive? 我来一个短而精悍的总结(面试常问) 1:hive是基于hadoop的数据仓库建模工具之一(后面还有TEZ,Spark). 2:hive可以使用类sql方言,对存储在hdfs上的数据进 ...

  7. Hadoop整理五(基于Hadoop的数据仓库Hive)

    数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合.它是单个数据存储,出于分析性报告和决策支持目的而创建. 为需要业务智能的企业,提供指导业务流程改进.监视时间.成本.质量以及控 ...

  8. 数据仓库工具:Hive

    转载请标明出处: http://blog.csdn.net/zwto1/article/details/46430823: 本文出自:[明月的博客] 为什么要选择Hive 基于Hadoop的大数据的计 ...

  9. [转] X-RIME: 基于Hadoop的开源大规模社交网络分析工具

    转自http://www.dataguru.cn/forum.php?mod=viewthread&tid=286174 随着互联网的快速发展,涌现出了一大批以Facebook,Twitter ...

随机推荐

  1. 解决:"不再sudoers文件中,此事将不做被报告”的问题

    使用sudo出现问题:不再sudoers文件中,此事将不做被报告 系统:win8.1 +cents 7 问题:在虚拟机中,默认不是root账号,在使用sudo命令时候收到下面警告: sudo命令含义: ...

  2. Spring详解(五)------AspectJ 实现AOP

    上一篇博客我们引出了 AOP 的概念,以及 AOP 的具体实现方式.但是为什么要这样实现?以及提出的切入点表达式到底该怎么理解? 这篇博客我们通过对 AspectJ 框架的介绍来详细了解. 1.什么是 ...

  3. linux系统下C语言调用lapack ,blas库

    在利用C语言编程,经常调用其他的软件包,其中lapack,blas库是最常用的两个库,这里讲下在linux系统下,C语言编程如何调用这两个库: 1.首先讲下blas库的调用,这里以两个向量内积函数为例 ...

  4. 【Beta】阶段 第五次Daily Scrum Meeting

    每日任务 1.本次会议为第五次 Meeting会议: 2.本次会议在周五下午15:35,在禹洲楼召开,召开本次会议为10分钟. 一.今日站立式会议照片 二.每个人的工作 (有work item 的ID ...

  5. 团队作业3-需求改进&原型设计

    选题:实验室报修系统 实验室设备经常会发生这样或那样的故障,靠值班人员登记设备故障现象,维护人员查看故障记录,进行维修,然后登记维修过程与内容,以备日后复查,用这种方式进行设备运营管理,它仅仅起到一个 ...

  6. 201521123099 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  7. 201521123002 《Java程序设计》第4周学习总结

    [TOC] 1. 本周学习总结 2. 书面作业 1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 参考文章 Eclipse添加注释简介 Ecli ...

  8. 201521145048《Java程序设计》第4周学习总结

    1. 本章学习总结 学会了如何去设计一个类,尽量用private修饰属性,public修饰方法. 了解继承的目的. 了解继承和多态的关系. 了解关键字extends super final overr ...

  9. Java课程设计—学生成绩管理系统(201521123002 林楚虹)

    1. 团队课程设计博客链接 团队博客链接 2.个人责模块或任务说明 根据学生学号查找学生成绩 根据学生姓名(支持模糊匹配)查找学生成绩 用POI技术导出Excel文件 3.自己的代码提交记录截图 4. ...

  10. 201521123073 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...