使用java service wrapper把windows flume做成服务

简介: 使用java service wrapper把windows flume做成服务

项目有个需求,需要把windows版的flume做成AIX、unix、linux一样的服务启动。

网上介绍的方法好多种:

1、commons daemon procrun,这个是apache的一个项目,tomcat就是使用这个做成服务的,缺点:配置麻烦,对bat脚本不熟悉的话,配置起来很难

2、JavaService,这个对单个jar文件做成服务很简单,但是针对flume却不行

3、java service wrapper,配置简单,缺点:不免费

还有其他好多,我没有试。


我这里采用的是第3种,实现很简单:

首先到这里下载它的包wrapper-windows-x86-64-3.5.26-st.zip,最新版本是3.5.26。下载一个64位,注意64位的不兼容32位系统。

解压之后得到如下文件


新建一个文件夹:agent,如D:\agent,里面有bin、conf、lib、logs几个文件夹。

把wrapper-windows-x86-64-3.5.26-st\src\bin里面的*.in文件拷贝到agent\bin目录下,然后重命名把所有后缀.in去掉,变成*.bat;

再把wrapper-windows-x86-64-3.5.26-st\bin里面的wrapper.exe文件也拷贝到agent\bin目录下;

把wrapper-windows-x86-64-3.5.26-st\conf里面的wrapper.conf和wrapper-license.conf拷贝到agent\conf里面;

把wrapper-windows-x86-64-3.5.26-st\lib里面的wrapper.dll和wrapper.jar拷贝到agent\lib里面;

再把flume的所有依赖jar包也放进agent\lib里面;

最后我们来配置wrapper.conf文件:


encoding=UTF-8
#include ../conf/wrapper-license.conf
wrapper.license.debug=TRUE
wrapper.java.command=%JAVA_HOME%/bin/java
wrapper.java.command.loglevel=warn
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../lib/apache-log4j-extras-1.1.jar
wrapper.java.classpath.3=../lib/async-1.4.0.jar
wrapper.java.classpath.4=../lib/asynchbase-1.5.0.jar
wrapper.java.classpath.5=../lib/avro-1.7.3.jar
wrapper.java.classpath.6=../lib/avro-ipc-1.7.3.jar
wrapper.java.classpath.7=../lib/commons-cli-1.2.jar
wrapper.java.classpath.8=../lib/commons-codec-1.8.jar
wrapper.java.classpath.9=../lib/commons-collections-3.2.1.jar
wrapper.java.classpath.10=../lib/commons-daemon.jar
wrapper.java.classpath.11=../lib/commons-dbcp-1.4.jar
wrapper.java.classpath.12=../lib/commons-io-2.1.jar
wrapper.java.classpath.13=../lib/commons-lang-2.5.jar
wrapper.java.classpath.14=../lib/commons-logging-1.1.1.jar
wrapper.java.classpath.15=../lib/commons-pool-1.5.4.jar
wrapper.java.classpath.16=../lib/controller.jar
wrapper.java.classpath.17=../lib/cwlog.jar
wrapper.java.classpath.18=../lib/derby-10.8.2.2.jar
wrapper.java.classpath.19=../lib/et2.jar
wrapper.java.classpath.20=../lib/flume-avro-source-1.5.0.1.jar
wrapper.java.classpath.21=../lib/flume-file-channel-1.5.0.1.jar
wrapper.java.classpath.22=../lib/flume-hdfs-sink-1.5.0.1.jar
wrapper.java.classpath.23=../lib/flume-irc-sink-1.5.0.1.jar
wrapper.java.classpath.24=../lib/flume-jdbc-channel-1.5.0.1.jar
wrapper.java.classpath.25=../lib/flume-jms-source-1.5.0.1.jar
wrapper.java.classpath.26=../lib/flume-kafka-0.2.jar
wrapper.java.classpath.27=../lib/flume-kafka-plugin-0.0.1-SNAPSHOT.jar
wrapper.java.classpath.28=../lib/flume-ng-configuration-1.5.0.1.jar
wrapper.java.classpath.29=../lib/flume-ng-core-1.5.0.1.jar
wrapper.java.classpath.30=../lib/flume-ng-elasticsearch-sink-1.5.0.1.jar
wrapper.java.classpath.31=../lib/flume-ng-embedded-agent-1.5.0.1.jar
wrapper.java.classpath.32=../lib/flume-ng-extends_fat.jar
wrapper.java.classpath.33=../lib/flume-ng-hbase-sink-1.5.0.1.jar
wrapper.java.classpath.34=../lib/flume-ng-log4jappender-1.5.0.1.jar
wrapper.java.classpath.35=../lib/flume-ng-morphline-solr-sink-1.5.0.1.jar
wrapper.java.classpath.36=../lib/flume-ng-node-1.5.0.1.jar
wrapper.java.classpath.37=../lib/flume-ng-sdk-1.5.0.1.jar
wrapper.java.classpath.38=../lib/flume-ng-tailsource-1.4.0.jar
wrapper.java.classpath.39=../lib/flume-scribe-source-1.5.0.1.jar
wrapper.java.classpath.40=../lib/flume-spillable-memory-channel-1.5.0.1.jar
wrapper.java.classpath.41=../lib/flume-thrift-source-1.5.0.1.jar
wrapper.java.classpath.42=../lib/flume-tools-1.5.0.1.jar
wrapper.java.classpath.43=../lib/flume-twitter-source-1.5.0.1.jar
wrapper.java.classpath.44=../lib/gson-2.2.2.jar
wrapper.java.classpath.45=../lib/guava-11.0.2.jar
wrapper.java.classpath.46=../lib/httpclient-4.2.1.jar
wrapper.java.classpath.47=../lib/httpcore-4.2.1.jar
wrapper.java.classpath.48=../lib/irclib-1.10.jar
wrapper.java.classpath.49=../lib/jackson-core-asl-1.9.3.jar
wrapper.java.classpath.50=../lib/jackson-mapper-asl-1.9.3.jar
wrapper.java.classpath.51=../lib/jetty-6.1.26.jar
wrapper.java.classpath.52=../lib/jetty-util-6.1.26.jar
wrapper.java.classpath.53=../lib/joda-time-2.1.jar
wrapper.java.classpath.54=../lib/jsr305-1.3.9.jar
wrapper.java.classpath.55=../lib/kafkaSink.jar
wrapper.java.classpath.56=../lib/kafka_2.9.2-0.8.0-beta1.jar
wrapper.java.classpath.57=../lib/libthrift-0.7.0.jar
wrapper.java.classpath.58=../lib/log4j-1.2.17.jar
wrapper.java.classpath.59=../lib/mapdb-0.9.9.jar
wrapper.java.classpath.60=../lib/metrics-core-2.2.0.jar
wrapper.java.classpath.61=../lib/mina-core-2.0.4.jar
wrapper.java.classpath.62=../lib/netty-3.5.12.Final.jar
wrapper.java.classpath.63=../lib/paranamer-2.3.jar
wrapper.java.classpath.64=../lib/protobuf-java-2.5.0.jar
wrapper.java.classpath.65=../lib/scala-compiler-2.9.2.jar
wrapper.java.classpath.66=../lib/scala-library-2.9.2.jar
wrapper.java.classpath.67=../lib/servlet-api-2.5-20110124.jar
wrapper.java.classpath.68=../lib/slf4j-api-1.6.1.jar
wrapper.java.classpath.69=../lib/slf4j-log4j12-1.6.1.jar
wrapper.java.classpath.70=../lib/snappy-java-1.0.4.1.jar
wrapper.java.classpath.71=../lib/testerService.jar
wrapper.java.classpath.72=../lib/twitter4j-core-3.0.3.jar
wrapper.java.classpath.73=../lib/twitter4j-media-support-3.0.3.jar
wrapper.java.classpath.74=../lib/twitter4j-stream-3.0.3.jar
wrapper.java.classpath.75=../lib/velocity-1.7.jar
wrapper.java.classpath.76=../lib/zookeeper-3.4.5.jar
wrapper.java.library.path.1=../lib
wrapper.app.parameter.1=org.apache.flume.node.Application
wrapper.app.parameter.2=-f ../conf/dirsource.properties
wrapper.app.parameter.3=-n a1
wrapper.logfile=../logs/flume.log
wrapper.ntservice.name=CorewareAgentService
wrapper.ntservice.displayname=CorewareAgentService
wrapper.ntservice.description=CorewareAgentService
wrapper.ntservice.starttype=AUTO_START
wrapper.filter.trigger.1001=Exception in thread "*" java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.1001=TRUE
wrapper.filter.action.1001=RESTART
wrapper.filter.message.1001=The JVM has run out of memory.


注意的是:

一、需要把所有flume的依赖jar包都加到 wrapper.java.classpath,还需要把它自己的wrapper.jar加进去,最好放到第一个,再配置它的wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp(这个是固定的);

二、需要引进他的license文件,否则运行不能运行;

三、wrapper.java.command配置的是java.exe路径;

四、wrapper.app.parameter配置的是flume运行所需要的参数,比如主类:org.apache.flume.node.Application,配置文件、agent名字

五、wrapper.filter.trigger.1001表示如果内存溢出就重新启动


配置完之后运行agent\bin里面的App.bat,测试一下。如果没有问题就可以运行InstallApp-NT.bat来安装服务了。

安装成功之后,不会立即启动,你可以运行StartApp-NT.bat来启动服务。

UninstallApp-NT.bat是删除服务,StopApp-NT.bat是停止服务。


到此介绍结束,大家可以试试。

配置单独的jar包也是一样的,也同样可以参照上面的方法




相关文章
|
15天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
24 1
|
2月前
|
监控 负载均衡 Dubbo
|
1月前
|
Shell
Flume【问题记录 01】【at org.apache.flume.node.Application.main(Application.java:xxx) 类问题整理+其他类型问题总结】【避坑指南】
【2月更文挑战第17天】Flume【问题记录 01】【at org.apache.flume.node.Application.main(Application.java:xxx) 类问题整理+其他类型问题总结】【避坑指南】
47 2
|
1天前
|
JavaScript Java 测试技术
基于Java的家政公司服务平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的家政公司服务平台的设计与实现(源码+lw+部署文档+讲解等)
11 1
|
13天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发
|
26天前
|
安全 小程序 Java
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
16 0
|
1月前
|
SQL Java 程序员
Flume【问题记录 02】【java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument】【避坑指南】
【2月更文挑战第18天】Flume【问题记录 02】【java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgument】【避坑指南】
14 0
|
1月前
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
163 0
|
2月前
使用wrapper把flume做成服务优化篇
使用wrapper把flume做成服务优化篇
|
存储 设计模式 缓存
听说你还不懂 Java 的服务定位器模式(Service Locator Pattern)?(上)
听说你还不懂 Java 的服务定位器模式(Service Locator Pattern)?
163 0
听说你还不懂 Java 的服务定位器模式(Service Locator Pattern)?(上)