大数据在经济发展中的重大意义,并不意味着它可以取代一切对社会问题的理性思考,科学发展的逻辑不能迷失在海量数据中。大数据技术体系庞大而复杂,基础技术包括数据采集、数据预处理、分布式存储、NoSQL数据库、数据仓库、机器学习、并行计算和可视化等多种技术门类和不同技术水平。
一、数据存储
Hadoop作为一个开源框架,是专门为离线和大规模数据分析而设计的,而HDFS作为其核心存储引擎,在数据存储中得到了广泛应用。HBase是一个分布式的、面向列的开源数据库,可以看作是hdfs的封装,其本质是数据存储和NoSQL数据库。HBase是一个Key/Value系统,部署在hdfs上,克服了hdfs在随机读写方面的缺点。和hadoop一样,Hbase主要依靠横向扩展,通过增加廉价的商用服务器来增加计算和存储容量。Phoenix相当于一个Java中间件,它帮助开发工程师访问NoSQL数据库,就像使用JDBC访问关系数据库一样。
纱线是一个Hadoop资源管理器,可以为上层应用提供统一的资源管理和调度。它的引入在利用率、统一资源管理和数据共享方面给集群带来了巨大的好处。纱线由以下组件组成:全局资源管理器、资源管理器的每个节点代理的节点管理器、代表每个应用程序的应用程序,以及每个应用程序主控器在节点管理器上运行多个容器。Mesos是一个开源的集群管理软件,支持Hadoop、ElasticSearch、Spark、Storm和Kafka。Redis是一个速度非常快的非关系数据库,可以存储键和五种不同类型的值之间的映射,将内存中存储的键值对数据持久化到硬盘上,使用复制特性来扩展性能,还可以使用客户端分片来扩展写入性能。
Atlas是介于应用程序和MySQL之间的中间件。在后端DB的视图中,Atlas相当于与其连接的一个客户端,在前端应用的视图中,Atlas相当于一个DB。Atlas作为服务器,与应用程序进行通信,应用程序实现了MySQL的客户端和服务器协议,与MySQL作为客户端进行通信。它对应用屏蔽了数据库的细节,还维护了连接池,以减轻MySQL的负担。启动Atlas后,会创建多个线程,其中一个为主线程,其余为工作线程。主线程负责监听所有客户端连接请求,而工作线程只监听主线程的命令请求。随着互联网科技的蓬勃发展,人工智能时代即将到来,所以抓住下一个窗口。帮助那些想向互联网方向学习,但因为时间和资源不足而放弃的人。
Kudu是围绕Hadoop生态系统构建的存储引擎。Kudu与Hadoop生态系统有着相同的设计理念。它运行在普通服务器上,可以大规模分布式部署,满足行业高可用性要求。设计理念是对快速数据进行快速分析。作为一个开源存储引擎,它可以提供低延迟的随机读写和高效的数据分析。Kudu不仅提供了用于插入、更新和删除的行级API,还提供了接近Parquet性能的批量扫描操作。使用相同的存储不仅可以随机读写,还可以满足数据分析的要求。Kudu有广泛的应用,例如实时数据分析和数据可能变化的时间序列数据应用。在数据存储过程中,涉及的数据表有数百列,其中包括各种复杂的Query。建议采用拼花、ORC等列存储方式压缩数据。拼花地板可以支持灵活的压缩选项,并显著减少磁盘上的存储。
二、数据查询和分析
Hive的核心工作是将SQL语句翻译成MR程序,可以将结构化数据映射成数据库表,并提供HQL(Hive SQL)查询功能。Hive本身并不存储和计算数据,它完全依赖于HDFS和MapReduce。Hive可以理解为一个客户端工具,将SQL操作转换成相应的MapReduce作业,然后在hadoop上运行。Hive支持标准的SQL语法,这消除了用户编写MapReduce程序的需要。它的出现使精通SQL技能但不熟悉MapReduce、编程能力弱、不擅长Java语言的用户能够方便地在HDFS大规模数据集上查询、汇总和分析数据。Hive是为批量处理大数据而诞生的。Hive的出现解决了传统关系数据库(MySql、Oracle)处理大数据的瓶颈。Hive将执行计划分为map-> shuffle-> reduce-> map-> shuffle-> reduce…如果一个查询被编译成多轮MapReduce,会有更多的中间结果。由于MapReduce执行框架本身的特点,过多的中间进程会增加整个Query的执行时间。在Hive的运行过程中,用户只需要创建表、导入数据、编写SQL分析语句。这个过程的其余部分由Hive框架自动完成。
Impala是Hive的补充,可以实现高效的SQL查询。Impala用于在Hadoop上实现SQL,对大数据进行实时查询和分析。通过大家熟悉的传统关系数据库的SQL风格来操作大数据,数据也可以存储在HDFS和HBase中。Impala不再使用速度慢的Hive+MapReduce批处理,而是使用类似于商用并行关系数据库中的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine组成),可以直接查询来自HDFS或HBase的数据,具有SELECT、JOIN和统计功能,大大降低了延迟。Impala将整个查询分成一个执行计划树,而不是一系列MapReduce任务。与Hive相比,Impala没有MapReduce启动时间。
Hive适合长期批量查询分析,而Impala适合实时交互SQL查询。Impala为数据人员提供了一个大数据分析工具,可以快速实验和验证他们的想法。先用Hive进行数据转换,再用Impala对Hive处理的数据集进行快速数据分析。一般来说,Impala将执行计划表示为一个完整的执行计划树,可以更自然地将执行计划分配给每个Impala来执行查询,而不是像Hive那样组合成流水线映射->reduce模式,从而保证Impala具有更好的并发性,避免不必要的中间排序和洗牌。然而,Impala并不支持UDF,它所能处理的问题也有一定的局限性。Spark具有Hadoop MapReduce的特点,它将Job的中间输出结果保存在内存中,因此不需要读取HDFS。Spark支持内存分布式数据集,不仅可以提供交互式查询,还可以优化迭代工作负载。Spark是用Scala语言实现的,它使用Scala作为应用框架。与Hadoop不同,Spark和Scala可以紧密集成,其中Scala可以像本地收集对象一样轻松操作分布式数据集。Nutch是一个开源的Java搜索引擎。它提供了我们运行自己的搜索引擎所需的所有工具,包括全文搜索和网络爬虫。
Solr是一个用Java编写的全文搜索服务器,运行在Servlet容器(如Apache Tomcat或Jetty)中。它提供了类似Web-service的API接口,用户可以通过http请求向搜索引擎服务器提交一定格式的XML文件,生成索引。也可以通过Http Get操作进行搜索请求,得到XML格式的返回结果。Elasticsearch是一个开源全文搜索引擎,基于Lucene搜索服务器,能够快速存储、搜索和分析海量数据。它专为云计算而设计,可以实现实时搜索,稳定、可靠、快速,并且易于安装和使用。它还涉及一些机器学习语言。例如,Mahout的主要目标是创建一些可扩展的机器学习算法,供开发人员在Apache的许可下免费使用。深度学习框架Caffe,使用数据流图进行数值计算的开源软件库TensorFlow,以及其他常用的机器学习算法,如贝叶斯、逻辑回归、决策树、神经网络、协同过滤等。
三、数据采集和预处理
对于来自各种来源的数据,包括移动互联网数据、社交网络数据等。这些海量的结构化和非结构化数据是分散的,也就是所谓的数据孤岛。这个时候,这些数据就没有意义了。数据采集就是将这些数据写入数据仓库,将分散的数据整合在一起,对这些数据进行综合分析。数据收集包括文件日志收集、数据库日志收集、关系数据库访问和应用程序访问等。当数据量相对较少时,可以编写一个正则脚本将日志写入存储系统。但是随着数据量的增加,这些方法无法提供数据安全,操作维护难度大,需要更强的解决方案。
作为一个实时日志采集系统,Flume NG支持在日志系统中定制各种数据发送器进行数据采集,同时对数据进行简单处理后写入各种数据接收器(如text、HDFS、Hbase等)。水槽NG采用三层:药剂层、收集器层和储存层,每层均可水平展开。代理包括源、通道和接收器。Source用于将数据源消费(收集)到通道组件中,channel作为中间临时存储来存储source的所有组件信息。接收器从通道读取数据,并在成功读取后删除通道中的信息。网易数据运河NDC,字面意思是网易数据运河系统,是一个用于实时数据迁移、同步和订阅结构化数据库的平台解决方案。它集成了网易过去在数据传输领域的各种工具和经验,通过数据链路将单机数据库、分布式数据库、OLAP系统和下游应用连接在一起。除了确保高效的数据传输,NDC的设计遵循统一和平台化的理念。
Logstash是一个开源的服务器端数据处理管道,可以同时从多个来源收集和转换数据,然后将数据发送到您最喜欢的“存储库”。一个常见的存储库是Elasticsearch。Logstash支持各种输入选项,可以同时从许多常见的数据源中捕获事件,并且可以以连续流模式轻松地从您的日志、指示器、Web应用程序、数据存储和各种AWS服务中收集数据。Sqoop是一种在关系数据库和Hadoop之间传输数据的工具。它可以将关系数据库(如Mysql和Oracle)中的数据导入Hadoop(如HDFS、Hive和Hbase),也可以将Hadoop(如HDFS、Hive和Hbase)中的数据导入关系数据库(如Mysql和Oracle)。Sqoop使MapReduce作业(容错能力极强的分布式并行计算)能够执行任务。Sqoop的另一个优势是,它传输大量结构化或半结构化数据的过程是完全自动化的。
流媒体计算是行业研究的热点。流计算可以实时清理、聚合和分析多个高吞吐量的数据源,能够快速处理和反馈社交网站、新闻等存在的数据流。目前有很多大数据流分析工具,比如开源的strom、spark streaming等等。Strom集群结构是由一个主节点(nimbus)和多个工作节点(supervisors)组成的主从结构。主节点由配置静态指定,或者在运行时动态选择。nimbus和supervisor是Storm提供的后台守护程序,它们之间的通信是结合Zookeeper的状态变化通知和监控通知来处理的。nimbus process的主要职责是管理、协调和监控集群上运行的拓扑(包括拓扑发布、任务分配、事件处理过程中的任务重新分配等)。在等待nimbus分配任务后,supervisor进程生成并监控由worker(jvm进程)执行的任务。主管和工作人员在不同的JVM上运行。如果由主管启动的工作进程由于错误而退出(或被终止),主管将尝试重新生成一个新的工作进程。
当使用上游模块的数据进行计算、统计和分析时,我们可以使用消息系统,尤其是分布式消息系统。Scala编写的Kafka是一个基于发布/订阅的分布式消息系统。卡夫卡的设计理念之一是同时提供离线处理和实时处理,并将数据实时备份到另一个数据中心。卡夫卡可以有许多生产者和消费者共享多个主题,并以主题为单位总结信息。卡夫卡发布消息的节目叫制作人,也叫制作人,订阅话题消费消息的节目叫消费人,也叫消费者。当Kafka以集群模式运行时,它可以由一个服务或多个服务组成,每个服务称为一个代理。在运行过程中,生产者通过网络向卡夫卡集群发送消息,集群向消费者提供消息。卡夫卡通过动物园管理员管理集群配置,选举领导者,并在消费群体发生变化时进行再平衡。生产者使用推模式向代理发布消息,消费者使用拉模式从代理订阅和消费消息。卡夫卡可以和弗鲁姆一起工作。如果需要将流数据从Kafka传输到hadoop,可以使用Flume代理,使用Kafka作为源,这样就可以将数据从Kafka读取到Hadoop。
Zookeeper是一个分布式、开源的分布式应用协调服务,提供数据同步服务。它的主要功能是配置管理、名称服务、分布式锁和集群管理。配置是指在一个地方对配置进行修改,让所有对这个地方的配置感兴趣的人都可以更改,免去了繁琐的手动复制配置,保证了数据的可靠性和一致性。同时可以通过名称获取资源或服务的地址等信息,监控集群中机器的变化,实现类似心跳机制的功能。
四、数据可视化
对接一些BI平台,将分析得到的数据可视化,可以用来指导决策服务。主流BI平台,如敏捷BI Tableau、Qlikview、PowrerBI等。国外,SmallBI和国内新兴的网易等。在上述每个阶段,确保数据安全都是一个不容忽视的问题。Kerberos是一种基于网络身份验证的协议,用于在不安全的网络中以安全的方式验证个人通信。它允许一个实体在不安全的网络环境中进行通信,并以安全的方式向另一个实体证明其身份。控制权限的Ranger是一个Hadoop集群权限框架,为操作、监控和管理复杂数据提供权限,它提供了一个集中的管理机制来管理基于纱的Hadoop生态系统中的所有数据权限。它可以对Hive、Hbase等Hadoop生态组件进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松配置策略来控制用户对HDFS文件夹、HDFS文件、数据库、表和字段的访问。这些策略可以针对不同的用户和组进行设置,权限可以与hadoop无缝对接。
五、数据清理
MapReduce作为Hadoop的查询引擎,用于大规模数据集的并行计算。“地图”和“减少”是它的主要思想。程序员在分布式系统中运行程序非常方便,无需分布式并行编程。随着业务数据的增加,需要训练和清理的数据会越来越复杂。此时,需要一个任务调度系统,如oozie或azkaban,来调度和监控关键任务。Oozie是一个面向Hadoop平台的工作流调度引擎,提供RESTful API接口接受用户的提交请求(提交工作流作业)。提交工作流后,工作流引擎负责工作流的执行和状态转换。用户在HDFS上部署作业(MR作业),然后将工作流提交给Oozie,后者以异步方式将作业(MR作业)提交给Hadoop。这就是为什么在调用ozie的RESTful接口提交作业后,可以立即返回一个JobId,用户程序不必等待作业执行(因为有些大型作业可能会执行很长时间(几个小时甚至几天)。Oozie将工作流对应的Action异步提交给hadoop,在后台执行。
阿兹卡班也是一种工作流控制引擎,可以用来解决hadoop或spark等多个离线计算任务之间的依赖问题。阿兹卡班主要由三部分组成:关系数据库、阿兹卡班Web服务器和阿兹卡班执行器服务器。阿兹卡班将大部分状态信息保存在MySQL中,阿兹卡班Web Server提供Web UI,这是阿兹卡班的主要管理器,包括工作流执行过程中的项目管理、身份验证、调度和监控。阿兹卡班执行器服务器用于调度工作流和任务,记录工作流或任务的日志。计算任务的处理平台Sloth是网易首个自主研发的流媒体计算平台,旨在满足公司各类产品对流媒体计算日益增长的需求。作为一个计算服务平台,它易用、实时、可靠,节省了用户在技术(开发、运维)上的投入,帮助用户专注于解决产品本身的流媒体计算需求。有不懂的请咨询梦飞云idc了解。