写点什么

超详细攻略!手把手教你如何在 windows 下搭建 openLooKeng 开发环境

用户头像
openLooKeng
关注
发布于: 刚刚
超详细攻略!手把手教你如何在windows下搭建openLooKeng开发环境

当我们在进行 openLooKeng 的项目任务时,很多情况下需要在 openLooKeng 下进行开发调试,但只有 windows 电脑的我们该怎么做?本期,小助手将介绍在 Windows 下搭建 openLooKeng 开发环境的方法,希望对朋友们有帮助。如果您有任何想要交流的,欢迎在社区内提 Issue;也欢迎加小助手微信,进入专属技术交流群。


欢迎访问官网 https://openlookeng.io




搭建 openLooKeng 开发环境

(win 运行 presto)


首先要确认拥有代码的 git clone 权限,最好是 clone 的代码,否则,后期会出现配置上的问题

(一)环境依赖

  • JDK: 1.8 (8u161+)64bit

  • Maven: 3.3.9

  • 如果是直接从github上下载的源码压缩包,则需要做如下配置:


  1. 进入源码根目录   2. 修改根目录的pom.xml      在<build>的<pluginManagement>元素中,添加如下配置:      <plugin>              <groupId>pl.project13.maven</groupId>              <artifactId>git-commit-id-plugin</artifactId>              <configuration>                      <skip>true</skip>              </configuration>      </plugin>
复制代码


不添加会有如下错误:


  Failed to execute goal pl.project13.maven:git-commit-id-plugin:3.0.1:revision (default) on project hetu-common: .git directory is not found! Please specify a valid [dotGitDirectory] in your pom.xml
复制代码


如果是从githubclone的代码,则不需要做上述配置。


  • 更换代码仓:

  • 在 maven 的 setting 中,修改:


  <mirror>        <id>alimaven</id>        <name>aliyun maven</name>        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>        <mirrorOf>central</mirrorOf>              </mirror>
复制代码


镜像仓库。


 <localRepository>D:\document\Maven\repository</localRepository>
复制代码


这是我的本地的仓库地址

(二)编译

2.1 编译前准备

  1. presto-main/etc/event-listener.properties


   - hetu.event.listener.type=AUDIT   + hetu.event.listener.type=LOGGER
复制代码


  1. presto-main/src/main/java/io/prestosql/server/PluginDiscovery.java


   - if (!file.getPath().endsWith("/target/classes"))   + if (!file.getPath().replace('\\','/').endsWith("/target/classes"))
复制代码


win 系统下路径字符的变化


  1. presto-main/src/main/java/io/prestosql/server/PrestoSystemRequirements.java

  2. 注释:


else {    failRequirement("Hetu requires Linux or Mac OS X (found %s)", osName);}
复制代码


其实注释修改都是可以的:


​ 修改:


// 注释掉对操作系统的限制,更改为:warnRequirement// failRequirement("Presto requires Linux or Mac OS X (found %s)", osName);warnRequirement("Presto requires Linux or Mac OS X (found %s)", osName);
复制代码


注释和修改任选一种


  1. presto-main/src/main/java/io/prestosql/server/PrestoSystemRequirements.java


修改:


- Object maxFileDescriptorCount = mbeanServer.getAttribute(ObjectName.getInstance(OPERATING_SYSTEM_MXBEAN_NAME), "MaxFileDescriptorCount");+ Object maxFileDescriptorCount = 10000;
复制代码


  1. presto-main/pom.xml


注释掉io.airlift.resolver的依赖中的exclusions


        <dependency>            <groupId>io.airlift.resolver</groupId>            <artifactId>resolver</artifactId><!--            <exclusions>--><!--                <exclusion>--><!--                    <artifactId>netty</artifactId>--><!--                    <groupId>io.netty</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>async-http-client</artifactId>--><!--                    <groupId>com.ning</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-compat</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--            </exclusions>-->        </dependency>
复制代码


注释掉一下依赖项:


(如果不注释后期会有错),可以参考附录学习


<!--        <dependency>--><!--            <groupId>org.apache.maven</groupId>--><!--            <artifactId>maven-compat</artifactId>--><!--            <version>3.5.0</version>--><!--            <scope>runtime</scope>--><!--            <exclusions>--><!--                <exclusion>--><!--                    <artifactId>maven-core</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-model</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-repository-metadata</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>plexus-classworlds</artifactId>--><!--                    <groupId>org.codehaus.plexus</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>jsr250-api</artifactId>--><!--                    <groupId>javax.annotation</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-provider</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>org.eclipse.sisu.plexus</artifactId>--><!--                    <groupId>org.eclipse.sisu</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-api</artifactId>--><!--                    <groupId>org.apache.maven.resolver</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-impl</artifactId>--><!--                    <groupId>org.apache.maven.resolver</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-spi</artifactId>--><!--                    <groupId>org.apache.maven.resolver</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-util</artifactId>--><!--                    <groupId>org.apache.maven.resolver</groupId>--><!--                </exclusion>--><!--            </exclusions>--><!--        </dependency>-->
复制代码


若不注释,会报错:



org.codehaus.plexus.component.repository.exception.ComponentLifecycleException: Error constructing component role: 'org.apache.maven.repository.RepositorySystem', implementation: 'org.apache.maven.repository.legacy.LegacyRepositorySystem', role hint: 'default'
复制代码


  1. presto-main/etc/config.properties


删除plugin.bundles中 hive 和 oracle 插件:


(在 win 中运行 hive 和 oracal 需要别的插件,暂且用不到,先屏蔽掉。后期有时间解决这个问题)。


- ../presto-hive-hadoop2/pom.xml,\- ../hetu-oracle/pom.xml, \
复制代码


  1. presto-main/etc/catalog/

  2. hive 及 oracle 需要在 windows 上安装相关程序的 windows 版本才能使用,这里直接删除删除 hive 及 oracle 的配置文件


   # 在GitBash中   cd presto-main/etc/catalog/   mv hive.properties hive.properties.bak   mv oracle.properties oracle.properties.bak
复制代码

2.2 编译构建

 mvn clean package -DskipTests
复制代码


这里提供另外一种编译构建的方法,如果遇到如下问题:


问题: 打包时候出现 check 错误还有其他检查错误。并且 mvn clean install -DskipTests 并不能跳过 check,需要在 hetu-core 的 pom 的 properties 里面增加


<air.check.skip-extended>true</air.check.skip-extended>
复制代码


然后再执行:


mvn clean install -Dcheckstyle.skip=true -DskipTests  
复制代码


编译结果:


(三)运行

3.1 运行前准备

1)打开 idea


2)Crtl+Alt+S 进入设置页面(file-settings)


  • Build,Excution,Deployment > Complier > JavaComplier

  • 取消勾选 Use ‘–release’ option for corss-compilation

  • 设置 project bytecode version 为 8



  1. 运行参数设置


run->edit confurations


Main class :-ea -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -Xmx2G -Dconfig=etc/config.properties -Dlog.levels-file=etc/log.properties -Duser.home=D:\document\Maven
Working directory: $MODULE_DIR$
Use classpath of module: presto-main
注意-Duser.home=D:/Marven是maven仓库.m2文件夹的父目录,且最后两级目录名必须是/.m2/repositor
复制代码


-Duser.home=D:\document\Maven未添加这一项的,会出现如下错误:


Caused by: org.apache.maven.project.ProjectBuildingException: 1 problem was encountered while building the effective model for io.hetu.core:presto-resource-group-managers:1.2.0-SNAPSHOT[FATAL] Non-resolvable parent POM for io.hetu.core:presto-root:1.2.0-SNAPSHOT: Could not transfer artifact io.airlift:airbase:pom:97 from/to central (http://repo.maven.apache.org/maven2): connection timed out to http://repo.maven.apache.org/maven2/io/airlift/airbase/97/airbase-97.pom and 'parent.relativePath' points at wrong local POM @ io.hetu.core:presto-root:1.2.0-SNAPSHOT, D:\document\hetu-core\pom.xml, line 6, column 13 for project io.hetu.core:presto-resource-group-managers:1.2.0-SNAPSHOT at D:\document\hetu-core\presto-main\..\presto-resource-group-managers\pom.xml
复制代码



4)presto-main\etc\config.properties


添加:


hetu.queryeditor-ui.allow-insecure-over-http=true
复制代码


添加原因是:不添加会报 http 不安全的错误:


3.2 运行结果

点击 IDEA 上的运行,然后在浏览器中输入http://localhost:8080/



(四)进入 openLooKeng

# 进入源码根目录cd hetu-core# 运行cli客户端连接OpenLooKengjava -jar presto-cli/target/hetu-cli-*-executable.jar --server localhost:8080SHOW CATALOGS;SHOW SCHEMAS FROM jmx;use jmx.current;show tables;
复制代码



图形化界面查询正常:


其余问题解决方法:

问题 1:


Failed to execute goal org.skife.maven:really-executable-jar-maven-plugin:1.0.5:really-executable-jar (default) on project presto-benchmark-driver: FAILURE!
复制代码


直接注掉所有的依赖引用。涉及到的模块比较多,因此就不一一截图了。搜下,引用到的都注掉。


问题 2:


(imports) UnusedImports: 无用导入 - javax.management.MBeanServer 。
复制代码


进入指定的类,将这个 import 删除


问题 3:


遇到一些类无法加载的,重新 reload 一下 maven



问题 4:


Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (default) on project hetu-state-store: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed.
[WARNING] Rule 2: org.apache.maven.plugins.enforcer.BanDuplicatePomDependencyVersions failed with message:Found 1 duplicate dependency declaration in this project: - dependencies.dependency[com.hazelcast:hazelcast:jar] ( 2 times )
复制代码


重复定义的配置 duplicate dependency,找到直接删除。


问题 5:


1)org.codehaus.plexus.component.repository.exception.ComponentLifecycleException: Error constructing component role: 'org.apache.maven.repository.RepositorySystem', implementation: 'org.apache.maven.repository.legacy.LegacyRepositorySystem', role hint: 'default'
2)Error loading pom......
复制代码



通过定位:


line356 pomFile ..\presto-resource-group-managers\pom.xml         PlexusContainer container = container();
复制代码




无法加载一些 jar 包:


修改方法:


presto-main/pom.xml


注释掉一下文件:


<!--        <dependency>--><!--            <groupId>org.apache.maven</groupId>--><!--            <artifactId>maven-compat</artifactId>--><!--            <version>3.5.0</version>--><!--            <scope>runtime</scope>--><!--            <exclusions>--><!--                <exclusion>--><!--                    <artifactId>maven-core</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-model</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-repository-metadata</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>plexus-classworlds</artifactId>--><!--                    <groupId>org.codehaus.plexus</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>jsr250-api</artifactId>--><!--                    <groupId>javax.annotation</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-provider</artifactId>--><!--                    <groupId>org.apache.maven</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>org.eclipse.sisu.plexus</artifactId>--><!--                    <groupId>org.eclipse.sisu</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-api</artifactId>--><!--                    <groupId>org.apache.maven.resolver</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-impl</artifactId>--><!--                    <groupId>org.apache.maven.resolver</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-spi</artifactId>--><!--                    <groupId>org.apache.maven.resolver</groupId>--><!--                </exclusion>--><!--                <exclusion>--><!--                    <artifactId>maven-resolver-util</artifactId>--><!--                    <groupId>org.apache.maven.resolver</groupId>--><!--                </exclusion>--><!--            </exclusions>--><!--        </dependency>-->
复制代码


参考资料:


https://blog.csdn.net/ren88320036/article/details/106916338


本文转载请联系 openLooKeng 小助手


发布于: 刚刚阅读数: 2
用户头像

openLooKeng

关注

愿景:让大数据更简单 2021.04.14 加入

openLooKeng是一款高效的数据虚拟化引擎,提供统一SQL接口,具备跨数据源/数据中心分析能力,致力于为用户提供极简的数据分析体验。社区官网:https://openlookeng.io

评论

发布
暂无评论
超详细攻略!手把手教你如何在windows下搭建openLooKeng开发环境