入门指南
要求
- Mac OS X或Linux
- Java 8 Update 161或更高版本(8u161+)(64位)。同时支持Oracle JDK和OpenJDK。
- Maven 3.3.9+(用于构建)
- Python 2.4+(与启动器脚本一起运行)
构建openLooKeng Core
openLooKeng Core是一个标准Maven项目。在项目根目录下运行以下命令即可:
./mvnw clean install
在第一次构建中,Maven将从Internet下载所有依赖项并将其缓存在本地存储库(~/.m2/repository
)中,这可能需要相当长的时间。后续的构建会更快。
openLooKeng Core有一组全面的单元测试,运行这些测试可能需要几分钟的时间。您可以在构建时禁用这些测试:
./mvnw clean install -DskipTests
在您的IDE中运行openLooKeng Core
概述
首次构建openLooKeng Core之后,您可以将该项目加载到您的IDE中并运行服务器。我们建议使用IntelliJ IDEA。由于openLooKeng是一个标准Maven项目,因此您可以使用根文件pom.xml
将其导入到您的IDE中。在IntelliJ中,从“Quick Start”框中选择“Open Project”或从“File”菜单中选择“Open”,然后选择根文件 pom.xml
。
在IntelliJ中打开该项目之后,仔细检查是否为该项目正确配置了Java SDK:
- 打开“File”菜单并选择“Project Structure”。
- 在“SDKs”部分中,确保选择1.8 JDK(如果不存在,则创建一个)。
- 在“Project”部分中,确保将“Project language level”设置为8.0,因为openLooKeng Core使用了一些Java 8语言功能。
openLooKeng Core附带的样例配置可以直接用于开发。使用以下选项创建运行配置:
- Main Class:
io.prestosql.server.PrestoServer
- VM Options:
-ea -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -Xmx2G -Dconfig=etc/config.properties -Dlog.levels-file=etc/log.properties
- Working directory:
$MODULE_DIR$
- Use classpath of module:
presto-main
工作目录应该是presto-main
子目录。在IntelliJ中,使用$MODULE_DIR$
可以自动完成该设置。
此外,必须使用您的Hive元存储Thrift服务的位置对Hive插件进行配置。使用正确的主机和端口(如果您没有Hive元存储,则使用下面的值)替换localhost:9083
,将以下内容添加到虚拟机选项列表中:
-Dhive.metastore.uri=thrift://localhost:9083
为Hive或HDFS使用SOCKS
如果您的本地计算机无法直接访问Hive元存储或HDFS集群,则可以使用SSH端口转发进行访问。设置一个动态SOCKS代理,其中SSH侦听本地端口1080:
ssh -v -N -D 1080 server
然后在虚拟机选项列表中添加以下内容:
-Dhive.metastore.thrift.client.socks-proxy=localhost:1080
日志记录
审计日志功能默认关闭。要使用默认设置开启,需要修改etc/event-listener.properties
中的配置,确保运行服务端的进程对审计日志目录有写权限。
运行CLI
启动CLI以连接到服务器并运行SQL查询:
presto-cli/target/hetu-cli-*-executable.jar
查询集群中的节点信息:
SELECT * FROM system.runtime.nodes;
在样例配置中,Hive Connector挂载在hive
目录中,因此您可以运行以下查询来显示Hive数据库default
中的表:
SHOW TABLES FROM hive.default;
代码样式
我们建议您使用IntelliJ作为IDE。可以在代码样式存储库中找到项目的代码样式模板,其中还提供了我们的通用编程和Java指南。除此之外,您还应遵守以下要求:
- 将文档源文件(包括目录文件和其他常规文档文件)中的各节按字母顺序进行排列。一般而言,如果周围的代码中已经存在这样的排序,则按字母顺序排列方法/变量/节。
- 在合适的时候使用Java 8流API。不过,请注意流实现的性能不佳,因此应避免在内循环或其他对性能敏感的节中使用流实现。
- 在抛出异常时对错误进行分类。例如,PrestoException接受错误代码作为参数:
PrestoException(HIVE_TOO_MANY_OPEN_PARTITIONS)
。您可以利用该分类来生成报告,以便能够监视各种故障的出现频率。 - 确保所有文件都有适当的许可证标头;您可以通过运行
mvn license:format
来生成许可证。 - 考虑使用字符串格式化(使用Java
Formatter
类进行printf样式格式化):format("Session property %s is invalid: %s", name, value)
(请注意,应始终以静态方式导入format()
)。有时,如果只需要附加某些内容,可以考虑使用+
运算符。 - 除非是普通表达式,否则避免使用三元运算符。
- 如果Airlift的
Assertions
类中有覆盖您的情况的断言,请使用该断言,而不是手动编写该断言。随着时间的推移,我们可能会转向更流畅的断言,如AssertJ。 - 在编写Git提交消息时,请遵循这些准则。
构建Web UI
openLooKeng Web UI使用JSX和ES6编写,由多个React组件组成。该源代码被编译并打包成与浏览器兼容的Javascript,然后该Javascript被签入到openLooKeng Core源代码(在文件夹dist
中)中。您必须安装Node.js和Yarn才能执行这些命令。要在更改之后更新该文件夹,只需运行以下命令:
yarn --cwd presto-main/src/main/resources/webapp/src install
如果没有任何Javascript依赖项发生更改(即package.json
未更改),则运行以下命令会更快:
yarn --cwd presto-main/src/main/resources/webapp/src run package
为了简化迭代,您还可以在watch
模式下运行,此时会在检测到源文件更改时自动重新编译:
yarn --cwd presto-main/src/main/resources/webapp/src run watch
要快速进行迭代,只需在打包完成后在IntelliJ中重新构建项目。项目资源将被热重载,更改将在浏览器刷新时得到反映。