首先,感谢和我一起研究出来的同事XC。
我的linux版本号是
公司的写字楼经常喜欢作妖停电,为了保证公司(装逼用)的Hbase伪分布式集群正常开机自启动,决定自己研究下。
首先编写一个启动脚本,例如start.sh放到指定目录下(这里我放到/opt下面)
这是脚本的内容
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
nohup sudo -u hadoop bash /usr/local/hadoop/sbin/start-dfs.sh
nohup sudo -u hadoop bash /usr/local/hbase/bin/start-hbase.sh
sudo -u hadoop bash /usr/local/elasticsearch/bin/elasticsearch -d
exit 0
说明:
1、因为Elasticsearch有后台自启动命令,就没采用nohup命令;
2、sudo -u hadoop 是我当前登录的用户名,加上Elasticsearch不能在root用户下启动,需要切换用户;
3、记得将环境的配置到脚本中,以防万一。
保存好编写的脚本后,记得修改脚本的权限和文件所有者:
sudo chmod 755 /opt
sudo chmod +x /opt/start.sh
sudo chown -R 当前用户名 /opt/start.sh
到此,启动脚本已经编写完毕,可以测试当前脚本能否启动Hadoop、HBase和Elasticsearch
进入/opt目录
./start.sh
可以看到根据当前脚本的命令,所有的服务已经启动了。
接下来,需要修改/etc/rc.local文件
我将文件开头的/bin/sh改为了
/bin/bash
将需要开机运行的脚本添加到exit 0前面保存即可
sh /opt/start.sh
exit 0
坑点:
1、启动Hadoop时,nohup.out中提示Error: JAVA_HOME is not set and could not be found.
这是由于Hadoop未设置JAVA_HOME导致,请在Hadoop安装目录中找到hadoop-env.sh文件,修改其中export JAVA_HOME=${JAVA_HOME}的配置,将“=”后面的值改为当前系统JAVA_HOME的绝对路径
(HBase我在安装时已经配置了hbase-env.sh的JAVA_HOME路径,所以没遇到这个报错,遇到的话可以参考看能否解决)
2、开机运行start.sh脚本后,Elasticsearch进程通过jps命令看到了,但过一会儿就消失了,查看Elasticsearch的启动日志elasticsearch.log时,报错为max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]:
但是我的机器环境中已经修改了/etc/security/limits.conf的最后内容为
如果不是开机运行脚本启动,而是开机后直接运行elasticsearch -d或者刚刚编写的脚本启动时,Elasticsearch均能正常启动,经过查找,在这个博客中找到了答案
Ubuntu18配置elasticsearch服务开机自启踩坑
修改 /etc/systemd/user.conf 及 /etc/systemd/system.conf 中如下面这行的配置项(这将处理图形登录):
DefaultLimitNOFILE=65536
修改后保存即可。
3、运行sudo -u hadoop bash /usr/local/elasticsearch/bin/elasticsearch -d命令时提示:
could not find java; set JAVA_HOME or ensure java is in PATH
但是/etc/profile的JAVA_HOME是正常配置的情况下,请编辑elasticsearch-env文件中代码,配置正确的JAVA_HOME
# now set the path to java
JAVA_HOME=本机jdk路径 #就是在if前配置下本机jdk路径
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="$JAVA_HOME/bin/java"
else
set +e
JAVA=`which java`
set -e
fi
至此,可以重启服务器体验开机启动的快乐了。
希望能帮到有遇到同样问题的你。