1. 問題の説明
1.1 sudo -u presto で起動できない
-
以前のバージョンの Presto を使用している場合は、root ユーザーで次のコマンドを使用して presto ユーザーに切り替え、Presto サービスを開始します。
sudo -u presto /install_dir/bin/launcher start # 或直接restart,包含stop和start操作 sudo -u presto /install_dir/bin/launcher restart
-
Presto バージョン 0.280 をテストする場合は、この方法を使用して Presto サービスを通常どおり開始します
-
簡単な起動の詳細から、サービスは正常に起動し、PrestoServer のプロセス番号は 26113 です。
Not running Started as 26113
-
しかし
jps | grep ”PrestoServer"
、合格すると、対応するプロセスがないことがわかりました。つまり、Presto サービスは実際には正常に開始されていませんでした。 -
同時に、launcher.log にエラー ログの行が見つかりました。
ERROR: [Errno 2] No such file or directory
1.2-v
エラー詳細の取得を追加
-
起動コマンドには、
-v
エラーの詳細を表示するためのオプションが追加され、最終的に次のエラー メッセージが launcher.log に表示されます。ERROR: [Errno 2] No such file or directory Traceback (most recent call last): File "install_path/bin/launcher.py", line 449, in main handle_command(command, o) File "install_path/bin/launcher.py", line 332, in handle_command start(process, options) File "install_path/bin/launcher.py", line 286, in start os.execvpe(args[0], args, env) File "/usr/lib64/python2.7/os.py", line 353, in execvpe _execvpe(file, args, env) File "/usr/lib64/python2.7/os.py", line 380, in _execvpe func(fullname, *argrest) OSError: [Errno 2] No such file or directory
-
java -cp ...
エラー スタックによると、install_path/bin/launcher.py を読み取り、 Presto サービスを開始するコマンドを実行するとエラーが報告される可能性があることが最終的にわかりました。['java', '-cp', 'install_path/lib/*', '-server', '-Xmx45G', '-Xms45G', '-XX:+UseG1GC', '-XX:G1HeapRegionSize=32M', '-XX:+UseGCOverheadLimit', '-XX:+ExplicitGCInvokesConcurrent', '-XX:+ExitOnOutOfMemoryError', '-XX:+PrintGCDetails', '-XX:+PrintGCDateStamps', '-Xloggc:/data/presto/var/log/gc.log', '-XX:+UseGCLogFileRotation', '-XX:NumberOfGCLogFiles=8', '-XX:GCLogFileSize=24M', '-XX:+PrintGCApplicationStoppedTime', '-Dlog.output-file=/data/presto/var/log/server.log', '-Dnode.data-dir=/data/presto', '-Dnode.id=worker-10-102-147-2', '-Dnode.environment=production', '-Dlog.enable-console=false', '-Dlog.levels-file=install_path/etc/log.properties', '-Dconfig=install_path/etc/config.properties', 'com.facebook.presto.server.PrestoServer']
-
同時に、作者は、presto ユーザーに直接切り替えてから Presto サービスを開始すると成功する可能性があることを発見しました。
1.3 本当の原因が見つからない
- 同様の問題がインターネット上で見つかりました: OSError: [Errno 2] No such file or directory #7879、Presto の寄稿者は考えられる理由も挙げています
- ただし、JDK のインストールはシステムの再インストール時にシステムの運用保守と一緒にインストールされるため、JDK のインストールは問題ないと筆者は考えています。
2. トラブルシューティング
2.1 システムの運用と保守についてサポートを求める
- 私は Python にあまり詳しくないので、以前は同じ起動方法でこの問題が発生したことはありませんでした。また、これは新しくインストールされた物理マシンなので、システム運用および保守の同僚に問題のトラブルシューティングを手伝ってもらうように依頼しました。
- システムの運用とメンテナンスを調査した結果、JDK が正しくインストールされていない可能性があり、その結果、 sudo を使用して Presto サービスを開始するときに
java
コマンドが見つからないという結果になりました。 - 最終的に、システムの運用と保守により、次の理由が判明しました。
- 彼らがインストールを支援した JDK サービスは、純粋に JDK の手動インストールをシミュレートするためのものであり、 /usr/bin ディレクトリ内の
java
コマンドに対するソフト リンクは生成されません。 - /usr/bin は /etc/sudoers の secure_path の下にありますが、
java
コマンドは java
/usr/bin にコマンドのソフトリンクがあるため、以前のマシンは sudo -u presto を通じてサービスを開始できます。
- 彼らがインストールを支援した JDK サービスは、純粋に JDK の手動インストールをシミュレートするためのものであり、 /usr/bin ディレクトリ内の
- 具体的な理由の分析については、以前のブログ「Linux で複数の JDK バージョンを管理する方法」を参照してください。
2.2 解決策
- ビッグデータ運用保守独自のJDKスクリプトインストール方法を使用し、JDKバージョンを指定して
yum install
JDK 8をインストールします。 - このインストール方法では、 /usr/bin ディレクトリに、 などのさまざまなコマンドのソフト リンクが自動的に作成され
java
ますjavac
。