当前位置: 首页>移动开发>正文

presto日志配置 presto搭建

Presto单体/集群搭建方法

一、所需环境

1、Mac OS系统或Linux

2、jdk8以上

yum install java-1.8.0-openjdk #centos系统

3、MySQL/Hive数据源环境

使用windows下的对应mysql数据库即可,开启数据库远程访问

use mysql;
select host from user; #查看是否允许远程登录
update user set host ='%' where user ='root';
exit;
#重新启动mysql服务
service mysql stop;

service mysql start;
service mysql stop;

service mysql start;

4、python2.6以上

yum -y install python  #centos系统

5、vim文本

yum -y install vim  #centos系统

二、文件下载地址及传输

1、http://pan.bonc.local/f/956545937779407c9e4f/?dl=1 presto-server-0.219.tar.gz

2、https://code.bonc.com.cn/confluence/pages/viewpage.action?pageId=64007981 presto-cli-0.247-executable.jar、ZIP 压缩文件 mysql-connector-java-5.1.35.zip

文件下载后,使用XFTP和XShell配合,将文件上传至虚拟机环境下,统一放置在虚拟机中一个目录,方便后续copy操作

三、安装(集群环境仅需注意coordinator、node配置文件即可)

1、进入local目录,创建presto文件夹

若提示权限不足,先输入命令:su 进行提权

cd /usr/local/
mkdir presto

2、将所下载的presto-server-0.219.tar.gz移入第一步所创建文件夹中

# 进入 presto-server-0.219.tar.gz 文件所放置目录
cd /Downloads #作者放置目录,根据安装者的对应文件放置位置进行调整,若不清楚文件所在目录,可输入命令:pwd,获取文件当前路径
cp presto-server-0.219.tar.gz /usr/local/presto #将文件copy至创建好的presto目录
cp presto-cli-0.247-executable.jar /usr/local/presto

3、解压presto-server-0.219.tar.gz文件

tar -zxvf presto-server-0.219.tar.gz

4、进入presto解压目录中,解压文件的/etc目录下,创建如下文件(若无etc目录请自行创建):

cd /usr/local/presto/presto-server-0.219/etc
mkdir catalog #每个连接者配置(data sources)
mkdir /usr/local/presto/data #创建存储数据的文件位置
touch config.properties #Presto 服务配置
touch node.properties #环境变量配置,每个节点特定配置
touch jvm.config #Java虚拟机的命令行选项
touch log.properties #允许你根据不同的日志结构设置不同的日志级别

3.1 coordinator配置

coordinator config.properties

包含了Presto server的所有配置信息。 每个Presto server既是一个coordinator也是一个worker。 但是在大型集群中,处于性能考虑,建议单独用一台机器作为 coordinator,一个coordinator的etc/config.properties应该至少包含以下信息:

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8011
query.max-memory=2GB
query.max-total-memory-per-node=2GB
query.max-memory-per-node=2GB
discovery-server.enabled=true
discovery.uri=http://172.16.89.173:8011

参数说明:

  1. coordinator:指定是否运维Presto实例作为一个coordinator(接收来自客户端的查询情切管理每个查询的执行过程)
  2. node-scheduler.include-coordinator:是否允许在coordinator服务中进行调度工作, 对于大型的集群,在一个节点上的Presto server即作为coordinator又作为worke将会降低查询性能。因为如果一个服务器作为worker使用,那么大部分的资源都会被worker占用,那么就不会有足够的资源进行关键任务调度、管理和监控查询执行
  3. http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP进行内部和外部的所有通讯
  4. task.max-memory=1GB:一个单独的任务使用的最大内存 (一个查询计划的某个执行部分会在一个特定的节点上执行)。 这个配置参数限制的GROUP BY语句中的Group的数目、JOIN关联中的右关联表的大小、ORDER BY语句中的行数和一个窗口函数中处理的行数。 该参数应该根据并发查询的数量和查询的复杂度进行调整。如果该参数设置的太低,很多查询将不能执行;但是如果设置的太高将会导致JVM把内存耗光
  5. discovery-server.enabled:Presto 通过Discovery 服务来找到集群中所有的节点。为了能够找到集群中所有的节点,每一个Presto实例都会在启动的时候将自己注册到discovery服务。Presto为了简化部署,并且也不想再增加一个新的服务进程,Presto coordinator 可以运行一个内嵌在coordinator 里面的Discovery 服务。这个内嵌的Discovery 服务和Presto共享HTTP server并且使用同样的端口
  6. discovery.uri:Discovery server的URI。由于启用了Presto coordinator内嵌的Discovery 服务,因此这个uri就是Presto coordinator的uri。注意:这个URI一定不能以“/“结
集群work节点的coordinator配置
coordinator=false   #work节点需要填写false
http-server.http.port=8011
query.max-memory=2GB
query.max-memory-per-node=1GB
discovery.uri=http://172.16.89.173:8011
#作为work时,coordinator配置应为false
#discovery.uri与coordinator调度节点的ip对应。
#调度节点只负责调度时node-scheduler.include-coordinator设置为false
#调度节点也作为worker时node-scheduler.include-coordinator设置为true
node.properties

包含针对于每个节点的特定的配置信息。 一个节点就是在一台机器上安装的Presto实例,etc/node.properties配置文件至少包含如下配置信息

node.environment=presto
node.id=presto1  #若搭建集群,各个节点的id要不同
node.data-dir=/usr/local/presto/data #该位置为自己所创建的data目录路径

参数说明:

  1. node.environment: 集群名称, 所有在同一个集群中的Presto节点必须拥有相同的集群名称
  2. node.id: 每个Presto节点的唯一标示。每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id
  3. node.data-dir: 数据存储目录的位置(操作系统上的路径), Presto将会把日期和数据存储在这个目录下
jvm.config

包含一系列在启动JVM的时候需要使用的命令行选项。这份配置文件的格式是:一系列的选项,每行配置一个单独的选项。由于这些选项不在shell命令中使用。 因此即使将每个选项通过空格或者其他的分隔符分开,java程序也不会将这些选项分开,而是作为一个命令行选项处理,work节点配置相同,信息如下:

-server
-Xmx2G
-Xms2G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:ReservedCodeCacheSize=150M
-XX:CMSInitiatingOccupancyFraction=70
log.properties

这个配置文件中允许你根据不同的日志结构设置不同的日志级别。每个logger都有一个名字(通常是使用logger的类的全标示类名). Loggers通过名字中的“.“来表示层级和集成关系,信息如下:

com.facebook.presto=INFO

配置日志等级,类似于log4j。四个等级:DEBUG,INFO,WARN,ERROR

3.2catalog文件夹下配置

以MySQL、hive数据源为例

在catalog文件夹下创建mysql.properties:

注:work节点上,url需为coordinator的数据库IP,不能使用localhost,否则查询会查不到值

connector.name=mysql
connection-url=jdbc:mysql://localhost:3306  #虚拟机下,mysql连接地址请使用对应主机IP
connection-user=root
connection-password=root

hive.properties:

connector.name=hive-hadoop2
hive.metastore.uri=thrift://localhost:9083
hive.config.resources=/usr/local/Cellar/hadoop/3.3.0/libexec/etc/hadoop/hdfs-site.xml,/usr/local/Cellar/hadoop/3.3.0/libexec/etc/hadoop/core-site.xml

3.3启动presto服务

在安装目录的bin/launcher文件,就是启动脚本。Presto可以使用如下命令作为一个后台进程启动:

./launcher start
或
python launcher.py start

也可以在前台运行, 可查看具体的日志

./launcher run
或
python launcher.py run

停止服务进程命令

./launcher stop
或
python launcher.py stop

3.4安装cli

将presto-cli-0.247-executable.jar文件,移入安装目录中的bin下(需先进入到文件所在目录)

mv presto-cli-0.247-executable.jar presto

3.5启动客户端

./presto --server localhost:8081 --catalog mysql
# --server 后地址为所配置启动地址,根据使用者所配置,进行调整
# --catalog 使用的数据源,以mysql为例

四、常见问题及解决方案

4.1 Mac中使用Docker搭建集群无法通讯问题

解决方案:借助于VPN解决

docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套件。然而如果想同时部署和使用多个容器,每个容器不使用127.0.0.1地址,而是各自有ip,如使用172.17.0.x网段,则需要解决从宿主机到各个容器的网络通信。

如果是使用其他Linux系统的用户则不用担心这个问题,Linxu系统会自动帮我们处理好ip之间的互通(宿主机和各个容器之间)。而Mac想要直接访问容器的ip,则需要曲线救国,通过搭建一个vpn服务,然后通过vpn再去和容器的网段互联。

经过尝试openvpn成为了最佳的解决方案,github的项目地址为:openvpn 其中网络连通的原理,下图所示,openvpn作为一个转接的桥梁。

presto日志配置 presto搭建,presto日志配置 presto搭建_presto,第1张

根据官网项目描述,它是可以适用于Mac下的docker和Kubernetess:

该容器(openvpn)在Docker For Mac容器和主机Mac本身之间创建VPN网络。它使您可以直接与作为在IP 172.17.0.0/16上运行的Docker容器运行的服务进行通信,还可以提供到Kubernetess Pod的直接路由以及默认情况下在网络10.1.0.0/16和10.96.0.0/16和10.101上运行的服务的直接路由.0.0 / 16

然后依次顺序执行下列命令去创建vpn和vpn的配置。

1.初始化一个ovpn数据容器,用以保存配置文件和凭证。

docker volume create --name ovpn-data
docker run -v ovpn-data:/etc/openvpn --rm onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_genconfig -u udp://localhost

2.创建CA。

docker run -v ovpn-data:/etc/openvpn --rm -it onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_initpki

3.运行vpn server。

docker run --dns 8.8.8.8 --restart=always -v ovpn-data:/etc/openvpn --name docker-openvpn-kube-for-mac -d -p 1194:1194/udp --cap-add=NET_ADMIN onedata/docker-openvpn-kube-for-mac:1.3.0

4.创建一个不含秘钥的客户端凭证。

docker run -v ovpn-data:/etc/openvpn --rm -it onedata/docker-openvpn-kube-for-mac:1.3.0 easyrsa build-client-full DockerForMac nopass

5.使用嵌入式证书检索客户端配置。

docker run -v ovpn-data:/etc/openvpn --rm onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_getclient DockerForMac > ~/Downloads/DockerForMac.ovpn

上面这一步生成的DockerForMac.ovpn配置需要在Tunnelblink里面使用。Tunnelblink是一款开源免费的针对MacOS的OpenVPN图形化客户端,可以非常方便地使用openvpn配置来连接网络服务。下载地址在此:Tunnelblink,可以直接下载使用。
下载并安装后Tunnelblink,运行它,然后再到终端执行如下命令来添加网络配置:

open ~/Downloads/DockerForMac.ovpn

6.连接VPN,即可互相通讯

4.2 若docker启动无反应解决方法(Mac):

killall Docker && open /Applications/Docker.app

4.3Docker相关命令

#docker下载初始镜像
docker pull centos
# 启动docker容器
docker run -it imagename /bin/bash
docker run --name=prestowork1 -it presto/work:1.0
#--name: 指定容器名称

#docker镜像已启动,进入对应容器
docker  exec  -it  容器ID   /bin/bash

#容器ID查询命令
docker ps

#docker打包命令
docker commit -a="angus" -m="angus's tomcat remove doc" b2a3d7b67722  angustomcat:1.0
#命令解释:命令为commit  -a 为作者 -m 为描述信息 b2a3d7b67722 运行中的容器的ID angustomcat 镜像名 :1.0 版本号

#docker镜像打包转移命令
docker save yourname/nginx:1.14 -o /home/img/nginx.tar

#还原镜像
docker load -i /home/img/nginx.tar

4.4 使用prestowork1 docker镜像presto启动报无python错误

source /etc/profile
或,使用
python3 launcher.py start

4.5 使用presto集群环境查询sql报java.sql.SQLException: null, message from server: "错误

解决:检查MySQL是否开启远程登录,方法:

use mysql;
select host from user; #查看是否允许远程登录
update user set host ='%' where user ='root';
#重新启动mysql服务



https://www.xamrdz.com/mobile/42t1923886.html

相关文章: