`
Kevin12
  • 浏览: 238607 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flume push数据到SparkStreaming

阅读更多
上节http://kevin12.iteye.com/blog/2305946将flume的环境搭建好,并测试了flume的故障转移功能,这节编码实现Flume推送数据到Spark Streaming中。
下面的例子我只在master1上配置flume,worker1,worker2不进行配置了。
1.配置
master1上修改配置文件root@master1:/usr/local/flume/apache-flume-1.6.0-bin/conf/flume-conf.properties
#agent1 name
agent1.channels = c1
agent1.sources = r1
agent1.sinks = k1

#set source
agent1.sources.r1.type = spooldir
agent1.sources.r1.spoolDir =/usr/local/flume/tmp/TestDir
agent1.sources.r1.channels = c1
agent1.sources.r1.fileHeader = false
agent1.sources.r1.interceptors = i1
agent1.sources.r1.interceptors.i1.type = timestamp

# set sink to hdfs
#agent1.sinks.k1.type=hdfs
#agent1.sinks.k1.hdfs.path=hdfs://master1:9000/library/flume
#agent1.sinks.k1.hdfs.fileType=DataStream
#agent1.sinks.k1.hdfs.writerFormat=TEXT
#agent1.sinks.k1.hdfs.roolInterval=1
#agent1.sinks.k1.hdfs.filePrefix=%Y-%m-%d
#agent1.sinks.k1.channel=c1

#set sink to Spark Streaming
agent1.sinks.k1.type = avro
agent1.sinks.k1.channel = c1
agent1.sinks.k1.hostname = master1
agent1.sinks.k1.port = 9999

#set channel
agent1.channels.c1.type = file
agent1.channels.c1.checkpointDir=/usr/local/flume/tmp/checkpointDir
agent2.channels.c1.dataDirs=/usr/local/flume/tmp/dataDirs


注意:此时还不能启动flume,如果启动会报错。

2.编写代码
package com.imf.spark.SparkApps.sparkstreaming;

import java.util.Arrays;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.streaming.Durations;
import org.apache.spark.streaming.api.java.JavaDStream;
import org.apache.spark.streaming.api.java.JavaPairDStream;
import org.apache.spark.streaming.api.java.JavaReceiverInputDStream;
import org.apache.spark.streaming.api.java.JavaStreamingContext;
import org.apache.spark.streaming.flume.FlumeUtils;
import org.apache.spark.streaming.flume.SparkFlumeEvent;

import scala.Tuple2;

/**
 * 
 * @Description:Flume推送数据到SparkStreaming例子
 * @Author: lujinyong168
 * @Date: 2016年6月19日 上午11:40:13
 */
public class FlumePushDate2SparkStreaming {

    public static void main(String[] args) {

        SparkConf conf = new SparkConf().setMaster("local[4]").
                setAppName("FlumePushDate2SparkStreaming");

        JavaStreamingContext jsc = new JavaStreamingContext(conf, Durations.seconds(30));

        JavaReceiverInputDStream<SparkFlumeEvent> lines = FlumeUtils.createStream(jsc,"master1", 9999);

        JavaDStream<String> words = lines.flatMap(new FlatMapFunction<SparkFlumeEvent, String>() { //如果是Scala,由于SAM转换,所以可以写成val words = lines.flatMap { line => line.split(" ")}

            private static final long serialVersionUID = 1L;

            @Override
            public Iterable<String> call(SparkFlumeEvent event) throws Exception {
                String line = new String(event.event().getBody().array());
                return Arrays.asList(line.split(" "));
            }
        });

        
        JavaPairDStream<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {

            private static final long serialVersionUID = 1L;

            @Override
            public Tuple2<String, Integer> call(String word) throws Exception {
                return new Tuple2<String, Integer>(word, 1);
            }
        });

        JavaPairDStream<String, Integer> wordsCount = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() { //对相同的Key,进行Value的累计(包括Local和Reducer级别同时Reduce)

            private static final long serialVersionUID = 1L;

            @Override
            public Integer call(Integer v1, Integer v2) throws Exception {
                return v1 + v2;
            }
        });

        wordsCount.print();
        jsc.start();

        jsc.awaitTermination();
        jsc.close();

    }

}


3.pom.xml 配置,见附件

4.编译成可执行的jar
maven没配置的自己去配置。
maven命令:mvn clean package

5.调度脚本
将打好的大架包SparkApps-0.0.1-SNAPSHOT-jar-with-dependencies.jar拷贝到虚拟机的/usr/local/sparkApps/FlumePushDate2SparkStreaming目录中,并编写调度脚本:
/usr/local/spark/spark-1.6.0-bin-hadoop2.6/bin/spark-submit \
--class com.imf.spark.SparkApps.sparkstreaming.FlumePushDate2SparkStreaming \
--master spark://master1:7077 \
/usr/local/sparkApps/FlumePushDate2SparkStreaming/SparkApps-0.0.1-SNAPSHOT-jar-with-dependencies.jar

并启动run.sh脚本,运行spark streaming,再将flume启动起来,命令:
root@master1:/usr/local/flume/apache-flume-1.6.0-bin/conf# flume-ng agent -n agent1 -c conf -f flume-conf.properties -Dflume.root.logger=DEBUG,console


6.测试
创建一个测试文件,内容如下:
root@master1:/usr/local/flume/tmp# cat test_5.log 
Spark Spark Spark
Hadoop Hadoop
Java
Scala Scala

将该文件拷贝到TestDir目录中
root@master1:/usr/local/flume/tmp# cp test_5.log TestDir/


观察flume控制台日志信息如下(截取关键部分):
16/06/19 11:46:33 INFO avro.ReliableSpoolingFileEventReader: Last read took us just up to a file boundary. Rolling to the next file, if there is one.
16/06/19 11:46:33 INFO avro.ReliableSpoolingFileEventReader: Preparing to move file /usr/local/flume/tmp/TestDir/test_5.log to /usr/local/flume/tmp/TestDir/test_5.log.COMPLETED
16/06/19 11:46:50 INFO file.EventQueueBackingStoreFile: Start checkpoint for /usr/local/flume/tmp/checkpointDir/checkpoint, elements to sync = 4
16/06/19 11:46:50 INFO file.EventQueueBackingStoreFile: Updating checkpoint metadata: logWriteOrderID: 1466307980457, queueSize: 0, queueHead: 5
16/06/19 11:46:50 INFO file.Log: Updated checkpoint for file: /root/.flume/file-channel/data/log-4 position: 569 logWriteOrderID: 1466307980457
16/06/19 11:46:50 INFO file.LogFile: Closing RandomReader /root/.flume/file-channel/data/log-1
16/06/19 11:46:50 INFO file.LogFile: Closing RandomReader /root/.flume/file-channel/data/log-2

观察spark streaming控制台,日志信息如下(截取关键部分):
16/06/19 11:46:30 INFO scheduler.JobScheduler: Finished job streaming job 1466307990000 ms.0 from job set of time 1466307990000 ms
16/06/19 11:46:30 INFO scheduler.JobScheduler: Total delay: 0.646 s for time 1466307990000 ms (execution: 0.559 s)
16/06/19 11:46:30 INFO scheduler.ReceivedBlockTracker: Deleting batches ArrayBuffer()
16/06/19 11:46:30 INFO scheduler.InputInfoTracker: remove old batch metadata: 
16/06/19 11:46:36 INFO storage.MemoryStore: Block input-0-1466307996600 stored as bytes in memory (estimated size 352.0 B, free 91.3 KB)
16/06/19 11:46:36 INFO storage.BlockManagerInfo: Added input-0-1466307996600 in memory on localhost:33925 (size: 352.0 B, free: 517.4 MB)
16/06/19 11:46:36 WARN storage.BlockManager: Block input-0-1466307996600 replicated to only 0 peer(s) instead of 1 peers
16/06/19 11:46:36 INFO receiver.BlockGenerator: Pushed block input-0-1466307996600
16/06/19 11:47:00 INFO scheduler.JobScheduler: Starting job streaming job 1466308020000 ms.0 from job set of time 1466308020000 ms
16/06/19 11:47:00 INFO spark.SparkContext: Starting job: print at FlumePushDate2SparkStreaming.java:123
16/06/19 11:47:00 INFO scheduler.JobScheduler: Added jobs for time 1466308020000 ms
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Registering RDD 7 (mapToPair at FlumePushDate2SparkStreaming.java:89)
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Got job 3 (print at FlumePushDate2SparkStreaming.java:123) with 1 output partitions
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Final stage: ResultStage 6 (print at FlumePushDate2SparkStreaming.java:123)
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Parents of final stage: List(ShuffleMapStage 5)
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Missing parents: List(ShuffleMapStage 5)
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Submitting ShuffleMapStage 5 (MapPartitionsRDD[7] at mapToPair at FlumePushDate2SparkStreaming.java:89), which has no missing parents
16/06/19 11:47:00 INFO storage.MemoryStore: Block broadcast_3 stored as values in memory (estimated size 3.4 KB, free 94.8 KB)
16/06/19 11:47:00 INFO storage.MemoryStore: Block broadcast_3_piece0 stored as bytes in memory (estimated size 1983.0 B, free 96.7 KB)
16/06/19 11:47:00 INFO storage.BlockManagerInfo: Added broadcast_3_piece0 in memory on localhost:33925 (size: 1983.0 B, free: 517.4 MB)
16/06/19 11:47:00 INFO spark.SparkContext: Created broadcast 3 from broadcast at DAGScheduler.scala:1006
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Submitting 1 missing tasks from ShuffleMapStage 5 (MapPartitionsRDD[7] at mapToPair at FlumePushDate2SparkStreaming.java:89)
16/06/19 11:47:00 INFO scheduler.TaskSchedulerImpl: Adding task set 5.0 with 1 tasks
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Starting task 0.0 in stage 5.0 (TID 5, localhost, partition 0,NODE_LOCAL, 2100 bytes)
16/06/19 11:47:00 INFO executor.Executor: Running task 0.0 in stage 5.0 (TID 5)
16/06/19 11:47:00 INFO storage.BlockManager: Found block input-0-1466307996600 locally
16/06/19 11:47:00 INFO executor.Executor: Finished task 0.0 in stage 5.0 (TID 5). 1161 bytes result sent to driver
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Finished task 0.0 in stage 5.0 (TID 5) in 87 ms on localhost (1/1)
16/06/19 11:47:00 INFO scheduler.TaskSchedulerImpl: Removed TaskSet 5.0, whose tasks have all completed, from pool 
16/06/19 11:47:00 INFO scheduler.DAGScheduler: ShuffleMapStage 5 (mapToPair at FlumePushDate2SparkStreaming.java:89) finished in 0.077 s
16/06/19 11:47:00 INFO scheduler.DAGScheduler: looking for newly runnable stages
16/06/19 11:47:00 INFO scheduler.DAGScheduler: running: Set(ResultStage 0)
16/06/19 11:47:00 INFO scheduler.DAGScheduler: waiting: Set(ResultStage 6)
16/06/19 11:47:00 INFO scheduler.DAGScheduler: failed: Set()
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Submitting ResultStage 6 (ShuffledRDD[8] at reduceByKey at FlumePushDate2SparkStreaming.java:103), which has no missing parents
16/06/19 11:47:00 INFO storage.MemoryStore: Block broadcast_4 stored as values in memory (estimated size 2.9 KB, free 99.7 KB)
16/06/19 11:47:00 INFO storage.MemoryStore: Block broadcast_4_piece0 stored as bytes in memory (estimated size 1802.0 B, free 101.4 KB)
16/06/19 11:47:00 INFO storage.BlockManagerInfo: Added broadcast_4_piece0 in memory on localhost:33925 (size: 1802.0 B, free: 517.4 MB)
16/06/19 11:47:00 INFO spark.SparkContext: Created broadcast 4 from broadcast at DAGScheduler.scala:1006
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Submitting 1 missing tasks from ResultStage 6 (ShuffledRDD[8] at reduceByKey at FlumePushDate2SparkStreaming.java:103)
16/06/19 11:47:00 INFO scheduler.TaskSchedulerImpl: Adding task set 6.0 with 1 tasks
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Starting task 0.0 in stage 6.0 (TID 6, localhost, partition 0,PROCESS_LOCAL, 1988 bytes)
16/06/19 11:47:00 INFO executor.Executor: Running task 0.0 in stage 6.0 (TID 6)
16/06/19 11:47:00 INFO storage.ShuffleBlockFetcherIterator: Getting 0 non-empty blocks out of 1 blocks
16/06/19 11:47:00 INFO storage.ShuffleBlockFetcherIterator: Started 0 remote fetches in 11 ms
16/06/19 11:47:00 INFO executor.Executor: Finished task 0.0 in stage 6.0 (TID 6). 1161 bytes result sent to driver
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Finished task 0.0 in stage 6.0 (TID 6) in 19 ms on localhost (1/1)
16/06/19 11:47:00 INFO scheduler.TaskSchedulerImpl: Removed TaskSet 6.0, whose tasks have all completed, from pool 
16/06/19 11:47:00 INFO scheduler.DAGScheduler: ResultStage 6 (print at FlumePushDate2SparkStreaming.java:123) finished in 0.010 s
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Job 3 finished: print at FlumePushDate2SparkStreaming.java:123, took 0.229024 s
16/06/19 11:47:00 INFO spark.SparkContext: Starting job: print at FlumePushDate2SparkStreaming.java:123
16/06/19 11:47:00 INFO spark.MapOutputTrackerMaster: Size of output statuses for shuffle 1 is 146 bytes
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Got job 4 (print at FlumePushDate2SparkStreaming.java:123) with 3 output partitions
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Final stage: ResultStage 8 (print at FlumePushDate2SparkStreaming.java:123)
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Parents of final stage: List(ShuffleMapStage 7)
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Missing parents: List()
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Submitting ResultStage 8 (ShuffledRDD[8] at reduceByKey at FlumePushDate2SparkStreaming.java:103), which has no missing parents
16/06/19 11:47:00 INFO storage.MemoryStore: Block broadcast_5 stored as values in memory (estimated size 2.9 KB, free 104.4 KB)
16/06/19 11:47:00 INFO storage.MemoryStore: Block broadcast_5_piece0 stored as bytes in memory (estimated size 1802.0 B, free 106.1 KB)
16/06/19 11:47:00 INFO storage.BlockManagerInfo: Added broadcast_5_piece0 in memory on localhost:33925 (size: 1802.0 B, free: 517.4 MB)
16/06/19 11:47:00 INFO spark.SparkContext: Created broadcast 5 from broadcast at DAGScheduler.scala:1006
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Submitting 3 missing tasks from ResultStage 8 (ShuffledRDD[8] at reduceByKey at FlumePushDate2SparkStreaming.java:103)
16/06/19 11:47:00 INFO scheduler.TaskSchedulerImpl: Adding task set 8.0 with 3 tasks
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Starting task 0.0 in stage 8.0 (TID 7, localhost, partition 1,NODE_LOCAL, 1988 bytes)
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Starting task 1.0 in stage 8.0 (TID 8, localhost, partition 2,NODE_LOCAL, 1988 bytes)
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Starting task 2.0 in stage 8.0 (TID 9, localhost, partition 3,PROCESS_LOCAL, 1988 bytes)
16/06/19 11:47:00 INFO executor.Executor: Running task 0.0 in stage 8.0 (TID 7)
16/06/19 11:47:00 INFO executor.Executor: Running task 1.0 in stage 8.0 (TID 8)
16/06/19 11:47:00 INFO executor.Executor: Running task 2.0 in stage 8.0 (TID 9)
16/06/19 11:47:00 INFO storage.ShuffleBlockFetcherIterator: Getting 1 non-empty blocks out of 1 blocks
16/06/19 11:47:00 INFO storage.ShuffleBlockFetcherIterator: Started 0 remote fetches in 3 ms
16/06/19 11:47:00 INFO storage.ShuffleBlockFetcherIterator: Getting 0 non-empty blocks out of 1 blocks
16/06/19 11:47:00 INFO storage.ShuffleBlockFetcherIterator: Started 0 remote fetches in 1 ms
16/06/19 11:47:00 INFO executor.Executor: Finished task 2.0 in stage 8.0 (TID 9). 1161 bytes result sent to driver
16/06/19 11:47:00 INFO storage.ShuffleBlockFetcherIterator: Getting 1 non-empty blocks out of 1 blocks
16/06/19 11:47:00 INFO storage.ShuffleBlockFetcherIterator: Started 0 remote fetches in 15 ms
16/06/19 11:47:00 INFO executor.Executor: Finished task 0.0 in stage 8.0 (TID 7). 1336 bytes result sent to driver
16/06/19 11:47:00 INFO executor.Executor: Finished task 1.0 in stage 8.0 (TID 8). 1334 bytes result sent to driver
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Finished task 2.0 in stage 8.0 (TID 9) in 27 ms on localhost (1/3)
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Finished task 0.0 in stage 8.0 (TID 7) in 38 ms on localhost (2/3)
16/06/19 11:47:00 INFO scheduler.TaskSetManager: Finished task 1.0 in stage 8.0 (TID 8) in 40 ms on localhost (3/3)
16/06/19 11:47:00 INFO scheduler.TaskSchedulerImpl: Removed TaskSet 8.0, whose tasks have all completed, from pool 
16/06/19 11:47:00 INFO scheduler.DAGScheduler: ResultStage 8 (print at FlumePushDate2SparkStreaming.java:123) finished in 0.012 s
16/06/19 11:47:00 INFO scheduler.DAGScheduler: Job 4 finished: print at FlumePushDate2SparkStreaming.java:123, took 0.078575 s
-------------------------------------------
Time: 1466308020000 ms
-------------------------------------------
(Spark,3)
(Hadoop,2)
(Java,1)
(Scala,2)

16/06/19 11:47:00 INFO scheduler.JobScheduler: Finished job streaming job 1466308020000 ms.0 from job set of time 1466308020000 ms
16/06/19 11:47:00 INFO scheduler.JobScheduler: Total delay: 0.381 s for time 1466308020000 ms (execution: 0.332 s)
16/06/19 11:47:00 INFO rdd.ShuffledRDD: Removing RDD 4 from persistence list
16/06/19 11:47:00 INFO rdd.MapPartitionsRDD: Removing RDD 3 from persistence list
16/06/19 11:47:00 INFO rdd.MapPartitionsRDD: Removing RDD 2 from persistence list
16/06/19 11:47:00 INFO storage.BlockManager: Removing RDD 4
16/06/19 11:47:00 INFO rdd.BlockRDD: Removing RDD 1 from persistence list
16/06/19 11:47:00 INFO storage.BlockManager: Removing RDD 3
16/06/19 11:47:00 INFO storage.BlockManager: Removing RDD 2
16/06/19 11:47:00 INFO storage.BlockManager: Removing RDD 1
16/06/19 11:47:00 INFO flume.FlumeInputDStream: Removing blocks of RDD BlockRDD[1] at createStream at FlumePushDate2SparkStreaming.java:66 of time 1466308020000 ms
16/06/19 11:47:00 INFO scheduler.ReceivedBlockTracker: Deleting batches ArrayBuffer()
16/06/19 11:47:00 INFO scheduler.InputInfoTracker: remove old batch metadata: 


从控制台上可以看到flume将文件push到了spark streaming中,spark streaming将该文件单词进行统计。完毕!

  • pom.zip (962 Bytes)
  • 描述: pom
  • 下载次数: 6
分享到:
评论

相关推荐

    flumeng for streaming spark

    Kafka可以作为Flume的数据目的地,将Flume收集到的数据存储为消息主题,供其他消费者如Spark Streaming消费。 Spark Streaming是Spark框架的一部分,专为实时数据处理设计。它利用Spark的微批处理能力处理连续的...

    Spark整合Flume项目源码.rar

    在推送式方法 (Flume-style Push-based Approach) 中,Spark Streaming 程序需要对某台服务器的某个端口进行监听,Flume 通过 `avro Sink` 将数据源源不断推送到该端口。 拉取式方法 (Pull-based Approach using a ...

    基于Spark的实时攻击检测报告

    Spark Streaming 支持从多种数据源获取数据,包括 Kafka、Flume、Twitter、ZeroMQ 以及 TCPSockets。 2. 分布式数据存储:HDFS(Hadoop Distributed File System)是一个分布式文件系统,具有高容错性的特点,并且...

    无人机轨迹规划中的内外安全策略及其Matlab实现

    内容概要:本文详细探讨了无人机轨迹规划中的内外安全策略。外部安全主要依靠RRT(快速扩展随机树)算法,在未知环境中随机探索路径,避免障碍物。内部安全则关注无人机电机的工作状态,通过序列二次规划(SQP)优化轨迹,确保电机推力在合理范围内,避免过载。两者结合,形成了一种高效的无人机轨迹规划方法。文中还提供了具体的Matlab代码实现,展示了如何将这两种安全策略融合在一起,以提高无人机的安全性和能效。 适合人群:从事无人机研究、开发的技术人员,尤其是对轨迹规划感兴趣的工程师。 使用场景及目标:适用于需要在复杂环境中进行高效、安全飞行的无人机项目。目标是通过合理的算法设计,使无人机能够在避开障碍物的同时,保持电机在最佳工作状态,从而延长电池寿命,降低故障率。 其他说明:文中提到的实际案例和实验数据进一步验证了所提出方法的有效性。同时,作者强调了在实际应用中需要注意的一些细节问题,如平面度特性的正确使用、轨迹离散化的粒度选择以及电机模型的理想化处理等。

    基于物质点法的边坡滑坡破坏模拟:Anura3d软件的应用与案例分析

    内容概要:本文详细介绍了利用物质点法(Material Point Method, MPM)和Anura3D软件进行边坡滑坡破坏模拟的过程。文章首先解释了MPM的基本原理,即通过物质点跟踪材料属性并结合欧拉网格进行计算,适用于大变形和破坏问题。接着,作者分享了一个具体的案例——台阶边坡在降雨或地震作用下的滑坡模拟,涵盖了前处理建模、数值模拟计算和后处理分析三个主要步骤。前处理中使用Gid 11进行几何建模和网格划分,定义材料属性;数值模拟中设定边界条件和初始条件,采用显式积分方法;后处理中使用ParaView进行数据可视化,生成位移云图、应力云图等。此外,还讨论了一些常见问题和技术细节,如接触算法、时间步长的选择等。 适合人群:对数值模拟特别是物质点法感兴趣的地质工程研究人员、岩土工程师及相关领域的学生。 使用场景及目标:①理解和掌握物质点法的基本原理及其在边坡滑坡模拟中的应用;②学习使用Anura3D和ParaView进行数值模拟和结果可视化的具体操作;③探索滑坡破坏过程中的微观机制和宏观表现。 阅读建议:本文不仅提供了详细的理论介绍和技术指导,还包括了许多实用的操作技巧和注意事项。建议读者在实践中逐步尝试文中提到的方法和参数设置,同时关注可能出现的问题及其解决方案。

    Altium Designer 25.5.2 Build 35 (x64)

    Altium Designer 25.5.2 Build 35 (x64) ,不知道更新了什么,不好下载就先下载到雷盘再下载

    基于ssm的大学生创新创业项目管理系统(源码+数据库)171

    基于ssm的大学生创新创业项目管理系统:前端 jsp、jquery,后端 maven、springmvc、spring、mybatis;角色分为管理员、学生;集成学院、专业、班级管理,创新计划,项目管理等功能于一体的系统。 ## 功能介绍 - 学院管理:学院信息的增删改查,按名称模糊搜索查询,学院简介信息支持富文本编辑 - 专业管理:专业信息的增删改查,按名称模糊搜索,按学院选择查询 - 班级管理:班级信息的增删改查,,按名称模糊搜索,按学院、专业选择查询 - 用户管理:用户信息的增删改查,多条件搜索查询 - 创新计划:创新计划信息增删改查,详情信息支持富文本编辑,上传附件,查看申请 - 项目管理:项目列表查询,申请审核 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>

    石油工程中基于深度学习的FracPredictor裂缝建模与压裂模拟技术解析

    内容概要:本文详细介绍了FracPredictor这一基于深度学习的裂缝预测工具及其应用。首先探讨了数据处理部分,如利用滑窗处理时序+空间特征混合体的方法,以及如何将岩石力学数据转换为适合神经网络的格式。接着深入剖析了模型架构,包括时空双流网络、注意力机制用于跨模态融合、HybridResBlock自定义层等创新设计。此外,文章还分享了训练技巧,如渐进式学习率衰减、CosineAnnealingWarmRestarts调度器的应用。对于可视化方面,则推荐使用PyVista进行三维渲染,以直观展示裂缝扩展过程。文中还提到了一些实用的小技巧,如数据预处理中的自动标准化、配置文件参数调整、以及针对特定地质条件的优化措施。最后,通过多个实际案例展示了FracPredictor在提高预测准确性、降低计算成本方面的优势。 适合人群:从事石油工程、地质勘探领域的研究人员和技术人员,尤其是对裂缝建模与压裂模拟感兴趣的从业者。 使用场景及目标:适用于需要高效、精准地进行裂缝预测和压裂模拟的工程项目。主要目标是帮助用户掌握FracPredictor的工作原理,学会从数据准备到结果可视化的完整流程,从而优化压裂方案,减少工程风险。 其他说明:文章不仅提供了详细的代码示例,还附带了丰富的实战经验和注意事项,有助于读者更好地理解和应用这项新技术。

    基于ssm的二手汽车销售管理系统(源码+数据库+万字文档)107

    基于ssm的二手汽车销售管理系统:前端 jsp、jquery,后端 maven、springmvc、spring、mybatis,角色分为经理和员工;集成品牌管理、客户管理、销售管理、库存管理、收购管理等功能于一体的系统。 ## 功能介绍 - 品牌管理:品牌信息的增删改查,热门品牌列表,销量比较好的顺序排行 - 客户管理:客户资料信息的增删改查 - 销售管理:车辆销售登记,列表查询,付款 - 库存管理:车辆库存情况查询,下订单 - 收购管理:收购评估,收购订单查询 - 统计管理:财务状况(柱状图),下载excel表格 - 员工管理:员工信息的增删改查,账号激活操作 - 聊天管理:聊天内容查看,指定人员发送聊天内容 ## 环境 - <b>IntelliJ IDEA 2009.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>

    光伏MPPT中改进的樽海鞘群算法:领导更新与局部全局开发能力提升

    内容概要:本文详细介绍了改进的樽海鞘群算法(SSA)在光伏最大功率点跟踪(MPPT)中的应用。首先探讨了领导者更新机制的改进,引入反向学习思想,使算法能够更好地进行全局和局部搜索。其次,对追随者更新公式进行了优化,使其更倾向于适应度较高的个体,从而提高搜索效率。此外,增加了光照突变重启功能,确保算法在光照条件突变时仍能快速响应并重新定位最大功率点。通过仿真实验表明,改进后的算法显著提升了收敛速度和稳定性,尤其在光照突变情况下表现优异。 适合人群:从事光伏系统研究和技术开发的专业人士,尤其是对优化算法感兴趣的科研人员和工程师。 使用场景及目标:适用于光伏系统的最大功率点跟踪(MPPT)优化,旨在提高光伏系统的效率和稳定性,特别是在光照条件不稳定的情况下。 其他说明:文中提供了详细的代码示例和参数调优建议,有助于实际工程应用中的实施和调试。

    基于ssm的学生选课管理系统(源码+数据库)146

    基于ssm的学生选课管理系统:前端 html、jquery,后端 springmvc、spring、mybatis;角色分为:老师、学生;集成课程管理、上传成绩、选课等功能于一体的系统。 ## 功能介绍 - 基本功能:登录,注册,退出 - 我的课程:教师可以增加自己的课程供学生选择,可以查看当前课程有哪些学生选择 - 上传成绩:课程列表展示,双击课程可以进入该课程下面上传学生成绩 - 个人信息:个人信息查询与修改,密码修改 - 系统消息:系统消息列表查询 - 我的选课:选课信息查询,课程退选 - 网上选课:课程列表查询,关键词搜索,课程报名 - 往期课程:课程列表查询,导出成绩为word文档 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Tomcat 7.0.73</b> - <b>JDK 1.8</b>

    基于springboot+vue的物业管理系统(源码+数据库)129

    基于springboot+vue的物业管理系统:前端 vue、elementui,后端 maven、springmvc、spring、mybatis,角色分为管理员、用户;集成小区管理、楼盘管理、保障管理等功能于一体的系统。 ## 功能介绍 - 小区管理:小区基本信息查询与修改,周边设施增删改查,物业公告信息增删改查,支持模糊查询 - 楼宇管理:小区楼宇信息增删改查 - 房间管理:房间信息的增删改查,导出excel - 报修管理:报修信息列表查询,删除,审核 - 投诉管理:投诉信息列表查询,删除,审核 - 收费类型管理:收费类型信息的增删改查,关键词搜索 - 用户管理:物业人员信息的增删改查,住户信息的增删改查 - 定时任务管理:定时任务执行特定任务或数据处理任务 ## 环境 - <b>IntelliJ IDEA 2021.3</b> - <b>Mysql 5.7.26</b> - <b>Node 14.14.0</b> - <b>JDK 1.8</b>

    智能办公基于Dify和飞书知识库的AI智能问答助手构建:提升团队工作效率的企业级应用方案

    内容概要:本文介绍如何利用Dify和飞书知识库构建智能问答助手,解决团队高效提取信息的难题。Dify作为一个开源AI平台,适合构建自然语言处理应用;飞书提供API接口,方便获取知识库内容。通过结合两者,可创建24/7在线的智能问答助手,减少人工搜索文档时间。文中详细描述了实现步骤:准备开发环境(获取飞书API权限、注册使用Dify、搭建环境)、获取飞书知识库内容(调用API、数据处理)、使用Dify进行智能问答(训练或使用现成模型、调用API)、构建问答服务(搭建后端服务、部署服务、配置飞书机器人)以及持续优化模型和知识库内容。 适合人群:对AI技术和企业协作工具有一定了解的企业IT人员、开发者。 使用场景及目标:①为企业内部提供全天候智能问答服务,自动回答常见问题;②减少人工搜索文档时间,提高工作效率;③通过用户提问日志优化AI模型,提升答案准确性。 阅读建议:在实践过程中,需结合实际需求调整API权限和模型训练,确保系统的实用性和高效性。同时,定期更新飞书知识库内容,保证信息的时效性和准确性。

    基于GOOSE-Transformer-LSTM的时间序列数据回归预测模型及其优化

    内容概要:本文探讨了一种结合Transformer的全局注意力机制和LSTM的短期记忆及序列处理能力的数据回归预测模型,并引入了最新提出的GOOSE优化算法。Transformer通过自注意力机制捕捉数据的全局依赖性,LSTM则专注于捕捉短期依赖关系。GOOSE算法用于优化LSTM的隐含层神经元数目,从而提高模型的泛化能力和预测精度。文中提供了多个Python代码片段,展示了模型的具体实现和优化过程。实验结果显示,该模型在电力负荷预测、商品销量预测等场景中表现出色,预测误差显著降低。 适用人群:从事机器学习、深度学习研究的专业人士,尤其是对时间序列预测感兴趣的开发者和技术爱好者。 使用场景及目标:适用于需要同时考虑长期趋势和短期波动的时间序列预测任务,如电力负荷预测、股票价格预测、商品销售预测等。目标是提高预测精度,减少预测误差,增强模型的鲁棒性和泛化能力。 其他说明:文中提到的实际应用场景包括电力负荷预测和风电功率预测,强调了模型在处理异常波动数据时的优势。此外,还讨论了一些潜在的改进方向,如引入因果卷积和MoE架构等。 标签1: Transformer 标签2: LSTM 标签3: GOOSE优化算法 标签4: 时间序列预测 标签5: 自注意力机制

    脑肿瘤实例分割医疗影像数据集.zip

    数据集介绍:脑肿瘤实例分割医疗影像数据集 一、基础信息 数据集名称:脑肿瘤实例分割医疗影像数据集 数据规模: - 训练集:803张医学影像 - 验证集:237张医学影像 - 测试集:129张医学影像 标注类别: - Brain_Tumor(脑肿瘤):包含各类脑部肿瘤病变区域标注 标注特性: - YOLO实例分割格式:通过多边形坐标点精确标注肿瘤边界 - 包含正常脑组织与肿瘤组织的对比样本 - 数据来源于临床医学影像采集系统 二、适用场景 医疗影像AI系统开发: 支持构建脑肿瘤自动识别与病灶定位系统,辅助医生进行术前规划与病灶量化分析 智能诊断工具研发: 可用于开发脑部CT/MRI影像智能分析工具,实现肿瘤位置、形态的精准三维重建 医学影像算法研究: 为深度学习在医学图像分割领域的研究提供标准测试基准,支持UNet、Mask R-CNN等算法的训练验证 放射科医师培训: 可作为教学材料帮助医师学习脑肿瘤的影像学特征识别与病灶标注规范 三、核心优势 临床精准性: - 标注结果经三甲医院放射科医师双重校验 - 涵盖胶质瘤、脑膜瘤等多种常见脑肿瘤类型 技术适配性: - 原生支持YOLOv5/v7/v8等主流实例分割框架 - 提供标准化的数据划分方案与验证指标 科研价值: - 包含完整病例的DICOM原始数据转换样本 - 标注数据呈现肿瘤异质性和边界模糊等临床特征 工程实用性: - 提供肿瘤区域面积占比等量化指标计算基准 - 支持医疗影像PACS系统直接对接的数据格式

    永磁同步电机SVPWM算法故障诊断与容错控制的Simulink建模及应用

    内容概要:本文详细介绍了如何在Simulink中构建永磁同步电机(SVPWM)算法的故障诊断与容错控制模型。首先,通过搭建电流残差观测器进行故障诊断,采用瞬态突变和累积误差双重判据,确保能够及时捕捉到IGBT故障。接着,针对故障情况,提出了重构电压矢量的方法,将故障相的电压分配给其他相,从而实现系统的容错控制。此外,文中还讨论了模型中各个模块之间的耦合关系以及一些具体的实现细节,如故障注入模块、观测器环路延迟、磁饱和参数设置等。最后,通过仿真验证了该方法的有效性,展示了故障发生后系统的快速响应能力和良好的性能恢复。 适用人群:从事电机控制研究的技术人员、研究生及以上学历的相关专业学生。 使用场景及目标:适用于需要提高永磁同步电机控制系统可靠性的应用场景,特别是在工业自动化、电动汽车等领域。目标是在IGBT故障情况下,确保电机系统能够在短时间内恢复正常运行,减少故障带来的负面影响。 其他说明:文中提供了详细的MATLAB/Simulink代码片段,帮助读者更好地理解和实现相关算法。同时,强调了一些容易忽视的关键点,如IGBT模型的选择、采样周期的设定等,有助于提高仿真的准确性。

    高速公路联网收费系统优化升级:收费站标准化接口规范解析

    高速公路联网收费系统优化升级收费站标准化专项试点技术方案2024.11

    基于Matlab/Simulink的锂离子电池SOC估计:EKF与UKF结合二阶RC模型的应用

    内容概要:本文详细介绍了利用Matlab/Simulink实现锂离子电池荷电状态(SOC)估计的方法,特别关注扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)两种算法。首先,文章解释了二阶RC等效电路模型的基本原理及其参数设定,该模型用于描述电池内部动态行为。接着,分别阐述了EKF和UKF的工作机制,包括它们各自的状态预测和更新步骤,并给出了具体的MATLAB代码片段。此外,还讨论了这两种方法在不同工况下的表现差异以及如何选择合适的滤波器以提高估计精度。最后,强调了OCV-SOC曲线拟合质量和参数辨识的重要性,指出这是确保良好估计效果的关键因素之一。 适合人群:从事电池管理、电动汽车、储能系统等领域研究的技术人员,尤其是那些对卡尔曼滤波理论有一定了解并希望通过实际案例深入理解其应用的人士。 使用场景及目标:适用于需要精确估算锂离子电池SOC的研究项目或产品开发阶段,旨在帮助研究人员更好地掌握EKF和UKF的特点,从而为具体应用场景挑选最适合的算法。 其他说明:文中提供的代码仅为示例,实际应用时需根据具体情况调整参数配置。同时提醒读者重视电池模型本身的准确性,因为即使是最先进的滤波算法也无法弥补模型缺陷带来的误差。

    电动汽车动力系统仿真的关键技术:双向DCDC变换器与电机控制策略

    内容概要:本文详细介绍了电动汽车动力系统的仿真技术,涵盖双向DCDC变换器的能量反馈机制和支持异步电机与永磁同步电机的仿真。文中展示了多个关键控制策略,如电流环控制、最大转矩电流比(MTPA)控制、弱磁控制以及基于事件触发的协调控制。通过MATLAB、Python和C等多种编程语言的具体代码实例,解释了如何实现高效的能量管理和电机控制。此外,文章还讨论了仿真过程中遇到的实际问题及其解决方案,如电压过冲、电流振荡和系统耦合等问题。 适合人群:从事电动汽车研究与开发的技术人员、高校相关专业师生、对电动汽车动力系统感兴趣的工程师。 使用场景及目标:适用于电动汽车动力系统的设计与优化,帮助工程师理解和掌握双向DCDC变换器的工作原理及电机控制策略,提高能量利用效率,确保系统稳定性。 其他说明:文章不仅提供了详细的理论和技术背景,还分享了许多实践经验,有助于读者更好地将理论应用于实际项目中。

Global site tag (gtag.js) - Google Analytics