`
Kevin12
  • 浏览: 234769 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spark SQL操作Hive数据库

阅读更多
本次例子通过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

代码实现
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数据库成功!



  • 大小: 6.3 KB
分享到:
评论
2 楼 lwb314 2018-05-21  
你的这个是创建的临时的hive表,数据也是通过文件录入进去的,如想读取hive数据库的数据应该怎么写?
1 楼 yixiaoqi2010 2017-04-13  
你好  我的提交上去  总是报错,找不到hive表,可能是哪里的原因呢,--files也加上了,
但是我在./spark-shell --master 上就能访问hive表,不知道是什么问题 

相关推荐

    spark-hive-2.11和spark-sql-以及spark-hadoop包另付下载地址

    这里的2.11可能指的是Scala的版本,因为Spark是用Scala编写的,而Spark SQL是Spark用于处理结构化数据的模块,它允许用户使用SQL或者DataFrame API进行数据操作。 描述中提到这些jar包是经过个人实验验证的,保证了...

    HIVE数据库解析vc编写

    在IT行业中,HIVE数据库通常指的是Apache Hadoop的Hive组件,它是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得大数据处理变得更加简单。而对于VC(Visual C++...

    spark操作hive表源码

    在`SparkConf`中,我们可以设置`spark.sql.warehouse.dir`为Hive的默认数据库目录,`hive.metastore.uris`为Hive元数据服务的Thrift URI。 接下来,我们可以通过SparkSQL接口读取Hive表。例如,如果我们有一个名为`...

    项目实战——Spark将Hive表的数据写入ElasticSearch(Java版本)

    Spark与Hive的集成允许我们直接操作Hive表,将Hive数据转换为Spark DataFrame,这样就可以利用Spark的并行计算能力进行数据预处理和转换。 3. **数据转换**: 在从Hive加载数据到Spark后,可能需要对数据进行清洗...

    Spark.sql数据库部分的内容

    1. **兼容性**:Spark SQL支持通过Hive的元数据、SQL语法和Hive SerDes与Hive集成,使得在Spark上可以无缝地运行Hive的工作负载。 2. **DataFrame API**:DataFrame API提供了强类型和静态类型的API,支持Scala、...

    cloudera manager中添加hive数据库使用mysql的配置步骤

    首先,确保在添加Hive数据库前,系统中不存在先前安装的MySQL版本。使用命令rpm -qa | grep mysql查询已安装的MySQL包,然后使用rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64移除它。 接下来,利用yum工具安装...

    Learning Spark SQL - Aurobindo Sarkar

    DataFrame不仅支持关系型数据库的操作,还能处理结构化和半结构化的数据,如JSON、Parquet或Hive表。DataFrame API可在Scala、Java、Python和R等多语言环境中使用,这使得跨平台的数据分析变得便捷。 Spark SQL的一...

    spark连接HIveDemo

    本教程将详细介绍如何使用Spark连接到Hive数据库,实现数据的读取、操作和写入。 首先,我们需要理解Spark与Hive的集成原理。Spark可以通过HiveContext(在Spark 2.x中被DataFrameReader和DataFrameWriter取代)来...

    spark2.3.1-with-hive

    Spark 2.3.1 是一个重要的大数据处理框架,它提供了高效的分布式计算能力,而与 Hive 的集成使得 Spark 可以充分利用 Hive 的元数据、SQL 查询功能和存储系统,为大数据分析提供更丰富的选择。Hive 是一种基于 ...

    简单的spark 读写hive以及mysql

    Spark 支持通过 HiveContext(现在称为 HiveSession)连接到 Hive,这样可以使用 SQL 查询 Hive 表并将其结果转换为 Spark DataFrame。在读取 Hive 数据时,我们可以通过创建一个 HiveContext 对象,然后使用 `sql()...

    清华大学精品大数据实战课程(Hadoop、Hbase、Hive、Spark)PPT课件含习题(29页) 第6章 Spark SQL.pptx

    - **Spark SQL CLI**:用户可以直接启动Spark SQL命令行界面执行SQL查询,例如创建数据库、查看和操作表、插入和查询数据,以及删除表和数据库。 - **Thrift JDBC/ODBC Server**:Spark SQL可以通过Thrift服务器...

    《Spark SQL编程指南(v1.1.0)

    Spark SQL与Hive有深度集成,可以直接访问Hive Metastore,使用Hive的表和UDF(用户自定义函数)。这对于已经在使用Hive的团队来说,无缝过渡到Spark SQL成为可能。 **5. Parquet支持** Parquet是一种列式存储格式...

    Spark SQL常见4种数据源详解

    Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDDs方式的操作,也可以被注册为临时表。把DataFrame注册为临时表之后,就可以对该DataFrame执行SQL查询。 Spark SQL的默认数据源为Parquet...

    Hive metastore 使用达梦数据库存储元数据

    接着,创建一个名为`hive`的用户,设定其默认表空间为`hive_meta`,并赋予适当的权限,如预定义的角色`RESOURCE`,允许用户操作已有数据库对象。 配置Hive-site.xml是连接Hive metastore到达梦数据库的关键步骤。你...

    Spark编程基础:Spark SQL单元测验与答案.docx

    * Spark SQL 可以支持大量的数据源和数据分析算法,组合使用 Spark SQL 和 Spark MLlib,可以融合传统关系数据库的结构化数据管理能力和机器学习算法的数据处理能力。 五、RDD 转换为 DataFrame * RDD 转换为 ...

    Spark编程基础:Spark SQL单元测验与答案.pdf

    Spark SQL 在 Hive 兼容层面仅依赖 HiveQL 解析和 Hive 元数据,实现了与 Hive 的兼容性。 二、Spark SQL 功能 Spark SQL 提供了多种功能,包括: * DataFrame:是一种分布式数据集,提供了详细的结构信息。...

    spark-1.6.3-bin-hadoop2.4-without-hive.tgz

    在这一版本中,Spark SQL 提供了对 SQL 查询的支持,使得非程序员也能方便地操作数据,而无需编写复杂的编程代码。同时,Spark Streaming 提供了实时数据处理能力,可以处理来自多种数据源的连续数据流。 对于不...

    spark-2.4.0-hive-hbase-Api.7z

    这个文件可能包含了一系列的JAR包,如`spark-core`, `spark-sql`, `spark-hive`, `spark-hbase-connector`等,这些都是在Spark应用中连接和操作Hive和HBase所必需的依赖。 使用这些库,开发人员可以编写程序来实现...

    hive1_2_1jars.zip

    在Spark 3中,如果你需要连接到Hive元存储进行数据操作,你需要正确配置Spark的`spark.sql.hive.metastore.jars`属性,以便Spark知道从哪里获取Hive相关的JAR文件来执行Hive查询。 **Spark与Hive的集成** Spark...

    Hadoop+Spark+Hive+HBase+Oozie+Kafka+Flume+Flink+ES+Redash等详细安装部署

    Hive是基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。通过Hive,用户无需编写Java MapReduce程序,就能对大数据进行分析。在搭建Hive时,需要设置Hive metastore、...

Global site tag (gtag.js) - Google Analytics