一、什么是presto
Presto是Facebook开发的数据查询引擎,可对250PB以上的数据进行快速地交互式分析。
二、搭建presto
首先Centos 7.X 系统,JDK采用的Oracle的1.8.X的版本。presto的版本是采用最新版0.218,Python为版本Python 2.4+
presto下载地址:
http://prestodb.github.io/resources.html
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/
jdk下载地址:
https://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
三、安装与解压
1、首先安装jdk,安装步骤:
https://jingyan.baidu.com/article/9f7e7ec0f8c26b6f28155433.html
2、解压配置presto
tar zxvf presto-server-0.218.tar.gz
3、创建preston的日志存放目录
mkdir prestoData
4、创建配置文件
mkdir etc
cd etc
touch node.properties jvm.config config.properties log.properties
mkdir catalog
cd catalog
touch jmx.properties
5、编写配置文件config.properties、jvm.config、log.properties、node.properties
vi config.properties
coordinator=true
node-scheduler.include-coordinator=false #单机版的此处为true
query.max-memory=8GB
query.max-memory-per-node=1GB
http-server.http.port=9999 #与discovery.uri的端口一样
discovery-server.enabled=true
discovery.uri=http://192.168.252.152:9999 #ip为本机外网地址
vi jvm.config
-server
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
vi log.properties
book.presto=INFO
vi node.properties
node.environment=presto
node.id=presto_f1 #名字随便 但是不要重复
node.data-dir=/home/presto/prestoData #日志路径
vi launcher
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
export PATH=$JAVA_HOME:$PATH
四、运行/查看状态/停止
启动
./launcher start
查看状态
./launcher status
停止
./launcher stop
访问
http://192.168.252.152:9999/ui/
五、创建字节点
1、与创建主节点一样,但是需要改一下配置如下:
vi config.properties
coordinator=false
http-server.http.port=9999
query.max-memory=1GB
discovery.uri=http://192.168.252.152:9999
六、springboot+presto
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.citydo</groupId>
<artifactId>springboot_presto</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_presto</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1212</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.5</version>
</dependency>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-jdbc</artifactId>
<version>0.217</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.5.14.RELEASE</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml
postgresql:
spring:
datasource:
pa:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/postgres
username: root
password: 123456
presto:
spring:
datasource:
marketing:
driver-class-name: com.facebook.presto.jdbc.PrestoDriver
url: jdbc:presto://localhost:8080/hive/default?user=databus
#url: jdbc:presto://localhost:8080/hive/default?root=databus
mybatis:
type-aliases-package: com.citydo.springboot_presto.domain.domain
#mapper-location: classpath:mapper/*.xml
package com.citydo.springboot_presto.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* @ClassName DataSourcePrestoConfig
* @Description 配置presto数据源
* @Author qixin
* @Date 2018/7/6 10:14
* Version 1.0
**/
/*marketing数据库*/
@Configuration
@MapperScan(basePackages = "com.citydo.springboot_presto.dao.test", sqlSessionTemplateRef = "marketingSqlSessionTemplate")
public class DataSourcePrestoConfig {
private final static Logger logger = LoggerFactory.getLogger(DataSourcePrestoConfig.class);
@Bean(name = "marketingDataSource")
@ConfigurationProperties(prefix = "presto.spring.datasource.marketing")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "marketingSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("marketingDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
/*加载mybatis全局配置文件*/
//bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mybatis-config.xml"));
/*加载所有的mapper.xml映射文件*/
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/test/*.xml"));
logger.info("加载presto数据库连接......");
return bean.getObject();
}
@Bean(name = "marketingTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("marketingDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "marketingSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("marketingSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
参考:https://blog.csdn.net/Alice_qixin/article/details/80976245
参考:https://blog.csdn.net/weixin_43704393/article/details/87275671