Hive on Spark和Spark sql on Hive,你能分的清楚么
摘要:结构上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,你能分的清楚么的更多相关文章
- Spark SQL读取hive数据时报找不到mysql驱动
Exception: Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "BoneC ...
- SQL数据分析概览——Hive、Impala、Spark SQL、Drill、HAWQ 以及Presto+druid
转自infoQ! 根据 O’Reilly 2016年数据科学薪资调查显示,SQL 是数据科学领域使用最广泛的语言.大部分项目都需要一些SQL 操作,甚至有一些只需要SQL. 本文涵盖了6个开源领导者: ...
- spark2.3.0 配置spark sql 操作hive
spark可以通过读取hive的元数据来兼容hive,读取hive的表数据,然后在spark引擎中进行sql统计分析,从而,通过spark sql与hive结合实现数据分析将成为一种最佳实践.配置步骤 ...
- Spark SQL与Hive on Spark的比较
简要介绍了SparkSQL与Hive on Spark的区别与联系 一.关于Spark 简介 在Hadoop的整个生态系统中,Spark和MapReduce在同一个层级,即主要解决分布式计算框架的问题 ...
- Spark SQL with Hive
前一篇文章是Spark SQL的入门篇Spark SQL初探,介绍了一些基础知识和API,可是离我们的日常使用还似乎差了一步之遥. 终结Shark的利用有2个: 1.和Spark程序的集成有诸多限制 ...
- 前世今生:Hive、Shark、spark SQL
Hive (http://en.wikipedia.org/wiki/Apache_Hive )(非严格的原文顺序翻译) Apache Hive是一个构建在Hadoop上的数据仓库框架,它提供数据的 ...
- 小记---------spark组件与其他组件的比较 spark/mapreduce ;spark sql/hive ; spark streaming/storm
Spark与Hadoop的对比 Scala是Spark的主要编程语言,但Spark还支持Java.Python.R作为编程语言 Hadoop的编程语言是Java
- spark sql数据源--hive
使用的是idea编辑器 spark sql从hive中读取数据的步骤:1.引入hive的jar包 2.将hive-site.xml放到resource下 3.spark sql声明对hive的支持 案 ...
- Spark入门实战系列--5.Hive(上)--Hive介绍及部署
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...
随机推荐
- ListView的item不能点击(焦点冲突问题)
一般这种问题就是item里面有checkbox或button之类抢占焦点的控件,解决方案有2种: 第一种:就是在checkbox或button添加android:focusable="fal ...
- Initialization of data members
In C++, class variables are initialized in the same order as they appear in the class declaration. C ...
- SpringMVC(4):文件上传与下载
一,文件上传 文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理 ...
- springboot-MVC 过滤器使用
一.前言 一下代码以SSO用户登录列子代码.完整代码https://gitee.com/xuxueli0323/xxl-sso 二.使用 2.1 创建过滤器 创建一个过滤器,实现Filter 接口 p ...
- java 多线程的状态迁移 常用线程方法分析
一.线程的各个状态 图中的线程状态(Thread.Stat 中定义的Enum 名)NEW.RUNNABLE .TERMINATED.WAITING.TIMED_WAITING 和BLOCKED 都能够 ...
- .net core容器添加时区和libgdi+和下载加速
国内.net core镜像下载加速 比如对于mcr.microsoft.com/dotnet/core/aspnet:3.1,下载是走的azure全球cdn,国内访问很慢. 国内访问可以把mcr.mi ...
- for循环中的变量泄漏
经典的案例 let arr = [] for(var i =0;i<=5;i++){ arr[i]= function fn(){ console.log(i) } } arr[0]() //6 ...
- Python语言的2个典型特性
[动态编程语言] 学习过C.C++的同学都知道,使用这二者编写代码时,变量在使用前必须通过类似"int a=123"的语句提取申明,然后在真正赋值的时候校验取值跟类型是否相符.也就 ...
- 计算机网络-4-8-外部网关协议BGP
外部网关协议BGP 1989年,公布了新的外部网关协议BGP(边界网关协议),我们目前使用最多的版本是BGP-4(但仍然是起草方案[RFC 4271]),简写为BGP. 在不同的自治系统AS中之间的路 ...
- JS自动播放音频 无效chrome设置 (Uncaught (in promise) DOMException: play() failed because the user didn't interact)
Chrome的autoplay政策在2018年4月做了更改.新的行为:浏览器为了提高用户体验,减少数据消耗,现在都在遵循autoplay政策,Chrome的autoplay 政策非常简单 muted ...