美文网首页
PrestoDB (一)

PrestoDB (一)

作者: 起个什么呢称呢 | 来源:发表于2018-07-02 15:30 被阅读81次

    写在前面

    Presto不是数据库,定位是查询引擎

    通过分布式查询,Presto不仅仅可以访问HDFS,也可以访问其他数据源,数据库。但是,Presto并不能用来处理在线事务

    Presto被设计为数据仓库和数据分析产品:数据分析、大规模数据聚集和生成报表。这些工作经常通常被认为是线上分析处理操作


    PrestoDB的安装

    1.部署Presto

    下载tar包解压

    下载Presto server tarball,presto-server-0.100.tar.gz,将它解压。我们叫它安装目录

    Presto需要一个用于存储日志、本地元数据等的数据目录。 建议在安装目录的外面创建一个数据目录。这样方便Presto进行升级

    配置presto

    在安装目录中创建一个etc目录。 在这个etc目录中放入以下配置信息:

    节点属性:每个节点的环境配置信息

    JVM 配置:JVM的命令行选项

    配置属性:Presto server的配置信息

    Catalog属性:configuration forConnectors(数据源)的配置信息

    Node Properties

    节点属性配置文件:etc/node.properties包含针对于每个节点的特定的配置信息。

    一个节点就是在一台机器上安装的Presto实例。 这份配置文件一般情况下是在Presto第一次安装的时候,由部署系统创建的。

    一个etc/node.properties配置文件至少包含如下配置信息:

    node.environment=production

    node.id=ffffffff-ffff-ffff-ffff-ffffffffffff

    node.data-dir=/var/presto/data

    针对上面的配置信息描述如下:

    node.environment: 集群名称。所有在同一个集群中的Presto节点必须拥有相同的集群名称。

    node.id:

    每个Presto节点的唯一标示。每个节点的node.id都必须是唯一的。在Presto进行重启或者升级过程中每个节点的node.id必须保持不变。如果在一个节点上安装多个Presto实例(例如:在同一台机器上安装多个Presto节点),那么每个Presto节点必须拥有唯一的node.id。

    node.data-dir: 数据存储目录的位置(操作系统上的路径)。Presto将会把日期和数据存储在这个目录下。

    JVM配置

    JVM配置文件,etc/jvm.config,

    包含一系列在启动JVM的时候需要使用的命令行选项。这份配置文件的格式是:一系列的选项,每行配置一个单独的选项。由于这些选项不在shell命令中使用。

    因此即使将每个选项通过空格或者其他的分隔符分开,java程序也不会将这些选项分开,而是作为一个命令行选项处理。(就想下面例子中的OnOutOfMemoryError选项)。

    一个典型的etc/jvm.config配置文件如下:

    -server

    -Xmx16G

    -XX:+UseConcMarkSweepGC

    -XX:+ExplicitGCInvokesConcurrent

    -XX:+CMSClassUnloadingEnabled

    -XX:+AggressiveOpts

    -XX:+HeapDumpOnOutOfMemoryError

    -XX:OnOutOfMemoryError=kill -9 %p

    -XX:ReservedCodeCacheSize=150M

    由于OutOfMemoryError将会导致JVM处于不一致状态,所以遇到这种错误的时候我们一般的处理措施就是将dump headp中的信息(用于debugging),然后强制终止进程。

    Presto会将查询编译成字节码文件,因此Presto会生成很多class,因此我们我们应该增大Perm区的大小(在Perm中主要存储class)并且要允许Jvm class unloading。

    Config Properties

    Presto的配置文件:etc/config.properties包含了Presto server的所有配置信息。 每个Presto

    server既是一个coordinator也是一个worker。 但是在大型集群中,处于性能考虑,建议单独用一台机器作为

    coordinator。

    一个coordinator的etc/config.properties应该至少包含以下信息:

    coordinator=true

    node-scheduler.include-coordinator=false

    http-server.http.port=8080

    task.max-memory=1GB

    discovery-server.enabled=true

    discovery.uri=http://example.net:8080

    以下是最基本的worker配置:

    coordinator=false

    http-server.http.port=8080

    task.max-memory=1GB

    discovery.uri=http://example.net:8080

    但是如果你用一台机器进行测试,那么这一台机器将会即作为coordinator,也作为worker。配置文件将会如下所示:

    coordinator=true

    node-scheduler.include-coordinator=true

    http-server.http.port=8080

    task.max-memory=1GB

    discovery-server.enabled=true

    discovery.uri=http://example.net:8080

    对配置项解释如下:

    coordinator:指定是否运维Presto实例作为一个coordinator(接收来自客户端的查询情切管理每个查询的执行过程)。

    node-scheduler.include-coordinator:是否允许在coordinator服务中进行调度工作。对于大型的集群,在一个节点上的Presto

    server即作为coordinator又作为worke将会降低查询性能。因为如果一个服务器作为worker使用,那么大部分的资源都不会被worker占用,那么就不会有足够的资源进行关键任务调度、管理和监控查询执行。

    http-server.http.port:指定HTTP server的端口。Presto 使用 HTTP进行内部和外部的所有通讯。

    task.max-memory=1GB:一个单独的任务使用的最大内存 (一个查询计划的某个执行部分会在一个特定的节点上执行)。

    这个配置参数限制的GROUP BY语句中的Group的数目、JOIN关联中的右关联表的大小、ORDER

    BY语句中的行数和一个窗口函数中处理的行数。

    该参数应该根据并发查询的数量和查询的复杂度进行调整。如果该参数设置的太低,很多查询将不能执行;但是如果设置的太高将会导致JVM把内存耗光。

    discovery-server.enabled:Presto 通过Discovery

    服务来找到集群中所有的节点。为了能够找到集群中所有的节点,每一个Presto实例都会在启动的时候将自己注册到discovery服务。Presto为了简化部署,并且也不想再增加一个新的服务进程,Presto

    coordinator 可以运行一个内嵌在coordinator 里面的Discovery 服务。这个内嵌的Discovery

    服务和Presto共享HTTP server并且使用同样的端口。

    discovery.uri:Discovery server的URI。由于启用了Presto

    coordinator内嵌的Discovery 服务,因此这个uri就是Presto

    coordinator的uri。修改example.net:8080,根据你的实际环境设置该URI。注意:这个URI一定不能以“/“结尾。

    日志级别

    日志配置文件:etc/log.properties。在这个配置文件中允许你根据不同的日志结构设置不同的日志级别。每个logger都有一个名字(通常是使用logger的类的全标示类名).

    Loggers通过名字中的“.“来表示层级和集成关系。 (像java里面的包). 如下面的log配置信息:

    com.facebook.presto=INFO

    This would set the minimum level toINFOfor bothcom.facebook.presto.serverandcom.facebook.presto.hive.The default minimum level isINFO(thus the above example does not actually change anything).There are four levels:DEBUG,INFO,WARNandERROR.

    Catalog Properties

    Presto通过connectors访问数据。这些connectors挂载在catalogs上。 connector

    可以提供一个catalog中所有的schema和表。 例如: Hive connector

    将每个hive的database都映射成为一个schema, 所以如果hive connector挂载到了名为hive的catalog,

    并且在hive的web有一张名为clicks的表, 那么在Presto中可以通过hive.web.clicks来访问这张表。

    通过在etc/catalog目录下创建catalog属性文件来完成catalogs的注册。 例如:可以先创建一个etc/catalog/jmx.properties文件,文件中的内容如下,完成在jmxcatalog上挂载一个jmxconnector:

    connector.name=jmx

    查看Connectors的详细配置选项。

    运行Presto

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

    bin/launcher start

    另外,也可以在前台运行, 日志和相关输出将会写入stdout/stderr(可以使用类似daemontools的工具捕捉这两个数据流):

    bin/launcher run

    运行bin/launcher–help,Presto将会列出支持的命令和命令行选项。 另外可以通过运行bin/launcher–verbose命令,来调试安装是否正确。

    启动完之后,日志将会写在var/log目录下,该目录下有如下文件:

    launcher.log: 这个日志文件由launcher创建,并且server的stdout和stderr都被重定向到了这个日志文件中。 这份日志文件中只会有很少的信息,包括:

    在server日志系统初始化的时候产生的日志和JVM产生的诊断和测试信息。

    server.log: 这个是Presto使用的主要日志文件。一般情况下,该文件中将会包括server初始化失败时产生的相关信息。这份文件会被自动轮转和压缩。

    http-request.log: 这是HTTP请求的日志文件,包括server收到的每个HTTP请求信息,这份文件会被自动轮转和压缩。

    相关文章

      网友评论

          本文标题:PrestoDB (一)

          本文链接:https://www.haomeiwen.com/subject/zacluftx.html