- 浏览: 236074 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lwb314:
你的这个是创建的临时的hive表,数据也是通过文件录入进去的, ...
Spark SQL操作Hive数据库 -
yixiaoqi2010:
你好 我的提交上去 总是报错,找不到hive表,可能是哪里 ...
Spark SQL操作Hive数据库 -
bo_hai:
target jvm版本也要选择正确。不能选择太高。2.10对 ...
eclipse开发spark程序配置本地运行
本次例子通过scala编程实现Spark SQL操作Hive数据库!
Hadoop集群搭建:http://kevin12.iteye.com/blog/2273532
Spark集群搭建:http://kevin12.iteye.com/blog/2273532
数据准备
在/usr/local/sparkApps/SparkSQL2Hive/resources/目录下创建people.txt内容如下,name和age之间是"\t"分割
Michael 20
Andy 17
Justin 19
创建份数peopleScores.txt,内容如下,name和score之间用“\t”分割
Michael 98
Andy 95
Justin 68
代码实现
调度脚本
并将上面的程序打包成SparkSQL2Hive.jar,将SparkSQL2Hive.jar拷贝到/usr/local/sparkApps/SparkSQL2Hive/目录下面,并创建调度脚本run.sh,内容如下:
执行结果
详细执行的日志见附件 run.log
用hive来查看表内容和执行结果
至此,通过SparkSQL操作hive数据库成功!
Hadoop集群搭建:http://kevin12.iteye.com/blog/2273532
Spark集群搭建:http://kevin12.iteye.com/blog/2273532
数据准备
在/usr/local/sparkApps/SparkSQL2Hive/resources/目录下创建people.txt内容如下,name和age之间是"\t"分割
Michael 20
Andy 17
Justin 19
创建份数peopleScores.txt,内容如下,name和score之间用“\t”分割
Michael 98
Andy 95
Justin 68
代码实现
package com.imf.spark.sql import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.sql.hive.HiveContext /** * 通过spark sql操作hive数据源 */ object SparkSQL2Hive { def main(args: Array[String]): Unit = { val conf = new SparkConf(); conf.setAppName("SparkSQL2Hive for scala") conf.setMaster("spark://master1:7077") val sc = new SparkContext(conf) val hiveContext = new HiveContext(sc) //用户年龄 hiveContext.sql("use testdb") hiveContext.sql("DROP TABLE IF EXISTS people") hiveContext.sql("CREATE TABLE IF NOT EXISTS people(name STRING, age INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'") //把本地数据加载到hive中(实际上发生了数据拷贝),也可以直接使用HDFS中的数据 hiveContext.sql("LOAD DATA LOCAL INPATH '/usr/local/sparkApps/SparkSQL2Hive/resources/people.txt' INTO TABLE people") //用户份数 hiveContext.sql("use testdb") hiveContext.sql("DROP TABLE IF EXISTS peopleScores") hiveContext.sql("CREATE TABLE IF NOT EXISTS peopleScores(name STRING, score INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'") hiveContext.sql("LOAD DATA LOCAL INPATH '/usr/local/sparkApps/SparkSQL2Hive/resources/peopleScore.txt' INTO TABLE peopleScores") /** * 通过HiveContext使用join直接基于hive中的两种表进行操作 */ val resultDF = hiveContext.sql("select pi.name,pi.age,ps.score " +" from people pi join peopleScores ps on pi.name=ps.name" +" where ps.score>90"); /** * 通过saveAsTable创建一张hive managed table,数据的元数据和数据即将放的具体位置都是由 * hive数据仓库进行管理的,当删除该表的时候,数据也会一起被删除(磁盘的数据不再存在) */ hiveContext.sql("drop table if exists peopleResult") resultDF.saveAsTable("peopleResult") /** * 使用HiveContext的table方法可以直接读取hive数据仓库的Table并生成DataFrame, * 接下来机器学习、图计算、各种复杂的ETL等操作 */ val dataframeHive = hiveContext.table("peopleResult") dataframeHive.show() } }
调度脚本
并将上面的程序打包成SparkSQL2Hive.jar,将SparkSQL2Hive.jar拷贝到/usr/local/sparkApps/SparkSQL2Hive/目录下面,并创建调度脚本run.sh,内容如下:
/usr/local/spark/spark-1.6.0-bin-hadoop2.6/bin/spark-submit \ --class com.imf.spark.sql.SparkSQL2Hive \ --files /usr/local/hive/apache-hive-1.2.1-bin/conf/hive-site.xml \ --master spark://master1:7077 \ /usr/local/sparkApps/SparkSQL2Hive/SparkSQL2Hive.jar #如果已经将msyql的驱动放到了spark的lib目录下面,则不用在添加下面的mysql的驱动了 #--driver-class-path /usr/local/hive/apache-hive-1.2.1-bin/lib/mysql-connector-java-5.1.35-bin.jar \
执行结果
详细执行的日志见附件 run.log
用hive来查看表内容和执行结果
root@master1:/usr/local/tools# hive SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/lib/spark-assembly-1.6.0-hadoop2.6.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/lib/spark-assembly-1.6.0-hadoop2.6.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] Logging initialized using configuration in jar:file:/usr/local/hive/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties hive> show databases; OK default testdb Time taken: 1.013 seconds, Fetched: 2 row(s) hive> use testdb; OK Time taken: 0.103 seconds hive> show tables; OK people peopleresult peoplescores student student2 student3 student4 tbsogou tmp_pre_hour_seach_info Time taken: 0.082 seconds, Fetched: 9 row(s) hive> select * from people; OK Michael 20 Andy 17 Justin 19 Time taken: 1.252 seconds, Fetched: 3 row(s) hive> select * from peoplescores; OK Michael 98 Andy 95 Justin 68 Time taken: 0.142 seconds, Fetched: 3 row(s) hive> select * from peopleresult; OK SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Michael 20 98 Andy 17 95 Time taken: 0.298 seconds, Fetched: 2 row(s) hive>
至此,通过SparkSQL操作hive数据库成功!
评论
2 楼
lwb314
2018-05-21
你的这个是创建的临时的hive表,数据也是通过文件录入进去的,如想读取hive数据库的数据应该怎么写?
1 楼
yixiaoqi2010
2017-04-13
你好 我的提交上去 总是报错,找不到hive表,可能是哪里的原因呢,--files也加上了,
但是我在./spark-shell --master 上就能访问hive表,不知道是什么问题
但是我在./spark-shell --master 上就能访问hive表,不知道是什么问题
发表评论
-
SparkStreaming pull data from Flume
2016-06-19 17:29 1232Spark Streaming + Flume Integra ... -
Flume push数据到SparkStreaming
2016-06-19 15:16 1948上节http://kevin12.iteye.com/blog ... -
Spark Streaming 统计单词的例
2016-06-19 14:55 3测试Spark Streaming 统计单词的例子 1.准 ... -
Spark Streaming 统计单词的例子
2016-06-19 12:29 3690测试Spark Streaming 统计单词的例子 1.准备 ... -
Spark SQL窗口函数
2016-04-22 07:18 2564窗口函数又叫着窗口分析函数,Spark 1.4版本SparkS ... -
Spark SQL内置函数应用
2016-04-22 07:00 8672简单说明 使用Spark SQL中的内置函数对数据进行 ... -
Spark SQL on hive配置和实战
2016-03-26 18:40 5581spark sql 官网:http://spark ... -
Hive分析搜索引擎的数据(搜狗实验室数据)
2016-03-13 12:48 1922搜狗实验室:http://www.sogou.com/labs ... -
Hive使用默认数据库derby报错及解决方法
2016-03-05 21:19 3147在使用derby数据库时,遇到了很多错误,报错信息和解决方法如 ... -
Hive1.2.1安装和使用(基于Hadoop2.6.0)
2016-03-05 20:22 8858安装hive,这里使用mysql作为hive的metastor ... -
eclipse开发hadoop环境搭建
2016-02-13 14:54 1397Hadoop2.6.0集群搭建完毕后,下面介绍一下eclips ... -
Spark RDD弹性表现和来源
2016-02-09 20:12 3861hadoop 的MapReduce是基于数 ... -
Spark内核架构
2016-02-07 12:24 10181.在将spark内核架构前,先了解一下Hadoop的MR,H ... -
spark集群HA搭建
2016-01-31 08:50 4536spark集群的HA图: 搭建spark的HA需要安装z ... -
Spark集群中WordCount运行原理
2016-01-31 07:05 2514以数据流动的视角解释一下wordcount运行的原理 pa ... -
eclipse开发spark程序配置在集群上运行
2016-01-27 08:08 9371这篇bolg讲一下,IDE开发的spark程序如何提交到集群上 ... -
eclipse开发spark程序配置本地运行
2016-01-27 07:58 12414今天简单讲一下在local模式下用eclipse开发一个简单的 ... -
spark1.6.0搭建(基于hadoop2.6.0分布式)
2016-01-24 10:11 5981本文是基于hadoop2.6.0的分布式环境搭建spark1. ... -
hadoop2.6.0集群的搭建方法
2016-01-23 22:37 33811.集群环境的安装 1.1工具软件版本说明(软件尽量去官网下载 ... -
Hadoop Shuffle(洗牌)过程
2014-03-25 14:26 1051博客来源:http://www.wnt.c ...
相关推荐
这里的2.11可能指的是Scala的版本,因为Spark是用Scala编写的,而Spark SQL是Spark用于处理结构化数据的模块,它允许用户使用SQL或者DataFrame API进行数据操作。 描述中提到这些jar包是经过个人实验验证的,保证了...
在IT行业中,HIVE数据库通常指的是Apache Hadoop的Hive组件,它是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得大数据处理变得更加简单。而对于VC(Visual C++...
在`SparkConf`中,我们可以设置`spark.sql.warehouse.dir`为Hive的默认数据库目录,`hive.metastore.uris`为Hive元数据服务的Thrift URI。 接下来,我们可以通过SparkSQL接口读取Hive表。例如,如果我们有一个名为`...
Spark与Hive的集成允许我们直接操作Hive表,将Hive数据转换为Spark DataFrame,这样就可以利用Spark的并行计算能力进行数据预处理和转换。 3. **数据转换**: 在从Hive加载数据到Spark后,可能需要对数据进行清洗...
1. **兼容性**:Spark SQL支持通过Hive的元数据、SQL语法和Hive SerDes与Hive集成,使得在Spark上可以无缝地运行Hive的工作负载。 2. **DataFrame API**:DataFrame API提供了强类型和静态类型的API,支持Scala、...
首先,确保在添加Hive数据库前,系统中不存在先前安装的MySQL版本。使用命令rpm -qa | grep mysql查询已安装的MySQL包,然后使用rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64移除它。 接下来,利用yum工具安装...
DataFrame不仅支持关系型数据库的操作,还能处理结构化和半结构化的数据,如JSON、Parquet或Hive表。DataFrame API可在Scala、Java、Python和R等多语言环境中使用,这使得跨平台的数据分析变得便捷。 Spark SQL的一...
本教程将详细介绍如何使用Spark连接到Hive数据库,实现数据的读取、操作和写入。 首先,我们需要理解Spark与Hive的集成原理。Spark可以通过HiveContext(在Spark 2.x中被DataFrameReader和DataFrameWriter取代)来...
Spark 2.3.1 是一个重要的大数据处理框架,它提供了高效的分布式计算能力,而与 Hive 的集成使得 Spark 可以充分利用 Hive 的元数据、SQL 查询功能和存储系统,为大数据分析提供更丰富的选择。Hive 是一种基于 ...
Spark 支持通过 HiveContext(现在称为 HiveSession)连接到 Hive,这样可以使用 SQL 查询 Hive 表并将其结果转换为 Spark DataFrame。在读取 Hive 数据时,我们可以通过创建一个 HiveContext 对象,然后使用 `sql()...
- **Spark SQL CLI**:用户可以直接启动Spark SQL命令行界面执行SQL查询,例如创建数据库、查看和操作表、插入和查询数据,以及删除表和数据库。 - **Thrift JDBC/ODBC Server**:Spark SQL可以通过Thrift服务器...
Spark SQL与Hive有深度集成,可以直接访问Hive Metastore,使用Hive的表和UDF(用户自定义函数)。这对于已经在使用Hive的团队来说,无缝过渡到Spark SQL成为可能。 **5. Parquet支持** Parquet是一种列式存储格式...
接着,创建一个名为`hive`的用户,设定其默认表空间为`hive_meta`,并赋予适当的权限,如预定义的角色`RESOURCE`,允许用户操作已有数据库对象。 配置Hive-site.xml是连接Hive metastore到达梦数据库的关键步骤。你...
Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDDs方式的操作,也可以被注册为临时表。把DataFrame注册为临时表之后,就可以对该DataFrame执行SQL查询。 Spark SQL的默认数据源为Parquet...
* Spark SQL 可以支持大量的数据源和数据分析算法,组合使用 Spark SQL 和 Spark MLlib,可以融合传统关系数据库的结构化数据管理能力和机器学习算法的数据处理能力。 五、RDD 转换为 DataFrame * RDD 转换为 ...
Spark SQL 在 Hive 兼容层面仅依赖 HiveQL 解析和 Hive 元数据,实现了与 Hive 的兼容性。 二、Spark SQL 功能 Spark SQL 提供了多种功能,包括: * DataFrame:是一种分布式数据集,提供了详细的结构信息。...
最后,值得注意的是,为了确保Hive与Spark的顺利配合,需要正确配置Spark的`spark.sql.hive.metastore.version`和`spark.sql.hive.metastore.jars`属性,以指向正确的Hive元数据版本和库。同时,确保Hadoop、Spark和...
这个文件可能包含了一系列的JAR包,如`spark-core`, `spark-sql`, `spark-hive`, `spark-hbase-connector`等,这些都是在Spark应用中连接和操作Hive和HBase所必需的依赖。 使用这些库,开发人员可以编写程序来实现...
在Spark 3中,如果你需要连接到Hive元存储进行数据操作,你需要正确配置Spark的`spark.sql.hive.metastore.jars`属性,以便Spark知道从哪里获取Hive相关的JAR文件来执行Hive查询。 **Spark与Hive的集成** Spark...
Hive是基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。通过Hive,用户无需编写Java MapReduce程序,就能对大数据进行分析。在搭建Hive时,需要设置Hive metastore、...