大数据入门第十一天——hive详解(一)入门与安装
一、基本概念
1.什么是hive
The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
简洁的中文解释就是:
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
数据仓库的概念可以先查看百度百科的介绍:
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
数据库与数据仓库的区别对比,参考知乎相关问题 :https://www.zhihu.com/question/20623931
更加详细的数仓的介绍与深入,将另开随笔介绍!
2.为什么用hive
- 直接使用hadoop所面临的问题
人员学习成本太高
项目周期要求太短
MapReduce实现复杂查询逻辑开发难度太大
- 为什么要使用Hive
操作接口采用类SQL语法,提供快速开发的能力。
避免了去写MapReduce,减少开发人员的学习成本。
扩展功能很方便。
3.hive架构
基本组件:
- 用户接口:包括 CLI、JDBC/ODBC、WebGUI。
- 元数据存储:通常是存储在关系数据库如 mysql , derby中。
- 解释器、编译器、优化器、执行器。
组件功能:
- 用户接口主要由三个:CLI、JDBC/ODBC和WebGUI。其中,CLI为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
- 元数据存储:Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
- 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
更多详细的hive体系架构深入介绍,参考:http://blog.csdn.net/zhoudaxia/article/details/8855937
4.hive与Hadoop的关系
Hive利用HDFS存储数据,利用MapReduce查询数据
与传统数据库对比:
补充计算框架tez:https://www.cnblogs.com/yjt1993/p/11044578.html
性能优于MR的DAG计算框架!
5.hive数据存储
1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
² db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
² table:在hdfs中表现所属db目录下一个文件夹
² external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径
普通表: 删除表后, hdfs上的文件都删了
External外部表删除后, hdfs上的文件没有删除, 只是把文件删除了
内外部表的区别:
未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
区别:
内部表数据由Hive自身管理,外部表数据由HDFS管理;
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)
使用场景:
外部表使用场景:导入hdfs中的源数据
内部表使用场景:存放Hive处理的中间表、结果表 如:
每天将日志数据传入HDFS,一天一个目录;Hive基于流入的数据建立外部表,将每天HDFS上的原始日志映射到外部表的天分区中;
在外部表基础上做统计分析,使用内部表存储中间表、结果表,数据通过SELECT+INSERT进入内部表
内部表外部表的区别,我们可以参考:https://blog.csdn.net/qq_36743482/article/details/78393678
https://www.jianshu.com/p/cd30f7980e9f
² partition:在hdfs中表现为table目录下的子目录
² bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中
二、hive安装与配置
###hive可视化工具推荐:http://lxw1234.com/archives/2016/09/723.htm
https://www.cnblogs.com/wujiadong2014/p/6058851.html
1.准备安装包——推荐使用sftp上传,更快速!
2.解压
与之前保持一致,解压至apps,当然到usr/local等自定义的目录是完全没毛病的
[hadoop@mini1 ~]$ tar -zxvf apache-hive-1.2.-bin.tar.gz -C apps/
顺便将解压出来的文件夹的过长的名字稍作更改:
[hadoop@mini1 apps]$ mv apache-hive-1.2.-bin/ hive-1.2.
3.安装mysql
由于hive是默认将元数据保存在本地内嵌的 Derby 数据库中,但是这种做法缺点也很明显,Derby不支持多会话连接,因此本文将选择mysql作为元数据存储。
mysql的安装参考之前linux的随笔,注意开启用户远程登录!
4.配置元数据库信息
这里暂时不修改默认的了,在conf目录下使用一个新的配置文件hive-site.xml:
vi hive-site.xml
以下配置项也是简单易懂的:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost: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>Zcc170821#</value>
<description>password to use against metastore database</description>
</property>
</configuration>
hive进行元数据管理,参考介绍:https://www.cnblogs.com/qingyunzong/p/8710356.html#_label2
5.添加mysql驱动包
在lib目录下添加驱动包
6.替换JLine的jar包
解决Jline包版本不一致的问题
[hadoop@mini1 lib]$ rm ~/apps/hadoop-2.6./share/hadoop/yarn/lib/jline-0.9..jar
[hadoop@mini1 lib]$ cp jline-2.12.jar ~/apps/hadoop-2.6./share/hadoop/yarn/lib/
7.配置环境变量
[hadoop@mini1 hive-1.2.]$ sudo vim /etc/profile
export HIVE_HOME=/home/hadoop/apps/hive-1.2.
export PATH=$PATH:$HIVE_HOME/bin
[hadoop@mini1 hive-1.2.]$ source /etc/profile
8.初体验
启动之前,需要启动MySQL
systemctl start mysql
启动ZK(已编写一键启停脚本在/root下)
/root/bin/startZK.sh
启动Hadoop(在hadoop/sbin下已有脚本,配置即可)
sbin/start-dfs.sh
sbin/start-yarn.sh
启动hive:
[hadoop@mini1 hive-1.2.]$ bin/hive
// 配置环境变量后可以直接启动
建库:
hive> create database shizhan01;
OK
Time taken: 0.943 seconds
hive>
建表:
hive> use shizhan01;
OK
Time taken: 0.049 seconds
hive> create table t_user(id int,name string);
OK
Time taken: 0.395 seconds
hive>
// hive中使用完全的java数据类型即可!
查看元数据:
删除t_user;重新建表指定数据格式:
hive> create table t_user01(id int,name string)
> row format delimited
> fields terminated by ','
> ;
OK
Time taken: 0.074 seconds
hive>
上传测试数据:
[hadoop@mini1 ~]$ vim user.dat
[hadoop@mini1 ~]$ ls
apache-hive-1.2.-bin.tar.gz apps hadoop-2.6..tar.gz hdpdata user.dat
[hadoop@mini1 ~]$ hadoop fs -put user.dat /user/hive/warehouse/shizhan01.db/t_user
正常查询:
hive> select * from t_user01;
OK
1 Join
2 Mary
3 Bob
通过mr任务:
hive> select count(*) from t_user01;
Query ID = hadoop_20180224172255_b984036d-5bdd-44fc-bfb5-380b9a433034
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>
Starting Job = job_1519458521203_0001, Tracking URL = http://mini1:8088/proxy/application_1519458521203_0001/
Kill Command = /home/hadoop/apps/hadoop-2.6.4/bin/hadoop job -kill job_1519458521203_0001
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2018-02-24 17:23:09,002 Stage-1 map = 0%, reduce = 0%
2018-02-24 17:23:15,635 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 1.29 sec
2018-02-24 17:23:25,213 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 2.63 sec
MapReduce Total cumulative CPU time: 2 seconds 630 msec
Ended Job = job_1519458521203_0001
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 2.63 sec HDFS Read: 6416 HDFS Write: 2 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 630 msec
OK
4
Time taken: 31.956 seconds, Fetched: 1 row(s)
hive>
三、启动为thrift服务
1.启动
启动为前台:bin/hiveserver2
启动为后台:nohup bin/hiveserver2 >/var/log/hiveserver.log >/var/log/hiveserver.err &
2.连接
使用支持thrift服务的进行连接,这里采用hive默认提供的beeline(另外复制一个SSH隧道)
[hadoop@mini1 ~]$ beeline
Beeline version 1.2. by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: hadoop
Enter password for jdbc:hive2://localhost:10000:
Connected to: Apache Hive (version 1.2.)
Driver: Hive JDBC (version 1.2.)
Transaction isolation: TRANSACTION_REPEATABLE_READ
: jdbc:hive2://localhost:10000>
// 默认是使用hadoop用户无密码登录即可,或者进行配置(当然配置的意义不大)
或者使用启动即连接:
bin/beeline -u jdbc:hive2://localhost:10000 -n hadoop
当然,更加推荐的方式是自己在有环境变量的bin下写个启动脚本,以后就可以使用startbeeline.sh等自定义脚本一键启动了!
补充:
也可以通过hive -e 'sql'的形式
[hadoop@mini1 ~]$ hive -e 'sql'
这样的好处是执行完了回到命令行,也就是可以通过shell脚本来执行一连串的sql了,而不用一个一个在命令行敲了!
或者执行某个sql文件
[hadoop@mini1 ~]$ hive -f '1.sql'
四、使用HUE进行界面化管理
安装hue以及配置Mysql作为外部元数据库等参考HUE随笔!
参考随笔:https://www.cnblogs.com/zlslch/p/6804757.html
大数据入门第十一天——hive详解(一)入门与安装的更多相关文章
- 大数据入门第十一天——hive详解(二)基本操作与分区分桶
一.基本操作 1.DDL 官网的DDL语法教程:点击查看 建表语句 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data ...
- 大数据入门第十一天——hive详解(三)hive函数
一.hive函数 1.内置运算符与内置函数 函数分类: 查看函数信息: DESC FUNCTION concat; 常用的分析函数之rank() row_number(),参考:https://www ...
- 大数据入门第七天——MapReduce详解(一)入门与简单示例
一.概述 1.map-reduce是什么 Hadoop MapReduce is a software framework for easily writing applications which ...
- 大数据入门第七天——MapReduce详解(二)切片源码浅析与自定义patition
一.mapTask并行度的决定机制 1.概述 一个job的map阶段并行度由客户端在提交job时决定 而客户端对map阶段并行度的规划的基本逻辑为: 将待处理数据执行逻辑切片(即按照一个特定切片大小, ...
- 大数据入门第十六天——流式计算之storm详解(一)入门与集群安装
一.概述 今天起就正式进入了流式计算.这里先解释一下流式计算的概念 离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据 ...
- 大数据入门第八天——MapReduce详解(三)MR的shuffer、combiner与Yarn集群分析
/mr的combiner /mr的排序 /mr的shuffle /mr与yarn /mr运行模式 /mr实现join /mr全局图 /mr的压缩 今日提纲 一.流量汇总排序的实现 1.需求 对日志数据 ...
- 大数据入门第十七天——storm上游数据源 之kafka详解(三)其他问题
一.kafka文件存储机制 1.topic存储 在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序 ...
- 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装
一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...
- 大数据入门第十六天——流式计算之storm详解(二)常用命令与wc实例
一.常用命令 1.提交命令 提交任务命令格式:storm jar [jar路径] [拓扑包名.拓扑类名] [拓扑名称] torm jar examples/storm-starter/storm-st ...
随机推荐
- Django ORM字段类型 单表增删改查 万能的双下划线
1.ORM三种模型 模型之间的三种关系:一对一,一对多,多对多. 一对一:实质就是在主外键(author_id就是foreign key)的关系基础上,给外键加了一个UNIQUE=True的属性: 一 ...
- Oracle 数据库执行慢SQL
) hou, - ))) mini, c.sql_address, c.inst_id,f.full_name,u.user_name, b.user_concurrent_program_name, ...
- IPv4到IPv6的三种过渡技术
1. 双协议栈 ( Dual Stack, RFC2893 ) 主机同时运行IPv4和IPv6两套协议栈,同时支持两套协议. 2. 隧道技术 ( Tunnel, RFC2893 ) 这种机制用来在IP ...
- voltdb数据库持久性,扩展集群
之前在git上下载的voltdb,以及在官网下载的社区版voltdb均不支持持久性事务,和扩展集群,今天下载了企业试用版voltdb,安装过程不再赘述,记录一下我的使用过程 持久性测试 以前的 vol ...
- systemd 之 systemctl
Systemd 常规操作与彩蛋 一.前言 上了俩个月的RHCE工程师的班,收获颇多.话说回来,在 redhat 7 中有个非常重要的概念,即:systemd systemd 是 Linux 下的一款系 ...
- UIView使用UIMotionEffect效果
UIView使用UIMotionEffect效果 这个效果在模拟器上看不了,所以无法截图. UIView+MotionEffect.h + UIView+MotionEffect.m // // ...
- 前端 网络三剑客之html 01
一.引语 1.html是什么? 1.超文本标记语言(Hypertext Markup Language):简称HTML或html.是通过标签语言来标记要显示的网页中的各个部分. 2.它遵循一套浏览器的 ...
- HTML基础标签的综合应用案例(颜色、斜体、加粗、下划线、a标签、无序列表、有序列表)
什么是HTML l HTML(HyperText Mark-up Language)即超文本标记语言或超文本标签语言. l 何为超文本:“超文本”可以实现页面内可以包含图片.链接,甚至音乐.程序等. ...
- #006 dependencies和devDependencies的区别
dependencies 和 devDependencies 区别 在 npm 中的 package.json ,有两种插件的依赖包配置形式。 dependencies 和 devDependenci ...
- C++暑期学习笔记
# C++初步学习笔记 一.命名空间(namespace)相关 1 个人理解: 为了避免整合资源中存在的重名矛盾而采取的区别资源的措施: 2 命名空间的定义: 比如要定义一个命名空间A: namesp ...