spark on hive 和 hive on spark

本文详细介绍了Spark on Hive的工作原理和具体操作步骤,包括如何通过Spark SQL加载Hive的元数据,以及如何整合Hive Metastore进行数据操作。同时,对比了Hive on Spark与Spark on Hive的区别。

**

spark on hive

**
spark on hive 的话就是通过spark-sql使用hive语句,操作hive,底层运行的还是spark rdd。

  1. 就是通过saprk sql,加载hive配置文件,获取hive的元数据信息
  2. spark sql获取到hive的元数据信息之后就可以拿到hive的所有表的数据
  3. 接下来就可以通过sparksql来操作hive表中的数据

hive on spark

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

hive查询流程及原理

执行hql时,先到mysql元数据库中查找描述信息,然后解析hql并根据描述信息生成mr任务(执行mr时会执行的很慢)

spark on hive具体操作

使用spark SQL整合hive其实就是让sparksql去加载hive的元数据库,然后通过sparksql执行引擎去操作hive表内的数据
首先需要开启hive的元数据库服务,让sparksql能够加载元数据。

1,hive开启metastore服务
<1>,修改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>

<2>后台启动hive metastore服务

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

2,sparksql整合hive metastore
spark有一个内置的metastore,使用derby嵌入式数据库保存数据,但是这种方式不适合生产环境,因为这种模式同一时间只能有一个sparksession使用,所以生产环境更推荐使用hive的metastore。

spark整合hive的metastore主要思路就是要通过配置能够访问它,并且能够使用hdfs保存warehouse,所以可以直接拷贝hadoop和hive的配置目录。

hive-site.xml 元数据仓库的位置信息
core-site.xml 安全相关的配置
hdfs-site.xml hdfs相关的配置

我们进入shell窗口,执行以下命令
将hive目录下的hive-site.xml拷贝至spark安装目录下

cp /export/servers/hive-1.1.0-cdh5.14.0/conf/hive-site.xml
/export/servers/spark/conf

将hadoop安装目录下的core-site.xml和 hdfs-site.xml拷贝至spark安装目录下

cp /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml /export/servers/spark/conf
cp /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml /export/servers/spark/conf

提示:使用idea本地测试直接把以上配置文件放在resources目录即可

实例

import org.apache.spark.sql.SparkSession

object HiveSupport {
  def main(args: Array[String]): Unit = {
    //创建sparkSession
    val spark = SparkSession
      .builder()
      .appName("HiveSupport")
      .master("local[*]")
      .config("spark.sql.warehouse.dir", "hdfs://node01:8020/user/hive/warehouse")
      .config("hive.metastore.uris", "thrift://node01:9083")
      .enableHiveSupport()//开启hive语法的支持
      .getOrCreate()

    // 设置日志级别
    spark.sparkContext.setLogLevel("WARN")

    //查看有哪些表
    spark.sql("show tables").show()

    //创建表
    spark.sql("CREATE TABLE person (id int, name string, age int) row format delimited fields terminated by ' '")

    //加载数据,数据为当前SparkDemo项目目录下的person.txt(和src平级)
    spark.sql("LOAD DATA LOCAL INPATH 'in/person.txt' INTO TABLE person")

    //查询数据
    spark.sql("select * from person ").show()

    spark.stop()
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值