Hive架构及Hive On Spark

简介: Hive的所有数据都存在HDFS中. (1)Table:每个表都对应在HDFS中的目录下,数据是经过序列化后存储在该目录中。同时Hive也支持表中的数据存储在其他类型的文件系统中,如NFS或本地文件系统。

Hive的所有数据都存在HDFS中.

(1)Table:每个表都对应在HDFS中的目录下,数据是经过序列化后存储在该目录中。同时Hive也支持表中的数据存储在其他类型的文件系统中,如NFS或本地文件系统。

(2)Partition(分区):Hive中的分区类似于RDBMS中的索引,每个Partition都有一个对应的目录,查询的时候可以减少数据的规模。

(3)Bucket(桶):即使将数据分区后,每个分区的规模可能依旧会很大,可以根据关键字的Hash结果将数据分成多个Bucket,每个Bucket对应一个文件。

HvieQL支持类似于SQL的查询语言,大体可分为以下几种类型.

DDL:类似于创建数据库(create database),创建表(create table),删除表(drop table)等.

DML:对于数据的查询(select)或添加(insert into overwrite)。

UDF:自定义查询函数。

Hive的整体架构图如下:

Hive拥有自己的语法树解析(Parser)、语义分析(Semantic Analyser)、以及查询优化器(Optimizer),最终以MapReduce的形式生成Job,交给Hadoop进行执行。项目开发中,由于Spark的Catalyst解析还太过简陋,一般声明对象时,还是用HiveContext.下面举个简单的例子:

import hiveContext._
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext("create table yangsy (key int, value String)"
//将本地目录下的文件加载到HDFS的HIVE表中
sqlContext("load data local inpath '/home/coc/XXX.csv' into table yangsy")
//查询
sqlContext("From yangsy select key,value").collect().foreach(println)
sqlContext("drop table yangsy")

其实collect()函数已经过时。。。。但是为了触发action操作,就必须用,cache()函数只将运算后的数据存入内存,然而并没有什么卵用,因为它是transformation操作。

Spark对HiveQL所做的优化主要体现在Query相关的操作,其他的依旧使用Hive的原生执行引擎。在logicalPlan到physicalPlan的转换过程中,toRDD是最关键的。 源码如下:

override lazy val toRdd:RDD[Row] =
analyzed match{
    case NativeCommand(cmd) =>
    val output = runSqlHive(cmd)
    if(output.size == 0){
    emptyResult
    }else{
    val asRows = output.map(r => new GenericRow(r.split("\t".asInstanceOf[Array[Any]]))
    sparkContext.parallelize(asRows,1)
    }
    case _ =>
    executedPlan.execute().map(_.copy())
    }

在Hive解析过程中增加了两个规则,分别是HiveTypeCoercion和PreInsertionCasts,其中要注意Catalog的用途,它是HiveMetastoreCatalog的实例。

HiveMetastoreCatalog是Spark中对Hive Metastore访问的wrapper.HiveMetastoreCatalog通过调用相应的Hive API可以获得数据库中的表及表的分区,也可创建表。它会通过Hive client来访问MetaStore的元数据。流程如下所示:

Hive:  hiveql -> queryExecutor ->HiveMetastoreCatalog ->MetaStore

SparkSQL: hiveql -> queryExecutor (toRDD)-> Spark RDDS -> HiveMetastoreCatalog ->MetaStore

 

目录
相关文章
|
2月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
195 6
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
83 2
|
1月前
|
SQL 分布式计算 Java
【赵渝强老师】Hive的体系架构
Hive是基于Hadoop的数据仓库平台,提供SQL-like的HQL语言进行数据分析,无需编写复杂的Java代码。Hive支持丰富的数据模型,可将SQL语句转换为MapReduce任务在Yarn上运行,底层依赖HDFS存储数据。Hive可通过CLI、JDBC和Web界面执行SQL查询。
|
1月前
|
分布式计算 大数据 Apache
Apache Spark & Paimon Meetup · 北京站,助力 LakeHouse 架构生产落地
2024年11月15日13:30北京市朝阳区阿里中心-望京A座-05F,阿里云 EMR 技术团队联合 Apache Paimon 社区举办 Apache Spark & Paimon meetup,助力企业 LakeHouse 架构生产落地”线下 meetup,欢迎报名参加!
109 3
|
2月前
|
存储 分布式计算 算法
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
大数据-105 Spark GraphX 基本概述 与 架构基础 概念详解 核心数据结构
61 0
|
2月前
|
消息中间件 分布式计算 Kafka
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
大数据-98 Spark 集群 Spark Streaming 基础概述 架构概念 执行流程 优缺点
50 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
68 0
|
2月前
|
SQL 存储 分布式计算
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
51 0
|
SQL HIVE 分布式计算
|
SQL 分布式计算 HIVE
spark集成hbase与hive数据转换与代码练习
  帮一个朋友写个样例,顺便练手啦~一直在做平台的各种事,但是代码后续还要精进啊。。。 1 import java.util.Date 2 3 import org.apache.hadoop.
1271 0

热门文章

最新文章