热门标签 | 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              只有表结构没有数据。  


推荐阅读
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • hadoop3.1.2 first programdefault wordcount (Mac)
    hadoop3.1.2安装完成后的第一个实操示例程 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 在前一篇文章《Hadoop》系列之“踽踽独行”(二)中,我们详细探讨了云计算的核心概念。本章将重点转向物联网技术,全面解析其基本原理、应用场景及未来发展前景。通过深入分析物联网的架构和技术栈,我们将揭示其在智能城市、工业自动化和智能家居等领域的广泛应用潜力。此外,还将讨论物联网面临的挑战,如数据安全和隐私保护等问题,并展望其在未来技术融合中的重要角色。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 【clienteclipse集群提交运行】:客户端eclipse集群提交mapreduce代码1.需求:在master:8088上,有客户 ... [详细]
  • HDFS是什么?HDFS全称HadoopDistributedFileSystem,简称HDFS,是一个分布式文件系统。它是谷歌的GFS提出之后出现的另外一种文件系统。它有一定高 ... [详细]
  • 各个组件confspark-env.sh配置spark的环境变量confspark-default.conf配置spark应用默认的配置项和spark-env.sh有重合之处,可在 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
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社区 版权所有