1. Descrição do problema
1.1 Não é possível iniciar via sudo -u presto
-
Ao usar uma versão inferior do Presto, no usuário root, use o seguinte comando para alternar para o usuário presto e iniciar o serviço Presto:
sudo -u presto /install_dir/bin/launcher start # 或直接restart,包含stop和start操作 sudo -u presto /install_dir/bin/launcher restart
-
Ao testar a versão 0.280 do Presto, use este método para iniciar o serviço Presto normalmente
-
A partir dos detalhes de inicialização simples, o serviço é iniciado com sucesso e o número do processo do PrestoServer é 26113
Not running Started as 26113
-
Mas
jps | grep ”PrestoServer"
quando passou, verificou-se que não havia nenhum processo correspondente, ou seja, o serviço Presto realmente não foi iniciado com sucesso -
Ao mesmo tempo, uma linha de log de erros foi encontrada em launcher.log
ERROR: [Errno 2] No such file or directory
1.2 Adicionar -v
obter detalhes do erro
-
No comando de inicialização,
-v
são adicionadas opções para visualizar os detalhes do erro e, finalmente, a seguinte mensagem de erro aparece no 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
-
De acordo com a pilha de erros, leia install_path/bin/launcher.py e, finalmente, descobriu que um erro pode ser relatado ao executar
java -cp ...
o comando para iniciar o serviço 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']
-
Ao mesmo tempo, o autor descobriu que alternar diretamente para o usuário do Presto e iniciar o serviço do Presto pode ser bem-sucedido
1.3 Faltando a causa real
- Embora existam problemas semelhantes encontrados na Internet: OSError: [Errno 2] No such file or directory #7879 , o colaborador do Presto também deu um possível motivo
- Mas o autor acha que não deve haver problema com a instalação do JDK, porque a instalação do JDK é instalada junto com a operação e manutenção do sistema quando o sistema é reinstalado
2. Solução de problemas
2.1 Procure ajuda para operação e manutenção do sistema
- Como não estou muito familiarizado com o Python, o mesmo método de inicialização não encontrou esse problema antes, e esta é uma máquina física recém-instalada, então pedi aos meus colegas de operação e manutenção do sistema para ajudar a solucionar o problema
- Após algumas investigações sobre a operação e manutenção do sistema, eles também suspeitaram que o JDK foi instalado incorretamente, o que resultou na não localização do
java
comando ao usar o sudo para iniciar o serviço Presto - No final, a operação e manutenção do sistema descobriram o motivo:
java
O serviço JDK que eles ajudaram a instalar é puramente para simular a instalação manual do JDK e não irá gerar soft links para comandos no diretório /usr/bin- Embora /usr/bin esteja em secure_path em /etc/sudoers,
java
o comando não está - A máquina anterior pode iniciar o serviço por meio de sudo -u presto porque há
java
um link suave do comando em /usr/bin
- Para análise de motivo específico, você pode consultar o blog anterior: Como gerenciar várias versões do JDK no Linux
2.2 Soluções
- Use o método de instalação de script JDK da própria operação e manutenção de big data, especifique a versão do JDK e
yum install
instale o JDK 8 por - Este método de instalação criará automaticamente soft links para vários comandos no diretório /usr/bin, incluindo
java
,javac
etc.