spark on hive

本文主要记录如何安装配置Hive on Spark,在执行以下步骤之前,请先确保已经安装Hadoop集群,Hive,MySQL,JDK,Scala,具体安装步骤不再赘述。

背景

Hive默认使用MapReduce作为执行引擎,即Hive on mr。实际上,Hive还可以使用Tez和Spark作为其执行引擎,分别为Hive on Tez和Hive on Spark。由于MapReduce中间计算均需要写入磁盘,而Spark是放在内存中,所以总体来讲Spark比MapReduce快很多。因此,Hive on Spark也会比Hive on mr快。为了对比Hive on Spark和Hive on mr的速度,需要在已经安装了Hadoop集群的机器上安装Spark集群(Spark集群是建立在Hadoop集群之上的,也就是需要先装Hadoop集群,再装Spark集群,因为Spark用了Hadoop的HDFS、YARN等),然后把Hive的执行引擎设置为Spark。

Spark运行模式分为三种1、Spark on YARN 2、Standalone Mode 3、Spark on Mesos。
Hive on Spark默认支持Spark on YARN模式,因此我们选择Spark on YARN模式。Spark on YARN就是使用YARN作为Spark的资源管理器。分为Cluster和Client两种模式。

一、环境说明

本教程Hadoop相关软件全部基于CDH5.5.1,用yum安装,系统环境如下:

  • 操作系统:CentOS 7.2
  • Hadoop 2.6.0
  • Hive1.1.0
  • Spark1.5.0
  • MySQL 5.6
  • JDK 1.8
  • Maven 3.3.3
  • Scala 2.10

各节点规划如下:

192.168.117.51     Goblin01           nn1  jn1  rm1  worker  master  hive  metastore  mysql
192.168.117.52     Goblin02    zk2    nn2  jn2  rm2  worker          hive
192.168.117.53     Goblin03    zk3    dn1  jn3       worker          hive
192.168.117.54     Goblin04    zk4    dn2            worker          hive

说明:Goblin01~04是每台机器的hostname,zk代表zookeeper,nn代表hadoop的namenode,dn代表datanode,jn代表journalnode,rm代表resourcemanager,worker代表Spark的slaves,master代表Spark的master

二、编译和安装Spark(Spark on YARN)

2.1 编译Spark源码

要使用Hive on Spark,所用的Spark版本必须不包含Hive的相关jar包,hive on spark 的官网上说“Note that you must have a version of Spark which does not include the Hive jars”。在spark官网下载的编译的Spark都是有集成Hive的,因此需要自己下载源码来编译,并且编译的时候不指定Hive。

我们这里用的Spark源码是spark-1.5.0-cdh5.5.1版本,下载地址如下:

http://archive.cloudera.com/cdh5/cdh/5/spark-1.5.0-cdh5.5.1-src.tar.gz

下载完后用 tar xzvf 命令解压,进入解压完的文件夹,准备编译。

注意:编译前请确保已经安装JDK、Maven和Scala,maven为3.3.3及以上版本,并在/etc/profile里配置环境变量。

命令行进入在源码根目录下,执行

  ./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.6,parquet-provided"

若编译过程出现内存不足的情况,需要在运行编译命令之前先运行:

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

来设置Maven的内存。

编译过程由于要下载很多Maven依赖的ja

### 使用 Spark 集成 Hive 的配置与性能优化 在使用 Apache SparkHive 进行集成时,可以通过合理的配置来实现高效的数据处理和查询操作。以下是关于如何配置以及进行性能调优的相关信息。 #### 1. **基本配置** 为了使 Spark 能够访问 Hive 表并执行 SQL 查询,需要设置 `SparkConf` 中的一些必要参数。例如: - 设置 Hive 支持: 可以通过启用 `hive-support` 来让 Spark 访问 Hive 数据库中的表结构和元数据[^1]。 ```scala val conf = new SparkConf() .set("spark.sql.warehouse.dir", "/user/hive/warehouse") .set("hive.metastore.uris", "thrift://<metastore-host>:9083") ``` - 动态加载 Hive 配置文件: 如果 Hive 已经有现成的配置文件(如 `hive-site.xml`),可以将其路径传递给 Spark 应用程序以便自动读取这些配置项。 ```bash --files /path/to/hive-site.xml \ --conf spark.hadoop.hive.conf=/path/to/hive-site.xml ``` #### 2. **动态分区写入与内存管理** 当向 Hive 表中插入大量数据时,可能会遇到 Out-of-Memory (OOM) 错误。为了避免这种情况发生,建议调整以下两个重要参数: - 减少 Spark 内存分配比例 (`spark.memory.fraction`):默认情况下该值为 0.6;如果发现 OOM,则可尝试降低此数值至更保守范围(比如 0.4)。这会减少用于缓存和 shuffle 操作的堆外空间大小[^2]。 - 控制 Parquet 文件序列化过程中的内存占用率 (`parquet.memory.pool.ratio`):Parquet 是一种高效的列式存储格式,在保存大数据集到磁盘之前通常需要缓冲一定量的内容于 RAM 上面完成编码压缩等工作流程。因此适当减小这个比率有助于缓解因过多临时对象驻留在 JVM 堆顶而引发的压力问题。 ```scala val conf = new SparkConf() .set("spark.memory.fraction", "0.4") .set("parquet.memory.pool.ratio", "0.3") ``` #### 3. **流式处理支持** 对于实时场景下的增量更新需求来说,Snowflake 提供了一种简化版解决方案——即无需手动编写复杂 ETL 脚本即可快速构建端到端管道模型[^3]。尽管这不是针对传统本地部署环境的最佳实践之一,但对于云端迁移项目而言不失为一个好的起点选项。 --- ### 性能调优技巧总结 除了上述提到的基础设定之外还有其他几个方面值得注意: - 合理规划 Shuffle Partition 数目; - 利用广播变量加速 Join 类型运算; - 开启预测模式预估成本从而选取最优物理计划等等... 以上就是有关如何利用 Spark 实现与 Hive 平台无缝衔接及其相应效能提升策略的知识点介绍啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值