presto-gateway nodejs client
2024-09-04 22:58:33
目前已经有了好几个presto nodejs 的client,为了方便presto-gateway 的连接,修改了一个现有的nodejs client
可以方便的连接presto-gateway
原理
因为通过通过的rest api 调用的,所以直接在原有上添加http header X-Presto-Routing-Group
- 参考修改的presto client
https://github.com/tagomoris/presto-client-node
- 修改的地方
headers.js
// Add X-Presto-Routing-Group for support presto gateway
Headers.ROUTING_GROUP = 'X-Presto-Routing-Group';
index.js
对于查询支持添加routingGroup
Client.prototype.statementResource = function(opts) {
var client = this;
var columns = null;
if (!opts.catalog && !this.catalog)
throw {message: "catalog not specified"};
if (!opts.schema && !this.schema)
throw {message: "schema not specified"};
if (!opts.success && !opts.callback)
throw {message: "callback function 'success' (or 'callback') not specified"};
var header = {};
header[Headers.CATALOG] = opts.catalog || this.catalog;
header[Headers.SCHEMA] = opts.schema || this.schema;
if (opts.session)
header[Headers.SESSION] = opts.session;
if (opts.timezone)
header[Headers.TIME_ZONE] = opts.timezone;
if (opts.routingGroup)
header[Headers.ROUTING_GROUP] = opts.routingGroup;
- 说明
已经push npm 仓库了
使用方法
- 安装依赖
npm install @dalongrong/presto-client
- 参考docker-compose 运行环境
version: "3"
services:
proxy:
image: dalongrong/presto-gateway:1.6.1
ports:
- "8888:8888"
- "8082:8082"
- "8083:8083"
build: ./
volumes:
- "./config.yml.template:/config.yml.template"
presto1:
image: starburstdata/presto
ports:
- "8080:8080"
presto2:
image: starburstdata/presto
ports:
- "8081:8080"
- 配置文件
requestRouter:
port: 8888
name: prestoRouter
cacheDir: /var/log/prestoproxy/cache
historySize: 1000
backends:
- localPort: 8082
name: presto1
proxyTo: http://presto1:8080
routingGroup: adhoc
- localPort: 8083
name: presto2
proxyTo: http://presto2:8080
routingGroup: scheduled
server:
applicationConnectors:
- type: http
port: 8090
adminConnectors:
- type: http
port: 8091
notifier:
smtpHost: localhost
smtpPort: 587
sender: presto-gw-monitor-noreply@lyft.com
recipients:
- prestodev@yourorg.com
modules:
- com.lyft.data.gateway.module.ProxyBackendProviderModule
- com.lyft.data.gateway.module.GatewayProviderModule
- com.lyft.data.gateway.module.NotifierModule
managedApps:
- com.lyft.data.gateway.GatewayManagedApp
- com.lyft.data.gateway.ActiveClusterMonitor
# Logging settings.
logging:
# The default level of all loggers. Can be OFF, ERROR, WARN, INFO, DEBUG, TRACE, or ALL.
level: INFO
# Logger-specific levels.
loggers:
com.lyft: DEBUG
appenders:
- type: console
- type: file
currentLogFilename: /var/log/prestoproxy/prestoproxy-java.log
archivedLogFilenamePattern: /var/log/prestoproxy/prestoproxy-java-%d{yyyy-MM-dd}-%i.log.gz
archivedFileCount: 7
timeZone: UTC
maxFileSize: 100MB
- 参考代码
var presto = require('@dalongrong/presto-client');
var client = new presto.Client({
user: 'appdemo',
host: "localhost",
port: 8888
});
client.execute({
query: 'select * from nation2',
catalog: 'memory',
schema: 'default',
source: 'nodejs-client',
routingGroup: 'scheduled',
state: function (error, query_id, stats) {
console.log(error)
console.log({
message: "status changed",
id: query_id,
stats: stats
});
},
columns: function (error, data) {
console.log({
resultColumns: data
});
},
data: function (error, data, columns, stats) {
console.log(data);
},
success: function (error, stats) {
console.log(stats)
},
error: function (error) {
console.log(error)
}
});
参考资料
https://github.com/tagomoris/presto-client-node
https://github.com/rongfengliang/presto-client-node
最新文章
- angularJs之service
- docker compose 笔记
- ZeroMQ安装
- 【持续集成】使用Jenkins实现多平台并行集成
- plupload+struts2实现文件上传下载
- 周末充电之WPF(二 ) .窗口的布局
- jquery中read与js中onload区别
- linux连接mysql 出现Access denied for user 'root'@'localhost'(using password: YES)错误解决方案
- CF266D. BerDonalds [图的绝对中心]
- MongoDB存储引擎(下)——In-Memory
- 编写CGI程序步骤
- Java (六、String类和StringBuffer)
- 关于Vue-cli 组件引入CSS样式文件
- QNetworkAccessManager
- $.cookie is not a function的错误原因
- Job Interview: Why Only 3 Questions Really Matter
- CodeForces 985D Sand Fortress
- HDU2838 Cow Sorting 树状数组 区间求和加逆序数的应用
- Java中的IO流(六)
- 【POJ】2142 The Balance 数论(扩展欧几里得算法)