漫谈大数据 - Spark on Hive & Hive on Spark

目录

Spark on hive 与 Hive on Spark 的区别

Hive查询流程及原理

Hive将SQL转成MapReduce执行速度慢

Hive On Spark优化

Hive元数据库的功能

Hive开启MetaStore服务


Spark on hive 与 Hive on Spark 的区别

  • Spark on hive

Spark通过Spark-SQL使用hive 语句,操作hive,底层运行的还是 spark rdd。

(1)就是通过sparksql,加载hive的配置文件,获取到hive的元数据信息

(2)spark sql获取到hive的元数据信息之后就可以拿到hive的所有表的数据

(3)接下来就可以通过spark sql来操作hive表中的数据

  • Hive on Spark

是把hive查询从mapreduce 的mr (Hadoop计算引擎)操作替换为spark rdd(spark 执行引擎) 操作. 相对于spark on hive,这个要实现起来则麻烦很多, 必须重新编译你的spark和导入jar包,不过目前大部分使用的是spark on hive。

最权威的解释请见Apache Spark官网:

http://spark.apache.org/docs/latest/sql-data-sources-hive-tables.html

Hive查询流程及原理

执行HQL时,先到MySQL元数据库中查找描述信息,然后解析HQL并根据描述信息生成MR任务

Hive将SQL转成MapReduce执行速度慢

使用SparkSQL整合Hive其实就是让SparkSQL去加载Hive 的元数据库,然后通过SparkSQL执行引擎去操作Hive表内的数据

首先需要开启Hive的元数据库服务,让SparkSQL能够加载元数据。

Hive On Spark优化

Hive原来的计算模型是MR,频繁操作磁盘(将中间结果写入到HDFS中)效率低。而Hive On Spark中使用了RDD(Dataframe),然后运行在spark集群上面。元数据保存在mysql中,其中包含了hive表的描述信息,描述了那些数据库、表,以及表有多少列,每一列都是什么类型,还要描述表的数据保存在HDFS的什么位置。

Hive元数据库的功能

  hive的元数据(metadata)建立了一种映射关系,执行HQL是,先到Mysql元数据库中查找描述信息,然后根据描述信息生成任务,然后将任务下发到spark集群中执行。hive on spark使用的仅仅是hive的标准和规范,不需要有hive数据库一样可以使用。要使用Hive的标准需要将hive的配置文件放在spark的conf目录下。没有安装Hive组件也没有影响。

Hive开启MetaStore服务

修改 hive/conf/hive-site.xml 新增如下配置:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
    </property>
    <property>
      <name>hive.metastore.local</name>
      <value>false</value>
    </property>
    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://node01:9083</value>
    </property>
 </configuration>

后台启动 Hive MetaStore服务

nohup /export/servers/hive/bin/hive --service metastore 2>&1 >> /var/log.log &

猜你喜欢

转载自blog.csdn.net/qq_52213943/article/details/124390746