apache flume_Flume:使用Apache Flume收集客户产品搜索点击数据

apache flume

这篇文章涵盖了使用Apache flume收集客户产品搜索点击并使用hadoop和elasticsearch接收器存储信息。 数据可能包含不同的产品搜索事件,例如基于不同方面的过滤,分类信息,分页信息,以及进一步查看的产品以及某些被客户标记为喜欢的产品。 在以后的文章中,我们将进一步分析数据,以使用相同的信息进行显示和分析。

产品搜索功能

任何电子商务平台都可以为客户提供不同的产品,而搜索功能是其基础之一。 允许用户使用不同的构面/过滤器进行引导导航,或使用自由文本搜索内容,这与任何现有搜索功能无关紧要。

SearchQueryInstruction

考虑类似的情况,客户可以搜索产品,并允许我们使用以下信息来捕获产品搜索行为,

public class SearchQueryInstruction implements Serializable {@JsonIgnoreprivate final String _eventIdSuffix;private String eventId;private String hostedMachineName;private String pageUrl;private Long customerId;private String sessionId;private String queryString;private String sortOrder;private Long pageNumber;private Long totalHits;private Long hitsShown;private final Long createdTimeStampInMillis;private String clickedDocId;private Boolean favourite;@JsonIgnoreprivate Map<String, Set<String>> filters;@JsonProperty(value = "filters")private List<FacetFilter> _filters;public SearchQueryInstruction() {_eventIdSuffix = UUID.randomUUID().toString();createdTimeStampInMillis = new Date().getTime();}......private static class FacetFilter implements Serializable {private String code;private String value;public FacetFilter(String code, String value) {this.code = code;this.value = value;}......}
}

有关更多源信息,请访问SearchQueryInstruction 。 数据以JSON格式序列化,以便能够直接与ElasticSearch结合使用以进一步显示。

示例数据,基于用户点击的点击信息的外观。 在将数据发送到嵌入式水槽代理之前,数据将转换为json格式。

{"eventid":"629e9b5f-ff4a-4168-8664-6c8df8214aa7-1399386809805-24","hostedmachinename":"192.168.182.1330","pageurl":"http://jaibigdata.com/5","customerid":24,"sessionid":"648a011d-570e-48ef-bccc-84129c9fa400","querystring":null,"sortorder":"desc","pagenumber":3,"totalhits":28,"hitsshown":7,"createdtimestampinmillis":1399386809805,"clickeddocid":"41","favourite":null,"eventidsuffix":"629e9b5f-ff4a-4168-8664-6c8df8214aa7","filters":[{"code":"searchfacettype_color_level_2","value":"Blue"},{"code":"searchfacettype_age_level_2","value":"12-18 years"}]}
{"eventid":"648b5cf7-7ca9-4664-915d-23b0d45facc4-1399386809782-298","hostedmachinename":"192.168.182.1333","pageurl":"http://jaibigdata.com/4","customerid":298,"sessionid":"7bf042ea-526a-4633-84cd-55e0984ea2cb","querystring":"queryString48","sortorder":"desc","pagenumber":0,"totalhits":29,"hitsshown":19,"createdtimestampinmillis":1399386809782,"clickeddocid":"9","favourite":null,"eventidsuffix":"648b5cf7-7ca9-4664-915d-23b0d45facc4","filters":[{"code":"searchfacettype_color_level_2","value":"Green"}]}
{"eventid":"74bb7cfe-5f8c-4996-9700-0c387249a134-1399386809799-440","hostedmachinename":"192.168.182.1330","pageurl":"http://jaibigdata.com/1","customerid":440,"sessionid":"940c9a0f-a9b2-4f1d-b114-511ac11bf2bb","querystring":"queryString16","sortorder":"asc","pagenumber":3,"totalhits":5,"hitsshown":32,"createdtimestampinmillis":1399386809799,"clickeddocid":null,"favourite":null,"eventidsuffix":"74bb7cfe-5f8c-4996-9700-0c387249a134","filters":[{"code":"searchfacettype_brand_level_2","value":"Apple"}]}
{"eventid":"9da05913-84b1-4a74-89ed-5b6ec6389cce-1399386809828-143","hostedmachinename":"192.168.182.1332","pageurl":"http://jaibigdata.com/1","customerid":143,"sessionid":"08a4a36f-2535-4b0e-b86a-cf180202829b","querystring":null,"sortorder":"desc","pagenumber":0,"totalhits":21,"hitsshown":34,"createdtimestampinmillis":1399386809828,"clickeddocid":"38","favourite":true,"eventidsuffix":"9da05913-84b1-4a74-89ed-5b6ec6389cce","filters":[{"code":"searchfacettype_color_level_2","value":"Blue"},{"code":"product_price_range","value":"10.0 - 20.0"}]}

阿帕奇水槽

Apache Flume用于收集和聚合数据。 此处,嵌入式Flume代理用于捕获搜索查询指令事件。 根据实际使用情况,

  • 您可以使用嵌入式代理来收集数据
  • 或通过rest api将数据从页面推送到专用于事件收集的后端api服务
  • 或者,您可以使用应用程序日志记录功能来记录所有搜索事件,并在日志文件的末尾收集数据

考虑一个取决于应用程序的场景,多个Web /应用程序服务器将事件数据发送到收集器水槽代理。 如下图所示,搜索点击事件是从多个Web /应用程序服务器和一个收集器/合并器代理收集的,以从所有代理收集数据。 数据基于选择器使用多路复用策略进一步划分,以存储在Hadoop HDFS中,并且还将相关数据定向到例如ElasticSearch。 最近浏览过的商品。

水槽数据流代理接收器

嵌入式Flume代理

嵌入式Flume Agent允许我们在应用程序本身中包含Flume代理,并允许我们收集数据并进一步发送给收集器代理。

private static EmbeddedAgent agent;private void createAgent() {final Map<String, String> properties = new HashMap<String, String>();properties.put("channel.type", "memory");properties.put("channel.capacity", "100000");properties.put("channel.transactionCapacity", "1000");properties.put("sinks", "sink1");properties.put("sink1.type", "avro");properties.put("sink1.hostname", "localhost");properties.put("sink1.port", "44444");properties.put("processor.type", "default");try {agent = new EmbeddedAgent("searchqueryagent");agent.configure(properties);agent.start();} catch (final Exception ex) {LOG.error("Error creating agent!", ex);}}

存储搜索事件数据

Flume提供了多个接收器选项来存储数据以供将来分析。 如图所示,我们将采用将数据存储在Apache Hadoop和ElasticSearch中的方案,以实现最近查看的项目功能。

Hadoop接收器

允许将数据永久存储到HDFS,以便以后对其进行分析以进行分析。
根据传入的事件数据,假设我们要每小时存储一次。 “ / searchevents / 2014/05/15/16”目录将存储16小时内的所有传入事件。

private HDFSEventSink sink;sink = new HDFSEventSink();sink.setName("HDFSEventSink-" + UUID.randomUUID());channel = new MemoryChannel();Map<String, String> channelParamters = new HashMap<>();channelParamters.put("capacity", "100000");channelParamters.put("transactionCapacity", "1000");Context channelContext = new Context(channelParamters);Configurables.configure(channel, channelContext);channel.setName("HDFSEventSinkChannel-" + UUID.randomUUID());Map<String, String> paramters = new HashMap<>();paramters.put("hdfs.type", "hdfs");String hdfsBasePath = hadoopClusterService.getHDFSUri()+ "/searchevents";paramters.put("hdfs.path", hdfsBasePath + "/%Y/%m/%d/%H");paramters.put("hdfs.filePrefix", "searchevents");paramters.put("hdfs.fileType", "DataStream");paramters.put("hdfs.rollInterval", "0");paramters.put("hdfs.rollSize", "0");paramters.put("hdfs.idleTimeout", "1");paramters.put("hdfs.rollCount", "0");paramters.put("hdfs.batchSize", "1000");paramters.put("hdfs.useLocalTimeStamp", "true");Context sinkContext = new Context(paramters);sink.configure(sinkContext);sink.setChannel(channel);sink.start();channel.start();

检查FlumeHDFSSinkServiceImpl.java以获取有关hdfs接收器的详细启动/停止信息。

下面的示例数据存储在hadoop中,

Check:hdfs://localhost.localdomain:54321/searchevents/2014/05/06/16/searchevents.1399386809864
body is:{"eventid":"e8470a00-c869-4a90-89f2-f550522f8f52-1399386809212-72","hostedmachinename":"192.168.182.1334","pageurl":"http://jaibigdata.com/0","customerid":72,"sessionid":"7871a55c-a950-4394-bf5f-d2179a553575","querystring":null,"sortorder":"desc","pagenumber":0,"totalhits":8,"hitsshown":44,"createdtimestampinmillis":1399386809212,"clickeddocid":"23","favourite":null,"eventidsuffix":"e8470a00-c869-4a90-89f2-f550522f8f52","filters":[{"code":"searchfacettype_brand_level_2","value":"Apple"},{"code":"searchfacettype_color_level_2","value":"Blue"}]}
body is:{"eventid":"2a4c1e1b-d2c9-4fe2-b38d-9b7d32feb4e0-1399386809743-61","hostedmachinename":"192.168.182.1330","pageurl":"http://jaibigdata.com/0","customerid":61,"sessionid":"78286f6d-cc1e-489c-85ce-a7de8419d628","querystring":"queryString59","sortorder":"asc","pagenumber":3,"totalhits":32,"hitsshown":9,"createdtimestampinmillis":1399386809743,"clickeddocid":null,"favourite":null,"eventidsuffix":"2a4c1e1b-d2c9-4fe2-b38d-9b7d32feb4e0","filters":[{"code":"searchfacettype_age_level_2","value":"0-12 years"}]}

ElasticSearch接收器

出于查看目的,向最终用户显示最近查看的项目。 ElasticSearch Sink允许自动创建每日最近查看的项目。 该功能可用于显示客户最近查看的项目。
假设您已经有ES实例在localhost / 9310上运行。

private ElasticSearchSink sink;sink = new ElasticSearchSink();sink.setName("ElasticSearchSink-" + UUID.randomUUID());channel = new MemoryChannel();Map<String, String> channelParamters = new HashMap<>();channelParamters.put("capacity", "100000");channelParamters.put("transactionCapacity", "1000");Context channelContext = new Context(channelParamters);Configurables.configure(channel, channelContext);channel.setName("ElasticSearchSinkChannel-" + UUID.randomUUID());Map<String, String> paramters = new HashMap<>();paramters.put(ElasticSearchSinkConstants.HOSTNAMES, "127.0.0.1:9310");String indexNamePrefix = "recentlyviewed";paramters.put(ElasticSearchSinkConstants.INDEX_NAME, indexNamePrefix);paramters.put(ElasticSearchSinkConstants.INDEX_TYPE, "clickevent");paramters.put(ElasticSearchSinkConstants.CLUSTER_NAME,"jai-testclusterName");paramters.put(ElasticSearchSinkConstants.BATCH_SIZE, "10");paramters.put(ElasticSearchSinkConstants.SERIALIZER,ElasticSearchJsonBodyEventSerializer.class.getName());Context sinkContext = new Context(paramters);sink.configure(sinkContext);sink.setChannel(channel);sink.start();channel.start();

检查FlumeESSinkServiceImpl.java以获得启动/停止ElasticSearch接收器的详细信息。

elasticsearch中的样本数据存储为

{timestamp=1399386809743, body={pageurl=http://jaibigdata.com/0, querystring=queryString59, pagenumber=3, hitsshown=9, hostedmachinename=192.168.182.1330, createdtimestampinmillis=1399386809743, sessionid=78286f6d-cc1e-489c-85ce-a7de8419d628, eventid=2a4c1e1b-d2c9-4fe2-b38d-9b7d32feb4e0-1399386809743-61, totalhits=32, clickeddocid=null, customerid=61, sortorder=asc, favourite=null, eventidsuffix=2a4c1e1b-d2c9-4fe2-b38d-9b7d32feb4e0, filters=[{value=0-12 years, code=searchfacettype_age_level_2}]}, eventId=2a4c1e1b-d2c9-4fe2-b38d-9b7d32feb4e0}
{timestamp=1399386809757, body={pageurl=http://jaibigdata.com/1, querystring=null, pagenumber=1, hitsshown=34, hostedmachinename=192.168.182.1330, createdtimestampinmillis=1399386809757, sessionid=e6a3fd51-fe07-4e21-8574-ce5ab8bfbd68, eventid=fe5279b7-0bce-4e2b-ad15-8b94107aa792-1399386809757-134, totalhits=9, clickeddocid=22, customerid=134, sortorder=desc, favourite=null, eventidsuffix=fe5279b7-0bce-4e2b-ad15-8b94107aa792, filters=[{value=Blue, code=searchfacettype_color_level_2}]}, State=VIEWED, eventId=fe5279b7-0bce-4e2b-ad15-8b94107aa792}
{timestamp=1399386809765, body={pageurl=http://jaibigdata.com/0, querystring=null, pagenumber=4, hitsshown=2, hostedmachinename=192.168.182.1331, createdtimestampinmillis=1399386809765, sessionid=29864de8-5708-40ab-a78b-4fae55698b01, eventid=886e9a28-4c8c-4e8c-a866-e86f685ecc54-1399386809765-317, totalhits=2, clickeddocid=null, customerid=317, sortorder=asc, favourite=null, eventidsuffix=886e9a28-4c8c-4e8c-a866-e86f685ecc54, filters=[{value=0-12 years, code=searchfacettype_age_level_2}, {value=0.0 - 10.0, code=product_price_range}]}, eventId=886e9a28-4c8c-4e8c-a866-e86f685ecc54}

ElasticSearchJsonBodyEventSerializer

控制如何在ElasticSearch中建立数据索引。 根据您的策略更新事件Seaalalizer,以查看应如何为数据建立索引。

public class ElasticSearchJsonBodyEventSerializer implements ElasticSearchEventSerializer {@Overridepublic BytesStream getContentBuilder(final Event event) throws IOException {final XContentBuilder builder = jsonBuilder().startObject();appendBody(builder, event);appendHeaders(builder, event);return builder;}......
}

检查ElasticSearchJsonBodyEventSerializer.java以配置序列化器以索引数据。

让我们以Java为例创建Flume源,以在测试用例中处理上述SearchQueryInstruction并存储数据。

带通道选择器的Avro Source

为了进行测试,让我们创建Avro源,以基于水槽多路复用功能将数据重定向到相关的接收器。

//Avro source to start at below port and process incoming data.private AvroSource avroSource;final Map<String, String> properties = new HashMap<String, String>();properties.put("type", "avro");properties.put("bind", "localhost");properties.put("port", "44444");avroSource = new AvroSource();avroSource.setName("AvroSource-" + UUID.randomUUID());Context sourceContext = new Context(properties);avroSource.configure(sourceContext);ChannelSelector selector = new MultiplexingChannelSelector();//Channels from above servicesChannel ESChannel = flumeESSinkService.getChannel();Channel HDFSChannel = flumeHDFSSinkService.getChannel();List<Channel> channels = new ArrayList<>();channels.add(ESChannel);channels.add(HDFSChannel);selector.setChannels(channels);final Map<String, String> selectorProperties = new HashMap<String, String>();selectorProperties.put("type", "multiplexing");selectorProperties.put("header", "State");selectorProperties.put("mapping.VIEWED", HDFSChannel.getName() + " "+ ESChannel.getName());selectorProperties.put("mapping.FAVOURITE", HDFSChannel.getName() + " "+ ESChannel.getName());selectorProperties.put("default", HDFSChannel.getName());Context selectorContext = new Context(selectorProperties);selector.configure(selectorContext);ChannelProcessor cp = new ChannelProcessor(selector);avroSource.setChannelProcessor(cp);avroSource.start();

检查FlumeAgentServiceImpl.java,将数据直接存储到上面配置的接收器,甚至将所有数据记录到日志文件中。

独立Flume / Hadoop / ElasticSearch环境

该应用程序可用于生成SearchQueryInstruction数据,并且您可以使用自己的独立环境进一步处理数据。 如果您已经在运行Flume / Hadoop / ElasticSearch环境,请使用以下设置进一步处理数据。

如果您已经在运行Flume实例,也可以使用以下配置(flume.conf),

# Name the components on this agent
searcheventscollectoragent.sources = eventsavrosource
searcheventscollectoragent.sinks = hdfssink essink
searcheventscollectoragent.channels = hdfschannel eschannel# Bind the source and sink to the channel
searcheventscollectoragent.sources.eventsavrosource.channels = hdfschannel eschannel
searcheventscollectoragent.sinks.hdfssink.channel = hdfschannel
searcheventscollectoragent.sinks.essink.channel = eschannel#Avro source. This is where data will send data to.
searcheventscollectoragent.sources.eventsavrosource.type = avro
searcheventscollectoragent.sources.eventsavrosource.bind = 0.0.0.0
searcheventscollectoragent.sources.eventsavrosource.port = 44444
searcheventscollectoragent.sources.eventsavrosource.selector.type = multiplexing
searcheventscollectoragent.sources.eventsavrosource.selector.header = State
searcheventscollectoragent.sources.eventsavrosource.selector.mapping.VIEWED = hdfschannel eschannel
searcheventscollectoragent.sources.eventsavrosource.selector.mapping.default = hdfschannel# Use a channel which buffers events in memory. This will keep all incoming stuff in memory. You may change this to file etc. in case of too much data coming and memory an issue.
searcheventscollectoragent.channels.hdfschannel.type = memory
searcheventscollectoragent.channels.hdfschannel.capacity = 100000
searcheventscollectoragent.channels.hdfschannel.transactionCapacity = 1000searcheventscollectoragent.channels.eschannel.type = memory
searcheventscollectoragent.channels.eschannel.capacity = 100000
searcheventscollectoragent.channels.eschannel.transactionCapacity = 1000#HDFS sink. Store events directly to hadoop file system.
searcheventscollectoragent.sinks.hdfssink.type = hdfs
searcheventscollectoragent.sinks.hdfssink.hdfs.path = hdfs://localhost.localdomain:54321/searchevents/%Y/%m/%d/%H
searcheventscollectoragent.sinks.hdfssink.hdfs.filePrefix = searchevents
searcheventscollectoragent.sinks.hdfssink.hdfs.fileType = DataStream
searcheventscollectoragent.sinks.hdfssink.hdfs.rollInterval = 0
searcheventscollectoragent.sinks.hdfssink.hdfs.rollSize = 134217728
searcheventscollectoragent.sinks.hdfssink.hdfs.idleTimeout = 60
searcheventscollectoragent.sinks.hdfssink.hdfs.rollCount = 0
searcheventscollectoragent.sinks.hdfssink.hdfs.batchSize = 10
searcheventscollectoragent.sinks.hdfssink.hdfs.useLocalTimeStamp = true#Elastic search
searcheventscollectoragent.sinks.essink.type = elasticsearch
searcheventscollectoragent.sinks.essink.hostNames = 127.0.0.1:9310
searcheventscollectoragent.sinks.essink.indexName = recentlyviewed
searcheventscollectoragent.sinks.essink.indexType = clickevent
searcheventscollectoragent.sinks.essink.clusterName = jai-testclusterName
searcheventscollectoragent.sinks.essink.batchSize = 10
searcheventscollectoragent.sinks.essink.ttl = 5
searcheventscollectoragent.sinks.essink.serializer = org.jai.flume.sinks.elasticsearch.serializer.ElasticSearchJsonBodyEventSerializer

要测试应用程序搜索查询指令在现有hadoop实例上的行为,请分别设置hadoop和elasticsearch实例。 该应用程序使用Cloudera hadoop distribution 5.0进行测试。

在后面的文章中,我们将介绍进一步分析生成的数据,

  • 使用Hive可以查询数据,以查询最重要的客户和产品浏览的次数。
  • 使用ElasticSearch Hadoop为客户最重要的查询和产品视图数据编制索引
  • 使用Pig计算唯一客户总数
  • 使用Oozie计划针对配置单元分区进行协调的作业,并将作业捆绑以将数据索引到ElasticSearch。

翻译自: https://www.javacodegeeks.com/2014/05/flume-gathering-customer-product-search-clicks-data-using-apache-flume.html

apache flume

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何选配合适的百兆或者千兆工业交换机

工业上常常会用到工业交换机&#xff0c;工程商在做小型网络监控方案的时候&#xff0c;经常需要选配合适的百兆工业交换机或千兆工业交换机&#xff0c;但是&#xff0c;到底是配百兆工业交换机还是千兆工业交换机呢&#xff1f;如何计算百兆工业交换机和千兆工业交换机的码率…

使用Selenium自动化测试处理多个浏览器选项卡

使用Selenium进行自动化测试一直是将萌芽的自动化测试人员培养为专业人员的生命线。 硒是开源的&#xff0c;在全球范围内被广泛采用。 结果&#xff0c;您会得到社区的大力支持。 有多种用于不同语言的框架&#xff0c;这些框架提供与Selenium的绑定。 因此&#xff0c;您已经…

三层交换机工作原理介绍

每个网络主机、工作站或者服务器都有自己的IP地址和子网掩码。当主机与服务器进行通信的时候&#xff0c;根据自身的IP地址和子网掩码、以及服务器的IP地址&#xff0c;来确定服务器是否和自己处于相同的网段&#xff1a; 1、如果判定在相同网段内&#xff0c;则直接通过地址解…

三层交换机有什么优势?

三层交换机的技术日益成熟&#xff0c;应用日益广泛&#xff0c;在一定范围内&#xff0c;它比路由器更具优势&#xff0c;但是三层交换机与路由器还是有很大的区别&#xff0c;在局域网中&#xff0c;三层交换机有着明显的优势。 1、子网间的传输带宽可以任意分配。 在传统路…

私有环网协议MR-ring介绍

以太网从诞生到今天已经走过了二十几个念头&#xff0c;伴随着IP的大发展&#xff0c;以太网已经一统江湖&#xff0c;98%的局域网采用以太网标准构建。在这二十多年中&#xff0c;以太网不断推陈出新&#xff0c;在速率、安全、稳定性等各方面均有一系列的标准&#xff0c;而环…

网管型工业交换机如何创建网络冗余

与非网管型工业交换机相比&#xff0c;使用杭州飞畅网管型工业交换机的其中一个好处是其冗余功能。这允许您使用带有额外连接的以太网&#xff0c;因此如果网络上两点之间的一条路径出现故障&#xff0c;则可以使用另一条路径来传递消息。如果一个链路或工业交换机发生故障&…

使用var,Lombok和Fluxtion轻松处理事件

介绍 在本文中&#xff0c;我将结合使用Lombok和Fluxtion这两种产品&#xff0c;以演示工具如何在减少代码编写和交付时间的同时提高代码的可读性。 使用Java 10中的var可以进一步改善这种情况。 产品和var都在构建时使用推断来加速开发。 Fluxtion的精神是最大程度地减少浪费…

网管型工业交换机如何提高网路流量过滤?

虽然一个非网管型工业交换机会从一个设备端过滤出许多数据包&#xff0c;但还是有很多数据包非网管型工业交换机无法处理&#xff0c;而这些数据包又必须从端口传输到所有设备上。当一个设备接收到不是特定给该设备的数据包时&#xff0c;它必须先耗费资源来处理这些信息数据最…

html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例

html5中meter讲解得墨meter耳定律&#xff08;也称为最少知识定律&#xff09;是一种编码原理&#xff0c;它表示模块不应该知道其操作的对象的内部细节。 如果代码取决于特定对象的内部细节&#xff0c;则很有可能一旦该对象的内部发生更改&#xff0c;它就会中断。 由于封装是…

网络交换机的分类介绍

从广义上来看&#xff0c;交换机分为两种&#xff1a;广域网交换机和局域网交换机。广域网交换机主要应用于电信领域&#xff0c;提供通信基础平台。而局域网交换机则应用于局域网络&#xff0c;用于连接终端设备&#xff0c;如PC机及网络打印机等。 按照现在复杂的网络构成方…

网络交换机的作用有哪些?

现如今&#xff0c;随着通信业的发展以及国民经济信息化的推进&#xff0c;网络交换机市场呈稳步上升态势&#xff0c;以太网技术已成为当今最重要的一种局域网组网技术&#xff0c;网络交换机也就成为了最普及的交换机。那么&#xff0c;网络交换机的作用有哪些呢&#xff1f;…

网络交换机功能介绍

交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。目前交换机还具备了一些新的功能&#xff0c;如对VLAN&#xff08;虚拟局域网&#xff09;的支持、对链路汇聚的支持&#xff0c;甚至有的还具有防火墙的功能。 交换机除了能够连接同种类型的网络之外…

HOW-TO:具有MySQL的JEE应用程序中具有集群功能的Quartz Scheduler

Quartz Scheduler是Java世界中最流行的调度库之一。 过去&#xff0c;我主要在Spring应用程序中使用Quartz。 最近&#xff0c;我一直在研究要在云中部署的JBoss 7.1.1上运行的JEE 6应用程序中的调度。 我考虑的一种选择是Quartz Scheduler&#xff0c;因为它提供了与数据库的集…

办公网络对工业交换机的功能要求

如今&#xff0c;随着社会的发展&#xff0c;很多公司对网络的要求越来越高&#xff0c;系统越来越复杂&#xff0c;很多老线路需要改造升级&#xff0c;对工业交换机的要求也越来越高。但是&#xff0c;很多企业并不懂如何改造升级。今天飞畅科技的小编就来为大家详细讲解下公…

工业交换机和工控交换机有什么区别?

众所周知&#xff0c;以太网交换机一般分为&#xff1a;商用(以太网)交换机、工业(以太网)交换机、家用(以太网)交换机&#xff0c;因为我们是专业的工业交换机厂家&#xff0c;在这里着重介绍下工业交换机。 工业交换机一般用在工业生产场合&#xff0c;通常外观和安装形式多…

工业型交换机相比普通交换机有哪些要求?

随着自动化技术逐渐成熟&#xff0c;并伴随工业以太网的应用和大中型工业控制的网络的创建&#xff0c;工业交换机的应用越来越广泛。工业型交换机与一般交换机对比有必须的差异&#xff0c;工业型交换机在整体规划上及其在电子器件的采用上&#xff0c;其抗压强度和可接受性层…

使用eclipse调试ns3配置说明

Tips&#xff1a;安装eclipse时注意选择C开发组件&#xff1b; &#xff08;环境配置参考&#xff1a;https://www.cnblogs.com/zlcxbb/p/3852810.html&#xff09; &#xff08;官方配置介绍&#xff1a;https://www.nsnam.org/wiki/HOWTO_configure_Eclipse_with_ns-3&…

工业以太网交换机特点分析及使用注意事项

在网络发达的今天&#xff0c;交换机被许多需要使用网络的朋友使用&#xff0c;可以实现一个网络多台电脑公用。但是什么是工业以太网交换机&#xff0c;很惯性的思维就是工业用的交换机&#xff0c;但是具体工业以太网交换机性能特点有什么呢&#xff1f;接下来就由杭州飞畅科…

java整数的因式分解_如何在Java中找到整数的质数-因式分解

java整数的因式分解编程课程中的常见家庭作业/任务之一是关于Prime Factorization。 要求您编写一个程序以找到给定整数的素因子 。 一个数字的素数因子是将精确地除以给定数字的所有素数。 例如&#xff0c;素数因子35是7和5&#xff0c;它们本身都是素数&#xff0c;并且精确…

串口服务器的通讯模式

串口服务器&#xff0c;一个为RS-232/485/422到PC/IP之间完成数据转换的具有强大功能的方便快捷的通讯接口转换器。串口服务器通过作为服务器端&#xff0c;提供RS-232/485/422终端串口与TCP/IP网络的数据双向透明传输&#xff0c;提供串口转网络功能&#xff0c;RS-232/485/42…