sparksql 操作hive_使用SparkSQL读取Hive上的数据.PDF

本文介绍了如何通过Spark SQL读取和操作Hive上的数据。首先,由于预编译的Spark assembly包不支持Hive,需要重新编译Spark并添加-Phive选项。然后,将Hive的hive-site.xml配置文件复制到Spark的conf目录,以便连接到Hive的数据仓库。如果Hive元数据在Mysql中,还需提供相应的驱动。启动spark-shell时指定--jars参数加载Mysql驱动。最后,使用sqlContext对象执行HQL创建外部表,并读取Hive数据。
摘要由CSDN通过智能技术生成

使用SparkSQL读取Hive上的数据.PDF

使用Spark SQL读取Hive上的数据

Spark大数据博客 -

使用Spark SQL读取Hive上的数据

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选项既可,具体如下:

[iteblog@ spark]$ ./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所需要的。下面就开始介绍步骤。

一、环境准备

为了让Spark能够连接到Hive的原有数据仓库,我们需要将Hive中的hive-site.xml文件拷贝到

Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放。

如果Hive的元数据存放在Mysql中,我们还需要准备好Mysql相关驱动,比如:mysql-

connector-java-5.1.22-bin.jar。

二、启动spark-shell

环境准备好之后,为了方便起见,我们使用spark-shell来进行说明如何通过Spark

SQL读取Hive中的数据。我们可以通过下面的命令来启动spark-shell:

[iteblog@ spark]$ 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.

1 / 8

使用Spark SQL读取Hive上的数据

Spark大数据博客 -

启动spark-shell的时候会先向ResourceManager申请资源,而且还会初始化SparkContext和

SQLContext实例。sqlContext对象其实是HiveContext的实例,sqlContext是进入Spark

SQL的切入点。接下来我们来读取Hive中的数据。

scala> sqlContext.sql("CREATE EXTERNAL TABLE IF NOT EXISTS ewaplog (key STRING, value ST

RING)

STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFOR

MAT

'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION '/user/iteblog/ewa

plog' ")

res0: org.apache.spark.sql.DataFrame = [resu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java中使用SparkSQL读取Hive数据可以通过以下步骤实现: 1. 创建SparkSession对象 ```java SparkSession spark = SparkSession.builder() .appName("ReadHiveData") .master("local") .enableHiveSupport() .getOrCreate(); ``` 2. 使用SparkSession对象创建DataFrame ```java Dataset<Row> df = spark.sql("SELECT * FROM my_table"); ``` 3. 显示DataFrame中的数据 ```java df.show(); ``` 完整代码示例: ```java import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; public class ReadHiveData { public static void main(String[] args) { SparkSession spark = SparkSession.builder() .appName("ReadHiveData") .master("local") .enableHiveSupport() .getOrCreate(); Dataset<Row> df = spark.sql("SELECT * FROM my_table"); df.show(); } } ``` ### 回答2: SparkSQLSpark生态系统中的一种高级数据处理引擎,能够处理结构化的数据,包括读取、转换、过滤、聚合和持久化等操作。为了方便数据分析,SparkSQL提供了读取Hive数据的功能,使得用户能够在不离开Spark环境的情况下访问和操作Hadoop集群中的数据。 首先,为了将SparkSQLHive进行连接,我们需要在Spark中配置Hive的元数据存储位置和版本等信息,以便SparkSQL能够通过这些信息访问Hive。在创建SparkSession时,我们需要设置以下选项: ``` SparkSession.builder() .appName("SparkSQLHiveExample") .config("hive.metastore.uris", "thrift://localhost:9083") .enableHiveSupport() .getOrCreate(); ``` 其中,hive.metastore.uris参数指定Hive数据处理程序的URI(Uniform Resource Identifier)地址,enableHiveSupport()则示启用Hive支持。 接着,我们可以通过SparkSession来访问Hive。例如,我们可以使用类似SQL语句的方式来查询Hive: ``` val df = spark.sql("SELECT * FROM myHiveTable") ``` 上面的代码会返回一个DataFrame对象,其中包含myHiveTable中所有的行和列。 除了基本的查询操作SparkSQL还支持更复杂的操作,例如使用JOIN、过滤器、聚合和窗口函数等。SparkSQL也可以将查询结果保存到Hive中,以便以后进行检索和分析: ``` df.write.mode("overwrite").saveAsTable("newHiveTable") ``` 上面的代码将df数据保存到一个名为newHiveTable的Hive中。 总体来说,使用SparkSQL读取Hive数据非常方便,只需要设置好元数据Hive支持选项后即可直接访问Hive。由于SparkSQL支持复杂的查询和数据操作,因此可以帮助用户更加高效地处理和分析Hadoop集群中的数据。 ### 回答3: Java SparkSQL读取Hive数据使用SparkSQL API以Java语言将Hive数据读取Spark中进行处理和分析的过程。SparkSQLSpark的一个模块,它提供了一种基于结构化数据数据处理和分析方法。而Hive是基于Hadoop的数据仓库,它提供了一个SQL-like的查询接口来查询和分析Hadoop中的数据。 在Java SparkSQL读取Hive数据首先需要建立SparkSession实例,创建连接。使用SparkSession的builder()方法可以创建一个SparkSession Builder对象,然后可以通过设置相关的配置参数来创建SparkSession实例。其中的master()方法是指定Spark集群的Master地址,appName()方法是设置应用程序的名称。 在配置参数设置完成后,我们可以使用SparkSession的read()方法读取Hive读取数据时应指定数据源格式和名。在这里,我们使用SparkSession的jdbc()方法将Hive名与Hive数据库连接起来,并设置相关的参数,包括数据库名称、Hive服务地址、Hive连接地址等。 读取Hive后,我们可以使用SparkSQL的API进行数据处理和分析。SparkSQL提供了很多常用的操作,如filter()、groupBy()、join()等。这些操作可以针对Spark SQL DataFrames进行操作,实现各种计算和数据分析。当然,数据处理完成后,我们也可以将数据写回到Hive中,实现数据的持久化和数据共享。 需要注意的是,使用Java SparkSQL读取Hive数据需要确保Hive服务已经启动。并且,在使用SparkSQL读取Hive数据时,需要指定Hadoop的相关环境变量以便正确地加载Hadoop和Hive相关的类库。此外还需要注意Spark版本和Hive版本之间的兼容性,以避免因版本不匹配而导致的异常情况的发生。 总体而言,Java SparkSQL读取Hive数据是一种基于大数据生态系统的数据处理和分析方法,它能够实现高效地读取和处理Hive中的数据,为数据科学家和研究人员提供了丰富的工具和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值