项目有个需求,需要把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包也是一样的,也同样可以参照上面的方法