写在前面: 如果”空气净化器(Airpal)”出现诸如不能查询列信息、打开主页空白等问题,主要问题就是它本身,而不是Presto。本人尝试过Presto 0.145,0.175,0.179三个版本搭配没有版本号的 Airpal(坑货),问题都在于“空气净化器”,至今已有一年它没有更新过了,相反,Presto是个版本帝。
git clone https://github.com/airbnb/airpal.git
(建议)下载Node:
wget https://nodejs.org/dist/v6.10.3/node-v6.10.3-linux-x64.tar.xz
Node安装目录 : /opt/node/
# Node
export NODE="/opt/node/bin/"
export PATH=$PATH:$NODE
export NODE_LIB=$NODE/lib
export NODE_ENV='development' # 预防构建成功并启动,访问主页是发现是空白页面
wget https://downloads.gradle.org/distributions/gradle-2.2.1-all.zip
cp -p gradle-2.2.1-all.zip /home/hadoop/.gradle/wrapper/dists/gradle-2.2.1-all/c64ydeuardnfqctvr1gm30w53
./gradlew -Dairpal.prestoVersion=0.175 clean shadowJar
注: /home/hadoop/.gradle/wrapper/dists/gradle-2.2.1-all/c64ydeuardnfqctvr1gm30w53 该目录是提速关键
新手注意:这里的目录中的用户名应该是你自己的。使用Gradle构建工具构建后台java代码和基于Node.js构建前端JS代码。
—————————————————— 有Node(当使用本地Node出现编译不过时候,尝试“没有Node”情况的命令):
如果你本机有安装node.js和npm,可以使用本地安装的node.js来构建:
./gradlew clean shadowJar -Dairpal.useLocalNode
—————————————————— 没有Node:————————————————————————
如果本地没有安装,运行如下命令行,可以自动下载node.js和npm:
./gradlew clean shadowJar
你还可以指定特定的presto版本:
./gradlew -Dairpal.prestoVersion=0.175 clean shadowJar
此处有坑:
为Airpal创建一个数据库,建议就叫airpal
需要配置一个reference.yml 配置文件,可以直接copy目录里面的示例配置文件。
```
mv reference.example.yml reference.yml
vim reference.yml
```
```
# HTTP-specific options.
# 最好查询设置的端口是否被占用。
server:
applicationConnectors:
- type: http
port: 8081
idleTimeout: 10 seconds
adminConnectors:
- type: http
port: 8082
shiro:
iniConfigs: ["classpath:shiro_allow_all.ini"]
dataSourceFactory:
driverClass: com.mysql.jdbc.Driver
user: airpal
password: passwd
url: jdbc:mysql://localhost:3306/airpal
flywayFactory:
locations: ["classpath:db.migration.common", "classpath:db.migration.mysql"]
# The URL to the Presto coordinator.
prestoCoordinator: http://prestoCoor:9098
```
当reference.yml配置了正确的mysql信息后,我们要初始化之前创建的airpal数据库。
java -Duser.timezone=UTC -cp build/libs/airpal-*-all.jar com.airbnb.airpal.AirpalApplication db migrate reference.yml
直接启动Airpal:
java -server -Duser.timezone=UTC -cp build/libs/airpal-*-all.jar com.airbnb.airpal.AirpalApplication server reference.yml
这里可以将命令直接写成脚本,省去每次复制这串又臭又长的命令。
echo "java -server -Duser.timezone=UTC -cp build/libs/airpal-*-all.jar com.airbnb.airpal.AirpalApplication server reference.yml" > start-airpal.sh && chmod 744 start-airpal.sh
根据reference.yml配置的端口号即可访问,如果是使用的默认配置,则访问:http://ip:8081
当然,你在部署的时候可以修改端口号。
缺少g++
解决: yum install -y gcc-c++
无效的源 java 1.8
解决: 使用本地安装的node.js来构建:
./gradlew clean shadowJar -Dairpal.useLocalNode
/opt/node/lib/node_modules/
解决: 少见的问题:
让其自动下载node.js和npm,补全缺少的 *类modules
$ ./gradlew clean shadowJar
如没编译成功,继续下一步:
使用本地安装的node.js来构建:
$ ./gradlew clean shadowJar -Dairpal.useLocalNode
用本地 node 安装:
Failed at the contextify@0.1.15 install script ‘node-gyp rebuild’.
参考: http://blog.csdn.net/salmonellavaccine/article/details/51573834
npm install node-gyp-install && /opt/node/lib/node_modules/node-gyp/bin/node-gyp.js
Table.java:80: 错误: 不兼容的类型: ConnectorId无法转换为String
使用使用本地 Node 安装;
指定明确的版本号后,编译失败。
编译成功后,打开WEB-UI 主页是一片空白。
WEB-UI :
查询表时候:
INFO [2017-06-22 08:25:45,217] com.airbnb.shiro.filter.AllowAllFilter: onAccessDenied called
INFO [2017-06-22 08:25:45,217] com.airbnb.shiro.filter.AllowAllFilter: createToken called
WARN [2017-06-22 08:25:45,218] com.airbnb.shiro.SessionListenerLogger: Saw START of Session: [org.apache.shiro.session.mgt.SimpleSession,id=f56ef730-7999-46fe-aebc-99043fe0f499]
10.0.10.153 - - [22/六月/2017:08:25:45 +0000] “PUT /api/execute HTTP/1.1” 200 47 “http://10.0.10.82:9095/app” “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0” 10
选择表的时候:
ERROR [2017-06-22 08:28:13,837] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: abe14b70438bb2ea
Causing: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean