sparksql 操作hive
写在前面:hive的版本是1.2.1spark的版本是1.6.x
http://spark.apache.org/docs/1.6.1/sql-programming-guide.html#hive-tables 查看hive和spark版本对应情况
SparkSQL操作Hive中的表数据
spark可以通过读取hive的元数据来兼容hive,读取hive的表数据,然后在spark引擎中进行sql统计分析,从而,通过sparksql与hive结合实现数据分析将成为一种最佳实践。详细实现步骤如下:
1、启动hive的元数据服务
hive可以通过服务的形式对外提供元数据读写操作,通过简单的配置即可
编辑 $HIVE_HOME/conf/hive-site.xml,增加如下内容:
<property>
<name>hive.metastore.uris</name>
<value>thrift:// hdp-node-01:9083</value>
</property>
启动hive metastore
[hadoop@hdp-node-01 ~]${HIVE_HOME}/bin/hive --service metastore 1>/dev/null 2>&1 &
查看 metastore:
[hadoop@hdp-node-01 ~] jobs
[1]+ Running hive --service metastore &
2、spark配置
将hive的配置文件拷贝给spark
将 $HIVE_HOME/conf/hive-site.xml copy $SPARK_HOME/conf/
将mysql的jdbc驱动包拷贝给spark
将 $HIVE_HOME/lib/mysql-connector-java-5.1.12.jar copy或者软链到$SPARK_HOME/lib/
3、启动spark-sql的shell交互界面
spark-sql已经集成在spark-shell中,因此,只要启动spark-shell,就可以使用spakr-sql的shell交互接口:
[hadoop@hdp-node-01 spark] bin/spark-shell --master spark://hdp-node-01:7077

或者,可以启动spark-sql界面,使用起来更方便
[hadoop@hdp-node-01 spark] bin/spark-sql --master spark://hdp-node-01:7077
就可以使用hivesql了
由于在console中会打印很多info级别日志,所以可以改变spark的日志级别
4、在交互界面输入sql进行查询
注:以下所用到的库和表,都是已经在hive中存在的库和表
如果在spark-shell中执行sql查询,使用sqlContext对象调用sql()方法
scala> sqlContext.sql("select remote_addr from dw_weblog.t_ods_detail group by remote_addr").collect.foreach(println)
如果是在spark-sql中执行sql查询,则可以直接输入sql语句
scala> show databases
scala> use dw_weblog
scala> select remote_addr from dw_weblog.t_ods_detail group by remote_addr
5、在IDEA中编写代码使用hive-sql
如下所示:
val hiveContext = new HiveContext(sc)
import hiveContext.implicits._
import hiveContext.sql
//指定库
sql("use dw_weblog")
//执行标准sql语句
sql("create table sparksql as select remote_addr,count(*) from t_ods_detail group by remote_addr")
……
综上所述,sparksql类似于hive,可以支持sql语法来对海量数据进行分析查询,跟hive不同的是,hive执行sql任务的底层运算引擎采用mapreduce运算框架,而sparksql执行sql任务的运算引擎是spark core,从而充分利用spark内存计算及DAG模型的优势,大幅提升海量数据的分析查询速度
源码
最后:
sparksql 如果连接报错可能的原因是hive元数据库的编码不是utf8的,
alter database hive character set latin1;
ALTER TABLE hive.* DEFAULT CHARACTER SET latin1;
sparksql 执行创建表的时候报错
org.apache.spark.sql.execution.QueryExecutionException: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:file:/user/hive/warehouse/student2 is not a directory or unable to create one)
可能是没有启动hive元数据服务
sparksql 操作hive的更多相关文章
- 关于sparksql操作hive,读取本地csv文件并以parquet的形式装入hive中
说明:spark版本:2.2.0 hive版本:1.2.1 需求: 有本地csv格式的一个文件,格式为${当天日期}visit.txt,例如20180707visit.txt,现在需要将其通过spar ...
- Spark之 使用SparkSql操作Hive的Scala程序实现
依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2 ...
- SparkSQL与Hive on Spark的比较
简要介绍了SparkSQL与Hive on Spark的区别与联系 一.关于Spark 简介 在Hadoop的整个生态系统中,Spark和MapReduce在同一个层级,即主要解决分布式计算框架的问题 ...
- 【完美解决】Spark-SQL、Hive多 Metastore、多后端、多库
[完美解决]Spark-SQL.Hive多 Metastore.多后端.多库 [完美解决]Spark-SQL.Hive多 Metastore.多后端.多库 SparkSQL 支持同时连接多种 Meta ...
- hive on spark VS SparkSQL VS hive on tez
http://blog.csdn.net/wtq1993/article/details/52435563 http://blog.csdn.net/yeruby/article/details/51 ...
- SparkSQL与Hive on Spark
SparkSQL与Hive on Spark的比较 简要介绍了SparkSQL与Hive on Spark的区别与联系 一.关于Spark 简介 在Hadoop的整个生态系统中,Spark和MapR ...
- 大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户
1. 读取数据库的形式创建DataFrame DataFrameFromJDBC object DataFrameFromJDBC { def main(args: Array[String]): U ...
- SparkSQL读取Hive中的数据
由于我Spark采用的是Cloudera公司的CDH,并且安装的时候是在线自动安装和部署的集群.最近在学习SparkSQL,看到SparkSQL on HIVE.下面主要是介绍一下如何通过SparkS ...
- 基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表
基于CDH5.x 下面使用eclipse 操作hive .使用java通过jdbc连接HIVESERVICE 创建表 import java.sql.Connection; import java.s ...
随机推荐
- Thinkphp学习笔记-删除缓存
Thinkphp的缓存数据在Cach文件夹下的Home文件夹下的文临时文件 清除方法:将缓存文件删除就可以了
- RUP(Rational Unified Process),统一软件开发过程
RUP(Rational Unified Process),统一软件开发过程 https://baike.baidu.com/item/RUP/8924595?fr=aladdin RUP最重要的它有 ...
- 【树莓派】树莓派raspi-config配置
发现有些树莓派盒子,输入的结果和键盘的实际字符有差异,比如输入 | ,结果显示为 ~. 这是因为树莓派的键盘设置问题. 可以通过设置raspi-config进行配置: 第一次使用树莓派的时候需要进行一 ...
- 标准库string类型
一.string 对象的定义和初始化的方式 1. string s1: 2. string s2(s1): 3. string s3("hello"); 4. string s4( ...
- itext测试地址
http://demo.itextsupport.com/xmlworker/?snippetChooser=headers
- 从chrome商店直接下载crx文件
从chrome商店直接下载crx文件 CreateTime--2018年5月21日17点18分 Author:Marydon 1.前提 需要知道你所下载的插件的id 查看方法: 第一步:打开扩展程 ...
- 【BIRT】02_开发一张简单的报表
上一节我们已经将开发环境准备完毕,那么接下来就开发一张简单的报表 1.BIRT开发环境 打开已经安装好的BIRT开发环境 1.1新建Project 菜单栏>> file >> ...
- 通用的sql语句
1.插入: INSERT INTO 表名称 VALUES (值1, 值2,....) 我们也可以指定所要插入数据的列: INSERT INTO table_name (列1, 列2,...) VALU ...
- Servlet/Jsp实现购物车
(1)用servlet实现简单的购物车系统,项目结构例如以下:(新建web Project项目 仅仅须要AddItemServlet , ListItemServlet.exam403.jsp三个文 ...
- (一)struts2入门——登陆验证熟悉struts2部署
0.了解 Struts(支柱.支干)是什么? Struts是流行和成熟的基于MVC设计模式的Web应用程序框架.使用它能帮助我们减少在运用MVC设计模型来开发Web应用时间. 为什么2.1.3之后用S ...