由于我Spark采用的是Cloudera公司的CDH,并且安装的时候是在线自动安装和部署的集群。最近在学习SparkSQL,看到SparkSQL on HIVE。下面主要是介绍一下如何通过SparkSQL在读取HIVE的数据。

(说明:如果不是采用CDH在线自动安装和部署的话,可能需要对源码进行编译,使它能够兼容HIVE。

编译的方式也很简单,只需要在Spark_SRC_home(源码的home目录下)执行如下命令:

./make-distribution.sh --tgz -Phadoop-2.2 -Pyarn -DskipTests -Dhadoop.version=2.6.0-cdh5.4.4 -Phive

编译好了之后,会在lib目录下多几个jar包。)

下面我主要介绍一下我使用的情况:

1、为了让Spark能够连接到Hive的原有数据仓库,我们需要将Hive中的hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放。

在这里由于我的Spark是自动安装和部署的,因此需要知道CDH将hive-site.xml放在哪里。经过摸索。该文件默认所在的路径是:/etc/hive/conf 下。

同理,spark的conf也是在/etc/spark/conf。

此时,如上所述,将对应的hive-site.xml拷贝到spark/conf目录下即可

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

2、编写测试代码

  1. val conf=new SparkConf().setAppName("Spark-Hive").setMaster("local")
  2. val sc=new SparkContext(conf)
  3.  
  4. //create hivecontext
  5. val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
  6.  
  7. sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ") //这里需要注意数据的间隔符
  8.  
  9. sqlContext.sql("LOAD DATA INPATH '/user/liujiyu/spark/kv1.txt' INTO TABLE src ");
  10.  
  11. sqlContext.sql(" SELECT * FROM jn1").collect().foreach(println)
  12.  
  13. sc.stop()

3、下面列举一下出现的问题:

(1)如果没有将hive-site.xml拷贝到spark/conf目录下,会出现:

aaarticlea/png;base64,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" alt="" />

分析:从错误提示上面就知道,spark无法知道hive的元数据的位置,所以就无法实例化对应的client。

解决的办法就是必须将hive-site.xml拷贝到spark/conf目录下

(2)测试代码中没有加sc.stop会出现如下错误:

ERROR scheduler.LiveListenerBus: Listener EventLoggingListener threw an exception
java.lang.reflect.InvocationTargetException

在代码最后一行添加sc.stop()解决了该问题。

SparkSQL读取Hive中的数据的更多相关文章

  1. 通过spark-sql快速读取hive中的数据

    1 配置并启动 1.1 创建并配置hive-site.xml 在运行Spark SQL CLI中需要使用到Hive Metastore,故需要在Spark中添加其uris.具体方法是将HIVE_CON ...

  2. 使用Hive读取ElasticSearch中的数据

    本文将介绍如何通过Hive来读取ElasticSearch中的数据,然后我们可以像操作其他正常Hive表一样,使用Hive来直接操作ElasticSearch中的数据,将极大的方便开发人员.本文使用的 ...

  3. Hive中的数据倾斜

    Hive中的数据倾斜 hive 1. 什么是数据倾斜 mapreduce中,相同key的value都给一个reduce,如果个别key的数据过多,而其他key的较少,就会出现数据倾斜.通俗的说,就是我 ...

  4. Spark读取Hbase中的数据

    大家可能都知道很熟悉Spark的两种常见的数据读取方式(存放到RDD中):(1).调用parallelize函数直接从集合中获取数据,并存入RDD中:Java版本如下: JavaRDD<Inte ...

  5. Python中如何读取xls中的数据

    要想读取EXCEL中的数据,首先得下载xlrd包,地址:https://pypi.python.org/pypi/xlrd  安装方法:下载解压后,利用windows  dos命令进入解压目录eg,c ...

  6. 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法

            Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...

  7. 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释

    在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...

  8. 读取redis中的数据时出现:MISCONF Redis is configured to save RDB snapshots

    读取redis中的数据时出现:MISCONF Redis is configured to save RDB snapshots   以下为异常详细信息: Exception in thread &q ...

  9. sql 读取excel中的数据

    select 列名 as 字段名 from openBowSet('MSDASQL.1','driver=Microsoft Excel Driver(*.xls);dbq=文件存放地址','sele ...

随机推荐

  1. http响应需要记住的状态码

    200:请求成功. 301:被请求的资源已永久移动到新位置.302:请求的资源现在临时从不同的 URI 响应请求.401:当前请求需要用户验证.403:服务器已经理解请求,但是拒绝执行它. 404:请 ...

  2. ExtJS自制表格Grid分页条

    试过Grid自带的load和分页功能,没有成功,干脆就自己写了...... 主要是查询条件比较复杂...... 希望哪位大神能有更好的意见. Ext.define('MyApp.ux.Paginati ...

  3. resolv.conf

    1 这个文件由NetworkManager和network服务共同修改 关闭NetworkManager服务后,修改nameserver和hostname 重启network后,nameserver更 ...

  4. nodejs学习篇

    最近在找工作,然后都说会个后台语言更好,选来选去,觉得nodejs比较有意思,就开始着手学这个了. 其实个人觉得,没有人领一下或者没有本好书去跟着做,这样的学习实在特别累,像我这种刚入门的菜鸟,完全搞 ...

  5. kaggle数据挖掘竞赛初步--Titanic<派生属性&维归约>

    完整代码: https://github.com/cindycindyhi/kaggle-Titanic 特征工程系列: Titanic系列之原始数据分析和数据处理 Titanic系列之数据变换 Ti ...

  6. html/css小练习1

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAywAAAFgCAIAAADW6Wr0AAAgAElEQVR4nOzdd1xT5+L48bJlhUAGCY

  7. 精析AngularJS(一)

    AngularJS简介 四个核心思想:依赖注入.模块化.双向绑定.语义化标签. AngularJS 前端 MVC 的设计与搭建 MVC(Model View Controller)模型(model)- ...

  8. 为什么.Net要求序列化的类必须有一个无参数的构造函数

    刚才用xml序列化器,序列化一个类,结果报错说序列化的类必须带有一个无参的构造函数,好奇怪啊.为什么要有这么苛刻的条件,而且xml序列化还要求序列化的成员是public. 我以前一直觉得序列化器是一个 ...

  9. Web Api 多项目文档生成之SwaggerUI

    SwaggerUI 可以生成不错的文档,但默认只能作用于单个api 项目,研究了一下源码发现只需修改一下SwaggerConfig.cs文件即可支持多API项目 1.使用生成脚本把xml文件复制到AP ...

  10. iOS中 HTTP/Socket/TCP/IP通信协议详解

    // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. ...