cdh6.2.0 pyspark2.3.0+读写hbase2.1.0的几种方式

本文介绍了四种在 CDH6.2.0 环境中使用 PySpark2.3.0 与 HBase2.1.0 进行交互的方法:通过Hive、 Hortonworks的shc框架源码编译、Spark-HBase Connector以及newAPIHadoopRDD。详细步骤包括配置Hive表、源码编译shc框架并将其jar包添加到Spark的jars目录,以及设置环境变量。
摘要由CSDN通过智能技术生成

1.使用Hive

先建立Hbase表,插入数据

create 'books', 'info', 'analytics'
put 'books', 'In Search of Lost Time', 'info:author', 'Marcel Proust'
put 'books', 'In Search of Lost Time', 'info:year', '1922'
put 'books', 'In Search of Lost Time', 'analytics:views', '3298'
put 'books', 'Godel, Escher, Bach', 'info:author', 'Douglas Hofstadter'
put 'books', 'Godel, Escher, Bach', 'info:year', '1979'
put 'books', 'Godel, Escher, Bach', 'analytics:views', '820'

再建立hive表:

CREATE EXTERNAL TABLE IF NOT EXISTS `default`.`books_ext` (
 `title` string,
 `author` string,
 `year` int,
 `views` double
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'    
WITH SERDEPROPERTIES (
 'hbase.columns.mapping'=':key,info:author,info:year,analytics:views'
)
TBLPROPERTIES (
 'hbase.mapred.output.outputtable'='books',
 'hbase.table.name'='books'
);

下载hive-hbase-handler-2.1.1-cdh6.2.0.jar,放到/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/spark/jars里

#! /usr/bin/python3.6
# -*- encoding:utf-8 -*-
"""
@author: xuan
@file:.py
@time:20-3-19 
"""
from pyspark.sql import SparkSession
import  os

if __name__ == "__main__":
   os.environ["PYSPARK_PYTHON"] = "/home/venv/bin/python3.6"
   warehouse_location = "/user/hive/warehouse/"
   spark = SparkSession.builder \
       .master("local[2]") \
       .appName("Hive2Hbase")\
       .enableHiveSupport() \
       .config("spark.sql.warehouse.dir", warehouse_location) \
       .getOrCreate()
   #设置打印warn及以上级别的日志
   spark.sparkContext.setLogLevel("WARN")
   '''
       执行扫描时,调整会话上的缓存参数有助于提高性能,例如:
           spark.sql('SET hbase.scan.cache=10000')
           spark.sql('SET hbase.client.scanner.cache=10000')
   '''
   '''
       当直接从配置单元使用book_ext时,我们可以通过explain看到配置单元将简单谓词优化为正确的HBase语句:
       其中title='something'成为HBase get。
       其中title>=“something”和title<“something”被正确转换为范围扫描
       例如,如果使用between运算符,则不是这种情况。
       虽然配置单元hbasstoragehandler能够理解并正确转换简单的查询谓词,但spark引擎并没有这么聪明:
         查询会立即转换为全表扫描,然后在Spark中进行过滤,这样Hive就无法优化和下推过滤器。Dataframe.explain()将显示Spark物理计划。
      后一点意味着,在对整个表执行操作(如全表扫描)时,从Spark通过Hive访问HBase是一个不错的选择。
   '''
   spark.sql("select* from default.books_ext where title='In Search of Lost Time'").show(truncate=False)
   spark.sql("select* from default.books_ext where title='In Search of Lost Time'").explain()
   #spark.table("default.books_ext").show(truncate=False)

   #先落地成Parquet文件再读取,速度会快一些
   # spark.sql("create table default.books_ext_parquet  stored as parquet as select * from default.books_ext")
   spark.sql("select * from default.books_ext").write.parquet("%s/books_ext_parquet"%warehouse_location,"overwrite")
   # spark.sql("select * from default.books_ext").write.format("parquet").mode("overwrite").save("%s/books_ext_parquet"%warehouse_location)
   spark.read.parquet("%s/books_ext_parquet"%warehouse_location).show()
   spark.stop()

2.使用hortonworks的开源框架shc:源码编译

软件准备:

  • shc源码包,根据自己环境的spark版本选择下载
    下载地址:https://github.com/hortonworks-spark/shc/releases
    在这里插入图片描述
    我下载的版本是v1.1.3-2.3-SystemTest,适用于spark2.3+
  • idea打开v1.1.3-2.3-SystemTest文件夹,修改pom.xml文件,下载相关的依赖
    1.v1.1.3-2.3-SystemTest/pom.xml,根据需要修改各版本
    <groupId>com.hortonworks</groupId>
    <artifactId>shc</artifactId>
    <version>spark-2.3.0-hbase-2.1.0</version>
    <packaging>pom</packaging>
    <name>HBase Spark Connector Project Parent POM</name>
    <url>https://github.co
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值