文档章节

Presto实战

China_OS
 China_OS
发布于 2017/05/03 10:51
字数 1202
阅读 1227
收藏 3

介绍

        Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。Presto支持在线数据查询,包括Hive, Cassandra, Mysql关系数据库以及专有数据存储。也支持Redis,Mongodb,Kafak这样的系统通过SQL语句来查询数据。一条Presto查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析。

        第一次接触Presto,还是0.150,现在版本已经更新到0.174,可见presto的更新还是很活跃的,社区氛围也不错。

依赖

        Mac OS X or Linux
        Java 8 Update 92 or higher (8u92+), 64-bit
        Maven 3.3.9+ (for building)
        Python 2.4+ (for running with the launcher script)

架构

        coordinator

            presto中的coordinator主要是控制worker节点的,一般称为调度节点

        worker

            presto中的worker主要是工作节点,具体的查询都是在worker节点上执行的。

部署

    下载

cd /opt/programs
wget 'https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.174/presto-server-0.174.tar.gz'

    coordinator部署

#进入下载目录
cd /opt/programs

#解压
tar czvf presto-server-0.174.tar.gz -C presto_174

#进入主目录
cd presto_174

#创建配置目录
mkdir etc

#etc目录的基础配置文件,均需要手动创建
##jvm.config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p

##log.properties
com.facebook.presto=INFO

##node.properties
node.environment=production
node.id=109
node.data-dir=/tmp/presto/data

##config.properties
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=9999
query.max-memory=20GB
query.max-memory-per-node=4GB
discovery-server.enabled=true
discovery.uri=http://192.168.1.109:9999


    worker部署

#进入下载目录
cd /opt/programs

#解压
tar czvf presto-server-0.174.tar.gz -C presto_174

#进入主目录
cd presto_174

#创建配置目录
mkdir etc

#etc目录的基础配置文件,均需要手动创建
##jvm.config
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p

##log.properties
com.facebook.presto=INFO

##node.properties
node.environment=production
node.id=135
node.data-dir=/tmp/presto/data

##config.properties
coordinator=false
http-server.http.port=9999
query.max-memory=20GB
query.max-memory-per-node=4GB
discovery.uri=http://192.168.1.109:9999


    Presto CLI部署

#进入bin
cd /opt/programs/presto_174/bin

#下载
wget 'https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.174/presto-cli-0.174-executable.jar'
mv presto-cli-0.174-executable.jar presto-cli
chmod 755 presto-cli

    Presto UI

        http://192.168.1.109:9999

    Presto init.d

#!/bin/bash
#
#Author: dalu, Date: 2016/12/8
#
###################################
# chkconfig read settings
# chkconfig: - 99 50
# description: presto start script
# processname: presto server
###################################
export PATH=/opt/programs/jdk1.8.0_111/bin/:$PATH
#java home
JAVA_HOME="/opt/programs/jdk1.8.0_111"

#app home
APP_HOME='/opt/programs/presto_174/'

#app name
APP_NAME='PrestoServer'

#app log dir
APP_LOG="$APP_HOME/var/logs/"

#java main function
APP_MAINCLASS="PrestoServer"

#start cmd
CMD="/opt/programs/presto_174/bin/launcher"


###################################
#check PrestoServer app is running
###################################
psid=0

checkpid(){
    javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`
    if [ -n "$javaps" ];then
	psid=`echo $javaps | awk '{print $1}'`
    else
	psid=0
    fi
}

###################################
# start PrestoServer app 
##################################

start(){
    checkpid
    if [ $psid -ne 0 ];then
	echo "================================"
	echo "warn: $APP_NAME already started! (pid=$psid)"
	echo "================================"
    else
	echo -n "Starting $APP_NAME ..."
	$CMD --pid-file=$APP_LOG/launcher.pid  --launcher-log-file=$APP_LOG/launcher.log --server-log-file=$APP_LOG/server.log start 2>&1
	checkpid
	if [ $psid -ne 0 ];then
	    echo "(pid=$psid) [OK]"
	else
	    echo "[Failed]"
	fi
    fi
}


##################################
# stop PrestoServer app
##################################

stop(){
    checkpid
    if [ $psid -ne 0 ];then
	echo -n "Stopping $APP_NAME ...(pid=$psid) "
	presto_pid=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS | awk '{print $1}'`
	kill $presto_pid
	if [ $? -eq 0 ];then
	    echo "[OK]"
	else
	    kill -9 $presto_pid
	    sleep 5
	    checkpid
	    if [ $psid -ne 0 ];then
		echo -n "[Failed]"	   
	    fi
	fi 
    else
	echo "================================"
	echo "warn: $APP_NAME is not running"
	echo "================================"
    fi
}

case "$1" in
    'start')
	start
	;;
    'stop')
	stop
	;;
    'restart')
	stop
	start
	;;
    *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit 0

redis访问测试

    配置

#创建catalog
mkdir -p /opt/programs/presto_174/etc/catalog

#进入catalog
cd /opt/programs/presto_174/etc/catalog

#创建redis.properties
connector.name=redis
redis.table-names=antnest
redis.nodes=192.168.1.109:6379
redis.password=dalu
redis.default-schema=redis
redis.database-index=0
redis.table-description-dir=etc/redis
redis.hide-internal-columns=false

    创建redis映射

#创建redis映射目录
mkdir -p /opt/programs/presto_174/etc/redis

#进入映射目录
cd /opt/programs/presto_174/etc/redis

#创建映射文件redis.json
{
    "tableName": "antnest",
    "schemaName": "redis",
    "key": {
        "dataFormat": "raw",
        "fields": [
            {
		"name": "key",
		"type": "VARCHAR"
	    }
        ]
    },
    "value": {
        "dataFormat": "raw",
        "fields": [
            {
		"name": "value",
		"type": "VARCHAR"
	    }
       ]
    }
}

        ps:上述所有配置文件在coordinator和worker都需要拷贝一份,然后重启coordinator和worker上的presto进程    

    测试

cd /opt/programs/presto_174/bin
./presto-cli --server 192.168.1.109:9999 --catalog redis

        

mongodb访问测试

    配置

#在catalog目录创建mongodb配置mongodb.properties
connector.name=mongodb
mongodb.seeds=192.168.1.109:12001
mongodb.credentials=admin:dalu@admin
mongodb.socket-keep-alive=true
mongodb.schema-collection=admin

    测试

kafka访问测试

    配置

#在catalog目录创建kafka配置
connector.name=kafka
kafka.table-names=json_data
kafka.nodes=192.168.1.109:9092
kafka.hide-internal-columns=false
kafka.table-description-dir=etc/kafka
kafka.default-schema=kafka

    配置映射

#创建kafka映射目录
mkdir -p /opt/programs/presto_174/etc/kafka

#创建kafka映射文件json_data.json
{
    "tableName": "json_data",
    "schemaName": "kafka",
    "topicName": "json_data",
    "key": {
        "dataFormat": "raw",
        "fields": [
            {
                "name": "kafka_key",
                "type": "BIGINT",
                "dataFormat": "LONG",
                "hidden": "false"
            }
        ]
    },
    "message": {
        "dataFormat": "json",
        "fields": [
            {
                "name": "name",
		"mapping": "name",
                "type": "VARCHAR"
            },
	    {
                "name": "phone",
                "mapping": "phone",
                "type": "VARCHAR"
            }
        ]
    }
}

    测试

第三方WEB

    airpal

        airpal不建议使用,很久没有更新了,版本还在0.1,一直没有变化,优点是有认证,采用apache shiro认证,UI界面不错。

    yanagishima

        1.x版本的时候,还比较搓,作者比较勤奋,一直在更新,现在已经更新到3.0版本了,界面也比airpal好看了

        下载

cd /opt/programs
wget 'wget https://bintray.com/artifact/download/wyukawa/generic/yanagishima-3.0.zip'
unzip yanagishima-3.0.zip

        配置

cd /opt/programs/yanagishima-3.0/conf

#配置文件yanagishima.properties
jetty.port=8088
presto.query.max-run-time-seconds=1800
presto.max-result-file-byte-size=1073741824
presto.datasources=presto1
presto.coordinator.server.presto1=http://192.168.1.109:9999
catalog.presto1=mongodb
schema.presto1=webspider
select.limit=500

        访问

            首页

            选择

            结果

 

 

© 著作权归作者所有

下一篇: Hive+LDAP+Sentry
China_OS
粉丝 427
博文 463
码字总数 519985
作品 0
静安
技术主管
私信 提问
初步学习大数据进入这一领域,这十本书是你必读的

据可靠数据显示,截止到2018年,全国的大数据人才只有46万,未来3-5年人才缺口高达150万之多。市面招聘网站上都在争抢大数据人才,有3-5年工作经验的数据分析师年薪直接高达80万元,但是能找...

董黎明
2018/11/11
26
1
开源OLAP引擎测评报告(SparkSql、Presto、Impala、HAWQ、ClickHouse、GreenPlum)

本文为博主公司原创文章,仿冒必究,转载请回复留言** 开源OLAP引擎测评报告(SparkSql、Presto、Impala、HAWQ、ClickHouse、GreenPlum) 易观CTO 郭炜 序 现在大数据组件非常多,众说不一,在...

@dailidong@
01/21
0
0
初识PB级数据分析利器Prestodb

初始PB级数据分析利器Prestodb 什么是prestodb prestodb整体架构 物理执行计划 什么是prestodb prestodb,是facebook开源的一款sql on hadoop系统,是facebook的工程师对hive的查询速度忍无可...

rlnlo2pnefx9c
2017/12/26
0
0
开源有效,不信请看 Facebook

Facebook 这家公司喜欢分享他们的成果。在过去的一段时间里,这家公司开放了很多内部项目的代码和设计。公众可以免费的使用和修改这些代码,甚至可以在其基础之上构建新的系统。 对于很多公司...

oschina
2015/03/20
7.3K
16
Presto Installation

1 集群部署 1.1 集群环境 1.1.1 系统需求 Mac OS X or Linux(测试使用的Centos7.2) Java 8 Update 92 or higher (8u92+), 64-bit(测试使用的1.8.0_121,64-bit) 1.1.2 组件版本 Presto版本0.1......

Yulong_
2017/08/14
88
0

没有更多内容

加载失败,请刷新页面

加载更多

JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
6
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
14
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.7K
24
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
46
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部