导航:首页 > 源码编译 > hive源码编译

hive源码编译

发布时间:2023-01-03 05:22:38

① Hive入门概述

1.1 什么是Hive

Hive:由Facebook开源用于解决海量结构化日志的数据统计。

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。本质是:将HQL转化成MapRece程序

Hive处理的数据存储在HDFS

Hive分析数据底层的实现是MapRece

执行程序运行在Yarn上

1.2 Hive的优缺点

1.2.1 优点

操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。

避免了去写MapRece,减少开发人员的学习成本。

Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。

Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。

Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

1.2.2 缺点

1.Hive的HQL表达能力有限

(1)迭代式算法无法表达

(2)数据挖掘方面不擅长

2.Hive的效率比较低

(1)Hive自动生成的MapRece作业,通常情况下不够智能化

(2)Hive调优比较困难,粒度较粗

1.3 Hive架构原理

1.用户接口:Client

CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)

2.元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;

默认存储在自带的derby数据库中,推荐使用MySQL替代derby存储Metastore

3.Hadoop

使用HDFS进行存储,使用MapRece进行计算。

4.驱动器:Driver

(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。

(3)优化器(Query Optimizer):对逻辑执行计划进行优化。

(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapRece,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。

1.4 Hive和数据库比较

由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

1.4.1 查询语言

由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发。

1.4.2 数据存储位置

Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统中。

1.4.3 数据更新

由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO … VALUES 添加数据,使用 UPDATE … SET修改数据。

1.4.4 索引

Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引。Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapRece 的引入, Hive 可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive 仍然可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询。

1.4.5 执行

Hive中大多数查询的执行是通过 Hadoop 提供的 MapRece 来实现的。而数据库通常有自己的执行引擎。

1.4.6 执行延迟

Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive 执行延迟高的因素是 MapRece框架。由于MapRece 本身具有较高的延迟,因此在利用MapRece 执行Hive查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。

1.4.7 可扩展性

由于Hive是建立在Hadoop之上的,因此Hive的可扩展性是和Hadoop的可扩展性是一致的(世界上最大的Hadoop 集群在 Yahoo!,2009年的规模在4000 台节点左右)。而数据库由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有100台左右。

1.4.8 数据规模

由于Hive建立在集群上并可以利用MapRece进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。

② spark thrift server 与 网易 kyuubi thrift server

thrift server可以实现通过jdbc, beeline等工具,实现连接到spark集群,并提交sql查询的机制。

默认情况下,cdh安装的spark没有包含thrift server模块,因此我们需要重新编译spark。

另外,为了不影响cdh自带的spark,而且spark目前都是基于yarn运行的,本身也没有什么独立的服务部署(除了history sever)。

所以,在一个集群中,可以部署安装多个版本的spark。

我们使用源码编译的spark 2.4.0(其中hive的版本是1.2.1)

cdh集成的spark版本和Hive版本如下:

使用jdk1.8
修改spark提供的mvn,使用自行安装的maven 3.8.1

使用make-distribution.sh可以帮助与我们编译之后打包成tgz文件

修改pom.xml文件的配置如下。

最后,执行编译命令如下:

这样打出的包,就含有thrift server的jar包了。

最终打包文件,根目录下。

之后就是解压到其他目录下后即可。

将hive-site.xml的文件连接过来,这样spark就可以读取hive的表了。

为了确保spark提交到yarn上运行,需要配置

cp spark-defaults.conf.template spar-defaults.conf

另外,可以在spark-env.sh中设置环境变量。

HADOOP_CONF_DIR

环境变量,也可以在/etc/profile中设置

启动日志可以查看,注意下端口占用问题,如下。

启动时候,使用beeline工具连接上,主要这里不用使用cdh默认安装hive提供的beeline工具,应为版本太高。

使用编译后spark生成beeline工具

参考beeline使用教程。

https://github.com/apache/incubator-kyuubi

kyuubi是基于thrift sever二次开发,在系能和安全上优于thrift server。

鉴于目前hive的版本是2.1,而最新的kyuubi的hive是2.3,所以采用前天版本的kyuubi,采用0.7版本,保证hive的版本小于当前集群中的hive版本。

使用build目录下的dist脚本进行编译和打包。

编译成功后,会在更目录下出现tar.gz的压缩文件,如上图。

之后解压到目录下。

配置bin/kyuubi-env.sh脚本,设置spark路径

执行bin/start-kyuubi.sh命令即可。

访问的方式同样采用beelin,注意使用上面章节的beeline工具。

访问后,可以通过beeline访问到hive的表(在spark中已经配置了hive-site.xml)

!connect jdbc: hive2://xxxx:10009 即可。

③ 大数据分析应该掌握哪些基础知识

Java基础语法

· 分支结构if/switch

· 循环结构for/while/do while

· 方法声明和调用

· 方法重载

· 数组的使用

· 命令行参数、可变参数

IDEA

· IDEA常用设置、常用快捷键

· 自定义模板

· 关联Tomcat

· Web项目案例实操

面向对象编程

· 封装、继承、多态、构造器、包

· 异常处理机制

· 抽象类、接口、内部类

· 常有基础API、集合List/Set/Map

· 泛型、线程的创建和启动

· 深入集合源码分析、常见数据结构解析

· 线程的安全、同步和通信、IO流体系

· 反射、类的加载机制、网络编程

Java8/9/10/11新特性

· Lambda表达式、方法引用

· 构造器引用、StreamAPI

· jShell(JShell)命令

· 接口的私有方法、Optional加强

· 局部变量的类型推断

· 更简化的编译运行程序等

MySQL

· DML语言、DDL语言、DCL语言

· 分组查询、Join查询、子查询、Union查询、函数

· 流程控制语句、事务的特点、事务的隔离级别等

JDBC

· 使用JDBC完成数据库增删改查操作

· 批处理的操作

· 数据库连接池的原理及应用

· 常见数据库连接池C3P0、DBCP、Druid等

Maven

· Maven环境搭建

· 本地仓库&中央仓库

· 创建Web工程

· 自动部署

· 持续继承

· 持续部署

linux

· VI/VIM编辑器

· 系统管理操作&远程登录

· 常用命令

· 软件包管理&企业真题

Shell编程

· 自定义变量与特殊变量

· 运算符

· 条件判断

· 流程控制

· 系统函数&自定义函数

· 常用工具命令

· 面试真题

Hadoop

· Hadoop生态介绍

· Hadoop运行模式

· 源码编译

· HDFS文件系统底层详解

· DN&NN工作机制

· HDFS的API操作

· MapRece框架原理

· 数据压缩

· Yarn工作机制

· MapRece案例详解

· Hadoop参数调优

· HDFS存储多目录

· 多磁盘数据均衡

· LZO压缩

· Hadoop基准测试

Zookeeper

· Zookeeper数据结果

· 内部原理

· 选举机制

· Stat结构体

· 监听器

· 分布式安装部署

· API操作

· 实战案例

· 面试真题

· 启动停止脚本

HA+新特性

· HDFS-HA集群配置

Hive

· Hive架构原理

· 安装部署

· 远程连接

· 常见命令及基本数据类型

· DML数据操作

· 查询语句

· Join&排序

· 分桶&函数

· 压缩&存储

· 企业级调优

· 实战案例

· 面试真题

Flume

· Flume架构

· Agent内部原理

· 事务

· 安装部署

· 实战案例

· 自定义Source

· 自定义Sink

· Ganglia监控

Kafka

· 消息队列

· Kafka架构

· 集群部署

· 命令行操作

· 工作流程分析

· 分区分配策略

· 数据写入流程

· 存储策略

· 高阶API

· 低级API

· 拦截器

· 监控

· 高可靠性存储

· 数据可靠性和持久性保证

· ISR机制

· Kafka压测

· 机器数量计算

· 分区数计算

· 启动停止脚本

DataX

· 安装

· 原理

· 数据一致性

· 空值处理

· LZO压缩处理

Scala

· Scala基础入门

· 函数式编程

· 数据结构

· 面向对象编程

· 模式匹配

· 高阶函数

· 特质

· 注解&类型参数

· 隐式转换

· 高级类型

· 案例实操

Spark Core

· 安装部署

· RDD概述

· 编程模型

· 持久化&检查点机制

· DAG

· 算子详解

· RDD编程进阶

· 累加器&广播变量

Spark SQL

· SparkSQL

· DataFrame

· DataSet

· 自定义UDF&UDAF函数

Spark Streaming

· SparkStreaming

· 背压机制原理

· Receiver和Direct模式原理

· Window原理及案例实操

· 7x24 不间断运行&性能考量

Spark内核&优化

· 内核源码详解

· 优化详解

Hbase

· Hbase原理及架构

· 数据读写流程

· API使用

· 与Hive和Sqoop集成

· 企业级调优

Presto

· Presto的安装部署

· 使用Presto执行数仓项目的即席查询模块

Ranger2.0

· 权限管理工具Ranger的安装和使用

Azkaban3.0

· 任务调度工具Azkaban3.0的安装部署

· 使用Azkaban进行项目任务调度,实现电话邮件报警

Kylin3.0

· Kylin的安装部署

· Kylin核心思想

· 使用Kylin对接数据源构建模型

Atlas2.0

· 元数据管理工具Atlas的安装部署

Zabbix

· 集群监控工具Zabbix的安装部署

DolphinScheler

· 任务调度工具DolphinScheler的安装部署

· 实现数仓项目任务的自动化调度、配置邮件报警

Superset

· 使用SuperSet对数仓项目的计算结果进行可视化展示

Echarts

· 使用Echarts对数仓项目的计算结果进行可视化展示

Redis

· Redis安装部署

· 五大数据类型

· 总体配置

· 持久化

· 事务

· 发布订阅

· 主从复制

Canal

· 使用Canal实时监控MySQL数据变化采集至实时项目

Flink

· 运行时架构

· 数据源Source

· Window API

· Water Mark

· 状态编程

· CEP复杂事件处理

Flink SQL

· Flink SQL和Table API详细解读

Flink 内核

· Flink内核源码讲解

· 经典面试题讲解

Git&GitHub

· 安装配置

· 本地库搭建

· 基本操作

· 工作流

· 集中式

ClickHouse

· ClickHouse的安装部署

· 读写机制

· 数据类型

· 执行引擎

DataV

· 使用DataV对实时项目需求计算结果进行可视化展示

sugar

· 结合Springboot对接网络sugar实现数据可视化大屏展示

Maxwell

· 使用Maxwell实时监控MySQL数据变化采集至实时项目

ElasticSearch

· ElasticSearch索引基本操作、案例实操

Kibana

· 通过Kibana配置可视化分析

Springboot

· 利用Springboot开发可视化接口程序

④ 我想学习hive,请问安装hive之前,必须安装centos、hadoop、java这些吗

安装需要
java 1.6,java 1.7或更高版本。
Hadoop 2.x或更高, 1.x. Hive 0.13 版本也支持 0.20.x, 0.23.x
Linux,mac,windows操作系统。以下内容适用于linux系统。
安装打包好的hive
需要先到apache下载已打包好的hive镜像,然后解压开该文件
$ tar -xzvf hive-x.y.z.tar.gz

设置hive环境变量
$ cd hive-x.y.z$ export HIVE_HOME={{pwd}}

设置hive运行路径
$ export PATH=$HIVE_HOME/bin:$PATH

编译Hive源码
下载hive源码
此处使用maven编译,需要下载安装maven。

以Hive 0.13版为例
编译hive 0.13源码基于hadoop 0.23或更高版本
$cdhive$mvncleaninstall-Phadoop-2,dist$cdpackaging/target/apache-hive-{version}-SNAPSHOT-bin/apache-hive-{version}-SNAPSHOT-bin$lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
编译hive 基于hadoop 0.20
$cdhive$antcleanpackage$cdbuild/dist#lsLICENSENOTICEREADME.txtRELEASE_NOTES.txtbin/(alltheshellscripts)lib/(requiredjarfiles)conf/(configurationfiles)examples/(sampleinputandqueryfiles)hcatalog/(hcataloginstallation)scripts/(upgradescriptsforhive-metastore)
运行hive
Hive运行依赖于hadoop,在运行hadoop之前必需先配置好hadoopHome。
export HADOOP_HOME=<hadoop-install-dir>

在hdfs上为hive创建\tmp目录和/user/hive/warehouse(akahive.metastore.warehouse.dir) 目录,然后你才可以运行hive。
在运行hive之前设置HiveHome。
$ export HIVE_HOME=<hive-install-dir>

在命令行窗口启动hive
$ $HIVE_HOME/bin/hive

若执行成功,将看到类似内容如图所示

⑤ 如何通俗地理解Hive的工作原理

Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapRece 开发者的开发自定义的 mapper 和 recer 来处理内建的 mapper 和 recer 无法完成的复杂的分析工作。
流程大致步骤为:
1. 用户提交查询等任务给Driver。
2. 编译器获得该用户的任务Plan。
3. 编译器Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。
4. 编译器Compiler得到元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapRece), 最后选择最佳的策略。
5. 将最终的计划提交给Driver。
6. Driver将计划Plan转交给ExecutionEngine去执行,获取元数据信息,提交给JobTracker或者SourceManager执行该任务,任务会直接读取HDFS中文件进行相应的操作。
7. 获取执行的结果。
8. 取得并返回执行结果。

阅读全文

与hive源码编译相关的资料

热点内容
又见金底副图选股公式源码 浏览:203
烧录编程器那个好用 浏览:542
三晋先锋app如何签约 浏览:439
网络如何读取服务器信息 浏览:434
mac压缩解压视频 浏览:906
这就是程序员魅力 浏览:296
京东java算法笔试题 浏览:178
柱子加密箍筋不准有接头 浏览:199
我的世界服务器菜单插件如何使用 浏览:12
刘毅10000词pdf 浏览:890
刚毕业的程序员会什么 浏览:974
单片机控制64路开关量 浏览:982
win10截图编程 浏览:420
怎样把名字变成文件夹 浏览:203
文件怎么搞成文件夹 浏览:730
多线程编程php 浏览:606
安卓机越用越卡有什么办法 浏览:17
高中生解压操场适合做的游戏 浏览:395
程序员java招聘 浏览:462
未来之光手机云服务器 浏览:160