关系和NoSQL数据库与Hadoop
为了更好地理解关系数据库,NoSQL数据库和Hadoop之间的差异,让我们将它们与旅行方式进行比较。您会惊讶地发现它们有许多相似之处。当人们旅行时,他们要么乘坐汽车或飞机,这取决于旅行距离和费用。例如,当您从多伦多前往温哥华时,就旅行时间与成本而言,飞机始终是首选。当您从多伦多前往尼亚加拉瀑布时,一辆车总是一个不错的选择。当您从多伦多前往蒙特利尔时,有些人可能更喜欢乘车去飞机。这里的距离和成本就像大数据量和投资一样。传统的关系数据库就像汽车一样,Hadoop大数据工具就像飞机一样。当您处理少量数据(短距离)时,关系数据库(如汽车)始终是最佳选择,因为处理少量或中等数量的数据非常快捷灵活。当您处理大量数据(长距离)时,Hadoop(如飞机)是最佳选择,因为它更具线性可扩展性,快速且稳定,可处理大量数据。你可以从多伦多开车到温哥华,但需要花费太多时间。
您也可以从多伦多乘坐飞机前往尼亚加拉瀑布,但是前往机场需要更多时间,而且比开车旅行需要更多费用。
此外,您可以乘坐船只或火车。这就像NoSQL数据库,它提供了关系数据库和Hadoop在良好性能方面的特性和平衡,以及对中等到大量数据的各种数据格式支持。
批处理,实时和流处理
使用批处理批量处理数据。它从输入读取数据,处理它,并将其写入输出。 Apache Hadoop是使用MapReduce范例的分布式批处理系统中最着名和最流行的开源实现。数据存储在称为Hadoop分布式文件系统(HDFS)的共享和分布式文件系统中,并分为多个分区,这些分区是MapReduce处理的逻辑数据分区。
要使用MapReduce范例处理这些拆分,map任务会读取拆分并将其所有键/值对传递给map函数,并将结果写入中间文件。映射阶段完成后,reducer将读取通过shuffle进程发送的中间文件,并将它们传递给reduce函数。最后,reduce任务将结果写入最终输出文件。 MapReduce模型的优点包括使分布式编程更容易,接近线性加速,良好的可扩展性以及容错性。批处理模型的缺点是无法执行递归或迭代作业。此外,明显的批处理行为是在reduce作业启动之前所有输入必须通过map准备好,这使得MapReduce不适合在线和流处理用例。
实时处理用于处理数据并几乎立即获得结果。大数据实时即席查询领域的这一概念最初是由Google在Dremel中实现的。它使用一种新颖的柱状存储格式用于嵌套结构,具有快速索引和可伸缩聚合算法,用于并行计算查询结果而不是批处理序列。这两种技术是实时处理的主要特征,并且被类似的实现使用,例如Impala,Presto和Drill,由柱状存储数据格式提供支持,例如Parquet,ORC,CarbonData和Arrow。另一方面,内存计算无疑为实时处理提供了解决方案。与硬盘的200兆字节/秒相比,内存计算提供了非常高的带宽,超过10千兆字节/秒。此外,与硬盘相比,延迟相对较低,为纳秒与毫秒。随着RAM的价格每天越来越低,内存计算更实惠 ,例如Apache Spark(https://spark.apache.org/),这是一种流行的内存计算开源实现。
Spark可以轻松地与Hadoop集成,其内存数据结构Resilient Distributed Dataset(RDD)可以从数据源(如HDFS和HBase)生成,以实现高效的缓存。
流处理用于连续处理实时流数据并对其进行操作以获得结果。在流处理中,有两种常用的通用流处理框架:Storm(https://storm.apache.org/)和Flink(https://flink.apache.org/)。两个框架都在Java虚拟机(JVM)上运行,并且都处理密钥流。在编程模型方面,Storm为您提供了构建框架的基本工具,而Flink为您提供了一个定义明确且易于使用的框架。此外,Samza(http://samza.ap ache.org/)和Kafka Stream(https://kafka.apache.org/documentation/streams/)利用Kafka进行消息缓存和转换。最近,Spark还提供了一种类型的流处理。
Hadoop生态系统概述
Hadoop于2011年首次由Apache发布,版本为1.0.0,仅包含HDFS和MapReduce。 Hadoop从一开始就被设计为计算(MapReduce)和存储(HDFS)平台。随着对大数据分析的需求不断增加,Hadoop吸引了大量其他软件来解决大数据问题并融入以Hadoop为中心的大数据生态系统。
在当前的Hadoop生态系统中,HDFS仍然是使用硬盘存储时的主要选择,而Alluxio提供了几乎分布式的内存替代方案。在HDFS之上,Parquet,Avro和ORC数据格式可以与用于计算和存储优化的快速压缩算法一起使用。 Yarn作为第一个Hadoop通用资源管理器,旨在实现更好的资源管理和可扩展性。作为内存计算引擎,Spark和Ignite能够在Yarn上运行,以便与Hadoop紧密协作。
另一方面,Kafka,Flink和Storm主导着流处理。 HBase是一个领先的NoSQL数据库,尤其是在Hadoop集群上。对于机器学习,Spark MLlib和Madlib以及新的Mahout。 Sqoop仍然是在Hadoop和关系数据库之间交换数据的主要工具之一。 Flume是一种成熟,分布且可靠的日志收集工具,用于将数据移动或收集到HDFS。 Impala和Drill能够直接针对Hadoop上的数据启动交互式SQL查询。此外,Hive over Spark / Tez以及Live Long和Process(LLAP)为用户提供了在不同计算框架(而不是MapReduce)上使用内存数据缓存在长期流程中运行查询的能力。因此,Hive在生态系统中扮演着比以往更重要的角色。我们也很高兴看到Ambari成为新一代集群,除了Zookeeper之外,管理工具还提供更强大的集群管理和协调。对于计划和工作流程管理,我们可以使用Airflow或Oozie。最后,我们有一个开源治理和元数据服务,Altas,它支持生态系统中大数据的合规性和线条.