免费注册

【技术实践】Spark使用hive元数据

2019-02-15 人浏览

原因是新版hive支持ACID,默认也启用了ACID Manager,而SparkSQL还不支持ACID,所以它们两个各自使用不同的catalog。 如果要让sparksql直接使用hive元数据,有两种方案:1. spark通过HWC访问hive元数据; 建议使用HWC,spark可以通过hwc使用hive元数据,并且也支持ranger,但只支持如下3类应用:

  1. Hive Warehouse Connector - HWC

  在hdp3.0,默认sparkhive各使用自己的metastore catalog,即在hive中创建的表spark中是看不到的。

  原因是新版hive支持ACID,默认也启用了ACID Manager,而SparkSQL还不支持ACID,所以它们两个各自使用不同的catalog

  如果要让sparksql直接使用hive元数据,有两种方案:

  1.hive禁用ACIDspark使用hivecatalog

  2.spark通过HWC访问hive元数据;

  建议使用HWCspark可以通过hwc使用hive元数据,并且也支持ranger,但只支持如下3类应用:

  · Spark shell

  · PySpark

  · The spark-submit script

  也就是还不支持spark-sql?

  Updates for HDP-3.0:

  · Hive uses the "hive" catalog, and Spark uses the "spark" catalog. No extra configuration steps are required – these catalogs are created automatically when you install or upgrade to HDP-3.0 (in Ambari the Spark metastore.catalog.default property is set to spark in "Advanced spark2-hive-site-override").

  · You can use the Hive Warehouse Connector to read and write Spark DataFrames and Streaming DataFrames to and from Apache Hive using low-latency, analytical processing (LLAP). Apache Ranger and the Hive Warehouse Connector now provide fine-grained row and column access control to Spark data stored in Hive.

  2. spark hwc配置

  还需要去除hive.metastore.uris属性:

  3.使用

  启动shell

spark-shell --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-1.0.0.3.0.0.0-1634.jar

  注:因为hive-warehouse-connector-assembly-1.0.0.3.0.0.0-1634.jar 没有s3 api,在访问s3文件时会报错,但最终会查出结果。

#创建hive会话

scala> val hive = com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder.session(spark).build()   #val hive = com.hortonworks.hwc.HiveWarehouseSession.session(spark).build()

#如果使用用户名密码

val hive = com.hortonworks.hwc.HiveWarehouseSession.session(spark).userPassword("hive","passw").build()

#查看数据库

scala> hive.showDatabases().show

+------------------+

|     database_name|

+------------------+

|           default|

|information_schema|

|               iot|

|               sys|

+------------------+

#查看数据表

scala>  hive.showTables().show

+--------+

|tab_name|

+--------+

| invites|

|   pokes|

+--------+

#查询数据表内容

hive.executeQuery("SELECT * FROM pokes limit 3").show()

#切换数据库

hive.setDatabase("iot")

  4.SparkSQL 使用HWC

  需要配置Custom spark-thrift-sparkconf

- spark.sql.hive.hiveserver2.url=jdbc:hive2://{hiveserver-interactive-hostname}:10500

- spark.jars=/usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-1.0.0.3.0.0.0-1634.jar

- spark.hadoop.hive.zookeeper.quorum={some-or-all-zookeeper-hostnames}:2181

- spark.hadoop.hive.llap.daemon.service.hosts=@llap0

  属性spark_thrift_cmd_opts设置值:--jars /usr/hdp/2.6.3.0-235/spark_llap/spark-llap-assembly-1.0.0.2.6.3.0-235.jar --conf spark.sql.hive.llap=true

  连接spark jdbc

bin/beeline -u jdbc:hive2://slave5.cluster.local:10016 -n hive

  

0: jdbc:hive2://slave5.cluster.local:10016> show databases;

+---------------+--+

| databaseName  |

+---------------+--+

| default       |

| spdb          |

+---------------+--+

  结果不对,还是spark catalog

  另附: shell下访问spark catalog的结果:

scala>  spark.catalog.listDatabases.show

Hive Session ID = 1ea54a87-9df0-4ca0-b7a4-f741bb091e6f

+-------+----------------+--------------------+

|   name|     description|         locationUri|

+-------+----------------+--------------------+

|default|default database|hdfs://slave5.clu...|

|   spdb|                |hdfs://slave5.clu...|

+-------+----------------+--------------------+


作者:贾德星

职务:云服务集团云计算产品中心高级架构师

专业领域:大数据

专家简介:系统软件架构师,具备二十余年一线软件开发的工作经历,经验丰富。主持研发浪潮大数据平台产品云海InsightHD,专注于大数据Hadoop/Spark/流计算/机器学习/深度学习等相关技术组件的研究与应用及组件研发。参与起草信息技术国家标准二十余项,已正式发布12项国家标准。研发并申请9项国家专利获得授权。

 

 

上一篇: 【技术实践】安装 go 语言环境
下一篇: 【技术实践】kyuubi+集成kerberos认证

相关文章