`
m635674608
  • 浏览: 5043429 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spark,Hive,HBase相互结合--数据读取和计算的几种方式

 
阅读更多

Spark与Hive可以相互结合,同时Spark也可以使用DataFrame读取HBase里的数据,Hive也同样可以直接读取HBase的数据。只不过在Spark和Hive读取HBase数据的时候,需要做列簇或列映射,对于列不确定的需要列簇映射。 几种数据读取和分析思路

  • Hive on HBase做好表映射,然后使用Tez替换MR引擎,使用Hive做数据分析
    • 这是最基本的一种方式,对于上层的数据分析可以提供基础支持,同时也可以通过写脚本的方式来做数据分析。但是跟别的数据源关联和分析比较麻烦,不像Spark可以提供多种数据源连接。
  • Spark SQL链接HBase,使用DataFrame做数据分析(由Spark构建表映射)
  • Hive on HBase,开启Hive的thrift server,通过JDBC连接提取数据
    • 这种方式与普通的JDBC取关系型数据库一样,可在SQL语句里传入Hive相应的处理函数,利用Hive来做计算然后提取结果。如果是Spark取数据的话,还不需要Spark做HBase表列的映射,很多函数可以使用Hive本身的。
    • 但是,在目前Hive 1.2的JDBC版本里面,使用它会报错:java.sql.SQLException: Method not supported at org.apache.hive.jdbc.HiveResultSetMetaData.isSigned,这是因为在目前的JDBC版本里,甚至以后的Hive 2.0版本里,isSigned这个方法都没有做实现,并且在Spark 1.5及以上版本里,这个方法被Spark SQL的resolveTable所调用,所以在这些版本的Spark里,这种方式都无法使用,低版本的Spark或许可以。
  • Hive on HBase,Spark SQL使用HiveContext接触Hive的元数据信息,然后自己做数据提取和分析
    • HBase表列的映射不需要做,可以在Hive映射的基础上提取数据。
    • 需要配置Spark识别Hive所映射的HBase表(默认无法识别)。
      • 首先配置Spark在提交Job的时候加上以下jar包(博主使用的HDP2.4.0.0-169): hive-hbase-handler-1.2.1000.2.4.0.0-169.jar hbase-client-1.1.2.2.4.0.0-169.jar hbase-protocol-1.1.2.2.4.0.0-169.jar hbase-common-1.1.2.2.4.0.0-169.jar hbase-server-1.1.2.2.4.0.0-169.jar htrace-core-3.1.0-incubating.jar guava-12.0.1.jar protobuf-java-2.5.0.jar 上述的jar包分别在Hive和HBase的lib目录下找。具体配置如下:在spark-defaults.conf的配置文件里加入spark.executor.extraClassPathspark.driver.extraClassPath,其值是上述jar包的路径,多个jar包之间以:分割。如:spark.executor.extraClassPath /usr/hdp/2.4.0.0-169/spark/extrajars/hbase-client-1.1.2.2.4.0.0-169.jar:/usr/hdp/2.4.0.0-169/spark/extrajars/hbase-protocol-1.1.2.2.4.0.0-169.jar,在Ambari里配置就更简单了,在Custom spark-defaults里添加这两条配置即可。
      • 其次,需将hbase-site.xml文件拷贝至HADOOP_CONF_DIR文件夹(/etc/hadoop/conf)下,因为在spark-env.sh里配置了HADOOP_CONF_DIR,里面的文件会被默认加载,所以hbase的配置也会被加载。其中有用的配置是以下几个: hbase.zookeeper.quorum zookeeper.znode.parent hbase.client.scanner.caching 其中caching这个值默认是100,为了性能可以适当提高,比如5000
    • Hive的各种函数和map, struct等数据结构在Spark里都可以找到对应的,处理数据更加简单。如下是取hive表里的struct类型字段,字段原型rowkey_struct struct<hash:string, resid:string, time_stamp:string>
      val sqlContext = new HiveContext(sc)
      sqlContext.table("cbd.summary").select("rowkey_struct", "Amount").
      select($"rowkey_struct".getField("hash").as("hash"),$"rowkey_struct".getField("time_stamp").as("time_stamp").cast(LongType), $"Amount".cast(LongType))
      
      对于有些列名是动态变化的,比如存放外键关联字段的时候,并不知道列名和有多少个列。必须通过hive的map映射,映射的字段怎么处理呢?需要把map里的key-value键值对转换为行,然后将行转列,需要用到explode函数。如下是处理map类型字段,字段原型project_info map<String, string>
      case classFilterField(EstiType: String, ProjectType: String)
      val sqlContext = new HiveContext(sc)
      sqlContext.table("cbd.project").select("rowkey","project_info").explode($"project_info") {
        case Row(project_info: Map[String, String]) =>
          val projectType = project_info.filterKeys(_.contains("工程类型")).map(_._2).headOption.getOrElse("NaN") // 不知列名的采用匹配,已知列名的可以直接取
          Array(FilterField(project_info.getOrElse("计价方式", "NaN"), projectType))
      }.select("rowkey", "EstiType", "ProjectType")
      
    • 同样的语句,执行速度比Hive on Tez快
    • 在Ambari里,Spark默认已经配置好可以读取Hive的元数据信息
  • Hive on HBase,由Hive做好分析后,把数据写入到Hive其他的表里,然后Spark再从Hive表里取数据。 这种就比较绕,除非Hive里有的函数很重要但是Spark里不具备,可以这么干,否则直接使用Spark读取Hive的元数据信息更合适。

欢迎转载,但请注明出处:https://my.oschina.net/u/2539801/blog/750858

分享到:
评论

相关推荐

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

    Spark与HBase的结合,通过Spark的HBase连接器,可以实现高效的数据导入导出和实时分析。 在这个压缩包中,"spark-2.4.0-old"可能指的是Spark的旧版本库,可能是为了兼容性或者回滚目的而保留的。这个文件可能包含了...

    scala-hive-HBASE-Api.7z

    Scala、Hive与HBase是大数据处理领域中的关键组件,它们在Java开发环境中扮演着重要角色。本压缩包"scala-hive-HBASE-Api.7z"包含了2019年8月至10月间用于工作的相关jar包,主要用于支持Scala、Hive和HBase的集成...

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

    在本项目实战中,我们将探讨如何使用Java编程语言,结合Spark和Hive,将Hive中的数据高效地导入到ElasticSearch(ES)中,并利用ES的别名机制实现数据更新的平滑过渡。以下是对这个流程的详细解析: 1. **Hive数据...

    建立Hive和Hbase的映射关系,通过Spark将Hive表中数据导入ClickHouse

    接下来,Spark作为一个分布式计算框架,提供了一种灵活且高性能的方式来处理数据。在Hive和ClickHouse之间传输数据时,Spark可以作为一个中间层,利用其强大的数据处理能力,将Hive表的数据转换为适合ClickHouse存储...

    spark-1.6.0-bin-hadoop2.4.tgz

    在实际应用中,Spark可以与其他大数据工具如Hive、HBase、Cassandra等结合使用,提供更强大的数据分析功能。此外,Spark的弹性分布式数据集(Resilient Distributed Datasets, RDD)是其核心概念,它提供了一种在...

    hbase-1.2.2-Java测试最小依赖包(经过严格测试)

    5. **索引与查询**:虽然HBase本身不支持复杂的SQL查询,但可以通过Secondary Index或者与Spark、Hive等工具结合,实现高效的查询。 使用HBase的Java API,开发者可以方便地进行以下操作: - **创建表**:通过...

    spark-2.4.5-bin-hadoop2.7.rar

    DataFrame 支持多种数据源,包括HDFS、Cassandra、HBase等,与Hadoop 2.7的兼容性使得数据读取和写入更为方便。Dataset 是DataFrame的类型安全版本,结合了RDD的高性能和DataFrame的API便利性,是面向对象编程的理想...

    apache-hive-2.3.4-bin.tar.gz

    早期版本主要依赖于MapReduce,但后来引入了更高效的Tez和Spark执行引擎,减少数据读取和写入的开销,提升查询性能。 7. **Hive的优化器**:Hive的查询优化器负责转化HQL为执行计划,包括选择最佳的执行路径、合并...

    成功编译后的 spark-2.1.0-bin-2.6.0-cdh5.7.0

    Spark是Apache Hadoop生态系统中的一个快速、通用且可扩展的大数据处理框架,它设计的目标是提供一种高效的数据处理方式,支持交互式数据挖掘和实时数据分析。Spark SQL是Spark的一个重要组件,它允许用户通过SQL...

    hadoop、hbase、hive等相关面试问题

    - HBase适合需要快速随机读写的场景,而Hive则更适合于批处理和数据分析任务。 - 两者可以通过Hive-on-HBase的方式结合使用,即利用Hive的SQL接口来查询HBase中的数据,增强了HBase的查询灵活性。 #### 2. HBase...

    Chapter6-_-大数据处理技术Spark-第6章-Spark-SQL_1

    总的来说,Spark SQL的出现解决了Shark的局限性,提供了更高效、易用的数据处理方式,使得开发人员在处理大数据时能更好地利用SQL的便利性,同时结合Spark的并行计算优势,极大地提升了大数据处理的效率和灵活性。

    Impala-Kudu-HBase-Spark安装文档

    【Impala-Kudu-HBase-Spark安装文档】是关于在分布式计算环境中集成多个组件的详细指南,主要包括四个关键部分:Impala、Kudu、HBase和Spark。这些组件都是大数据处理和分析的重要工具,用于构建高效的数据仓库和...

    bigData-starter:spark-starter,hive-starter,hbase-starter

    用户可以使用两种方法创建RDD:读取一个外部数据集,或在驱动器程序中分发驱动器程序中的对象集合,比如list或者set。 RDD的转化操作都是惰性求值的,这意味着我们对RDD调用转化操作,操作不会立即执行。相反,Spark...

    HCIP-Big Data Developer V2.0视频.zip

    3.12 HBase API使用 - 读取数据 3.13 HBase优化 - 表设计 3.14 HBase优化 - 表操作 3.15 ElasticSearch简介 3.16 ElasticSearch特点与应用 3.17 ElasticSearch生态圈与架构 3.18 ElasticSearch缓存和倒排索引 3.19 ...

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

    Spark SQL结合了Spark的高性能计算能力和SQL查询的便利性,使得开发者能够通过SQL或者DataFrame API来处理大规模数据。它是一个分布式SQL查询引擎,提供了对多种数据源的支持,如HDFS、Hive、HBase、Parquet等,使得...

    Atlas Spark SQL血缘分析,HBASE

    Apache Atlas的HBase Hook允许我们捕获Spark SQL对HBase表的操作,如读取、写入或更新,生成相应的元数据和血缘信息。 在具体实施过程中,首先需要配置Apache Atlas以支持Spark SQL和HBase。这包括在Atlas中定义...

    HBase官方文档中文版-HBase手册中文版

    HBase是一种分布式、基于列族的NoSQL数据库,由Apache软件基金会开发并维护,是Hadoop生态系统中的重要组件。这份“HBase官方文档中文版”提供了全面深入的HBase知识,帮助用户理解和掌握如何在大数据场景下有效地...

    大规模数据查询Hive及Impala技术原理及架构.pdf

    - **兼容性**:Hive 的元数据和数据模型可以在 Spark 上无缝使用。 3. **与 HBase 的结合** - **实时查询**:HBase 提供了对 Hive 表的实时访问能力。 - **混合使用**:可以将频繁查询的数据存储在 HBase 中,而...

    清华大学精品大数据实战课程(Hadoop、Hbase、Hive、Spark)PPT课件含习题(30页) 第4章 数据仓库工具Hi

    这门课程深入浅出地介绍了大数据处理技术,包括Hadoop、Hbase、Hive以及Spark,并且提供了丰富的PPT课件,内含习题,共计30页,旨在帮助学习者掌握大数据领域的核心概念和实际操作。 Hadoop是大数据处理的基础框架...

    Hadoop-2.8.0-Day07-HA-Hive安装部署与HQL-课件与资料.zip

    在实际应用中,Hive通常与其他Hadoop组件如HDFS、HBase、Spark等配合使用,构建大数据处理和分析的生态系统。例如,Hive可以读取HDFS上的数据,或者通过HBase进行实时查询。同时,Hive也可以与YARN结合,以提供资源...

Global site tag (gtag.js) - Google Analytics