[Unit]
Description=hadoop
After=network.target
[Service]
Type=forking
PIDFile=/opt/zookeeper/data/zookeeper_server.pid
ExecStart=/bin/su - hadoop -c "/usr/local/zookeeper/bin/zkServer.sh start"
ExecStop=/bin/su - hadoop -c "/usr/local/zookeeper/bin/zkServer.sh stop"
PrivateTmp=true
[Install]
WantedBy=multi-user.target
====================
节点上的zookeeper.service指定JAVA_HOME的写法:
[Unit]
Description=zookeeper
After=network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
Environment=JAVA_HOME=/usr/local/lib/jdk1.8.0_144
PIDFile=/opt/zookeeper/data/zookeeper_server.pid
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
================
Master hbase.service
[Unit]
Description=hbase
After=network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
Environment=JAVA_HOME=/usr/local/lib/jdk1.8.0_144
#Environment=HBASE_HOME=/opt/hbase-1.2.6
#WorkingDirectory=/opt/hbase-1.2.6
PIDFile=/var/hadoop/pids/hbase-hadoop-master.pid
ExecStart=/opt/hbase-1.2.6/bin/start-hbase.sh
ExecStop=/opt/hbase-1.2.6/bin/stop-hbase.sh
#PrivateTmp=true
[Install]
WantedBy=multi-user.target
==============
Master节点上的hadoop.service:
[Unit]
Description=hadoop
After=network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
Environment=JAVA_HOME=/usr/local/lib/jdk1.8.0_144
Environment=HADOOP_HOME=/usr/local/hadoop
WorkingDirectory=/usr/local/hadoop
PIDFile=/var/hadoop/pids/yarn-hadoop-resourcemanager.pid
PIDFile=/var/hadoop/pids/hadoop-hadoop-secondarynamenode.pid
PIDFile=/var/hadoop/pids/hadoop-hadoop-namenode.pid
ExecStart=/usr/local/hadoop/sbin/start-dfs.sh
ExecStop=/usr/local/hadoop/sbin/stop-dfs.sh
#PrivateTmp=true
[Install]
WantedBy=multi-user.target
因为Master上的hadoop.service已经设定了JAVA_HOME,所以Masters上的zookeeper.service,可以不需要再指定JAVA_HOME,如下:
[Unit]
Description=zookeeper
After=network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
#PIDFile=/opt/zookeeper/data/zookeeper_server.pid
Restart=always
RestartSec=0s
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
ExecReload=/usr/local/zookeeper/bin/zkServer.sh restart
#PrivateTmp=true
[Install]
WantedBy=multi-user.target
==================
master:
3184 Jps
1872 NameNode
2288 ResourceManager
2741 HMaster
2077 SecondaryNameNode
1550 QuorumPeerMain
node:
2450 DataNode
2360 QuorumPeerMain
2568 NodeManager
2747 HRegionServer
3052 Jps
systemd unit文件启动没问题。
其他问题,如果节点的zookeeper.service不指定JAVA_HOME,会启动不了,出现以下错误:
Sep 11 16:23:12 hbase-test systemd[1]: Starting hadoop...
Sep 11 16:23:12 hbase-test zkServer.sh[867]: ZooKeeper JMX enabled by default
Sep 11 16:23:12 hbase-test zkServer.sh[867]: Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Sep 11 16:23:14 hbase-test zkServer.sh[867]: Starting zookeeper ... STARTED
Sep 11 16:23:14 hbase-test systemd[1]: PID 1379 read from file /opt/zookeeper/data/zookeeper_server.pid does not exist or is a zombie.
Sep 11 16:23:14 hbase-test systemd[1]: Failed to start hadoop.
Sep 11 16:23:14 hbase-test systemd[1]: Unit zookeeper.service entered failed state.
Sep 11 16:23:14 hbase-test systemd[1]: zookeeper.service failed.
注意事项,zookeeper通过systemd启动,在jps命令下,不会出现,要使用zkServer.sh status查看,这个原因有可能是privatetmp=true造成,
zookeeper.service节点修改如下:
[Unit]
Description=zookeeper
After=network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
Environment=JAVA_HOME=/usr/local/lib/jdk1.8.0_144
#PIDFile=/opt/zookeeper/data/zookeeper_server.pid
Restart=always
RestartSec=0s
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
ExecReload=/usr/local/zookeeper/bin/zkServer.sh restart
#PrivateTmp=true
[Install]
WantedBy=multi-user.target
=======================
Master zookeeper.service修改如下:
[Unit]
Description=zookeeper
After=network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
#PIDFile=/opt/zookeeper/data/zookeeper_server.pid
Restart=always
RestartSec=0s
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
ExecReload=/usr/local/zookeeper/bin/zkServer.sh restart
#PrivateTmp=true
[Install]
WantedBy=multi-user.target