计算机

计算机 · 圈子

8557 位酷友已加入

计算机圈子中包含常用的技术文档、源代码、模型、数据集、学习教程、技术报告等干货资料,加入圈子可以上传、下载资料,也可以使用提问来寻求资料或分享你认为有价值的站外链接~

关注推荐最新

热门标签

计算机

计算机·圈子   首发

阿托 发布了
资源

基于人脸关键区域提取的人脸识别(LFW:99.82%+ CFP_FP:98.50%+ AgeDB3)

insightface制作自己的数据及其训练 021.03.03: 更新insightface TensorRT模型,trt模型与原版差距<0.01 参考insightface-REST 2020.04.09:更新基于SSR-Net的性别和年龄预测网络,在私有数据集上gender(98.53),age_mae(3.29)原作者-SSR-NET 2019.12.30:更新MobileFaceNet的训练模型,参考> ZQCNN,人脸检测+ landmark可参考CenterMulti,效果更好,并且支持landmark的置信度 2019.12.10:更新VarGFaceNet的训练模型,参考VarGFaceNet 2019.10.21:更新人脸检测模型,检测器是基于SSH,相较于原版检测,该版本主要更新了误检 2019.10.01:公布的人脸识别模型,模型基于glint和私有数据训练,在私有数据上拥有0.88的F1-score,insightface原始模型0.56 改进地方 ssh(人脸检测)+ prnet(68标志性人脸对齐,3d人脸面具)+ insightface (1)修改人脸检测器(优化后的SSH,误检率更低,对大角度和blur的face进行过滤) (2)使用68个点的landmark,prnet的对齐效果更准 (3)利用prnet拟合有效区域的人脸位置,抠出背景,以平均人脸像素填充背景,减少噪声影响,会在图片质量较好的情况下提高识别 安装 (1)mxnet (2)tensorflow 生成对齐后的数据集 数据下载 数据 deepglint 数据集集合 insightface Url download download download 生成,'.lst, .rec, .idx, property' (1)为了合并数据,可采用generate_lst.sh (2)property是属性文件,里面内容是类别数和图像大小,例如 1000,112,112 其中1000代表人脸的类别数目,图片格式为112x112 (3)sh generate_lst.sh 生成测试文件.bin python gen_valdatasets.py 生成数据 python3 gen_datasets.py #完成后会output下生成train.lst 验证model精度 在bash python3 -u ./src/eval/verification.py --gpu 0 --model "./models/glint-mobilenet/model,1" --target 'lfw' 快捷 sh verification.sh 训练 在bash里面训练 如果想要合并不同数据集 result Resnet训练 Data LFW CFP_FP AgeDB30 ACCU(%) 99.82+ 98.50+ 98.25+ MobileFacenet训练 预训练模型 人脸检测 (1) SSH: 人脸检测模型请参见mxnet-ssh-face-detection(在自有数据集上标定+修改部分训练参数,可在FDDB上取得98.7%) (2) CenterMulti: 人脸检测+landmark可参考CenterMulti,效果更好,而且支持 landmark的confidence mask人脸识别预训练模型 模型基于glint和私有数据训练,backbone resnet152,在私有数据上拥有0.88的F1-score,insightface原始模型0.56,因为进行了私有数据的增强训练,在开源测试集上效果一般 baidu,提取码: enph VarGFaceNet预训练模型 使用RetinaFace的5点landmark对齐src/common/face_align_util.py/ARC_FACE(没有使用mask) baidu,提取码: ds3c MobileFaceNet预训练模型 使用RetinaFace的5点landmark对齐src/common/face_align_util.py/ARC_FACE(没有使用mask),res4-8-16-4-dim256在个人测试集上效果更好 Backbone CFP_FP(%) AGE_db30(%) Speed(ms) Download y2-res2-6-10-2-dim256 97.18 97.52 22 model y2-res4-8-16-4-dim256 98.03 98.30 33 model Todo 1.释放训练好的模型(PRNET,更新人脸检测模型基于Retina的RetinaDetection 链接:https://github.com/bleakie/RetinaDetector ) 转载自:https://github.com/bleakie/MaskInsightface

计算机

计算机·圈子   首发

阿托 更新了
资源

基于spark的商品推荐系统

项目体系架构设计 1.1 项目系统架构 项目以推荐系统建设领域知名的经过修改过的中文亚马逊电商数据集作为依托,以某电商网站真实业务数据架构为基础,构建了符合教学体系的一体化的电商推荐系统,包含了离线推荐与实时推荐体系,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。提供了从前端应用、后台服务、算法设计实现、平台部署等多方位的闭环的业务实现。 用户可视化:主要负责实现和用户的交互以及业务数据的展示,主体采用AngularJS2进行实现,部署在Apache服务上。 综合业务服务:主要实现JavaEE层面整体的业务逻辑,通过Spring进行构建,对接业务需求。部署在Tomcat上。 【数据存储部分】 业务数据库:项目采用广泛应用的文档数据库MongDB作为主数据库,主要负责平台业务逻辑数据的存储。 缓存数据库:项目采用Redis作为缓存数据库,主要用来支撑实时推荐系统部分对于数据的高速获取需求。 【离线推荐部分】 离线统计服务:批处理统计性业务采用Spark Core + Spark SQL进行实现,实现对指标类数据的统计任务。 离线推荐服务:离线推荐业务采用Spark Core + Spark MLlib进行实现,采用ALS算法进行实现。 【实时推荐部分】 日志采集服务:通过利用Flume-ng对业务平台中用户对于商品的一次评分行为进行采集,实时发送到Kafka集群。 消息缓冲服务:项目采用Kafka作为流式数据的缓存组件,接受来自Flume的数据采集请求。并将数据推送到项目的实时推荐系统部分。 实时推荐服务:项目采用Spark Streaming作为实时推荐系统,通过接收Kafka中缓存的数据,通过设计的推荐算法实现对实时推荐的数据处理,并将结构合并更新到MongoDB数据库。 1.2 项目数据流程 【系统初始化部分】 通过Spark SQL将系统初始化数据加载到MongoDB中。 【离线推荐部分】 可以通过Azkaban实现对于离线统计服务以离线推荐服务的调度,通过设定的运行时间完成对任务的触发执行。 离线统计服务从MongoDB中加载数据,将【商品平均评分统计】、【商品评分个数统计】、【最近商品评分个数统计】三个统计算法进行运行实现,并将计算结果回写到MongoDB中;离线推荐服务从MongoDB中加载数据,通过ALS算法分别将【用户推荐结果矩阵】、【影片相似度矩阵】回写到MongoDB中。 【实时推荐部分】 Flume从综合业务服务的运行日志中读取日志更新,并将更新的日志实时推送到Kafka中;Kafka在收到这些日志之后,通过kafkaStream程序对获取的日志信息进行过滤处理,获取用户评分数据流【UID|MID|SCORE|TIMESTAMP】,并发送到另外一个Kafka队列;Spark Streaming监听Kafka队列,实时获取Kafka过滤出来的用户评分数据流,融合存储在Redis中的用户最近评分队列数据,提交给实时推荐算法,完成对用户新的推荐结果计算;计算完成之后,将新的推荐结构和MongDB数据库中的推荐结果进行合并。 【业务系统部分】 推荐结果展示部分,从MongoDB中将离线推荐结果、实时推荐结果、内容推荐结果进行混合,综合给出相对应的数据。 商品信息查询服务通过对接MongoDB实现对商品信息的查询操作。 商品评分部分,获取用户通过UI给出的评分动作,后台服务进行数据库记录后,一方面将数据推动到Redis群中,另一方面,通过预设的日志框架输出到Tomcat中的日志中。 商品标签部分,项目提供用户对商品打标签服务。 1.3 数据模型 Product【商品数据表】 字段名 字段类型 字段描述 字段备注 productId Int 商品的ID name String 商品的名称 categories String 商品所属类别 每一项用“|”分割 imageUrl String 商品图片的URL tags String 商品的UGC标签 每一项用“|”分割 Rating【用户评分表】 字段名 字段类型 字段描述 字段备注 userId Int 用户的ID productId Int 商品的ID score Double 商品的分值 timestamp Long 评分的时间 Tag【商品标签表】 字段名 字段类型 字段描述 字段备注 userId Int 用户的ID productId Int 商品的ID tag String 商品的标签 timestamp Long 评分的时间 User【用户表】 字段名 字段类型 字段描述 字段备注 userId Int 用户的ID username String 用户名 password String 用户密码 timestamp Lon0067 用户创建的时间 RateMoreProductsRecently【最近商品评分个数统计表】 字段名 字段类型 字段描述 字段备注 productId Int 商品的ID count Int 商品的评分数 yearmonth String 评分的时段 yyyymm RateMoreProducts【商品评分个数统计表】 字段名 字段类型 字段描述 字段备注 productId Int 商品的ID count Int 商品的评分数 AverageProductsScore【商品平均评分表】 字段名 字段类型 字段描述 字段备注 productId Int 商品的ID avg Double 商品的平均评分 ProductRecs【商品相似性矩阵】 字段名 字段类型 字段描述 字段备注 productId Int 商品的ID recs Array[(productId:Int,score:Double)] 该商品最相似的商品集合 UserRecs【用户商品推荐矩阵】 字段名 字段类型 字段描述 字段备注 userId Int 用户的ID recs Array[(productId:Int,score:Double)] 推荐给该用户的商品集合 StreamRecs【用户实时商品推荐矩阵】 字段名 字段类型 字段描述 字段备注 userId Int 用户的ID recs Array[(productId:Int,score:Double)] 实时推荐给该用户的商品集合 来源https://github.com/AnemoneIndicum/ECommerceRecommendSystem

资源

基于RetinaFace的目标检测方法

RetinaDetection Object Detector 介绍 RetinaDetector是基于RetinaFace修改过的检测方法,原论文是一种实用的单级SOTA面部检测器,最初在arXiv技术报告中进行了介绍。 数据 如下组织数据集目录 数据/视网膜/ 训练/ 图像 /label.txt val / 图像 /label.txt 测试/ 图像 /label.txt 安装 安装具有GPU支持的MXNet。 如果使用基于DCN的主干,请从Deformable-ConvNets安装Deformable Convolution V2运算符。 键入make以构建cxx工具。 训练 检查train.py。 复制rcnn/sample_config.py到rcnn/config.py 为了获得更好的训练效果,可针对性的修改一些参数,如下: 无效人脸的过滤,如下: 下载预训练的模型并将其放入model/ ImageNet ResNet50。 https://pan.baidu.com/s/1WAkU9ZA_j-OmzO-sdk9whA https://www.dropbox.com/s/48b850vmnaaasfl/imagenet-resnet-50.zip?dl=0 ImageNet ResNet152。 https://pan.baidu.com/s/1nzQ6CzmdKFzg8bM8ChZFQg https://www.dropbox.com/s/8ypcra4nqvm32v6/imagenet-resnet-152.zip?dl=0 测验 检查test.py测试。 结果 1.缺陷检测 2.人脸检测+人脸对齐 Models 人脸检测模型,比原版误检更低,角度较大和模糊超过0.6的face会自动忽略,更适合人脸识别的应用: https://www.multcloud.com/share/5079e926-283b-4833-a216-b3de42eea0fe 参考 转载自:https://github.com/bleakie/RetinaDetector

资源

基于CenterNet训练的目标检测和人脸对齐和姿态估计模型

CenterMulti代码实现参考以下 使用中心点检测的对象检测,3D检测和姿态估计: 参考: https://github.com/xingyizhou/CenterTrack https://github.com/jinfagang/CenterNet_Pro_Max https://github.com/xingyizhou/centernet Backebone Strong: 增加支持mobilenetV2,mobilenetV3,efficientdet,shufflenetv2,部分网络需要支持DCNv2. Data process: 添加widerface转coco格式,参见root/data_process. Purpose Object Detection 类别: 可支持行人、人脸、车辆、缺陷等检测,只需要修改数据加载即可 keypoint or pose 姿态估计or关键点检测: 修改keypoint的数量及coco加载keypoint的格式可针对性训练多种形式的pose(如landmark等) 姿态估计参考centerpose https://github.com/tensorboy/centerpose 模型 https://pan.baidu.com/share/init?surl=DzlvIZ3ujEzNLsU50UWLNw 提取码:u3pq 缺陷:缺陷模型基于mobilenetv2训练,由于部分数据标定不准,所以结果会有偏差,建议只供培训前。 centerface:该版本的centerface是基于修改的centernet训练,训练数据参照更广泛的face,其中对质量不好的face进行了过滤,使其更适合人脸识别的工程应用,模型有两个,分别是3.5M和890万 centerface的训练:例如修改lib/datasets/coco_hp.py里num_joints = 5;flip_idx = [[0, 1], [3, 4]]以及整个项目里17的关节点数全部置换成5,dets[39:51]这类全部换成dets[15:20]等 TensorRT 1.torch转onnx python convert2onnx.py 2.onnx转TensorRT python demo_tensorrt.py 3.检测框架支持的TensorRT 引文 转载自:https://github.com/bleakie/CenterMulti

资源

带有关键点检测的超轻量级人脸检测器

实现功能 Retinaface-mobile0.25的训练/测试/评估/ncnn C++推理 Face-Detector-1MB slim和RFB版本的训练/测试/评估/ncnn C++推理 人脸5个关键点检测 支持onnx导出 网络parameter和flop计算 带有关键点检测的超轻量级人脸检测器 提供了一系列适合移动端部署包含关键的人脸检测器: 对Retinaface-mobile0.25修改anchor尺寸,使其更适合边缘计算; 重新实现了Face-Detector-1MB 并添加了关键点检测和ncnn C++部署功能, 在绝大部分情况下精度均好于原始版本. 测试的运行环境 Ubuntu18.04 Python3.7 Pytorch1.2 CUDA10.0 + CUDNN7.5 精度 Widerface测试 在wider face val精度(单尺度输入分辨率:320*240) 方法 Easy Medium Hard libfacedetection v1(caffe) 0.65 0.5 0.233 libfacedetection v2(caffe) 0.714 0.585 0.306 version-slim(原版) 0.765 0.662 0.385 version-RFB(原版) 0.784 0.688 0.418 version-slim(our) 0.795 0.683 0.34.5 version-RFB(our) 0.814 0.710 0.363 Retinaface-Mobilenet-0.25(our) 0.811 0.697 0.376 在wider face val精度(单尺度输入分辨率:640*480) 方法 Easy Medium Hard libfacedetection v1(caffe) 0.741 0.683 0.421 libfacedetection v2(caffe) 0.773 0.718 0.485 version-slim(原版) 0.757 0.721 0.511 version-RFB(原版) 0.851 0.81 0.541 version-slim(our) 0.850 0.808 0.595 version-RFB(our) 0.865 0.828 0.622 Retinaface-Mobilenet-0.25(our) 0.873 0.836 0.638 ps: 测试的时候,长边为320 或者 640 ,图像等比例缩放. Parameter and flop 方法 parameter(M) flop(M) version-slim(our) 0.343 98.793 version-RFB(our) 0.359 118.435 Retinaface-Mobilenet-0.25(our) 0.426 193.921 ps: 320*240作为输入 使用 安装 下载安装 下载此项目文件 安装 “Pytorch version 1.1.0+”和“torchvision 0.3.0+” 代码基于Python 3 数据 数据集目录如下 ps: wider_val.txt只包含val文件名,不包含标签信息。 我们提供了上面目录结构中使用的数据集。 Link: 来自google cloud或百度云 密码: ruck 训练 训练前,你可以在data/config.py and train.py中检查一下网络配置(如batch_size, min_sizes and steps 等) 使用WIDER FACE训练模型: 如果你不想进行训练,我们也提供了一个./weights的训练模型 评估 评估widerface val 生成txt文件 评估txt结果.演示 你也可以使用widerface的MATLAB官方演示。 C++_inference _ncnn 生成onnx文件 onnx文件更改为ncnn(.param和.param) 将*.param和*.bin放进模型中 建立项目(在CmakeList.txt中设置opencv路径) 运行 我们在 "./model"中提供了转换后的文件 参考 FaceBoxes Retinaface (mxnet) Retinaface (pytorch) Ultra-Light-Fast-Generic-Face-Detector-1MB 来源https://github.com/biubug6/Face-Detector-1MB-with-landmark

资源

中文语音克隆兼中文语音合成系统

注意事项: 这个说明是新版GMW版本的语音克隆框架的说明,使用ge2e(编码器)-mellotron-waveglow的模块(简称GMW),运行更简单,效果更稳定和合成语音更加优质。 基于项目Real-Time-Voice-Cloning改造为中文支持的版本ESV版本的说明见README-ESV,该版本使用encoder-synthesizer-vocoder的模块(简称ESV),运行比较复杂。 需要进入zhrtvc项目的代码子目录【zhrtvc】运行代码。 zhrtvc项目默认参数设置是适用于数据目录中的样本数据,仅用于运行通整个流程。 推荐使用mellotron的语音合成器和waveglow的声码器,mellotron设置多种模式适应多种任务使用。 中文语料 包含8个开源数据集,3200个说话人,900小时语音,1300万字 合成样例 https://github.com/KuangDD/zhrtvc/tree/master/data/files/examples 目录介绍 zhrtvc 代码相关的说明详见zhrtvc目录下的readme文件。 models 预训练的模型在百度网盘下载,下载后解压,替换models文件夹即可。 data 语料样例,包括语音和文本对齐语料。 注意: 该语料样例用于测试跑通模型,数据量太少,不可能使得模型收敛,即不会训练出可用模型。 在测试跑通模型情况下,处理自己的数据为语料样例的格式,用自己的数据训练模型即可。 该存储库是通过实时工作的声码器实现从说话者验证到多说话者语音合成的转换学习(SV2TTS)的实现。 代码说明 使用指引 主要做语音合成器Mellotron,声码器WaveGlow。 新版GMW版本的语音克隆框架,用ge2e(编码器)-mellotron-waveglow的模块(简称GMW),运行更简单,效果更稳定和合成语音更加优质。 旧版ESV版本是基于项目的Real-Time-Voice-Cloning改造为中文支持的版本,使用encoder-synthesizer-vocoder的模块(简称ESV),运行比较复杂。 建议使用GMW版本开发,本项目重点维护GMW版。 容器环境 仅限基于ubuntu18.04,python环境是python3.7版本,用anaconda的环境。必要依赖已经安装好,TensorFlow和Torch可以根据自己的实际情况安装。 安装依赖环境 建议用zhrtvc / makefile.py来安装依赖包,如果有依赖包没有成功安装,再单独处理不能成功安装的依赖包。 执行: python makefile.py 或者: python makefile.py [requirement.txt的路径] 注意: GMW版本的依赖:requirements_gmw.txt ESV版本的依赖:requirements_esv.txt 全部版本适用的依赖:requirements.txt 语音合成器mellotron 处理语料 生成用于训练mellotron的数据。 语料格式 metadata.csv 一行描述一个音频文件。 每一行的数据格式: 音频文件相对路径\ t文本内容\ n 例如: aishell / S0093 / BAC009S0093W0368.mp3有着对美和品质感执着的追求 注意: 文本可以是汉字,拼音,汉字可以是分词后的汉字序列。 训练mellotron模型 用处理好的数据训练mellotron的模型。 注意: 如果多个数据一起用,可以用绝对路径表示,汇总到一个metadata.csv文件,便于训练。 应用mellotron模型。 语音合成器waveglow 处理语料 生成用于训练waveglow的数据。 方法同处理mellotron的数据方法。 因为训练声码器只需要音频即可,不需要文本和适当人的标注,故可以任意指定文本和适当的人,格式如训练mellotron的数据格式即可。 训练waveglow模型。 应用waveglow模型。 参考项目 实时语音克隆 此存储库是一个从语音验证到多说话者文本到语音合成(SV2TTS)的迁移学习的实现,其语音编码器可以实时工作 SV2TTS是一个三阶段的深度学习框架,它允许从几秒钟的音频中创建语音的数字表示,并使用它来调节经过训练的文本到语音模型,以推广到新的语音。 结果展示 转载自:https://github.com/KuangDD/zhrtvc

资源

基于CNN的图像分类器(使用Kaggle猫狗图像数据集)

环境要求 python3 numpy >= 1.14.2 keras >= 2.1.6 tensorflow >= 1.6.0 h5py >= 2.7.0 python-gflags >= 3.1.2 opencv-python >= 3.4.0.12 文件描述 inputs: 猫狗图片样本数据,[下载地址],使用keras库中的ImageDataGenerator类读取,需要将每个类的图片放在单独命名的文件夹中存放; train.py: 自建的简单CNN,训练后测试集精度约83%; pre_train.py: 利用已训练的常用网络(基于ImageNet数据集训练),进行迁移学习,测试集精度约95%以上; data_helper.py: 数据读取和预处理模块; img_cnn.py: 基于TensorFlow的自定义简单卷积神经网络。 Start training 训练自定义的小型CNN python train.py 在VGG16的基础上进行迁移学习 python pre_train.py Visualizing results in TensorBoard tensorboard --logdir /"PATH_OF_CODE"/log/"TIMESTAMP"/summaries/ 转载自:https://github.com/zlxy9892/cnn-classification-dog-vs-cat

资源

基于MATLAB实现传统图像去噪算法

项目介绍 项目的背景 该项目是为了研究基于深度卷积神经网络的图像去噪算法,是利用DnCNN模型,但是为了比较该算法的效果,另外实现了四种传统的图像去噪算法(均值滤波、中值滤波、非局部均值滤波NLM和三维块匹配滤波BM3D)作为对照组。 噪声强度和类型 项目中实现五种算法对噪声强度为10,15,20...60,65,70的高斯白噪声进行处理。 评价指标 图像去噪后,如何评估算法去噪效果的好坏呢?项目中采用峰值信噪比PSNR和结构相似性SSIM作为评价指标。一般来说,PSNR越大,去噪效果越好。SSIM取值为0到1,越接近1,表示效果越好。 数据集介绍 该项目中只是对Set12数据集进行处理,也就是项目中的Set12目录下的12张图片。如果觉得数据量不够充分,可以自行添加其他数据集,在代码中修改一下数据集的目录即可。 代码介绍 对于均值滤波、中值滤波、和NLM,MATLAB都已经实现了,所以我们直接调用MATLAB自带的函数就可以。 五种算法都是对Set12数据集进行去噪,去噪的结果并没有保存,只是在运行过程中能看到去噪前和去噪后的图像对比,感兴趣的朋友可以自己将图像保存下来观察。 代码运行 五种算法分别在五个不同的目录中,所以只需要进行对应的目录,运行代码即可。 均值滤波、中值滤波、NLM算法对应的目录分别为avefilter、medainfilter、nlm-image-denoising。每个目录下只有一个.m文件,所以只需要运行对应的文件即可。 BM3D对应的目录是BM3D,运行该目录下的main.m程序即可。 DnCNN对应的目录是DnCNN,运行该目录下的Demo_test_DnCNN.m程序即可,该算法目录中对应的还有好几个代码,都是原项目中有的。 转载自:https://github.com/weitw/ImageDenoise

资源

基于jstorm和flink的一体化实时计算服务平台

实时计算简介 随着互联网应用的迅速普及,需要进行处理的数据不仅在数量上迅速增长,在数据处理的时效性上也比之前有更加强烈的需求。在传统的数据处理流程中,一般是先收集数据并且将数据存储到数据存储介质中。然后当需要的时候通过对存储好的数据进行相关处理得到分析后的结果。这样的做法虽然能保证处理数据的准确性和完整性,但是却不能保证很好的时效性。导致人们无法及时的根据最新的数据分析结果做出正确的决策,从而数据的价值也随着时间的流逝而失去价值。 为了解决这些问题, 相对于保证数据分析的准确性,完整性而忽视时效性的传统批处理而言,产生了更加注重时效性的实时计算的概念。与一次性处理全部数据的批量计算不同,实时计算一般是对无限的数据流进行持续不断的连续运算,并对外输出运算结果供用户使用。 关于统一实时计算平台 目前常用的实时计算技术包括storm,jstorm,spark streaming和flink等,人们往往会根据自己业务需求的特点选择适合自己的实时计算引擎。而如何在公司内部部署和使用这些实时计算技术呢,下面以最常用的jstorm为例进行分析说明。 首先我们可以在一台机器上运行实时计算,也就相当于在一台机器上同时运行jstorm的 nimbus进程,supervisor进程以及具体任务的worker进程。这样做有很明显的缺点,包括不可扩展,性能受限于单台机器的资源,无法进行高可用等问题。 然后,为了解决以上的问题, 每个业务线可以选择自建独立的实时计算集群,这样的话虽然能在一定程度上克服单机运算的缺点,但同时也有不可忽视的问题,例如为了保证集群的高可用等,每个集群至少要有四台机器,包括一个nimbus主节点,一个nimbus从节点,以及两个supervisor节点。这样就需要预先准备大量机器资源,同时由于是每个业务线独立搭建各自的实时计算集群,也就无法保证建立统一的监控,报警等体系,并且每个集群都需要进行独立维护,因此维护难度大,需要投入很多的精力。 为了克服上述这些问题,需要一个统一的实时计算平台,来克服上述方案的诸多缺点。 实时计算平台 1.本项目实时计算集群是完全运行在YARN集群之上的,并且和离线计算集群是互相独立的两个YARN集群,独立构建流计算集群可以避免离线业务的干扰,并且与在线业务,MQ等相关组件在相同机房,延时低。 2、 平台统一监控所有实时任务的运行状态,在实时计算引擎本身的高可用基础之上,平台提供了自己的任务恢复策略,尽量保证实时任务的持续运行。 3、 平台支持基于华为开源的 StreamCQL 进行 JSTORM实时任务的编写和提交,并为了满足公司业务的需求进行了相关函数的扩展。 4、 平台支持基于 FLINK SQL 进行实时任务的编写,并进行了相关语法的扩展,例如可以用sql 表述 任务的输入source,输出sink,并提交任务,指定任务名等,这样用户就可以在平台的web 页面 完全用类似SQL的脚本语言描述实时任务,而无需再进行任务相关java代码的编写。 5、平台的JSTORM on YARN 使用的是自研的AM,并做了相关调整,支持在yarn集群上以每个实时任务独占一个JSTORM的集群方式进行运行,并解决了一个YARN集群上同时运行多个jstorm集群时可能会发生的问题,例如不同jstorm集群的nimbus端口冲突的问题。 6、 对于JSTORM任务,本项目在原生的API之上进行了封装,忽略了用户在API中设置的参数信息,而使用平台页面设置的参数进行设置。 7、 在公司内部针对公司独有的一些MQ等中间件提供了定制好的组件,方便用户使用 在以上基础之上,此实时计算平台提供了一系列方便用户使用的特性,使用户可以通过平台对其实时任务进行一站式管理,主要包括如下功能: 1、实时计算平台实现了客户可以完全通过web页面来管控自己的实时计算任务,例如创建任务,启动任务,停止任务等等。 2、通过平台的web页面上传实时任务文件或者编辑保存实时任务的类SQL脚本,在平台进行实时任务多版本的维护,支持实时任务的版本回滚。 3、在平台直接提交实时任务到集群进行运行,免去了提交任务客户机维护的烦恼。 4、在平台web页面提交任务时可以直接设置运行参数,并且随着数据量的变化可以直接在平台调整运行参数,避免任务的重新打包。 下图为提交任务的示意图: 目前此实时计算平台为公司的多个业务场景提供服务,包括: 1、各种实时监控任务,目前例如公司内部关于 redis ,mq等中间件的监控等实时任务,这一部分任务有很大比例是基于 类sql脚本完成的 2、专车订单实时计费功能 3、租车车辆围栏相关实时计算任务 关于统一实时计算平台搭建的一些想法 1.划定平台的职责范围,利用有限的资源,集中资源做好核心功能. 2、 做好平台规划,能够清晰的知道平台的最终效果,设定里程碑,逐渐的实现平台。 3、 尽快的进行推广,接入各种实时任务,根据任务的实际运行情况,不断的进行调整和优化,避免闭门造车,完全实现后再推广。 4、目前的实时计算技术没有完美的银弹,所以实时计算平台设计上要能支持多种主要技术,例如JSTORM,SPARK,FLINK,针对任务的特点选用不同技术。 5、平台是根据需求不断演进的,目前此平台支持运行JSTORM和FLINK的任务,并且正在开发针对基于python脚本的Spark Streaming任务,方便不熟悉java的相关同学能够在平台上使用python脚本进行实时任务的开发。 6、底层技术的推广和研究不能懈怠,关于实时计算平台的搭建,不能仅仅停留在将已有的实时计算技术做个封装,对外提供一个web界面可以使用就叫完成了。在此基础之上,应该投入更多的精力对FLINK,JSTORM等相关技术进行深入研究,包括运行机制,参数优化,功能拓展与延伸,在保证任务稳定运行的基础之上能够开发出更多有用的特性。 7、应该投入更多的精力在平台推广上,平台搭建好之后不应该单纯的等用户来使用,而应该主动的了解业务场景,为其提出使用实时计算满足其业务场景的合理化建议,在和业务的合作中进一步对平台进行完善。 转载自:https://github.com/ucarGroup/PoseidonX

  • 1
  • 94
  • 95
  • 96
  • 168
前往