阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hive—基于Hadoop的数据仓库工具讲解

171次阅读
没有评论

共计 6991 个字符,预计需要花费 18 分钟才能阅读完成。

Hadoop:

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

Hadoop 体系结构:

Hive--- 基于 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 的系统架构

Hive--- 基于 Hadoop 的数据仓库工具讲解

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

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

Hive--- 基于 Hadoop 的数据仓库工具讲解

四、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--- 基于 Hadoop 的数据仓库工具讲解

Hive--- 基于 Hadoop 的数据仓库工具讲解

七、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

 

 Hive--- 基于 Hadoop 的数据仓库工具讲解

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 编程指南 PDF 中文高清版  http://www.linuxidc.com/Linux/2015-01/111837.htm

基于 Hadoop 集群的 Hive 安装 http://www.linuxidc.com/Linux/2013-07/87952.htm

Hive 内表和外表的区别 http://www.linuxidc.com/Linux/2013-07/87313.htm

Hadoop + Hive + Map +reduce 集群安装部署 http://www.linuxidc.com/Linux/2013-07/86959.htm

Hive 本地独立模式安装 http://www.linuxidc.com/Linux/2013-06/86104.htm

Hive 学习之 WordCount 单词统计 http://www.linuxidc.com/Linux/2013-04/82874.htm

Hive 运行架构及配置部署 http://www.linuxidc.com/Linux/2014-08/105508.htm

Hive 2.1.1 安装配置详解  http://www.linuxidc.com/Linux/2017-04/143053.htm

Hive 安装及与 HBase 的整合   http://www.linuxidc.com/Linux/2016-12/138721.htm

Hive 的详细介绍:请点这里
Hive 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147405.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计6991字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中