热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

8.Hive基础

1.Hive基本介绍和基础:Facebook公司最早完成并开源了hive框架,可以将sql语句直接翻译成MapReduce程序。Hive是基于Hadoop的一个数据仓库工具,可以将
1. Hive基本介绍和基础:

Facebook公司最早完成并开源了hive框架,可以将sql语句直接翻译成MapReduce程序。Hive是基于Hadoop的一个数据仓库工具,可以将结构化数据文件映射成一张表,并提供类似SQL的查询功能。Hive相当于一个客户端。

1. Hive框架的作用:

(1)可以让不懂java的数据分析人员使用hadoop进行数据分析;

(2)MapReduce开发非常繁琐复杂,使用hive可以提高效率。

(3)统一的元数据管理,可与impala/spark共享元数据。

2. Hive基础:

(1)使用HQL作为查询接口;使用MapReduce进行计算;数据存储在HDFS上;运行在Yarn上。

(2)Hive比较灵活和可扩展性,支持UDF和多种文件格式。

(3)Hive适合离线数据分析(批量处理、延时要求很大)

2. SQL on Hadoop框架:

Hive是一种最常见、使用最为广泛的SQL on Hadoop框架。还包括几个其他常见的sql on hadoop框架:

1. Presto:

最早由Facebook开源,国内京东使用比较广泛。

2. Drill:

3. impala:

由Cloudera公司提供,基于内存的。hive是基于硬盘的。

4. Spark SQL:

3. Hive架构:

Hive可以作为ETL工具(有一个常见的开源ETL工具,kettle)、报表工具 和数据分析工具。Hive可以访问HBase数据。Hive没有专门的数据存储格式。

《8. Hive基础》 Hive 体系结构

(1)客户端:CLI:

Hive的使用场景中,99%的情况使用CLI,JDBC比较少用(因为Hive主要是用作离线分析的)。

(2)元数据MetaStore(企业一般使用MySQL;为了避免单点故障,搭建HA、主从结构): 存储数据库、表名、字段等。Spark、Impala也有自己的MetaStore,并且可以和Hive的MetaStore共享。

(3)驱动器Driver:

解析器、编译器、优化器、执行器。

(4)使用MapReduce计算

(5)数据存储在HDFS上。

由于Hive只是一个客户端,在安装时,我们可以在Hadoop集群中,选择一台安装Hive。Hive没有集群的概念,但是可以搭建Server/Client端。

4. Hive的安装:

1. 安装Java和Hadoop环境:

我们使用 “5.分布式集群环境” 的结果,Java和Hadoop环境已经安装好。

2.下载、解压hive源文件:

我使用的版本是:apache-hive-0.13.1-bin.tar.gz 。解压文件:

$ tar zxf apache-hive-0.13.1-bin.tar.gz -C /opt/modules/

3. 修改配置文件、安装测试:

(1)根据模板生成配置文件:

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

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

(2)在hive-env.sh中添加环境变量:

需要添加JAVA_HOME、HADOOP_HOME 和 HIVE_HOME环境变量:

export JAVA_HOME=/opt/modules/jdk1.7.0_67

export HADOOP_HOME=/opt/modules/hadoop-2.5.0

export HIVE_CONF_DIR/opt/modules/apache-hive-0.13.1-bin/conf

(3)添加HIVE_HOME系统环境变量

# vi /etc/profile

#HIVE HOME

HIVE_HOME=/opt/modules/apache-hive-0.13.1-bin

添加$HIVE_HOME/bin到PATH变量。

(4)按照Hive官方文档配置:

$ bin/hdfs dfs -mkdir /tmp

$ bin/hdfs dfs -mkdir -p /user/hive/warehouse

$ bin/hdfs dfs -chmod g+w /tmp

$ bin/hdfs dfs -chmod g+w /user/hive/warehouse

/tmp目录是hive仓库的临时目录,例如在Load文件到hive表中时,要先把文件放在临时目录/tmp中,再挪到Hive表对应的目录中。

/user/hive/warehouse  是仓库的主目录。

(5)测试hive:

直接输入命令hive进入:

hive> show databases;                                    #开始时,系统给默认创建一个数据库,叫做default。

hive> create database pma;

hive> use pma;

hive> create table students(id int,name String);

hive> show tables;

在创建了表之后,在HDFS上可以看到这个表的目录结构:/user/hive/warehouse/pma.db/students    

Hive会在数据库名后加上“.db”,作为数据库这一级别的目录。数据库、数据表(包括后边介绍的分区)在Hive中其实都是目录。

(6)其他常用的Hive的命令:

hive> desc database pma;

hive> desc pma.students;

hive> desc extended pma.students;

hive> desc formatted pma.students;

hive> show functions;

hive> desc function instr;

desc formatted是比较有用的命令,可以获取表的很多信息。

Linux家目录下.hivehistory文件保存了我们输入过的hive命令:

$ cat /home/natty/.hivehistory

5. 修改元数据库为MySQL:

上一章节,使用的是默认的Derby数据库。在企业中,几乎使用的都是MySQL,所以这里介绍安装MySQL作为MetaStore。

1. 切换到root安装MySQL Client 和Server rpm包:

首先,删除系统中已经安装的MySQL rpm包:

# rpm -qa | grep mysql

# rpm -e –nodeps mysql-libs-5.1.66-2.el6_3.x86_64

其中,-e表示卸载rpm包, –nodeps 表示强制删除,不考虑依赖。

现在,就可以安装rpm包了。

# rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm MySQL-server-5.6.24-1.el6.x86_64.rpm

# rpm -qa | grep -i mysql

2. 登陆Mysql

MySQL安装完成后,root密码保存在 /root/.mysql_secret中。

# cat /root/.mysql_secret

启动 mysql 服务:

# service mysql start

root用户登陆MySQL,修改root密码:

# mysql -uroot -pES5KZsKZRZQ6OaVU

mysql> set password=password(‘123456’);

3. hive关联MySQL数据库:

hive官方文档中 “Setting Up Metastore”有关于配置MySQL的介绍。

(1)配置hive-site.xml文件:

(2)获取mysql jdbc驱动jar包:

解压mysql驱动压缩包,获取mysql驱动jar包:

$ tar zxf mysql-connector-java-5.1.27.tar.gz -C ./mysql-connector/

将驱动jar包拷贝到 $HIVE_HOME/lib下:

$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/apache-hive-0.13.1-bin/lib/

(3)MySQL数据库授权用户:

mysql> grant all privileges on *.* to root@”hadoop-senior01.pmpa.com” identified by “123456”;

mysql> flush privileges;

对所有数据库的权限赋予,在hadoop-senior01.pmpa.com主机上以用户名root和密码123456登陆的用户。

4 . 登陆Hive测试:

我再次使用hive命令登陆Hive,这时候Hive会自动在MySQL中创建metastore等 元数据信息。

这时,我们再次登陆到MySQL,可以查看到metastore库(保存Hive元数据信息的库),并且可以看到这库下的一些表。

6. Hive基本操作:

1. 简单测试:

基本操作实验过程:创建一个表,加载外部文件进入表中(文件字段以逗号分隔),查询该表。

(1)创建表:

hive> create table student (id int,name string)

       > row format delimited

       > fields terminated by ‘,’;

(2)加载外部文件入表:

hive> load data local inpath ‘/home/natty/students.txt’ overwrite into table student;

其中local项、overwrite项是可选择项。

(3)确认加载:

hive> select * from student;

2. Hive Shell常用命令:

了解Hive Shell的所有命令 可以使用 -h选项(下面例子配置的$HIVE_HOME/bin 到Path):

$ hive -h

下面列举几个常用的选项:

-e选项可以直接接查询的sql:

$ hive -e “select * from pmdw.student;”

$ hive -e “select * from pmdw.student;” > student.output

-f选项,可以执行一个SQL脚本(包含多个SQL语句):

$ hive -f dw_student.sql

–hiveconf 选项,可以指定一些在你打开的这个hive CLI Session有效的一些配置项参数,例如,我们可以配置$HIVE_HOME/conf/hive-log4j.properties下的一个配置项。hive.root.logger=INFO,DRFA , 默认输出日志是INFO级别,可以修改成DEBUG级别来输出。

$ hive –hiveconf hive.root.logger=DEBUG,DRFA

3. 常用的配置属性:

(1)数据仓库的位置:

默认配置在“/user/hive/warehouse”,可以在hive-site.xml配置。配置项是hive.metastore.warehouse.dir。

(2)运行日志信息位置:

启用log4j.properties文件:

$ cp -a hive-log4j.properties.template hive-log4j.properties

配置hive.log.dir项,指定一个绝对路径。

hive.log.dir=/opt/modules/apache-hive-0.13.1-bin/logs

如果想修改日志显示级别,修改项  hive.root.logger :

(3)显示当前查询的库信息,表头信息:

修改配置文件 hive-site.xml 以下两个选项,值修改为“true”

hive.cli.print.header

hive.cli.print.current.db

显示效果如下:

《8. Hive基础》 Hive配置显示头信息

(4)查看当前所有的配置信息:

使用set命令来查看或者修改。 修改只在会话级别生效。

hive (pmdw)> set;

4. 在Hive CLI中使用HDFS和Linux命令:

(1)与HDFS交互:

在Hive CLI中,直接使用dfs命令与HDFS交互:

hive (pmdw)> dfs -ls /;

hive (pmdw)> dfs -text /output01/part*;

(2)与Linux交互:

使用感叹号! 后边接linux命令即可。

hive (default)> !pwd;

hive (default)> !ls / ;

(3)启动hiveserver2服务:

$ hive –service hiveserver2

7.Hive数据类型:

Hive除了一些基本的数据类型(常用的是int,bigint,double,string),还有复杂数据类型:map、Array、Struct等等。

8. Hive建表:

在Hive中,经常使用的表包括 管理表(内部表)、外部表 和分区表。

在建表时,主要关注下面的信息(要注意先后的顺序一定不可以乱):

CREATE [EXTERNAL] TABLE [db_name.]table_name

[(col_name data_type [COMMENT col_comment], … [constraint_specification])]

[PARTITIONED BY (col_name data_type [COMMENT col_comment], …)]

[ROW FORMAT row_format]

[STORED AS file_format]

[LOCATION hdfs_path]

[AS select_statement];

下面举两个例子建emp和dept表:

1. 外部表和内部表的区别:

内部表(管理表)在删除时,会一并删除元数据和HDFS文件,也就是删除表结构的同时也删除数据。但是外部表在删除时,只删除元数据,不删除HDFS文件(数据)。

2. 外部表使用场景:

有几个业务部分都需要用到表table1,到某个时间,如果业务部门1不再使用table1,则业务部门1删除这个表即可,不会删除HDFS文件,业务部门2和3还可以看HDFS的数据。

3. 分区表业务场景:

(1)分时段存放日志,例如每小时保存一次日志,每小时一个分区。

(2)提高查询速度,类似于RDMS的索引。

4. 创建表的三种方式:

(1)直接使用CREATE语句创建表;          只创建表结构,之后加载数据。

(2)CREATE TABLE tbl2 as SELECT …      有表结构也有数据。

(3)CREATE TABLE tbl3 like tbl4              只有表结构没有数据。  


推荐阅读
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • ODBC介绍:开放式数据库连接详解
    本文详细介绍了ODBC(开放式数据库连接),这是一种允许应用程序访问多种数据库系统的标准API。自1992年由微软与Simba合作推出以来,ODBC已成为跨平台数据访问的重要标准。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • MySQL DateTime 类型数据处理及.0 尾数去除方法
    本文介绍如何在 MySQL 中处理 DateTime 类型的数据,并解决获取数据时出现的.0尾数问题。同时,探讨了不同场景下的解决方案,确保数据格式的一致性和准确性。 ... [详细]
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • 本文详细探讨了如何在 SparkSQL 中创建 DataFrame,涵盖了从基本概念到具体实践的各种方法。作为持续学习的一部分,本文将持续更新以提供最新信息。 ... [详细]
  • 本文介绍了Elasticsearch (ES),这是一个基于Java开发的开源全文搜索引擎。ES通过JSON接口提供服务,支持分布式集群管理和索引功能,特别适合大规模数据的快速搜索与分析。 ... [详细]
  • 本文介绍了Hive作为基于Hadoop的数据仓库工具的核心概念,包括其基本功能、使用理由、特点以及与Hadoop的关系。同时,文章还探讨了Hive相较于传统关系型数据库的不同之处,并展望了Hive的发展前景。 ... [详细]
  • databasesync适配openGauss使用指导书
    一、database-sync简介database-sync作为一种开源辅助工具,用于数据库之间的表同步,更确切的说法是复制,可以从一个数据库复制表到另一个数据库该工具支持的功能如 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • andr ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
author-avatar
爱碩爱你_静莫失心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有