🐰
WSL2でTrino(旧Presto)を動かす
の続き。
WSL2と書きましたがWSL2というよりLinuxの話かもしれません…
試した環境
- Windows10
- WSL2
- Ubuntu 20.0.4
- Apache Bigtop 3.1.0
前提
- Hiveをインストール・設定済み
- OpenJDK 11をインストール済み(
sudo apt-get install openjdk-11-jdk
)
ダウンロード
最新は391なのですが、390からはJava 17以上必須(かつ自分の環境にインストール済みなのはJava 11)なので389をインストールします。
wget https://repo1.maven.org/maven2/io/trino/trino-server/389/trino-server-389.tar.gz
tar xzf trino-server-389.tar.gz
cd trino-server-389
# ついでにクライアントもインストールしておきます
wget https://repo1.maven.org/maven2/io/trino/trino-cli/389/trino-cli-389-executable.jar
設定
- config.properties
- jvm.config
- log.properties
- node.properties
- catalog/
を解答したディレクトリ(trino-server-389
)のetc/下に作ります。
# 設定ファイルを置くディレクトリと、データを置くディレクトリを作ります
mkdir -p etc/catalog data/
# 適当なエディタで設定ファイルを記載します
emacs etc/config.properties etc/jvm.config etc/log.properties etc/node.properties etc/catalog/hive.properties
config.properties。公式ドキュメントでは三つ例(coordinato, worker, 両方同じマシン)がありますが、今回は両方同じマシンの設定です(include-coordinator=True)。
coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
discovery.uri=http://localhost:8080
jvm.config
cat etc/jvm.config
-server
-Xmx16G
-XX:InitialRAMPercentage=80
-XX:MaxRAMPercentage=80
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
-XX:+UnlockDiagnosticVMOptions
-XX:+UseAESCTRIntrinsics
log.properties
io.trino=INFO
node.properties
node.environment=dev
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
# ここのディレクトリは適当に変えてください
node.data-dir=/home/notrogue/project/bigtop/trino-server-389/data
hive.properties
connector.name=hive
hive.metastore.uri=thrift://127.0.0.1:9083
起動
- Hive Metastore(thrift)
- Trino(CoordinatorとWorker)
を起動します。
Hive
なお、メタデータデータベースがDerby(デフォルトの設定)の場合は、hiveserver2を停止しておく必要があります。
hive --service metastore
Trino
スクリプトで起動するだけです。
./bin/launcher run
確認
クライアントを起動します。
java -jar trino-cli-389-executable.jar
以前にHiveで作ったテーブルをSELECTしてみます。
trino> SELECT * FROM hive.default.tbl_a;
col_a
-------
hoge
hoge
(2 rows)
Query 20220731_104122_00000_7k7ph, FINISHED, 1 node
よさそうです。
はまりどころ
- 一台のマシンで起動する時は
node-scheduler.include-coordinator=true
を設定する必要があります。設定しない場合Trino起動時はエラーになりませんが、クエリが実行できません - メタデータデータベースにDerbyを使用、かつ、Hive Metastore起動時に、hiveserver2起動中にMetastoreを起動するとMetastoreの起動に失敗します(からのTrinoからHive Connectorも失敗)
ログ(抜粋)
Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /var/lib/hive/metastore/metastore_db.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.privGetJBMSLockOnDB(Unknown Source)
at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.run(Unknown Source)
Discussion