大数据项目实践:基于hadoop+spark+mongodb+mysql+c#开发医院临床知识库系统

网友投稿 1733 2023-04-28

大数据项目实践:基于hadoop+spark+mongodb+mysql+c#开发医院临床知识库系统

大数据项目实践:基于hadoop+spark+mongodb+mysql+c#开发医院临床知识库系统

一、前言

从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩。不但有数字化医院管理信息系统(HIS)、影像存档和通信系统(PACS)、电子病历系统(EMR)和区域医疗卫生服务(GMIS)等成功实施与普及推广,而且随着日新月异的计算机技术和网络技术的革新,进一步为数字化医院带来新的交互渠道譬如:远程医疗服务,网上挂号预约。

随着IT技术的飞速发展,80%以上的三级医院都相继建立了自己的医院信息系统(HIS)、电子病历系统(EMR)、合理用药系统(PASS)、检验管理系统(LIS)、医学影像存储与共享系统(PACS)以及移动查房、移动护理系统以及与大量的第三方接口整合应用,IT在医疗领域已经进入了一个大数据时代,随着HIS的广泛应用及其功能的不断完善,HIS收集了大量的医疗数据。

进入2012年,大数据及相关的大数据处理技术越来越多地被国人提及,人们也普遍的接受大数据的概念,大数据技术也影响着我们的日常生活,互联网行业已经得到广泛应用,电信、银行等行业也已经在广泛尝试使用大数据技术提供更稳健和优质的服务。

在目前情况下,医疗IT系统收集了这些集其有价值的数据,但是这些大量的有价值的历史医疗数据并没有发挥出其应有的价值,不能为一线临床医生提供医疗诊断辅助,也不能为医院管理和经营决策提供必须的支持。

针对以上现状,思考拟利用医院现有的历史就诊记录、处方、诊断、病历数据,挖掘出有价值的基于统计学的医学规则、知识,并基于这些规则、知识信息构建专业的临床知识库,为一线医务人员提供专业的诊断、处方、用药推荐功能,基于强大的关联推荐能力,极大的提高医疗服务质量,减轻一线医疗人员的工作强度。

二、Hadoop&Spark

目前大数据处理领域的框架有很多。从计算的角度上看,主要有MapReduce框架(属于Hadoop生态系统)和Spark框架。其中Spark是近两年出现的新一代计算框架,基于内存的特性使它在计算效率上大大优于MapReduce框架;从存储角度来看,当前主要还是在用Hadoop生态环境中的HDFS框架。HDFS的一系列特性使得它非常适合大数据环境下的存储。

2.1 Hadoop

Hadoop不是一个软件,而是一个分布式系统基础架构,是由Apache基金会主持开发的一个开源项目。Hadoop可以使用户在不了解分布式底层实现的情况下,开发分布式程序,从而充分利用电脑集群的威力,实现高速运算和大规模数据存储。Hadoop主要有HDFS、MapReduce、Hbase等子项目组成。

Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且使用可靠、高效、可伸缩的方式进行数据处理。Hadoop假设数据处理和存储会失败,因此系统维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop通过并行工作,提高数据处理速度。Hadoop能够处理PB级数据,这是常规数据服务器所不能实现的。此外,Hadoop依赖于开源社区,任何问题都可以及时得到解决,这也是Hadoop的一大优势。Hadoop建立在Linux 集群上,因此成本低,并且任何人都可以使用。它主要具有以下优点:

1高可靠性。Hadoop系统中数据默认有三个备份,并且Hadoop有系统的数据检查维护机制,因而提供了高可靠性的数据存储。

2扩展性强。Hadoop在普通PC服务器集群上分配数据,通过并行运算完成计算任务,可以很方便的为集群扩展更多的节点。

3高效性。Hadoop能够在集群的不同节点之间动态的转移数据。并且保证各个节点的动态平衡,因此处理速度非常快。

4高容错性。Hadoop能够保存数据的多个副本,这样就能够保证失败时,数据能够重新分配。

Hadoop总体架构如下图所示,Hadoop架构中核心的是MapReduce和HDFS两大组件。

Google曾发表论文《Google File System》,系统阐述了Google的分布式文件系统的设计实现,Apache针对GFS,进行开源开发,发布了Hadoop的分布式文件系统:Hadoop Distributed File System,缩写为HDFS。MapReduce的核心思想也由Google的一篇论文《MapReduce:Simplified Data Processing on Large Clusters》 提出,筒单解释MapReduce的核心思想就是:任务分解执行,执行结果汇总。

2.2 Spark

Spark是UC Berkeley大学AMP实验室开源的类似MapReduce的计算框架,它是一个基于内存的集群计算系统,最初的目标是解决MapReduce磁盘读写的开销问题,当前***的版本是1.5.0。Spark—经推出,就以它的高性能和易用性吸引着很多大数据研究人员,在众多爱好者的努力下,Spark逐渐形成了自己的生态系统( Spark为基础,上层包括Spark SQL,MLib,Spark Streaming和GraphX),并成为Apache的***项目。

Spark的核心概念是弹性分布式存储(Resilient Distributed Datasets, RDD)间,它是Spark对分布式内存进行的抽象,使用者可以像操作本地数据集一样操作RDD,从而可以将精力集中于业务处理。在Spark程序中,数据的操作都是基于RDD的,例如经典的WordCount程序,其在Spark编程模型下的操作方式如下图所示:

可以看到Spark先从文件系统抽象出RDD1,然后由RDD1经过flatMap算子转换得到RDD2,RDD2再经过reduceByKey算子得到RDD3,***RDD3中的数据重新写回文件系统,一切操作都是基于RDD的。

三、思路和架构

经过多方面的思考,最终决定基于Spark技术进行构建和实现医院临床知识库系统,采用***/Sequoiadb构建大数据仓库,做为大数据的存储中心,采用Hadoop+Spark1构建大数据分析平台,基于AgileEAS.NET SOA中间件构建ETL数据抽取转换工具(后期部分换用了Pentaho Kettle),基于AgileEAS.NET SOA中间件构建知识库的服务门户,通过WCF/WebService与HIS系统进行业务整合集成,使用AgileEAS.NET SOA+FineUI构建基础字典管理以后分析结构的图像化展示功能。

最初我们选择了***做为大数据存储中心,为此我还特意的为***完成了C#驱动,参考本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github一文,但是一方面熟悉***的技术人员太少了,维护是个问题,***,在差不多8多个月这后我们换用了*** 3.0做为大数据存储中心。

最初我们选择了hadoop2.0+spark1.3.1版本之上使用scala2.10开发完成了医院临床知识库系统,请参考centos+scala2.11.4+hadoop2.3+spark1.3.1环境搭建,但是在后期替换Sequoiadb为***的同时,我们把计算框架也由hadoop2.0+spark1.3.1升级到了hadoop2.6+spark1.6.2。

考虑到spark都部署在Linux的情况,对于spark分析的结果输出存储在Mysql5.6数据库之中,系统所使用的各种字典信息也存储在Mysql之中。

spark数据分析部分的代码使用IntelliJ IDEA 14.1.4工具进行编写,其他部分的代码使用VS2010进行编写。

3.1 总体架构

整个系统由数据采集层、存储分析层和应用逻辑层三大部分以及本系统所选所以来的外部数据源。

本系统的外部数据源目前主要是医院信息系统所产生的临床数据,目前主要集中在HIS系统之中,后期将采依赖于EMR、LIS、PACS系统。

数据采集层主要负责从临床业务系统采集海量历史临床数据同,历史记录采集方式分为批采集和实时采集,在数据采集过程之中对原始数据进行格工检查,并对原始数据进行清洗和转换,并将处理后的数据存储在大数据仓库之中。

存储分析层主要负责数据存储以及数据分析两大部分业务,经过清洗转换的合理有效数据被存储在大数据集群之中,使用JSON格式,大数据存储引用使用***数据库,数据分析部分由Hadoop/Spark集群来完成,大数据存储经由Spark导入并进行分析,分析结果写入临床知识数据库,临床知识数据库使用MySql数据库进行存储。

应用逻辑层主要负责人机交互以及分析结构回馈临床系统的渠道,通过WebUI的方式向临床医生、业务管理人员提供列表式、图像化的知识展示,也为临床系统的业务辅助、推荐功能提供调用的集成API,目前API主要通过WebService、WebAPI两种方式提供。

3.2 总体流程

整个系统经由数据源数据采集,写入大数据存储***集群,然后由Spark进行分析计算,分析生成的临床知识写入MySQL知识库,经由WebUI以及标准的API交由临床使用。

3.3 数据导入流程

历史数据的采集导入使用初期使用AgileEAS.NET SOA 的计划任务配何C#脚本进行实现,由计划任务进行协调定时执行,具体的数据导入代码根据不同的临床业务系统不同进行脚本代码的调整,也可以使用Pentaho Kettle进行实现,通过Pentaho Kettle可配置的实现数据的导入。

3.4 物理结构设计

临床数据源为本系统进行分析的数据来源,源自于临床HIS、EMR,目前医院的HIS使用*** 2008 R2数据库,EMR使用ORACLE 11G数据库,运行于Windows2008操作系统之上。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SQL性能优化前期准备-清除缓存、开启IO统计
下一篇:如何在MySQL中存储emoji?
相关文章