3.1 系统主要软件
商业智能可视化系统的开发是一个复杂的过程,需要运用大量的软件和技术,本节将介绍系统开发过程中涉及的主要软件,包括Hadoop、Python、Apache Superset。
3.1.1 Hadoop
Hadoop框架是一个通用的分布式系统基础结构,包含多种组件:Hadoop分布式文件系统(HDFS),该结构将文件以Hadoop本地格式存储,并在集群内并行;YARN用于协调应用程序运行时的调度程序;MapReduce用于算法并行处理数据。另外,使用Thrift客户端,用户可以编写MapReduce或Python代码等。Hadoop集群如图3-1所示。
图3-1 Hadoop集群
Hadoop分布式文件系统是一种文件系统实现,类似于NTFS、EXT3、EXT4等,它将存储在集群中的文件分成块,每块默认大小为64Mb,比一般文件系统块大得多,也会有多块冗余备份(默认为3)分布在多台机器上,可以提高文件系统的容错能力,主要有以下几个部分。
1. 名称节点
名称节点(NameNode)的职责在于存储整个文件系统的元数据,这是一个非常重要的角色。元数据在集群启动时会加载到内存中,元数据的改变也会写到磁盘的系统映像文件中,同时还会维护对元数据的编辑日志。HDFS存储文件时将文件划分成逻辑上的块存储,对应关系都存储在名称节点上,如果有损坏,整个集群的数据就不可用。
我们可以采取一些措施备份名称节点的元数据,例如,将名称节点目录同时设置到本地目录和一个NFS目录,这样任何元数据的改变都会写入两个位置做冗余备份,当使用中的名称节点关机后,可以使用NFS上的备份文件恢复文件系统。
2. 第二名称节点
第二名称节点(SecondaryNameNode)的作用是定期通过编辑日志合并命名空间映像,防止编辑日志过大。第二名称节点的状态滞后于主名称节点,如果主名称节点损坏,则必定会对整个文件造成损失。
3. 数据节点
数据节点(DataNode)是HDFS中具体存储数据的地方,一般有多台机器,除了提供存储服务,还定时向名称节点发送存储的块列表。名称节点没有必要永久保存每个文件、每个块所在的数据节点,这些信息会在系统启动后由数据节点重建。
Hadoop一般采用MapReduce计算框架,在系统架构上,它是一种主从架构,由一个单独的JobTracker节点和多个TaskTracker节点共同组成,核心功能是将任务分解成多个小任务,由不同计算者同时参与计算,并将各个计算者的计算结果合并,得出最终结果。模型本身非常简单,一般只需要实现两个接口即可,关键在于怎样将实际问题转化为MapReduce任务。
Hadoop的MapReduce主要由以下两部分组成。
1. 作业跟踪节点
作业跟踪节点(JobTracker)负责调度构成一个作业的所有任务,这些任务分布在不同的TaskTracker节点上,监控它们的执行,以及重新执行已经失败的任务等。
2. 任务跟踪节点
任务跟踪节点(TaskTracker)负责具体的任务执行,通过“心跳”的方式告知JobTracker其状态,并由JobTracker根据报告的状态为其分配任务。TaskTracker会启动一个新JVM运行任务,当然JVM实例也可以被重用。
Apache Hive是Facebook公司为满足对每天产生的海量社交网络数据进行分析和管理的需求而产生和发展的。如今,Hive已经成为一个成功的Apache项目,很多互联网企业都把它作为一个通用的数据处理平台。Hive是目前最为主流的数据仓库工具,绝大多数的大数据应用厂商都在使用它来处理大数据领域中的查询、存储、修改等底层操作。
3.1.2 Python
Python是一种简单易学并且功能强大的编程语言,它能以简单有效的方式实现面向对象编程。Python优美的文法和动态类型,加上其解释功能,使之成为编程人员用来写脚本或开发应用程序的理想语言。Python具有简单易学、表达能力强、免费开放源码及可移植性等特性。
目前,Python分为2.X和3.X两个版本。Python的3.X版本是一次较大的升级,为了避免引入过多的负担,在设计时并未考虑向下兼容。Python 2.7已于2020年1月1日停止支持,当用户希望继续获得Python 2.7相关的支持时,就需要向相关厂商支付费用,Python其他版本的发布日期和停止支持日期如表3-1所示。
表3-1 Python版本信息
Python是人工智能领域的热门编程语言。2021年8月,TIOBE公布了编程语言排行榜,其中Python的占比为11.86%,达到了历史新高,排名位于第二,超越Java的10.43%。
现在,Python有很多数据可视化库,如Matplotlib、Seaborn、Pyecharts、Bokeh、HoloViews、Plotly、NetworkX等。
Matplotlib是Python绘图图库,这是一种基于NumPy的操作,可视化功能非常强大,已经成为Python中最基本的可视化工具,能够很容易绘制一些复杂的图。
与Matplotlib类似,Seaborn也是Python用于数据可视化分析的第三方包。Seaborn是基于Matplotlib的更高级的API封装,其使绘制图表变得更简单。
Pyecharts是一个用来生成类似Echarts图表的类库,可与Python连接,以便于在Python中直接生成图形。
Bokeh是基于JavaScript实现数据的交互式可视化工具,它可以在Web浏览器中呈现美观的视觉效果,但是其版本时常更新,部分语法无法向下兼容。
HoloViews是一个面向数据分析和可视化的Python开源插件库,它可以用很少的代码表达想要做的分析,专注于探索和传递的内容,而不是结果。
Plotly是Python的一个在线可视化交互库,它能提供Web在线交互,功能非常强大,可以在线绘制多种图形,其绘制的图形可以媲美Tableau的高质量视图。
NetworkX是一种创造和操纵复杂网络的可视化库,能够生成各种随机网络和经典网络,还可以对网络结构进行分析,建立网络模型,设计新型网络算法等。
3.1.3 Apache Superset
Apache Superset是基于Python的开源BI工具,它是一个大数据探索和可视化平台,允许用户使用简单的无代码可视化构建器和SQL编辑器,可以方便、快捷地创建数据看板。2015年,Apache Superset由Airbnb企业研发和开源,并于2017年5月进入Apache孵化器,在2021年1月成为Apache软件基金会的顶级项目。目前,Apache Superset在国内的去哪儿网、哔哩哔哩、快手、豆瓣、VIPKID等平台都有应用。
Apache Superset可以通过连接数据库来配置数据库中的各个表,设置可视化样式,例如,基础柱状图、词云、地图、树形图等。这些都能为数据分析员提供丰富的可视化图表。最新的Apache Superset 1.2版已经支持48种图形,部分图表如图3-2所示。
图3-2 Apache Superset 1.2版部分图表
Apache Superset 1.2版本不仅增加了许多新功能,在可用性方面也有所提升,此外还拥有更高的质量标准,因此也间接提升了未来发布版本的标准。Apache Superset 1.2版本新设计了主页和菜单,简化了导航内容,丰富了现有的界面,如图3-3所示。
图3-3 Apache Superset 1.2版本界面
Apache Superset 1.2版本除了提升了针对开发者的使用体验、增强了稳定性和增加了问题修复功能外,还引入了新功能。此外,该版本更新了可视化控件,提供了丰富的可视化库,支持创建更加一致和现代化的界面,还采用Apache ECharts作为可视化的核心库。