Flume-NG配置说明文档V1.0版

Flume-NG配置说明文档V1.0版
Flume-NG配置说明文档V1.0版

Flume-NG配置说明文档

Flume介绍

Flume是Cloudera提供的日志收集系统,后贡献给了Apache。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统,可有效地收集,汇总和来自许多不同来源的大量日志数据到集中的数据存储系统。

Apache的Flume是在Apache软件基金会的顶级项目。目前有两个版本的代码行,0.9.x 版本(也称为Flume-OG Flume original generation)版本以及 1.x的版本(也称为Flume-NG Flume next generation版本)。Flume NG 1.x 是Flume 0.9.x的重构版本,去掉了master、zookeeper、collector以及Web console,只有source、sink、channel,成为一个数据传输工具。

Flume-NG支持多种source、多种channel、多种sink,而且可扩展性好,可以自定义组件,是一个非常优秀的日志传输系统。

FlumeNG数据获取

Flume提供了各种source的实现,包括Avro Source、Exce Source、Spooling Directory Source、NetCat Source、Syslog Source、Syslog TCP Source、Syslog UDP Source、HTTP Source、HDFS Source,etc。

⑴RPC

1、在flume中,Avro客户端使用A VRO RPC机制可以发送一个给定的文件Avro 源:

2、$ bin/flume-ng avro-client -H localhost -p 41414 –F /usr/logs/log.10

3、上面的命令将发送的/ usr/logs/log.10的内容到flume源监听端

⑵Executing commands

1、还有一个exec执行一个给定的命令获得输出的源。一个单一的输出,即“line”。回车('\ R')或换行符('\ N'),或两者一起的文本。

注:Flume不支持tail做为一个源,不过可以通过exec tail。

⑶Network streams

Flume支持以下的机制,从流行的日志流类型读取数据

1、Avro(数据序列化系统)

2、Syslog

3、Netcat(使用TCP或UDP协议的网络连接去读写数据)

Flume部署种类

Flume可以实现多代理、合并、多路复用等多种部署方式。

多代理:

设置一个多层的流,你需要有一个指向下一跳avro源的第一跳的avro 接收器。这将导致第一Flume代理转发事件到下一个Flume代理。例如,如果您定期发送的文件,每个事件(1文件)A VRO客户端使用本地Flume 代理,那么这个当地的代理可以转发到另一个有存储的代理。如下图:

合并:

在日志收集的一个非常普遍的情况是大量生产客户日志的数据发送到一些消费者代理连接到存储子系统。举例来说,从数以百计的Web服务器收集的日志发送到十几代理写入HDFS 集群。

如下图:

多路复用流:

Flume支持从一个源到多个通道。有两种模式的,分别是复制和复用。在复制的情况下,流的事件被发送到所有的配置通道。在复用的情况下,事件被发送到可用的渠道中的一个子集。如下图:

Flume-NG配置

Flume-NG安装简单,使用方便。从网上下载flume压缩包解压,配置其中的配置文件,即可使用。

定义流

Flume事件(event)被定义为一个单位的数据流量有一个字节的有效载荷和一个可选字符串属性。Flume代理是一个承载组件(source—源,sink—接收器或channel—通道)的(JVM)进程,通过事件流从外部源到下一个目的地(跳)。

一个web服务器的产生的事件由Flume源消耗。外部源发送事件发送到Flume中,会带着一个识别的格式。例如: 例如:一个Avro Flume源可以用来接收从Avro clients 或其他flume 代理从Avro link发送事件。当一个Flume 源接收一个事件,他会存储到一个或多个channel 中,这些channel会一直保存着event,直到被Flume sink处理掉,例如JDBC Channel作为一个例子-它使用一个文件系统支持嵌入式数据库,sink从channel中移除事件,同时放入到一个外部的仓库,比如HDFS,或者流转到下一个Flume source 源,source和sink在agent中是以异步运行方式运行事件。

Flume代理配置存储在本地配置文件。这是一个文本文件格式如Java属性文件格式。在相同的配置文件中,可以指定一个或多个代理的配置。配置一个代理需要先单独配置每个组件(source、sink、channel),然后连接在一起,形成数据流。在conf目录下的flume.conf(无此文件则创建)中配置。

在Flume中,最重要的抽象是data flow(数据流),data flow描述了数据从产生,传输、处理并最终写入目标的一条路径。

配置单个代理

举一个例子,配置文件,描述一个单节点的Flume部署。这种配置可以让用户生成的事件和随后输出到控制台。将以下代码输入flume.conf配置文件。

#确定代理上的组件

agent1.sources = source1

agent1.sinks = sink1

agent1.channels = channel1

#配置source

agent1.sources.source1.type= netcat

agent1.sources.source1.bind = localhost

agent1.sources.source1.port = 44444

#配置sink

agent1.sinks.sink1.type= logger

#配置channel(内存类型)

agent1.channels.channel1.type= memory

agent1.channels.channel1.capacity = 1000

agent1.channels.channel1.transactionCapactiy = 100

#将组件连接

agent1.sources.source1.channels = channel1

agent1.sinks.sink1.channel = channel1

由以上代码可知,代理的名称为agent1,sink类型为日志,channel类型为内存,source 为netcat方式,总体流程为:从netcat获取数据,通过内存输出到日志

这个配置定义了一个单一的代理,称为agent1。agent1监听44444端口的数据作为source,通道缓存在内存中事件数据,事件数据记录到控制台和一个接收器上的数据源。配置文件名的各个组成部分,然后介绍了他们的类型和配置参数。一个给定的配置文件可能会定义多个命名的代理人;一个给定的Flume进程启动时传递一个标志,告诉它的具名代理体现。

在flume-ng目录下,结合此配置文件,我们启动Flume按如下参数:

bin/flume-ng agent -f conf/flume.conf -n agent1 –c ./conf -Dflume.root.logger=INFO,console 其中-n指定代理名称,-c指定配置文件目录,-f指定代理的配置文件。

请注意,在完整部署,我们通常会包括一个选项:- CONF=,可用-c代替。目录将包括一个shell脚本flume-env.sh(没有则创建此文件,其内容可参考flume-env.sh.template)和内置的Log4j属性文件。在这个例子中,我们使用一个Java选项强制flume登录到控制台。

我们可以从一个单独的终端,然后telnet端口44444和发送flume事件:

telnet localhost 44444

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

1234

OK

他原来的flume终端输出日志信息的事件。

2013-04-17 14:41:53,499 (lifecycleSupervisor-1-3) [INFO - https://www.360docs.net/doc/f917996327.html,catSource.start(NetcatSource.java:150)] Source starting

2013-04-17 14:41:53,513 (lifecycleSupervisor-1-3) [INFO - https://www.360docs.net/doc/f917996327.html,catSource.start(NetcatSource.java:164)] Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]

2013-04-17 14:42:10,898 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)] Event: { headers:{} body: 31

32 33 34 0D 1234. }

说明你已经成功地配置和部署了一个flume代理!

合并

每个Flume代理均需要对其source、sink、channel配置。source是数据源用以指定数据来源,sink是接收器用以指向数据目标流向,channel是通道用以传输数据。

以下以合并为例,讲述配置过程:

上图中以tongjitest166和tongjitest167作为数据收集代理weblog-agent,tongjitest165作为数据合并代理hdfs-agent,并将数据存入hdfs中。

Flume所有配置文件在conf下,需要自己创建两个文件:flume-env.sh(可参考flume-env.sh.template)和flume.conf,其中后者名称可以随意指定。flume-env.sh主要配置:JA V A_HOME(指向本地java安装目录)、JA V A_OPTS(设置JVM相关运行参数)、FLUME_CLASSPA TH(指向flume配置文件目录),flume.conf配置source、sink、channel的文件。

tongjitest166和tongjitest167配置完全相同(也可以根据需要,配置不同的source端)。

一、weblog-agent代理配置

此代理配置除了配置source、sink、channel以外。因为是多层代理,所以还要有“一个指向下一跳avro源的第一跳的avro 接收器”。

如下,两个weblog-agent的flume.conf配置:

## weblog agent config

####确定sources, sinks和channels组件

weblog-agent.sources = avro-AppSrv-source

weblog-agent.sinks = avro-forward-sink

weblog-agent.channels = jdbc-channel

####定义流

weblog-agent.sources.avro-AppSrv-source.channels = jdbc-channel

weblog-agent.sinks.avro-forward-sink.channel = jdbc-channel

####指向下一跳avro源的第一跳的avro接收器

weblog-agent.sources.avro-forward-sink.type = avro

weblog-agent.sources.avro-forward-sink.hostname = 10.32.21.165

weblog-agent.sources.avro-forward-sink.port = 10000

##配置sink

weblog-agent.sinks.avro-forward-sink.type=avro

weblog-agent.sinks.avro-forward-sink.hostname=10.32.21.165

weblog-agent.sinks.avro-forward-sink.port=10000

###配置channel

weblog-agent.channels.jdbc-channel.type= memory

weblog-agent.channels.jdbc-channel.capacity = 1000

weblog-agent.channels.jdbc-channel.transactionCapactiy = 1000

###配置source

weblog-agent.sources.avro-AppSrv-source.type= exec

https://www.360docs.net/doc/f917996327.html,mand= tail -f /home/hadoop/t.txt

weblog-agent.sources.avro-AppSrv-source.batchSize = 20

source、sink、channel都有多种类型,可以根据需要灵活的进行配置。具体参数配置可参考网络资源。

二、hdfs-agent代理配置

tongjitest165也就是hdfs-agent会将两个weblog-agent的数据进行汇总,并存入hdfs当中。

其配置信息如下:

## hdfs-agent config

##确定sources, sinks和channels组件

hdfs-agent.sources = avro-AppSrv-source

hdfs-agent.sinks = avro-forward-sink

hdfs-agent.channels = jdbc-channel

##定义流

hdfs-agent.sinks.avro-forward-sink.channel = jdbc-channel

hdfs-agent.sinks.file-sink.channel=jdbc-channel

##配置流向hdfs的sink

hdfs-agent.sinks.avro-forward-sink.type=hdfs

hdfs-agent.sinks.avro-forward-sink.hdfs.path= hdfs://10.32.21.165:8020/flume/webdata

hdfs-agent.sinks.avro-forward-sink.hdfs.fileType=DataStream

hdfs-agent.sinks.avro-forward-sink.hdfs.batchSize=1000

hdfs-agent.sinks.avro-forward-sink.hdfs.filePrefix=temp

hdfs-agent.sinks.avro-forward-sink.hdfs.rollCount=2000

##配置channel

hdfs-agent.channels.jdbc-channel.type= memory

hdfs-agent.channels.jdbc-channel.capacity = 1000

hdfs-agent.channels.jdbc-channel.transactionCapactiy = 1000

##配置source(指向weblog-agent流向的端口)

hdfs-agent.sources.avro-AppSrv-source.type = avro

hdfs-agent.sources.avro-AppSrv-source.bind = 10.32.21.165

hdfs-agent.sources.avro-AppSrv-source.port = 10000

三、启动

若是多个代理,需要启动每个代理。

如果当前在flume-ng的根目录下,weblog-agent则需要执行bin/flume-ng agent –n weblog-agent –c ./conf –f conf/flume.conf;hdfs-agent则需要执行bin/flume-ng agent –n hdfs-agent –c ./conf –f conf/flume.conf。

多路复制

当有多个通道,需要将源发送到所有通道时,可以考虑使用复制。将会把源数据复制发送到所有通道。Flume.conf配置信息如下:

## weblog agent config

#List sources, sinks and channels in the agent

weblog-agent.sources = avro-AppSrv-source

weblog-agent.sinks = avro-forward-sink file-sink log-sink

weblog-agent.channels = jdbc-channel file-channel log-channel

#define the flow

weblog-agent.sources.avro-AppSrv-source.channels = jdbc-channel file-channel log-channel weblog-agent.sinks.avro-forward-sink.channel = jdbc-channel

weblog-agent.sinks.file-sink.channel=file-channel

weblog-agent.sinks.log-sink.channel=log-channel

weblog-agent.sources.avro-AppSrv-source.selector.type=replicating

#avro sink properties

weblog-agent.sinks.file-sink.type = file_roll

weblog-agent.sinks.file-sink.sink.directory = /home/hadoop/flume

weblog-agent.sinks.file-sink.sink.rollInterval = 0

weblog-agent.sinks.log-sink.type=logger

weblog-agent.sinks.avro-forward-sink.type=hdfs

weblog-agent.sinks.avro-forward-sink.hdfs.path= hdfs://10.32.21.165:8020/flume/webdata

weblog-agent.sinks.avro-forward-sink.hdfs.fileType=DataStream

weblog-agent.sinks.avro-forward-sink.hdfs.batchSize=20

weblog-agent.sinks.avro-forward-sink.hdfs.filePrefix=temp

weblog-agent.sinks.avro-forward-sink.hdfs.rollCount=50

#configure other pieces

weblog-agent.channels.jdbc-channel.type= memory

weblog-agent.channels.jdbc-channel.capacity = 1000

weblog-agent.channels.jdbc-channel.transactionCapactiy = 1000

weblog-agent.channels.file-channel.type=memory

weblog-agent.channels.file-channel.capacity = 1000

weblog-agent.channels.file-channel.transactionCapactiy = 1000

weblog-agent.channels.log-channel.type=memory

weblog-agent.channels.log-channel.capacity=1000

weblog-agent.channels.log-channel.transactionCapactiy=1000

#读取本地文件/home/hadoop/t.txt

weblog-agent.sources.avro-AppSrv-source.type= exec

https://www.360docs.net/doc/f917996327.html,mand = cat /home/hadoop/t.txt

weblog-agent.sources.avro-AppSrv-source.batchSize = 20

注:使用复制功能需要“.sources..selector.type = replicating”,如果没有这句,则源数据将会只发送到第一个通道,其余通道在flume启动时会报错;如果一个源通过一个通道发往多个sink,则每个sink的内容只是源的一部分数据,综合所有sink数据才会还原源数据。而且即使有上述复制语句但是只有一个通道,数据同样会分散在多个sink中。

启动flume语句:bin/flume-ng agent -f conf/flume.conf -n weblog-agent -c ./conf -Dflume.root.logger=INFO,console

以上配置代码有一个source组件(使用exec源读取本地文件),三个sink组件(一个写入本地文件、一个写入日志文件、一个写入HDFS)和三个channel组件(都是memory),这些个组件均需要单独配置,并通过sources的channels连接在一起。

多路复用

多路复用可以根据设定的信息,进一步分流。

在使用多路复用前得先设定header,而这在从源读数据时设定。而根据header的值选择推送的channel。Flume.conf配置信息如下:

## weblog agent config

#List sources, sinks and channels in the agent

weblog-agent.sources = avro-AppSrv-source

weblog-agent.sinks = avro-forward-sink file-sink log-sink

weblog-agent.channels = jdbc-channel file-channel log-channel

#define the flow

weblog-agent.sources.avro-AppSrv-source.channels = jdbc-channel file-channel log-channel weblog-agent.sinks.avro-forward-sink.channel = jdbc-channel

weblog-agent.sinks.file-sink.channel=file-channel

weblog-agent.sinks.log-sink.channel=log-channel

weblog-agent.sources.avro-AppSrv-source.selector.type=multiplexing

weblog-agent.sources.avro-AppSrv-source.selector.header=state

weblog-agent.sources.avro-AppSrv-source.selector.mapping.CA=jdbc-channel log-channel weblog-agent.sources.avro-AppSrv-source.selector.mapping.NY=file-channel

weblog-agent.sources.avro-AppSrv-source.selector.mapping.AZ=jdbc-channel

weblog-agent.sources.avro-AppSrv-source.selector.default=jdbc-channel

#avro sink properties

weblog-agent.sinks.file-sink.type = FILE_ROLL

weblog-agent.sinks.file-sink.sink.directory = /home/hadoop/flume

weblog-agent.sinks.file-sink.sink.rollInterval = 0

weblog-agent.sinks.log-sink.type=logger

weblog-agent.sinks.avro-forward-sink.type=hdfs

weblog-agent.sinks.avro-forward-sink.hdfs.path= hdfs://10.32.21.165:8020/flume/webdata weblog-agent.sinks.avro-forward-sink.hdfs.fileType=DataStream

weblog-agent.sinks.avro-forward-sink.hdfs.batchSize=20

weblog-agent.sinks.avro-forward-sink.hdfs.filePrefix=temp

weblog-agent.sinks.avro-forward-sink.hdfs.rollCount=50

#configure other pieces

weblog-agent.channels.jdbc-channel.type= memory

weblog-agent.channels.jdbc-channel.capacity = 1000

weblog-agent.channels.jdbc-channel.transactionCapactiy = 1000

weblog-agent.channels.file-channel.type=memory

weblog-agent.channels.file-channel.capacity = 1000

weblog-agent.channels.file-channel.transactionCapactiy = 1000

weblog-agent.channels.log-channel.type=memory

weblog-agent.channels.log-channel.capacity=1000

weblog-agent.channels.log-channel.transactionCapactiy=1000

weblog-agent.sources.avro-AppSrv-source.type= com.source.ExecSource

https://www.360docs.net/doc/f917996327.html,mand = cat /home/hadoop/t.txt

weblog-agent.sources.avro-AppSrv-source.batchSize = 20

com.source.ExecSource是自定义源,此源是源代码中ExecSource类的修改,在run()方法中

eventList.add(EventBuilder.withBody(line.getBytes()))

改为:

eventList.add(EventBuilder.withBody(line.getBytes(),map))

其中map是这样声明的:

Map map=new HashMap();

map.put("state", "NY");

其中"state"对应于selector.header,"NY"对应于mapping.NY,通过这样在从源获取数据时对数据做了封装,成为event,并加入header作为分流标记。当event要推送入channel时,会根据header的值将其推送入相应的channel中。

上例中,通过增加header信息将所有数据标记为“NY”,则数据只会推送入file-channel,最终存入/home/hadoop/flume目录下,而其他channel则没有数据。

Flume拦截器Interceptors

Flume可以修改和删除传输中的数据。Flume可以通过拦截器拦截符合要的event并设置header,而这可能影响到以后汇总时的复用。例如,可以将不同机器收集的数据加上主机名作为header,然后在汇总端可以按照不同的主机名发送到不同的目标去。

举例:多级代理,tongjitest166收集的数据均对其加header为主机名的标记,然后发送到tongjitest165上,然后在复用模式下,将根据header的值选择存储在本地文件还是hdfs中。

tongjitest166中的flume配置文件如下:

weblog-agent.sources = avro-AppSrv-source

weblog-agent.sinks = avro-forward-sink

weblog-agent.channels = jdbc-channel

##define the flow

weblog-agent.sources.avro-AppSrv-source.channels = jdbc-channel

weblog-agent.sinks.avro-forward-sink.channel = jdbc-channel

##avro sink properties

weblog-agent.sources.avro-forward-sink.type = avro

weblog-agent.sources.avro-forward-sink.hostname = 10.32.21.165

weblog-agent.sources.avro-forward-sink.port = 10000

#

weblog-agent.sinks.avro-forward-sink.type=avro

weblog-agent.sinks.avro-forward-sink.hostname=10.32.21.165

weblog-agent.sinks.avro-forward-sink.port=10000

#

weblog-agent.channels.jdbc-channel.type= memory

weblog-agent.channels.jdbc-channel.capacity = 1000

weblog-agent.channels.jdbc-channel.transactionCapactiy = 100

##weblog-agent.sources.avro-AppSrv-source.type= netcat

##weblog-agent.sources.avro-AppSrv-source.bind = localhost

##weblog-agent.sources.avro-AppSrv-source.port = 44444

#指定源

weblog-agent.sources.avro-AppSrv-source.type= exec

https://www.360docs.net/doc/f917996327.html,mand = cat /home/hadoop/t.txt

weblog-agent.sources.avro-AppSrv-source.batchSize = 100

#使用HostInterceptor拦截器

weblog-agent.sources.avro-AppSrv-source.interceptors = i1

weblog-agent.sources.avro-AppSrv-source.interceptors.i1.type= host

#不允许使用IP作为主机名

https://www.360docs.net/doc/f917996327.html,eIP=false

weblog-agent.sources.avro-AppSrv-source.interceptors.i1.preserveExisting = false

#设置event的header

weblog-agent.sources.avro-AppSrv-source.interceptors.i1.hostHeader= hostname

上述配置文件将使用EXEC源读取本地文件,并将主机名作为header,然后使用avro发送给目标机端口。

以下是tongjitest165中的flume配置文件:

hdfs-agent.sources = avro-collection-source

hdfs-agent.sinks = hdfs-sink file-sink

hdfs-agent.channels = mem-channel file-channel

#hdfs-agent.sources.avro-collection-source.channels = mem-channel file-channel

hdfs-agent.sinks.hdfs-sink.channel = mem-channel

hdfs-agent.sinks.file-sink.channel = file-channel

#指定数据源

hdfs-agent.sources.avro-collection-source.type = avro

hdfs-agent.sources.avro-collection-source.bind = 10.32.21.165

hdfs-agent.sources.avro-collection-source.port = 10000

#配置channel

hdfs-agent.channels.mem-channel.type= memory

hdfs-agent.channels.mem-channel.capacity = 1000

hdfs-agent.channels.mem-channel.transactionCapactiy = 100

hdfs-agent.channels.file-channel.type= memory

hdfs-agent.channels.file-channel.capacity = 1000

hdfs-agent.channels.file-channel.transactionCapactiy = 100

#目标是hdfs

hdfs-agent.sinks.hdfs-sink.type=hdfs

hdfs-agent.sinks.hdfs-sink.hdfs.path= hdfs://10.32.21.165:8020/flume/webdata

hdfs-agent.sinks.hdfs-sink.hdfs.fileType=DataStream

hdfs-agent.sinks.hdfs-sink.hdfs.batchSize=20

hdfs-agent.sinks.hdfs-sink.hdfs.filePrefix=temp

hdfs-agent.sinks.hdfs-sink.hdfs.rollCount=5

#目标是写入本地文件

hdfs-agent.sinks.file-sink.type = file_roll

hdfs-agent.sinks.file-sink.sink.directory = /home/hadoop/flume

hdfs-agent.sinks.file-sink.sink.rollInterval = 0

#复用模式

hdfs-agent.sources.avro-collection-source.selector.type = multiplexing

hdfs-agent.sources.avro-collection-source.selector.header=hostname

hdfs-agent.sources.avro-collection-source.selector.mapping.tongjitest166 = file-channel

hdfs-agent.sources.avro-collection-source.selector.default = mem-channel

上述代码说明从指定的avro源不断读取数据然后根据header的内容发往不同的sink端,本例是如果是tongjitest166来的数据则存储在本地文件中,其他则存储于hdfs中。

拦截器的种类有很多,有支持正则表达式的、时间戳的、host、static等种类,可以根据需要自行选择。

Flume Sink Processors

Sink Processor可以实现容错和负载均衡的目的。有Failover Sink Processor、Load balancing Sink Processor、Custom Sink Processor(目前还不支持)。

容错和负载均衡机制是以sinkgroups方式实现,需要有多个sink,在选择机制时在,type 中指定就可以:failover、load_balance。

比如:

a1.sinkgroups = g1

a1.sinkgroups.g1.sinks = k1 k2

a1.sinkgroups.g1.processor.type = failover

a1.sinkgroups.g1.processor.priority.k1 = 5

a1.sinkgroups.g1.processor.priority.k2 = 10

a1.sinkgroups.g1.processor.maxpenalty = 10000

以上是容错的一个例子,通过设置优先级,当出现问题时会根据优先级选择sink。在sinks 中的只要有一个可用就能保证继续正确的运行下去。

Flume自定义业务

Flume可以根据实际需要实现自己的业务或者扩展source和sink。做到这些,都必须实现四个方法:stop()、start()、process()、configure(),其中处理过程主要在process方法中。

可以对其中的一些source和sink做修改:

比如:ExecSource类,发现在273行有读取文件的代码line = reader.readLine(),在此可以对line使用java进行一些操作。然后放入event,转而发送到channel中,等待sink消耗event。

也可在sink端找到从channel中读取event的代码channel.take(),通过event的getBody()方法获取传输的数据(返回的是字符数组),截取数据对其做一些处理后再转换为event,送入sink端。如,在RollingFileSink类中process()方法中的

sinkCounter.incrementEventDrainAttemptCount();语句前加如下代码:

String temp=new String(event.getBody());

temp=temp+"++++++++++";

event.setBody(temp.getBytes());

则在配置flume.conf时,weblog-agent.sinks.file-sink.type = com.source.RollingFileSink,等号后面是自己的类,则写入指定文件的数据的每行后面会有"++++++++++"。

还可以将sink端指向MongDB、cassandra、Kafk等目标,也可以扩展新的source端。

需要注意的是,扩展sink端需要“extends AbstractSink implements Configurable”,而扩展source端需要“extends AbstractSource implements Configurable, PollableSource(或者是EventDrivenSource,)”,再具体实现上述四个方法即可。

sink的start()方法是用来初始化sink并且使其处于可以发送events到下一目标的状态;process()方法是核心的处理方法,负责从channel接受数据并推送数据;stop()方法负责做一些清理工作(比如释放资源);configure()方法用来做配置设置。

Source的start()、stop()、configure()方法和sink的类似,而process()的方负责法检查新数据并以event的形式存入channel中。

例如:

public class barSource extends AbstractSource implements Configurable, EventDrivenSource{ @Override

public void configure(Context context) {

some_Param = context.get("some_param", String.class);

// 加载一些参数

}

@Override

public void start() {

// 初始化

//例如多线程初始化.

}

@Override

public void stop () {

// 停止//例如关闭线程等

}

@Override

public Status process() throws EventDeliveryException {

try { //业务代码

// receive new data

Event e = get_some_data();

// store the event to underlying channels(s)

getChannelProcessor().processEvent(e)

} catch (ChannelException ex) {

return Status.BACKOFF;

}

return Status.READY;

}

使用:将自定义插件打包成jar包,放入flume安装包的lib中,然后在配置文件中的组件类型时,指定实现类(类的完整名称:包名+类名)即可。

可在eclipse下面开发自定义业务,具体做法是将flume中lib下的所有jar包引入项目,然后编写source和sink处理业务。简单一点的做法,可将某个类直接拷贝到项目下,然后对其修改,打包上传到flume下的lib目录中,在配置文件中相应位置指定此类就可以。复杂的就需要自己写类去实现4个方法。

注:所使用flume版本是1.3.0;为了方便实际去体会flume,文档中关于flume的配置代码都是flume.conf的全部内容,复制即可使用,且每个例子都是实际通过,测试可用;flume 包含内容十分丰富,本文档并没有包含所有相关内容,如无需要的内容还请自行查找相关内容。

参考:

[1] https://www.360docs.net/doc/f917996327.html,/chinalgf/article/details/8239138

[2] https://www.360docs.net/doc/f917996327.html,/rzhzhz/article/details/8778266

[3] https://www.360docs.net/doc/f917996327.html,/shuijinglianyi/article/details/8492415

[4] https://www.360docs.net/doc/f917996327.html,/chinalgf/article/details/8568171

[5] https://www.360docs.net/doc/f917996327.html,/rjhym/article/details/8252456

[6] https://www.360docs.net/doc/f917996327.html,/FlumeUserGuide.html

[7 ]https://www.360docs.net/doc/f917996327.html,/FlumeDeveloperGuide.html]

[8] https://www.360docs.net/doc/f917996327.html,/shuijinglianyi/article/details/8492415#

数据方报表系统-使用手册

数据方报表系统 文档编号产品版本密级SHUJUF-2017-02-22V1.0 公开产品名称:数据方报表系统共页 软件使用说明 (V1.0) 文档作者:_____________________ 日期:___/___/___ 说明书校对: _________________ 日期:___/___/___ 产品经理: ___________________ 日期:___/___/___ DDP工作室 版权所有

目录 1系统简介 (3) 1.1数据方报表系统有哪些功能? (3) 1.2使用中遇到问题时的联系方式? (3) 2功能说明 (3) 2.1用户注册 (3) 2.2配置数据源 (5) 2.3创建报表 (7) 2.3.1实时报表 (7) 2.3.2条件报表 (8) 2.3.3参数报表 (9) 2.3.4图形报表 (9) 2.3.5权限管理 (12) 2.3.6报表用户 (13) 2.3.7其他设置 (14) 2.3.8报表设置补充 (14) 2.4报表客户端使用简介 (15)

1系统简介 1.1数据方报表系统有哪些功能? 数据方报表系统是一个完整的BI报表解决方案。可实现报表的制作、用户权限控制,数据同步和数据推送等功能。 实时报表:用户访问报表的时候实时从数据库查询,可设置页面自动刷新 条件报表:默认查询全部数据,可以任意结果字段做为条件查询数据,可设置条件数量参数报表:打开报表时默认不查询,至少输入一个查询条件才能查出结果。通过参数定义哪些字段做为条件,可用作数据分析 图形报表:支持echarts的所有图表,通过代码可制作复杂的图形报表,可制作有一定交互式功能的图表 导出功能:所有表格形式报表均可点击字段名进行排序,可导出Excel和csv文件,可导出百万级数据量 邮件报表:扩展功能中可使用邮件报表,按天或按周定时推送数据(支持hive等大数据环境数据) 数据同步:扩展功能中可使用数据同步功能,将数据查出后同步到相同数据库或不同数据库 其他功能:如有需要,可以定制开发其他功能,系统支持功能扩展 1.2使用中遇到问题时的联系方式? QQ:343196832 邮箱:343196832@https://www.360docs.net/doc/f917996327.html, 我们会在第一时间回复并协助解决问题 2功能说明 2.1用户注册 开始使用前,需要注册一个报表端管理账号 一、进入首页点击注册按钮(网址:https://www.360docs.net/doc/f917996327.html,,如果部署在自己的服务器上,请使用服务器上的实际访问地址)

关于生成AMBA ip core的GRLIB使用笔记2(哥,断奶了)

本文源于哥,断奶了在学习中做的笔记,希望分享后大家一起学习讨论。 2013/5/17 一.GRlib的使用 首先在designs下建立一个工程文件design_one,你可以把你所需要的器件类型design 内的文件复制到这个文件里,例如我要做一个V5的project,那么就可以把leon3-gr-pci-xc5v 这个文件里的文件复制到design_one里面。 然后进入虚拟机,用终端打开design_one文件,执行命令make xgrlib,打开如下界面。 1.红色区域 首先来看Simulation,这个GRlib提供了包括Modelsim、 Nasim(一位台湾人写的加工程序仿真软件)和一些其他公司 提供的仿真工具(我对着些仿真工具也不是太了解,因为只 做过Altera和Xilinx的FPGA,所以只对他们自带的仿真工 具和Modelsim比较了解,而且我们后面的实例只用到 Modelsim。)选择所需要的仿真工具,如果在Linux下安装 了Modelsim的话,在这里可以run Modelsim。如果没有也 没关系,他会在共享的工程文件中生成工程文件,这样你就 可以在Linux外部打开这个project。 其他连个选项也是一样的道理、,但是现在AMBA总线还没有设置参数,所以在这里先不要管它,我只是把第一个界面的选项先介绍一下。

2.蓝色区域 这个区域包括器件类型、项目名称、状态显示。在状态显示里面我们可以看到生成的文件和一些GRlib在做什么操作。 3.紫色区域 prog prom:下载FPGA的prom。 Xconfig:启动配置工具。 Clean:撤销所有设置。 Scripts:产生工程脚本文件。 Distclean:移除所有产生的文件。 Quit:退出程序。 二.Xconfig工具 Xconfig启动配置工具后,我们就可以对工程进行编辑了,如图: 1.synthesis设置 Target technology(目标技术):Xlinx-Virtex为memory and pads选择目标器件,它包含XLINX、Altera的大多数器件。

leon3入门教程(1)

写在最前面的话 2010年年底我开始接触LEON3,花了3个月时间把LEON3源代码大致阅读完,然后参照Gaisler Research 网站上提供的leon3-altera-ep3c25源代码,修改并移植到DE2-70平台上,并作了一些AHB和APB外设的IP核设计,历时近一年,最终完成了我的本科毕业设计。之后因为觉得自己的水平仍不够“FPGA工程师”,觉得LEON3过于复杂,资料太少,学习起来过于疲惫,从而转战NIOS II SOPC和基础数字系统设计,停止对LEON3的进一步学习和研究。这段时间总是会有网友问我一些LEON3的问题,都是基本的问题,比如硬件怎么配置,eclipse怎么使用,IP怎么写。由于自己的确不在做LEON3的研究和开发,连开发环境都没有了,就把以前做的和写的一些材料整理一下,分作四篇博客分享给大家,希望能让初学者少走弯路,快速入门。最后,我自己能力有限,文字水平也有限,如果有什么问题我能帮上大家的我一定不吝啬自己的文字,也希望大家能把LEON3做出点东西。 =================================================================== 摘要: 本系列博客主要简述了如何将简单的LEON3 SOPC系统的配置,并移植到的友晶DE2-70开发板上,并根据AMBA 总线协议设计一个的用户自定义APB IP,并嵌入到这个SOPC系统中。共分为四个部分,第一部分对LEON3一些基本知识进行介绍,以及开发需要使用到的软件和源代码;第二部分介绍Cygwin和GRtools软件的安装和配置说明;第三部分介绍LEON3 SOPC系统构建,并使用Eclipse (LEON3 IDE) LEON3 开发应用程序;最后一部分简单介绍了简单APB IP核(七段数码管的IP)的设计。 四篇博客依次为: (原创)LEON3入门教程(一):什么是LEON3?需要哪些开发工具和软件? (原创)LEON3入门教程(二):Cygwin和GRtools的安装与配置 (原创)LEON3入门教程(三):基于LEON3的SOPC设计:HELLOWORLD和流水灯 (原创)LEON3入门教程(四):基于AMBA APB总线的七段数码管IP核设计 一、总体描述 1 LEON3处理器简介 LEON处理器系列是欧洲航空局的下属的研究所开发的32位的微处理器,应用在航天局的各种ASIC芯片内。目前有LEON2、LEON3系列。LEON系列处理器是一个可配置可综合适用于SoC设计中的微处理器核。LEON3处理器是一个使用SPARC V8(IEEE-1754)指令集的32位RISC处理器,它的源代码由可综合的VHDL代码构成。同时LEON系列处理器的性能也比较理想,可以达到大约0.85MIPS/MHz。更大的好处是LEON处理器是一个公开源代码,遵循GNU LGPL协议。任何人都可以在其网站上免费下载其硬件代码和各种开发软件工具与文档。并在自己的ASIC项目中使用。 LEON3的结构框图如图1所示。

大数据处理平台构架设计说明书

大数据处理平台及可视化架构设计说明书 版本:1.0 变更记录

目录 1 1. 文档介绍 (3) 1.1文档目的 (3) 1.2文档范围 (3) 1.3读者对象 (3) 1.4参考文献 (3) 1.5术语与缩写解释 (3) 2系统概述 (4) 3设计约束 (5) 4设计策略 (6) 5系统总体结构 (7) 5.1大数据集成分析平台系统架构设计 (7) 5.2可视化平台系统架构设计 (11) 6其它 (14) 6.1数据库设计 (14) 6.2系统管理 (14) 6.3日志管理 (14)

1 1. 文档介绍 1.1 文档目的 设计大数据集成分析平台,主要功能是多种数据库及文件数据;访问;采集;解析,清洗,ETL,同时可以编写模型支持后台统计分析算法。 设计数据可视化平台,应用于大数据的可视化和互动操作。 为此,根据“先进实用、稳定可靠”的原则设计本大数据处理平台及可视化平台。 1.2 文档范围 大数据的处理,包括ETL、分析、可视化、使用。 1.3 读者对象 管理人员、开发人员 1.4 参考文献 1.5 术语与缩写解释

2 系统概述 大数据集成分析平台,分为9个层次,主要功能是对多种数据库及网页等数据进行访采集、解析,清洗,整合、ETL,同时编写模型支持后台统计分析算法,提供可信的数据。 设计数据可视化平台 ,分为3个层次,在大数据集成分析平台的基础上实现大实现数据的可视化和互动操作。

3 设计约束 1.系统必须遵循国家软件开发的标准。 2.系统用java开发,采用开源的中间件。 3.系统必须稳定可靠,性能高,满足每天千万次的访问。 4.保证数据的成功抽取、转换、分析,实现高可信和高可用。

系统参数配置说明书

系统参数配置说明书

一、浏览器使用建议 本系统建议使用IE浏览器,若使用IE8浏览器请将浏览器设置为非兼容模式。使用IE8兼容模式上传附件页面会出现如下图所示: 正常界面如下图所示,出现“”按钮可正常使用。 设置步骤如下: 1.打开IE浏览器,点击右上角的“”按钮。如下图所示:

2.将兼容性视图的勾选去掉,如下图所示: 二、下载安装Flash插件 在本系统中上传附件时出现如下界面的情况时,需要下载Flash插件并且安装。 安装成功后重启IE浏览器,上传附件页面出现“”按钮时可正常使用。 三、将“申报系统”设为信任站点(若系统可正常使用,可不进行设置) 1、打开IE浏览器,并在地址栏中输入网址,显示界面如下图所示:

2、点击浏览器的菜单条“工具—〉Internet选项”,其界面如下图所示: 3、选中“安全(标签)—〉受信任的站点—〉站点”,其界面如下图所示:

将输入框中输入“工业产品质量控制和技术评定实验室申报管理系统”的网址(如: https://www.360docs.net/doc/f917996327.html,/lab/),并点击“添加”按钮,该网址进入下面的列表框中,最后点击“确认”按钮。 注意:在输入网址前,应该取消Checkbox的选中状态。 4、设置“受信任站点”的安全级别; 在Internet选项窗体中选择“安全(标签)—〉受信任的站点—〉自定义级别”,出现的界面如下图(右)所示: 请按照下面的要求,对“ActiveX控件和插件”进行安全设置: ActiveX控件自动提示:启用

●对标记为可安全执行脚本的ActiveX控件执行脚本:启用 ●对没有标记为可安全的ActiveX控件进行初始化和脚本运行:启用 ●二进制和脚本行为:启用 ●下载未签名的ActiveX控件:提示 ●下载未签名的ActiveX控件:启用 ●运行ActiveX控件和插件:启用 后面的内容保持现状,不进行调整。 提示:针对“ActiveX控件和插件”,仅对“下载未签名的ActiveX控件”为“提示”,其余全部为“启用”状态。 点击“确认”按钮,会弹出确认对话框,选中“是”,并在“Internet选项”窗体中点击“确认”按钮,则设置立即生效。 至此,信任站点的设置全部完成。 四、设置Word格式附件的打开方式(若系统可正常使用,可不进行设置) 1、打开“资源管理器”或“我的电脑”并在菜单中选择“工具—〉文件夹选项”, 如下图所示:

AMBA总线详细介绍

AMBA总线介绍 AMBA 2.0规范包括四个部分:AHB、ASB、APB和Test Methodology。AHB的相互连接采用了传统的带有主模块和从模块的共享总线,接口与互连功能分离,这对芯片上模块之间的互连具有重要意义。AMBA已不仅是一种总线,更是一种带有接口模块的互连体系。AHB AHB=Advanced High Performance Bus,译作高级高性能总线。如同USB (Universal Serial Bus)一样,也是一种总线接口。 特性: 突发连续传输 分步传输 单周期内主控制器处理 单时钟边沿操作 非三态操作 支持64位,128位总线 AHB主要用于高性能模块(如CPU、高速RAM、Nand Flash DMA和DSP等)之间的连接,如图一所示。 作为SoC的片上系统总线,它包括以下一些特性:单个时钟边沿操作;非三态的实现方式;支持突发传输;支持分段传输;支持多个主控制器;可配置32位~128位总线宽度;支持字节、半字和字的传输。AHB 系统由主模块、从模块和基础结构(Infrastructure)3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。基础结构则由仲裁器(arbiter)、主模块到从模块的多路器、从模块到主模块的多路器、译码器(decoder)、虚拟从模块(dummy Slave)、虚拟主模块(dummy Master)所组成。其互连结构如图二所示

AHB主控制器:主控制器可以通过地址和控制信息,可以进行初始化,读,写操作。在同一时间,总线上只能有一个主控制器。 AHB从设备:从设备通常是指在其地址空间内,响应主控制器发出的读写控制操作的被动设备。通过操作的成功与否反馈给其主控制器,完成数据的传输控制。 AHB仲裁器:仲裁器根据用户的配置,确保在总线上同一时间只有一个主控制器拥有总线控制权限。AHB总线上只能有一个仲裁器。 AHB译码器:译码器解析在总线上传输的地址和控制信息。AHB总线上只能有一个译码器。

grlib说明文档中文版

5GRLIB design concept 5.1introduction GRLIB是一个可重用IP Core的集合,并分成了多个VHDL库。每一个库提供了特定厂商的元件或者一系列共享的功能或接口。在GRLIB设计中使用的数据结构和元件声明都是通过库指定的VHDL包来输出的。 GRLIB是基于AMBA AHB和APB片上总线的,并把该总线用作标准的互联接口。AHB/APB总线的实现是与AMBA-2.0相兼容的,并附加了额外的“sideband”(边带)信号。这些边带信号的有三个用途:automatic address decoding,interrupt steering和device identification(a.k.a plug&play support)。根据AHB/APB 信号的功能,GRLIB的库把这些信号以VHDL records的形式组合在一起。GRLIB AMBA包的源文件在lib/grlib/amba/下。 所有的GRLIB core都使用同样的data structures来声明AMBA接口,这样相互之间的连接就很容易了。GRLIB库还包含了一个AHB bus controller和一个AHB/APB bridge,借助这两个模块,可以很快组装成一个全功能的AHB/APB的系统。 下面的部分将描述AMBA总线是怎么实现的以及怎样用GRLIB来建一个SOC设计。 5.2AMAB AHB on-chip bus 5.2.1General(概述) AMBA Advanced High-performance Bus(AHB)是一个multi-master的总线,可以以high data rate and/or variable latency的形式来互连各单元。图5就是一个概念图。图中连在总线上的单元分为masters(主)和slaves(客),并都受一个全局的总线仲裁器(global bus arbiter)控制。 由于AHB总线是复用的(而不是三态的),更正确的总线与单元互连示图可以参考图6。每一个master驱

ECharts调用笔记

一、三种方式引入文件 1、模块化包引入 require.config({ packages: [ { name: 'echarts', location: '../../src', main: 'echarts' }, { name: 'zrender', location: '../../../zrender/src', // zrender与echarts在同一级目录 main: 'zrender' } ] }); 注:由于echarts依赖底层zrender,你需要同时下载zrender到本地 2、模块化单文件引入(推荐)

... dist(文件夹): 经过合并、压缩的单文件 echarts.js : 这是包含AMD加载器的echarts主文件,需要通过script最先引入 chart(文件夹): echarts-optimizer通过依赖关系分析同时去除与echarts.js的重复模块后为echarts的每一个图表类型单独打包生成一个独立文件,根据应用需求可实现图表类型按需加载 echarts-line.js : 折线图(如需折柱动态类型切换,require时还需要echarts/chart/bar)echarts-bar.js : 柱形图(如需折柱动态类型切换,require时还需要echarts/chart/line)echarts-scatter.js : 散点图 echarts-k.js : K线图 echarts-pie.js : 饼图(如需饼漏斗图动态类型切换,require时还需要echarts/chart/funnel)echarts-radar.js : 雷达图 echarts-map.js : 地图 echarts-force.js : 力导向布局图(如需力导和弦动态类型切换,require时还需要echarts/chart/chord) echarts-chord.js : 和弦图(如需力导和弦动态类型切换,require时还需要echarts/chart/force) echarts-funnel.js : 漏斗图(如需饼漏斗图动态类型切换,require时还需要echarts/chart/pie) echarts-gauge.js : 仪表盘 echarts-eventRiver.js : 事件河流图 source(文件夹): 经过合并,但并没有压缩的单文件,内容同dist,可用于调试 注:动态加载echarts及所需图表然后在回调函数中开始使用(容我罗嗦一句,当你确保同一页面已经加载过echarts,再使用时直接require('echarts').init(dom)就行) 3、标签式单文件引入
...

TI StellarisWare图形库使用指南

TI StellarisWare图形库使用指南 [V1.0] [作者: Richard Ma] [Email: mxschina@https://www.360docs.net/doc/f917996327.html,] 1.前言 (1) 2.基础知识 (2) 2.1.显示驱动层 (Display Driver Layer) (2) 2.1.1.基本功能 (2) 2.1.2.图形输出驱动 (3) 2.1.3.用户输入驱动 (3) 2.2.基本图形层 (Graphics Primitives Layer) (4) 2.3.控件层 (Widget Layer) (4) 3.StellarisWare图形库基本使用 (6) 3.1.开发环境及StellarisWare安装 (6) 3.2.图形库添加与编译 (显示部分) (7) 3.2.1. 建立新项目 (7) 3.2.2. 添加图形库 (8) 3.2.3. 驱动程序初始化 (10) 3.3.图形库添加与编译 (触摸部分) (10) 4.基本图形绘制 (12) 4.1. 绘图上下文 (tContext) (12) 4.2. 颜色设置 (12) 4.3. 绘制基本图形 (13) 4.4. 绘制文字 (14) 4.5. 绘制图片 (16) 4.5.1. 图片表示方式 (16)

TI StellarisWare图形库使用指南 Richard Ma 4.5.2. 图片生成工具 (17) 5.控件使用 (19) 5.1. 控件使用示例代码 (19) 5.2. 控件使用步骤说明 (23) 5.2.1. 配置显示及用户输入 (24) 5.2.2. 创建控件及属性配置 (24) 1)控件名 (25) 2)控件管理–控件树 (25) 3)显示设备对象(pDisplay) (27) 4)位置和尺寸 (27) 5)控件风格(Style)及其它属性 (27) 6)事件响应 (27) 5.2.3.控件添加绘制及管理 (28) 6.各控件功能及属性 (29) 6.1. 画布控件(Canvas) (29) 6.2. 选择/多选框控件(Checkbox) (33) 6.3. 容器控件(Container) (36) 6.4. 图形按钮控件(Image Button) (39) 6.5. 列表框控件(ListBox) (43) 6.6. 按钮控件(Push Button) (46) 6.7. 单选按钮控件(Radio Button) (51) 6.8. 拖滑/进度条控件 (Slider) (54)

(完整版)润乾报表使用手册

报表使用手册 报表使用手册 XX股份有限公司 中国济南

目录 1概述.............................................................................................................................. - 3 - 2安装.............................................................................................................................. - 3 - 2.1准备好安装程序.......................................................................................... - 3 - 2.2安装中的选项.............................................................................................. - 3 - 2.3授权文件配置.............................................................................................. - 4 - 3报表制作...................................................................................................................... - 5 - 3.1报表制作要求.............................................................................................. - 5 - 3.2制作一张报表的步骤.................................................................................. - 5 - 3.3启动报表设计器.......................................................................................... - 6 - 3.4连接数据源.................................................................................................. - 7 - 3.4.1 数据源对话框......................................................................................... - 7 - 3.4.2 编辑数据源............................................................................................. - 7 - 3.4.3 注意事项................................................................................................. - 9 - 3.5设计报表格式.............................................................................................. - 9 - 3.5.1 格式设计................................................................................................. - 9 - 3.5.2 需注意事项........................................................................................... - 10 - 3.6定义参数.................................................................................................... - 10 - 3.6.1 参数的编辑........................................................................................... - 10 - 3.6.2 常用参数举例....................................................................................... - 11 - 3.7定义宏........................................................................................................ - 11 - 3.7.1 宏的编辑............................................................................................... - 11 - 3.7.2 常用宏举例........................................................................................... - 12 - 3.8建立数据集................................................................................................ - 12 - 3.8.1 数据集的编辑....................................................................................... - 12 - 3.8.2 常用数据集举例................................................................................... - 13 - 3.9设置单元格属性........................................................................................ - 14 - 3.9.1 数据集在单元格中应用....................................................................... - 14 - 3.9.2 显示格式............................................................................................... - 14 - 3.9.3 设置预警条件....................................................................................... - 15 - 3.9.4 增加动态背景色................................................................................... - 15 - 3.9.5 按参数隐藏列....................................................................................... - 16 - 3.9.6 主格应用............................................................................................... - 16 - 3.10报表预览.................................................................................................... - 17 - 3.11报表发布.................................................................................................... - 17 - 4报表部署.................................................................................................................... - 18 - 4.1部署位置.................................................................................................... - 18 - 4.2Web中显示................................................................................................ - 18 - 5重要概念.................................................................................................................... - 19 - 5.1数据源........................................................................................................ - 19 - 5.2数据集........................................................................................................ - 19 - 5.3参数............................................................................................................ - 19 - 5.4宏定义........................................................................................................ - 22 -

如意报表开发使用说明

1一,如意报表预览不用加密狗方法 1.1将mr_develop.jar拷贝到第三方包中(文中所使用到的.jar,.dll文件都在该文件同目录下.)1.2把mr_develop.jar路径追加至环境变量classpath,也可在eclipse首选项里设置,如下图: 1.3为保证编译通过,在项目构建路径使用的libriary中可还是原来的mr.jar包,如下图所示

1.4将MRChkLib.dll拷贝至tomcat个目录的bin\下 1.5此时不用加密狗预览报表应该可以,如果不行,把mr_develop.jar包拷贝至tomcat目录的common\lib下,再试一下; 如果出现系统调用服务失败 1 1 B-SYS-000 ·??§°? ??o?? https://www.360docs.net/doc/f917996327.html,ng.UnsatisfiedLinkError: CC at https://www.360docs.net/doc/f917996327.html,(Native Method) at com.ming.OoOO0000000oooO00oo00.OoOooOoOOoOo0OO0o000O.OoOOOOooOoOO0o0O0oO0O(OoOooOoOOoOo0OO0o 000O.java) 是因为 C:\WINDOWS\system32 下没有 MRChkLib.dll 文件 (MRChkLib.dll是加密锁的JAVA接口文件,文件在2.5报表安装目录DogDriver\JavaAPI下可以找到) 我出现了安装了驱动,但安装程序没有字段拷贝这个 MRChkLib.dll 文件到system32 下。 但报表设计,没加密狗不行的。 客户端3.1.0.14 可以访问的。如果有乱码,可能需要改 com\ztesoft\bsn\common\EngineHelper.java 里的engine.setUnicodeOption(3);为engine.setUnicodeOption(1); 网上资料: https://www.360docs.net/doc/f917996327.html,/doyee/blog/item/ad4c4a34a6d60345241f145e.html 1.6为一台新的主机申请licence,报表公司发你的包里含有使用说明。测试,特别是现场工程新手会经常问,告诉他去看使用说明。这不是代码 1.7安装了设计器,用设计器打开报表模板,发现显示空白。解决办法:因为没装报表展示客户端插件,可在设计器安装文件目录里到Ming-WebReportV3\Deployment\Viewer下执行MRVInst.exe安装 1.8保存为Excle时,字符串会尝试转化为数字 现象:使用setString(colname,value) 或者setValue(colname,value),value是字符串格式,当value可以转化为数字时,在导出为excle 时,会转化为数字格式,当数字特别大时会用科学计数法表示。可能会出现问题。例如:被叫号码为17909013768704874 在excle中就会显示成1.79090137687049E16,会把后面两位四舍五入,所以即使调整格式也没有办法得到正确的号码。 解决办法:模板里设置文本框的ExportAsNUmber属性为false (其默认值是true)

嵌入式实验四实验报告文档

2020 嵌入式实验四实验报告文档Contract Template

嵌入式实验四实验报告文档 前言语料:温馨提醒,报告一般是指适用于下级向上级机关汇报工作,反映情况,答复上级机关的询问。按性质的不同,报告可划分为:综合报告和专题报告;按行文的直接目的不同,可将报告划分为:呈报性报告和呈转性报告。体会指的是接触一件事、一篇文章、或者其他什么东西之后,对你接触的事物产生的一些内心的想法和自己的理解 本文内容如下:【下载该文档后使用Word打开】 3.4基于UART的加法器的实现 一、实验目的 学习lm3s9b92的串口通信 学习应用超级终端调试串口 学会应用UART有关的库函数 二、实验设备 计算机、LM3S9B92开发板、USBA型公口转MiniB型5Pin数据线1条 三、实验原理 Stellaris系列ARM的UART具有完全可编程、16C550型串行接口的特性。Stellaris系列ARM含有2至3个UART模块。 该指导书在第一部分的 1.2节中说明,该开发板使用了FT2232芯片实现usb到串口的转换。并设置在芯片的B通道上使用虚拟COM接口(VCP)。虚拟串行端口(VCP)与LM3s9b92上的

UART0模块连接。在安装FTDI驱动程序后,windows会分配一个串行通信端口号到VCP通道,并允许windows应用程序(如超级终端)通过USB与LM3s9b92上的UART0进行通信。利用Windows超级终端调试UART的方法 对于该开发板,使用的是USB虚拟的COM端口,无须使用DB9连接器。因此下面讲解一下如何利用Windows附带的超级终端来调试UART接口。 Windows附件里的“超级终端”是个非常实用的应用程序,可以用来调试电脑的COM串行口,也能很好地支持通过USB虚拟的COM口。以下是超级终端配置COM端口的过程: 四、实验要求 采用超级终端作为外部输入与输出的接口,实现多位数的相加。即通过UART串口分别输入需要相加的多位数A与B,最后把A和B两个多位数相加的过程和结果,回显给用户。具体实现方法:既可以采用轮询的方式也可以应用中断。 五、实验步骤 1、连接实验设备:使用USBminiB线缆的mini端与开发板ICDI口相连,另一端接到PC机的USB插口上。 2、根据实验要求编写、调试、运行程序。并要求在代码上附上相关的注释。 #include #include"inc/hw_ints.h" #include"inc/hw_memmap.h"

需求分析说明书模板+范例+非常详细

需求分析说明书实例 1.引言 1.1编写目的 在完成了针对《档案管理系统》软件市场的前期调查,同时与多位软件使用者进行了全面深入地探讨和分析的基础上,提出了这份软件需求规格说明书。 此需求规格说明书对《档案管理系统》软件做了全面细致的用户需求分析,明确所要开发的软件应具有的功能、性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。本说明书的预期读者为客户、业务或需求分析人员、测试人员、用户文档编写者、项目管理人员。 1.2项目背景 由于文件多,种类多,文件创建者多,创建时间为不定期,要保护好一些公司重要的文件极为不便,同时由于人员的流动,对原有的文件的再现,显得力不从心,有时查找与重新整理文件要浪费许多的人力、物力。而且近年来,由于竞争的激烈程度不断的加深,档案的管理不当会严重到导致公司的面临着亏损甚至破产的局面。于是人们不断地在探索希望能找到解决的方法。 为了解决以上的问题,让企事业单位能够有效的掌握,有效的共享文件资源,保护好文件,及促进档案管理的信息化、规范化和集成化,本人多方听取意见、追加和完善大量实用功能,进而了解文件管理的流程,同时结合各部门、各行业与企业文件管理的方法,开发出一套适合于档案多而复杂的管理系统。 1.3定义、缩写词和符号 需求:用户解决问题或达到目标所需的条件或功能;系统或系统部件要满足合同、标准,规范或其它正式规定文档所需具有的条件或权能。 1.4参考资料 鲁荣江、王立丰:《Visual Basic 项目案例导航》,科学出版社,2002年6月版 陈明:《软件工程》,中央广播电视大学出版社,2002年6月版 段兴:《Visual Basic 6.0 控件实用程序设计100例》,人民邮电出版社,2002年12月 杜春雷、孙会莲:《如何使用Visual basic 6.0中文版》,机械出版社,2000年1月 张曜、张青、李丁:《Visual Basic 函数实用手册》,治金工业出版社,2002年12月 范国平、陈晓鹏:《Access 2000 数据库系统开发实例导航》,人民邮电出版社,2002年12月版 闪四清:《SQL Server 实用简明教程》,清华大学出版社,2003年1月版 2.任务概述 2.1目标 2.1.1开发目标 在当今世界电脑普及的时刻,人们已经习惯用电脑办公,结果自然会产生大量的电子文件,这些文件有宝贵的历史价值,但我们如果将更多的时间花费在寻找这些文件上,即费时又费力。本软件根据此需求进行开发的。

echarts图表与列表文字结合导出word文档

导出word文件需要jar包 Echarts图表可以生成BASE64编码 function inita(hotWords,word,xData,hotWordtwo) { ppend('

'); ({ paths: { 'echarts' : 'js/echarts', 'echarts/chart/line' : 'js/echarts', al('png')); al(); $.ajax({ type:'POST', url:'briefing/exp', al()+"&image2="+$("#image2").val(), beforeSend:function () { changeImg(); }, error:function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); }, success: function (data) { ="<%=basePath%>briefing/expword?date="+encodeURI(date); etAttribute, imageo); ().setAttribute, imaget); return"waihu/generation"; } 后台导出word 先建一个类 package import import import import import import import import import import import import import

相关文档
最新文档