首页
学习
活动
专区
圈层
工具
发布

骑上我心爱的小摩托,再挂上AI摄像头,去认识一下全城的垃圾!

传统的解决方法是将某种形式的传感器分散在城市中,这些传感器将负责收集有关垃圾分布的数据,但是这种方法成本很高,无论是安装还是维护都需要持续的投资,而且对环境不友好,毕竟这种解决环境问题的方法,同时又生产了更多的一次性电子产品...一个城市只需要有一些这样的摄像头,装在垃圾收集车或专用车辆,垃圾处理中心的人员可以从他们的办公室实时远程监控垃圾统计数据,比如每种垃圾类型通常出现在哪里,每天、每周和每月的趋势,热点等。 ?...相机,要选就选最好的 检测方面我采用了一个常用且非常有效的对象检测神经网络:Yolo,阿姆斯特丹市的人工智能专家Maarten Sukel最近发布了这个网络的一个版本,专门训练识别垃圾箱、袋子和纸箱,这个系统作为我们相机软件的核心...垃圾的GPS坐标通过简单的gpsd接口从usb模块读取,将数据存储在Google Firestore实时数据库中,这样本地的Google firebase SDK就被用于客户端应用程序开发。...我们计划使用Firestore分布式计数器来添加更多的实时统计信息,例如基于区域的每个垃圾类型的每日和每周统计信息。 同样在后端。

12.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RocketMQ(八):轻量级拉取消费原理

    RocketMQ(八):轻量级拉取消费原理 ”好事“ 这里推荐一篇JVM垃圾回收相关的文章:深入解析Java垃圾回收机制:原理、实现与优化策略 文章阐述了JVM垃圾回收的基本概念、机制以及设计原理,总结垃圾回收的算法与实现细节...poll无参方法默认会携带5S的超时时间来进行调用,因此我们可以猜测如果没有消息到达就是每5s拉取一次消息 每个方法依次查看会发现它会进行检查、自动提交、从内存中获取消息请求ConsumeRequest...,然后再考虑拉取的偏移量,如果内存中拉取偏移量未设置要向broker获取 private long nextPullOffset(MessageQueue messageQueue) throws MQClientException...拉取任务使用线程池执行,拉取前会检查状态以及流控失败就延迟重试,然后获取下次拉取消息的偏移量,接着同步向broker进行拉取消息 如果拉取到消息,会将消息存储在队列对应的processQueue,并封装消费请求提交到...ConsumerQueueCache中 拉取与推送的一大区别是,拉取获取消息的逻辑需要自己来实现,更加自由易扩展,poll获取消息则是从ConsumerQueueCache中获取消费请求并拿到消息再进行处理

    34131

    Spark性能调优

    对应的BlockManager中获取,若本地没有,则从Driver或者其它executor拉取并保存到本地;    (4)使用广播变量后,不会每一个task拥有一份变量副本,而是每一个executor一份副本...,频繁的让JVM内存溢满进行垃圾回收,作业将停止工作无法提供相应,当下游的executor尝试建立远程网络连接拉取数据,可能会因为超过默认的60s而失败,因此导致Spark作业崩溃,也可能导致DAGSecheduler...,函数拉取缓冲区内数据进行处理,创建的大量对象来不及回收会导致OOM,所以可以适当减小缓冲区大小,从而使内存可以被及时回收;    (3) 如果整个Spark application的内存支援比较充足,...而且map端的输出数据量不是很大,则可以考虑加大缓冲区大小,以减少reduce task的拉取数据的次数,从而减少网络性能消耗和reduce端聚合操作执行次数;    (4) sparkConf.set...默认值为3 shuffle文件拉取不到,最多重试次数spark.shuffle.io.retrywait 默认值5s 每次拉取的等待时长,如果重试次数为3,则3*5秒之后会报错–shuffle file

    1.3K20

    Spark性能优化 (4) | JVM 调优

    在一般情况下,Storage的内存都提供给了cache操作,但是如果在某些情况下cache操作内存不是很紧张,而task的算子中创建的对象很多,Execution内存又相对较小,这回导致频繁的minor...stage 的 task 在运行的时候,可能要从一些 Executor 中去拉取 shuffle map output 文件,但是 Executor 可能已经由于内存溢出挂掉了,其关联的 BlockManager...调节连接等待时长 在 Spark 作业运行过程中,Executor 优先从自己本地关联的 BlockManager 中获取某份数据,如果本地BlockManager没有的话,会通过TransferService...如果 task 在运行过程中创建大量对象或者创建的对象较大,会占用大量的内存,这会导致频繁的垃圾回收,但是垃圾回收会导致工作现场全部停止,也就是说,垃圾回收一旦执行,Spark 的 Executor 进程就会停止工作...120s后,宣告数据拉取失败,如果反复尝试都拉取不到数据,可能会导致 Spark 作业的崩溃。

    1K30

    【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优

    2) 降低shuffle read拉取数据量的大小。 3) 降低reduce端聚合的次数。...年龄过大,默认15岁,垃圾回收还是没有回收回去就会跑到老年代里面去了。 这样会导致在老年代中存放大量的短生命周期的对象,老年代应该存放的是数量比较少并且会长期使用的对象,比如数据库连接池对象。...去远程连接其他节点上executor的block manager去获取,尝试建立远程的网络连接,并且去拉取数据。...频繁创建对象让JVM堆内存满溢,进行垃圾回收。正好碰到那个exeuctor的JVM在垃圾回收。...output文件,Reducer端不能够拉取数据。

    1.7K30

    出一套高端大数据开发面试题

    4worker执行阶段 接收task任务,通过spark的block管理器blockManager从集群节点上获取对应的block上的数据,启动executor完成计算 2....spark.reducer.maxSizeInFlight 默认值:48m 参数说明:该参数用于设置shuffle read task的buffer缓冲大小,而这个buffer缓冲决定了每次能够拉取多少数据...调优建议:如果作业可用的内存资源较为充足的话,可以适当增加这个参数的大小(比如96m),从而减少拉取数据的次数,也就可以减少网络传输的次数,进而提升性能。...错误:reduce oom reduce task去map拉数据,reduce 一边拉数据一边聚合 reduce段有一块聚合内存(executor memory * 0.2) 解决办法:1、增加reduce...shuffle的主要工作是从Map结束到Reduce开始之间的过程。首先看下这张图,就能了解shuffle所处的位置。

    71930

    Spark入门必读:核心概念介绍及常用RDD操作

    有一种典型的应用场景,比如待处理分区中的数据需要写入到数据库,如果使用map函数,每一个元素都会创建一个数据库连接对象,非常耗时并且容易引起问题发生,如果使用mapPartitions函数只会在分区中创建一个数据库连接对象...Shuffle Write阶段会将Map Task中间结果数据写入到本地磁盘,而在Shuffle Read阶段中,Reduce Task从Shuffle Write阶段拉取数据到内存中并行计算。...Shuffle Read实现方式 Shuffle Read阶段中Task通过直接读取本地Shuffle Write阶段产生的中间结果数据或者通过HTTP的方式从远程Shuffle Write阶段拉取中间结果数据进行处理...获取需要拉取的数据信息,根据数据本地性原则判断采用哪种级别的拉取方式。 判断是否需要在Map端聚合(reduceByKey会在Map端预聚合)。...Shuffle Read阶段Task拉取过来的数据如果涉及聚合或者排序,则会使用HashMap结构在内存中存储,如果拉取过来的数据集在HashMap中已经存在相同的键则将数据聚合在一起。

    77260

    Spark入门必读:核心概念介绍及常用RDD操作

    有一种典型的应用场景,比如待处理分区中的数据需要写入到数据库,如果使用map函数,每一个元素都会创建一个数据库连接对象,非常耗时并且容易引起问题发生,如果使用mapPartitions函数只会在分区中创建一个数据库连接对象...Shuffle Write阶段会将Map Task中间结果数据写入到本地磁盘,而在Shuffle Read阶段中,Reduce Task从Shuffle Write阶段拉取数据到内存中并行计算。...Shuffle Read实现方式 Shuffle Read阶段中Task通过直接读取本地Shuffle Write阶段产生的中间结果数据或者通过HTTP的方式从远程Shuffle Write阶段拉取中间结果数据进行处理...获取需要拉取的数据信息,根据数据本地性原则判断采用哪种级别的拉取方式。 判断是否需要在Map端聚合(reduceByKey会在Map端预聚合)。...Shuffle Read阶段Task拉取过来的数据如果涉及聚合或者排序,则会使用HashMap结构在内存中存储,如果拉取过来的数据集在HashMap中已经存在相同的键则将数据聚合在一起。

    1.1K30

    美团二面:详细说说Kafka拉消息的过程?

    说回Follower副本从Leader副本拉取数据。Kafka就是通过ReplicaFetcherThread,副本获取线程实现的消息拉取及处理。...FetchResponse类封装的是FETCH请求的Response对象,其内PartitionData是个POJO,保存Response中单个分区数据拉取的各项数据: 从该分区的Leader副本拉取回来的消息...一旦A被读取后,为确保各分区都有同等机会被读取,代码需将A插入到分区列表的最后一位,这就是updateAndMoveToEnd:把A从map中移除,再插回去,这样A自然就处于列表的最后一位了。...它定义了公共方法处理所有拉取线程的共同逻辑,如执行截断操作,获取消息。 拉取线程逻辑:循环执行截断操作和获取数据操作。 分区读取状态:当前,源码定义了3类分区读取状态。...拉取线程只能拉取处于可读取状态的分区的数据

    67530

    蚂蚁金服SOFARegistry之推拉模型

    拉模型:主题对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到主题对象中获取,相当于是观察者从主题对象中拉数据。...此外,为了避免某次变更通知获取失败,定期还会进行版本号差异比较,定期去拉取版本低的订阅者所需的数据进行推送保证数据最终一致。...大致逻辑如下: SOFARegistry 中采用了 LoadingCache 的数据结构来在 SessionServer 中缓存从 DataServer 中同步来的数据。...使得 cache 定期从 DataServer 中拉取数据以替换过期的 entry。...其大致逻辑如下: SOFARegistry 中采用了 LoadingCache 的数据结构来在 SessionServer 中缓存从 DataServer 中同步来的数据。

    1.4K10

    聊聊ThreadLocal那些事

    什么时候使用TheadLocal 有时候我们会遇到将某个变量和线程进行绑定起来的场景,一种方法是定义一个Map,其中key是线程ID,value是对象,这样每个线程都有属于自己的对象,同一个线程只能对应一个对象...= null) map.set(this, value); else createMap(t, value); } 获取当前线程 根据当前线程作为参数获取一个 ThreadLocalMap...对象,走进 getMap 方法 : ThreadLocalMap getMap(Thread t) { return t.threadLocals; } 实际上是获取的 Thread 对象的...弱引用的意思是:如果在发生垃圾回收时,若这个对象只被弱引用指向,那么就会被回收。...this.threadLocalIndex.set(index); return index; } } ThreadLocalIndex 主要用于生产者发送消息的时候,熟悉 RocketMQ 的小伙伴都知道,生产者首先拉取

    80700

    Spark性能调优-Shuffle调优及故障排除篇(万字好文)

    ResultStage,map task会先执行,那么后执行的reduce task如何知道从哪里去拉取map task落盘后的数据呢?...reduce端的数据拉取过程如下: map task 执行完毕后会将计算状态以及磁盘小文件位置等信息封装到MapStatus对象中,然后由本进程中的MapOutPutTrackerWorker对象将mapStatus...此时该stage的每一个task就需要将上一个stage的计算结果中的所有相同key,从各个节点上通过网络都拉取到自己所在的节点上,然后进行key的聚合或连接等操作。...的所有map task所在节点上,拉取属于自己的那一个磁盘文件即可。...将较小RDD中的数据直接通过collect算子拉取到Driver端的内存中来,然后对其创建一个broadcast变量;接着对另外一个RDD执行map类算子,在算子函数内,从broadcast变量中获取较小

    3.6K40

    Flow 操作符 shareIn 和 stateIn 使用须知

    不过,我们需要缓存最后发送的项目,让用户在获取当前位置时能在屏幕上看到一些数据 (即使数据是旧的)。针对这种情况,我们可以使用 stateIn 操作符。...这样会在每次函数调用时创建一个新的 SharedFlow 或 StateFlow,而它们将会一直保持在内存中,直到作用域被取消或者在没有任何引用时被垃圾回收。...以开源项目——Google I/O 的 Android 应用 iosched 为例,您可以在 源码中 看到,从 Firestore 获取用户事件的数据流是通过 callbackFlow 实现的。...UserRepository( private val userEventsDataSource: FirestoreUserEventDataSource ) { // 新的收集者会在 Firestore...如果答案是肯定的,您可能需要为 SharedFlow 或 StateFlow 实例创建一个 map,并在 subscriptionCount 为 0 时移除引用并退出上游数据流。

    5.3K20

    Guava Cache -- Java 应用缓存神器

    以做一个活动为例子 腾讯课堂Linux运维学院: image.png 左边是一个最近直播列表,CGI 做的工作是要拉取类目下的直播课程以及课程相关信息,并根据时间进行排序,右边的状态是根据访问者的报名情况显示不同的状态...} break; } } if (createNewEntry) {//实例不存在的情况下,创建Loader去拉取...Guava 提供了recordStats()方法,相当于启动了记录模式,通过Cache.stats()方法可以获取CacheStats对象,里面存储着缓存的使用情况,通过观察它就可以知道缓存的命中率,加载耗时等信息...,通常我们缓存的对象会是一个Map,或者List,对其引用的修改其实已经修改了对应值本身,这样会造成数据的混乱。...在上述Guava Cache的使用中,当缓存过期后,此时请求过来就会阻塞等待缓存的重新拉取。。。有没有可能避免掉这种阻塞?

    7.6K147
    领券