【presto on yarn】踩坑记录

前言

组里最近想试试presto,于是来试试presto on yarn的安装以及测试。在此感谢@秦拿希的博客,提供了很大的帮助。
【presto on yarn】解决方案

基础安装

基本的安装参照上面的博客做的,其中slider是ambari里面自带的,不需要再次安装,等于就编译了一下presto-on-yarn。说几个需要注意或者与博客中不同的字段:

1.首先是appConfig-default.json文件:


{
  "schema": "http://example.org/specification/v2.0.0",
  "metadata": {
  },
  "global": {
    "site.global.app_user": "yarn",
    "site.global.user_group": "hadoop",
    "site.global.data_dir": "/data/02/presto227/data",
    "site.global.config_dir": "/data/02/presto227/etc",
    "site.global.app_name": "presto-server-0.227",
    "site.global.app_pkg_plugin": "${AGENT_WORK_ROOT}/app/definition/package/plugins/",
    "site.global.singlenode": "true",
    "site.global.coordinator_host": "${COORDINATOR_HOST}",
    "site.global.presto_query_max_memory": "50GB",
    "site.global.presto_query_max_memory_per_node": "600MB",
    "site.global.presto_query_max_total_memory_per_node":  "600MB",
    "site.global.presto_server_port": "13386",

    "site.global.catalog": "{'hive': ['connector.name=hive-hadoop2','hive.config.resources=/etc/hadoop/core-site.xml,/etc/hadoop/hdfs-site.xml,/etc/hadoop/hive-site.xml', 'hive.metastore.uri=thrift://nn1.cbss:9083'],'hive2': ['connector.name=hive-hadoop2','hive.config.resources=/etc/hadoop/core-site.xml,/etc/hadoop/hdfs-site.xml,/etc/hadoop/hive-site.xml', 'hive.metastore.uri=thrift://nn2.cbss:9083'],'tpch': ['connector.name=tpch']}",
    "site.global.jvm_args": "['-server', '-Xmx1024M', '-XX:+UseG1GC', '-XX:G1HeapRegionSize=32M', '-XX:+UseGCOverheadLimit', '-XX:+ExplicitGCInvokesConcurrent', '-XX:+HeapDumpOnOutOfMemoryError', '-XX:OnOutOfMemoryError=kill -9 %p']",
    "site.global.log_properties": "['com.facebook.presto=INFO']",

    "application.def": ".slider/package/presto227/presto-yarn-package-1.6-SNAPSHOT-0.227.zip",
    "java_home": "/usr/java/jdk1.8.0_201-amd64/bin/java"
  },
  "components": {
    "slider-appmaster": {
      "jvm.heapsize": "128M"
    }
  }
}

site.global.app_user:我使用的还是默认的yarn,并且在hdfs中创建了/user/yarn目录。

site.global.data_dir:很重要的目录配置,默认/var/lib/presto/data。这是presto在每个节点的数据目录,log目录,还有node.propertise,jvm.config,config.properties配置文件的目录。这个目录必须要在每个节点上提前创建好,并且该文件夹的owner权限必须是yarn,否在在启动presto yarn时会报没有权限

site.global.config_dir:同site.global.data_dir.

site.global.catalog:数据源节点配置,配置指向你集群的配置文件。涉及到一个坑,下面会细说。UnknownHostException

site.global.presto_server_port:是presto对外暴露的端口,默认8080.

java_home:java地址,需要与实际相符合。

2.resources-default.json 文件

{
  "schema": "http://example.org/specification/v2.0.0",
  "metadata": {
  },
  "global": {
    "yarn.vcores": "1"
  },
  "components": {
    "slider-appmaster": {
    },
    "COORDINATOR": {
      "yarn.role.priority": "1",
      "yarn.component.instances": "1",
      "yarn.component.placement.policy": "2",
      "yarn.memory": "15360",
      "yarn.label.expression": "coordinator"
    },
    "WORKER": {
      "yarn.role.priority": "2",
      "yarn.component.instances": "7",
      "yarn.component.placement.policy": "2",
      "yarn.memory": "15360",
      "yarn.label.expression": "worker"
    }
  }
}

yarn.component.instances: 实例数量,COORDINATOR和WORKER的数量之和不能大于集群节点数,因为presto是绑定端口的,会导致有几个实例会一直重启。
yarn.label.expression: 如果需要固定COORDINATOR机器地址,或者控制Worker的启动机器,需要配合yarn的laber以及这个字段来实现。如不需要就得把这个字段删去。另外在配置过程中,出现了label匹配依然无法启动presto的情况,下面细说label问题

启动及使用

// 启动
slider package --install --name presto227 --package presto-yarn-package-1.6-SNAPSHOT-0.227.zip
slider create presto-query --template appConfig-default.json --resources resources-default.json

详细可以参照博客【presto on yarn】解决方案

遇到的坑

在使用过程中,也遇到了一些原博客中没有出现的问题,在此记录一下。

1.启动之后yarn任务处于running状态但是没有端口。

有问题的任务:
在这里插入图片描述

正常的任务:
在这里插入图片描述
在这里插入图片描述
仔细对比会发现,出问题的yarn任务中,Actual节点为0,Outstanding Requests节点数和Desired节点数一致,并且节点site.global.data_dir里面是空的,没有文件(这个文件夹很重要,site.global.data_dir/var/log是presto的日志)。经过分析任务是label的问题,于是把 yarn.label.expression 暂时删去后,发现presto可以正常启动。

但是这并不是解决之道,而我在另一个集群部署时并没有出现问题,经过对比,发现是yarn的配置不同,其中少了几个字段


 yarn.scheduler.capacity.root.accessible-node-labels.coordinator.capacity=100
 
yarn.scheduler.capacity.root.accessible-node-labels.worker.capacity=100
yarn.scheduler.capacity.root.acl_submit_applications=*
yarn.scheduler.capacity.root.default.accessible-node-labels=*
yarn.scheduler.capacity.root.default.accessible-node-labels.coordinator.capacity=100
yarn.scheduler.capacity.root.default.accessible-node-labels.worker.capacity=100
yarn.scheduler.capacity.root.default.default-node-label-expression=worker
yarn.scheduler.capacity.user-as-default-queue=true

accessible-node-labels 这个字段的作用是 定义default队列可以进入的标签,*代表所有,即root队列可以使用任何标签的node。多个可以逗号分割如“coordinator,worker”
其余的参见【yarn node label】yarn node label设置presto主节点(接上一篇)
我们集群是ambari,配置如图
在这里插入图片描述
加上这些字段后,问题解决。(参考【yarn node label】yarn node label设置presto主节点(接上一篇)

2.Cannot connect to discovery server for announce: Announcement failed with status code 404

在暂时删除 yarn.label.expression 后,presto暂时启动了,不过还是有问题。不过这次/presto/data/var/log/server.log(也就是site.global.data_dir)有东西了,查看日志后发现报错:

Cannot connect to discovery server for announce: Announcement failed with status code 404

一顿搜索之后,在Cannot connect to discovery server for announce: Announcement failed with status code 404发现了暂时解决办法,重新编译了一份presto219版本,暂时解决。不过这个问题再另一个集群还是没有复现。。等待研究。

3. java.net.UnknownHostException: xxx

使用select * from去具体查询表时,提示java.net.UnknownHostException: xxx,这个xxx是hdfs集群的名字。一顿搜索以后,发现还是回到了@秦拿希 大佬的另一篇博客。【presto on yarn】问题UnknownHostException和重启节点.
(presto-cli的启动命令是

./presto --server node:13385 --catalog hive --schema default


概括一下就是 site.global.catalog 字段里面的配置,

hive': ['connector.name=hive-hadoop2','hive.config.resources=/etc/hadoop/core-site.xml,/etc/hadoop/hdfs-site.xml,/etc/hadoop/hive-site.xml', 'hive.metastore.uri=thrift://nn1.cbss:9083'],'hive2': ['connector.name=hive-hadoop2'

这个hive对应启动cli中的 --catalog,,需要每个节点上对应目录都有对应的 core-site.xml,hdfs-site.xml,hive-site.xml

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Presto on K8S是将Presto查询引擎与Kubernetes容器编排平台结合起来使用的一种架构。Presto是一个负责大数据查询的组件,而Kubernetes是一个用于动态扩缩容和任务编排的平台。将Presto部署在Kubernetes上可以提升稳定性、降低成本、提高资源使用率,并为大数据计算组件容器化做准备。通过Kubernetes的特性,如动态扩缩容,还可以提高大数据运维的效率。 具体地,Presto on K8S的架构演进可以包括以下步骤: 1. 标准化运行环境:通过Kubernetes,可以实现统一的运行环境,包括jdk版本、部署目录以及接入统一的监控告警等。这可以提升稳定性并简化运维工作。 2. 潮汐切换:将Spark离线计算资源与Presto查询资源进行潮汐切换,以降低成本并提高资源的使用率。 3. 架构演进:通过结合大数据和K8S,对现有的大数据架构进行技术演进,为后续的大数据计算组件的容器化做准备。 4. 提高运维效率:通过Kubernetes的动态扩缩容等特性,可以提高大数据的运维效率。 对于风险和收益方面,Presto作为一个查询组件,对数据存储和计算不会产生影响。即使出现异常,也只会影响到FDW用户的查询,而不会影响到存储和计算任务。因此,对线上服务的影响很小。 总的来说,Presto on K8S是一种将Presto查询引擎与Kubernetes容器编排平台结合使用的架构,可以提升稳定性、降低成本、提高资源利用率,并为大数据计算组件容器化做准备。通过标准化运行环境和动态扩缩容等特性,还可以提高大数据的运维效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值