Spark SQL在Hive中的使用
来源:互联网 发布:达梦数据库客户端工具 编辑:程序博客网 时间:2024/05/22 08:15
Spark SQL主要目的是使得用户可以在Spark上使用SQL,其数据源既可以是RDD,也可以是外部的数据源(比如Parquet、Hive、Json等)。Spark SQL的其中一个分支就是Spark on Hive,也就是使用Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业。本文就是来介绍如何通过Spark SQL来读取现有Hive中的数据。
不过,预先编译好的Spark assembly包是不支持Hive的,如果你需要在Spark中使用Hive,必须重新编译,加上-Phive
选项既可,具体如下:
[root@node4 ~]# ./
make
-distribution.sh --tgz -Phadoop-2.2 -Pyarn -DskipTests -Dhadoop.version=2.2.0 -Phive
编译完成之后,会在SPARK_HOME的lib目录下多产生三个jar包,分别是datanucleus-api-jdo-3.2.6.jar、datanucleus-core-3.2.10.jar、datanucleus-rdbms-3.2.9.jar,这些包都是Hive所需要的。下面就开始介绍步骤。
1. 环境配置
为了让Spark能够连接到Hive的原有数据仓库,我们需要将Hive中的hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放。
如果Hive的元数据存放在Mysql中,我们还需要准备好Mysql相关驱动,比如:mysql-connector-java-5.1.22-bin.jar。
2.启动spark-shell
环境准备好之后,为了方便起见,我们使用spark-shell来进行说明如何通过Spark SQL读取Hive中的数据。我们可以通过下面的命令来启动spark-shell:
[root@node4 ~]# bin/spark-shell --master yarn-client --jars lib/mysql-connector-java-5.1.22-bin.jar ....15/08/27 18:21:25 INFO repl.SparkILoop: Created spark context..Spark context available as sc.....15/08/27 18:21:30 INFO repl.SparkILoop: Created sql context (with Hive support)..SQL context available as sqlContext.启动spark-shell的时候会先向ResourceManager申请资源,而且还会初始化SparkContext和SQLContext实例。sqlContext对象其实是HiveContext的实例,sqlContext是进入Spark SQL的切入点。接下来我们来读取Hive中的数据。
scala> sqlContext.sql("CREATE EXTERNAL TABLE IF NOT EXISTS ewaplog (key STRING, value STRING) STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION '/user/iteblog/ewaplog' ")res0: org.apache.spark.sql.DataFrame = [result: string]scala> sqlContext.sql("LOAD DATA LOCAL INPATH '/data/test.lzo' INTO TABLE ewaplog")res1: org.apache.spark.sql.DataFrame = [result: string]scala> sqlContext.sql("FROM ewaplog SELECT key, value").collect().foreach(println)[12,wyp][23,ry][12,wyp][23,ry]我们先创建了ewaplog表,然后导入数据,最后查询。我们可以看出所有的SQL和在Hive中是一样的,只是在Spark上运行而已。在执行SQL的时候,默认是调用hiveql解析器来解析SQL的。当然,你完全可以调用Spark SQL内置的SQL解析器sql,可以通过
spark.sql.dialect
参数来设置。但是建议还是使用hivesql解析器,因为它支持的语法更多,而且还支持Hive的UDF函数,在多数情况下推荐使用hivesql解析器。
- Spark SQL在Hive中的使用
- spark sql 使用hive作为数据源
- Spark SQL和Hive使用场景?
- spark sql on hive配置及其使用
- Spark SQL 整合Hive的使用
- Spark-Sql整合hive,在spark-sql命令和spark-shell命令下执行sql命令和整合调用hive
- Spark SQL with Hive
- Spark SQL+Hive历险记
- spark sql on hive
- spark-sql读取hive
- spark-sql 结合 hive
- spark sql with hive
- Spark Hive SQL实例
- Spark SQL Hive Tables
- Spark SQL来读取现有Hive中的数据
- Spark(Hive) SQL中UDF的使用(Python)
- spark sql 中 hive变量的使用记录
- spark 使用hive metastore
- java 中 FTP通信 问题总结
- objectiveC修饰符 static extern const
- StringTokenizer类的使用
- 创建帧动画
- Search Paths 之 Framework Search Paths、Library Search Paths、Header Search Paths
- Spark SQL在Hive中的使用
- QT在一个文件夹下面查找某个特定的内容(如查找一个字符串)
- Redkale 技术详解 03 -- Convert高性能序列化
- Linux程序设计--套接字学习笔记
- 【译文】每个数据科学家必读的顶级ML、DM和NLP书籍
- jsp页面不乱码,外部引用的js弹出对话框乱码
- setuid、setgid等 Functions
- Android 使用ListView的A-Z字母排序功能实现联系人模块
- Nginx支持比Apache高并发的原因