文章目录

  • 前言
  • openLooKeng介绍
  • SparkDataFrame读取openLooKeng


前言

前几天领导让用spark集成openLooKeng,可能熟悉openLooKeng的朋友知道openLooKeng是个基于sql的计算引擎,并非存储数据的软件;那么有人就会问了,既然你spark是计算引擎,openLooKeng也是计算引擎不存数据,那么为什么还要用spark集成openLooKeng;问就是我负责的项目特殊,领导要求先把项目的生态圈丰富起来!

openLooKeng介绍

因为要集成openLooKeng,所以先了解一下openLooKeng是什么,怎么操作

openLooKeng是一个跨数据源、【数据中心】的SQL计算引擎(不存数据),通过连接器对接RDBMS和NOSQL,甚至流数据Kafka,提到计算层(内存),实现统一SQL入口和视图,用于交互式查询分析

openLooKeng安装:自动部署地址 因为是自己测试使用,就使用的官网的一键安装命令安装的:

wget -O - https://download.openlookeng.io/install.sh|bash

#默认安装到/opt/路径下

注意:安装后自动就运行openLooKeng了(中间什么操作都没做),但我安装运行时一直卡着下面这个地方(至少十分钟):

spark实现关键词匹配_spark实现关键词匹配


后来实在是等不下去了,看日志才发现是报错了,错误见下图:

spark实现关键词匹配_官网_02


然后百度了这个错误,修改了配置文件:

/opt/openlookeng/hetu-server-1.6.0/etc/catalog/memory.properties

connector.name=memory
memory.max-data-per-node=6GB
memory.spill-path=/opt/openlookeng/memory/spill

官网解释,其实这也不能怪我,毕竟通过自动部署,你直接启动openLooKeng了,我哪有时间修改配置文件,对不对。。

#启动openLooKeng
/opt/openlookeng/bin/start.sh

#通过命令访问openLooKeng
/opt/openlookeng/bin/openlk-cli

通过openlk-cli操作时,需要了解openLooKeng的sql语法:https://openlookeng.io/zh-cn/docs/docs/sql/alter-schema.html

spark实现关键词匹配_spark_03

openLooKeng提供的也有Web页面,访问ip:8090就是openLooKeng的WebUI页面(前提是你没改配置文件中的端口号),账号随便输即可进入

spark实现关键词匹配_scala_04

openLooKeng默认提供了4个数据源,但还是集成自己的数据源测试比较方便(毕竟数据都是自己了解的),这里我集成了mysql和mongodb(如下图),集成方式直接参考openLooKeng官网即可;

spark实现关键词匹配_spark_05


在此页面上,可以直接通过sq操作不同数据源中的数据,包括不同数据源之间数据的关联查询

SparkDataFrame读取openLooKeng

  • pom依赖
<!-- https://mvnrepository.com/artifact/io.hetu.core/hetu-jdbc -->
<dependency>
	<groupId>io.hetu.core</groupId>
	<artifactId>hetu-jdbc</artifactId>
	<version>1.6.0</version>
</dependency>
  • 代码(通过jdbc连接openLooKeng)
val conf = new SparkConf().setAppName("test").setMaster("local[4]")
val spark = SparkSession.builder().config(conf).getOrCreate()

val df = spark.read.format("jdbc")
      .option("url", "jdbc:lk://127.0.0.1:8090/catalog/schema")
      .option("dbtable", "tbname")
      .option("driver", "io.hetu.core.jdbc.OpenLooKengDriver")
      .option("user", "openLooKeng的username")
      .option("password","openLooKeng的password")
      .load()

//注意:这里driver需要注意一下,openLooKeng官网说驱动是自动加载的,不需要写;
//我自己写测试类本地运行时也没写driver属性也可以正常运行
//但可能由于我负责的项目的特殊性,不写driver在yarn上会报错,所以这里还是推荐写上
//openLooKeng官网驱动不需要写的地址:https://openlookeng.io/zh-cn/docs/docs/installation/jdbc.html