摘要:结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序。

本文分享自华为云社区《Hive on Spark和Spark sql on Hive有啥区别?》,作者:dayu_dls 。

结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序。Hive和SparkSQL都不负责计算。Hive的默认执行引擎是mr,还可以运行在Spark和Tez。Spark可以连接多种数据源,然后使用SparkSQL来执行分布式计算。

Hive On Spark 配置

(1)首先安装包要选择对,否则就没有开始了。

Hive版本:apache-hive-2.1.1-bin.tar

spark版本:spark-1.6.3-bin-hadoop2.4-without-hive(不需要把Hive编译进去)

(2)假设你已经安装好Hive(元数据为Derby)和spark,那么默认Hive走mr,需要修改以下配置让Hive走spark

<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>

(3)配置环境变量及运行时参数

在hive-site.xml中配置SPARK_HOME;

在hive-site.xml或者或者spark-default.conf或者spark-env.conf配置spark运行时参数,也可以在Hive运行环境中设置临时参数:

set spark.master=<Spark Master URL>
set spark.eventLog.enabled=true;
set spark.eventLog.dir=<Spark event log folder (must exist)>
set spark.executor.memory=512m;
set spark.serializer=org.apache.spark.serializer.KryoSerializer;

将编译好的Spark安装包中lib目录下的spark-assembly-*.jar包添加至HIVE_HOME/lib中

(4)启动Hive

/opt/hive/bin/hive --service metastore

(5)启动Hive命令行窗口

beeline -u jdbc:hive2://localhost:10000  或者  /opt/hive/bin/hive

(6)开启你的Hive on spark之旅

0: jdbc:hive2://localhost:10000> create table test (f1 string,f2 string) stored as orc;

No rows affected (2.018 seconds)

0: jdbc:hive2://localhost:10000> insert into test values(1,2);

Spark sql on Hive

(1)获取包

Hive版本:apache-hive-2.1.1-bin.tar

spark版本:spark-1.6.3-bin-hadoop2.4(需要把Hive编译进去)

(2)在$SPARK_HOME/conf目录创建hive-site.xml文件,内容如下:

<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://master1:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
</configuration>

(3)如果你使用的元数据库是mysql,那么请把mysql驱动放到$SPARK_HOME/lib下,否则跳过。

(4)启动Hive元数据服务,待spark运行时访问。

(5)执行命令

./bin/spark-shell --master spark://master:7077
scala> val hc = new org.apache.spark.sql.hive.HiveContext(sc);
scala> hc.sql("show tables").collect.foreach(println)
[sougou,false]
[t1,false]

Sparkthriftserver启用

spark提供了spark-sql命令可以直接操作hive或impala,可以启用sparkthriftserver服务,然后利用beeline远程连接spark,利用spark sql。sparksql的诞生其实就是为了代替hsql。Sparksql的元数据也是使用hive的metastore进行管理,所以需要配置hive.metastore.uris参数。

这里说下sparkthriftserver和hivethriftserver的区别,二者的端口一定要区分:

hivethriftserver:hive服务端的服务,远程通过jdbc或者beeline连接,使用hsql操作hive。

sparkthriftserver:spark的服务,远程通过jdbc或者beeline连接spark,使用spark sql操作hive。

(1)在$SPARK_HOME/conf目录创建hive-site.xml文件,内容如下:

<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://master1:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
<!--Thrift JDBC/ODBC server-->
<property>
<name>hive.server2.thrift.min.worker.threads</name>
<value>5</value>
</property>
<property>
<name>hive.server2.thrift.max.worker.threads</name>
<value>500</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10001</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>master</value>
</property>
</configuration>

(2)启动sparkthriftserver

./start-thriftserver.sh --hiveconf hive.server2.thrift.port=10000 --master yarn --driver-class-path /data/spark-2.2.0-bin-hadoop2.7/jars/mysql-connector-java-5.1.43-bin.jar --executor-memory 5g --total-executor-cores 5
启动sparkthriftserver后,后台默认会执行spark-sql命令,实际上是用spark-submit向yarn提交一个任务。这样就会在yarn的8088页面任务栏中起一个常驻任务,用来执行spark sql。

(3)连接spark

./beeline -u jdbc:hive2://172.168.108.6:10001 -n root
(4)这里的sql可以在8088页面看到执行过程。

点击关注,第一时间了解华为云新鲜技术~

Hive on Spark和Spark sql on Hive,你能分的清楚么的更多相关文章

  1. Spark SQL读取hive数据时报找不到mysql驱动

    Exception: Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BoneC ...

  2. SQL数据分析概览——Hive、Impala、Spark SQL、Drill、HAWQ 以及Presto+druid

    转自infoQ! 根据 O’Reilly 2016年数据科学薪资调查显示,SQL 是数据科学领域使用最广泛的语言.大部分项目都需要一些SQL 操作,甚至有一些只需要SQL. 本文涵盖了6个开源领导者: ...

  3. spark2.3.0 配置spark sql 操作hive

    spark可以通过读取hive的元数据来兼容hive,读取hive的表数据,然后在spark引擎中进行sql统计分析,从而,通过spark sql与hive结合实现数据分析将成为一种最佳实践.配置步骤 ...

  4. Spark SQL与Hive on Spark的比较

    简要介绍了SparkSQL与Hive on Spark的区别与联系 一.关于Spark 简介 在Hadoop的整个生态系统中,Spark和MapReduce在同一个层级,即主要解决分布式计算框架的问题 ...

  5. Spark SQL with Hive

    前一篇文章是Spark SQL的入门篇Spark SQL初探,介绍了一些基础知识和API,可是离我们的日常使用还似乎差了一步之遥. 终结Shark的利用有2个: 1.和Spark程序的集成有诸多限制 ...

  6. 前世今生:Hive、Shark、spark SQL

    Hive (http://en.wikipedia.org/wiki/Apache_Hive )(非严格的原文顺序翻译)  Apache Hive是一个构建在Hadoop上的数据仓库框架,它提供数据的 ...

  7. 小记---------spark组件与其他组件的比较 spark/mapreduce ;spark sql/hive ; spark streaming/storm

    Spark与Hadoop的对比   Scala是Spark的主要编程语言,但Spark还支持Java.Python.R作为编程语言 Hadoop的编程语言是Java    

  8. spark sql数据源--hive

    使用的是idea编辑器 spark sql从hive中读取数据的步骤:1.引入hive的jar包 2.将hive-site.xml放到resource下 3.spark sql声明对hive的支持 案 ...

  9. Spark入门实战系列--5.Hive(上)--Hive介绍及部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...

随机推荐

  1. echo -e "\033[字背景颜色;字体颜色m字符串\033[0m

    格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \033 ...

  2. Linux:$?,$n,$#,$0

    $? 获取执行上一个指令的返回值(0为成功,非零为失败) $n 获取当前执行的shell脚本的第n个参数值,n=1...9,当n=0的时表示脚本的文件名,如果n大于9,大括号括起来${10} $# 获 ...

  3. Classs类

    Classs类如何获得 获得Class对象 方式一: 通过Object类中的getClass()方法 方式二: 通过 类名.class 获取到字节码文件对象( 方式三: 通过Class类中的方法(将类 ...

  4. 解决PLSQL查不到带中文条件的记录

    原因: PLSQL乱码问题皆是ORACLE服务端字符集编码与PLSQL端字符集编码不一致引起.类似乱码问题都可以从编码是否一致上面去考虑. 解决: 1. 查询Oracle服务端字符集编码,获取NLS_ ...

  5. 一个使用 asyncio 开发的网络爬虫(译文)

    原文地址:https://www.aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html 作者简介 A. Jesse Jiryu ...

  6. PMP合同选择

    合同选择

  7. CSAcademy Prefix Suffix Counting 题解

    CSAcademy Prefix Suffix Counting 题解 目录 CSAcademy Prefix Suffix Counting 题解 题意 思路 做法 程序 题意 给你两个数字\(N\ ...

  8. CF513B1 Permutations 题解

    Content 给定两个整数 \(n,m\).定义 \(f(p)=\sum\limits_{l=1}^n\sum\limits_{r=l}^n\min\limits_{i=l}^rp_i\),其中 \ ...

  9. layer 如何加上关闭框

    layer 如何加上关闭框

  10. Linux 配置与搭建服务

    vsftpd nfs autofs samba firewalld selinux lvm 的试验过程 vsftpd 服务端 yum -y install vsftpd echo 'anon_root ...