前几天领导让用spark集成openLooKeng,可能熟悉openLooKeng的朋友知道openLooKeng是个基于sql的计算引擎,并非存储数据的软件;那么有人就会问了,既然你spark是计算引擎,openLooKeng也是计算引擎不存数据,那么为什么还要用spark集成openLooKeng;问就是我负责的项目特殊,领导要求先把项目的生态圈丰富起来!
因为要集成openLooKeng,所以先了解一下openLooKeng是什么,怎么操作
openLooKeng是一个跨数据源、【数据中心】的SQL计算引擎(不存数据),通过连接器对接RDBMS和NOSQL,甚至流数据Kafka,提到计算层(内存),实现统一SQL入口和视图,用于交互式查询分析
官网地址
openLooKeng安装:自动部署地址
因为是自己测试使用,就使用的官网的一键安装命令安装的:
wget -O - https://download.openlookeng.io/install.sh|bash
#默认安装到/opt/路径下
注意:安装后自动就运行openLooKeng了(中间什么操作都没做),但我安装运行时一直卡着下面这个地方(至少十分钟):
后来实在是等不下去了,看日志才发现是报错了,错误见下图:
然后百度了这个错误,修改了配置文件:
/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
openLooKeng提供的也有Web页面,访问ip:8090就是openLooKeng的WebUI页面(前提是你没改配置文件中的端口号),账号随便输即可进入
openLooKeng默认提供了4个数据源,但还是集成自己的数据源测试比较方便(毕竟数据都是自己了解的),这里我集成了mysql和mongodb(如下图),集成方式直接参考openLooKeng官网即可;
在此页面上,可以直接通过sq操作不同数据源中的数据,包括不同数据源之间数据的关联查询
io.hetu.core
hetu-jdbc
1.6.0
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