【大数据】了解Hadoop框架的基础知识
介绍
此refcard提供了apache hadoop,这是最流行的软件框架,可使用简单的高级编程模型实现大型数据集的分布式存储和处理。我们将介绍hadoop最重要的概念,描述其架构,指导您如何开始使用它以及在hadoop上编写和执行各种应用程序。
简而言之,hadoop是apache software foundation的一个开源项目,可以安装在服务器集群上,以便这些服务器可以通信并协同工作来存储和处理大型数据集。hadoop近年来因其有效处理大数据的能力而变得非常成功。它允许公司将所有数据存储在一个系统中,并对这些数据进行分析,否则传统解决方案不可能或非常昂贵。
围绕hadoop构建的许多配套工具提供了各种各样的处理技术。与辅助系统和实用程序的集成非常出色,使hadoop的实际工作更轻松,更高效。这些工具共同构成了hadoop生态系统。
您可以将hadoop视为大数据操作系统,从而可以在所有庞大的数据集上运行不同类型的工作负载。其范围从离线批处理到机器学习再到实时流处理。
热门提示:访问http://hadoop.apache.org以获取有关项目的更多信息并访问详细文档。
要安装hadoop,您可以从http://hadoop.apache.org获取代码或(更推荐)使用其中一个hadoop发行版。三种最广泛使用的来自cloudera(cdh),hortonworks(hdp)和mapr。hadoop发布是hadoop生态系统捆绑在一起的一组工具,由相应的供应商保证,可以很好地协同工作。此外,每个供应商都提供工具(开源或专有)来配置,管理和监控整个平台。
设计理念
为了解决处理和存储大型数据集的挑战,hadoop是根据以下核心特征构建的:
-
分发 - 存储和处理不是构建一台大型超级计算机,而是分布在一组通信和协同工作的小型机器上。
-
横向可扩展性 - 只需添加新计算机即可轻松扩展hadoop集群。每台新机器都会按比例增加hadoop集群的总存储和处理能力。
-
容错 - 即使少数硬件或软件组件无法正常工作,hadoop仍可继续运行。
-
成本优化 - hadoop不需要昂贵的高端服务器,无需商业许可即可正常工作。
-
编程抽象 - hadoop负责处理与分布式计算相关的所有混乱细节。借助高级api,用户可以专注于实现解决现实问题的业务逻辑。
-
数据位置 - hadoop不会将大型数据集移动到运行应用程序的位置,而是运行数据已经存在的应用程序。
hadoop组件
hadoop分为两个核心组件:
-
hdfs - 分布式文件系统。
-
yarn - 集群资源管理技术。
热门提示:许多执行框架在yarn之上运行,每个框架都针对特定用例进行了调整。最重要的内容将在下面的“yarn applications”中讨论。
让我们仔细看看他们的架构并描述他们如何合作。
hdfs
hdfs是一个hadoop分布式文件系统。它可以在您需要的任意数量的服务器上运行 - hdfs可以轻松扩展到数千个节点和数pb的数据。
hdfs设置越大,某些磁盘,服务器或网络交换机出现故障的概率就越大。hdfs通过在多个服务器上复制数据来幸免于这些类型的故障。hdfs自动检测给定组件是否已发生故障,并采取对用户透明的必要恢复操作。
hdfs设计用于存储数百兆字节或千兆字节的大型文件,并为它们提供高吞吐量的流数据访问。最后但同样重要的是,hdfs支持一次写入多次读取模型。对于这个用例,hdfs就像一个魅力。但是,如果您需要存储大量具有随机读写访问权限的小文件,那么其他系统(如rdbms和apache hbase)可以做得更好。
注意:hdfs不允许您修改文件的内容。只支持在文件末尾附加数据。但是,hadoop设计的hdfs是众多可插拔存储选项之一 - 例如,使用专有文件系统mapr-f,文件完全可读写。其他hdfs替代品包括amazon s3,google cloud storage和ibm gpfs。
hdfs的体系结构
hdfs由在选定群集节点上安装和运行的以下守护程序组成:
-
namenode - 负责管理文件系统命名空间(文件名,权限和所有权,最后修改日期等)以及控制对存储在hdfs中的数据的访问的主进程。如果namenode已关闭,则无法访问您的数据。幸运的是,您可以配置多个namenode,以确保此关键hdfs进程的高可用性。
-
datanodes - 安装在集群中每个工作节点上的从属进程,负责存储和提供数据。
图1说明了在4节点集群上安装hdfs。其中一个节点托管namenode守护程序,而其他三个运行datanode守护程序。
注意:namenode和datanode是在linux发行版之上运行的java进程,例如redhat,centos,ubuntu等。他们使用本地磁盘存储hdfs数据。
hdfs将每个文件拆分为一系列较小但仍然较大的块(默认块大小等于128mb - 较大的块意味着更少的磁盘搜索操作,从而导致更大的吞吐量)。每个块都冗余地存储在三个datanode上以实现容错(每个文件的副本数量是可配置的)。
图2说明了将文件拆分为块的概念。文件x被分成块b1和b2,文件y仅包括一个块b3。所有块都在群集中复制两次。
与hdfs交互
hdfs提供了一个简单的posix类接口来处理数据。您使用hdfs dfs命令执行文件系统操作。
热门提示:要开始使用hadoop,您不必完成设置整个群集的过程。hadoop可以在一台机器上以所谓的伪分布式模式运行。您可以下载已安装所有hdfs组件的沙盒虚拟机,并立即开始使用hadoop!只需按照以下链接之一:
http://www.mapr.com/products/mapr-sandbox-hadoop
http://hortonworks.com/products/hortonworks-sandbox/#install
https://www.cloudera.com/downloads/quickstart_vms/5-12.html
以下步骤说明了hdfs用户可以执行的典型操作:
列出主目录的内容:
$ hdfs dfs -ls /user/adam
将文件从本地文件系统上传到hdfs:
$ hdfs dfs -put songs.txt /user/adam
从hdfs读取文件的内容:
$ hdfs dfs -cat /user/adam/songs.txt
更改文件的权限:
$ hdfs dfs -chmod 700 /user/adam/songs.txt
将文件的复制因子设置为4:
$ hdfs dfs -setrep -w 4 /user/adam/songs.txt
检查文件的大小:
`$ hdfs dfs -du -h /user/adam/songs.txt
在主目录中创建一个子目录。请注意,相对路径始终引用执行命令的用户的主目录。hdfs上没有“当前”目录的概念(换句话说,没有相当于“cd”命令):
$ hdfs dfs -mkdir songs
将文件移动到新创建的子目录:
$ hdfs dfs -mv songs.txt songs/
从hdfs中删除目录:
$ hdfs dfs -rm -r songs
注意:已删除的文件和目录将移至回收站(hdfs上主目录中的.trash)并保留一天,直到它们被永久删除。您只需将它们从.trash复制或移动到原始位置即可恢复它们。
热门提示:您可以在不使用任何参数的情况下键入hdfs dfs,以获取可用命令的完整列表。
如果您更喜欢使用图形界面与hdfs交互,您可以查看免费和开源的hue(hadoop用户体验)。它包含一个方便的“文件浏览器”组件,允许您浏览hdfs文件和目录并执行基本操作。
您还可以使用hue通过“上传”按钮直接从计算机将文件上传到hdfs。
yarn(yet another resource negotiator)负责管理hadoop集群上的资源,并支持运行处理存储在hdfs上的数据的各种分布式应用程序。
与hdfs类似,yarn遵循主从设计,resourcemanager进程充当主设备,多个nodemanager充当工作者。他们有以下责任:
的resourcemanager
-
跟踪实时nodemanagers以及群集中每台服务器上的可用计算资源量。
-
为应用程序分配可用资源。
-
监视hadoop集群上所有应用程序的执行情况。
节点管理器
-
管理hadoop集群中单个节点上的计算资源(ram和cpu)。
-
运行各种应用程序的任务,并强制它们在指定的计算资源的限制范围内。
yarn以资源容器的形式将集群资源分配给各种应用程序,资源容器表示ram量和cpu核心数量的组合。
在yarn群集上执行的每个应用程序都有自己的applicationmaster进程。在群集上调度应用程序并协调此应用程序中所有任务的执行时,此过程开始。
图3说明了yarn守护程序在运行两个应用程序的4节点集群上的合作,这些应用程序总共产生了7个任务。
hadoop = hdfs + yarn
在同一群集上运行的hdfs和yarn守护程序为我们提供了一个用于存储和处理大型数据集的强大平台。
datanode和nodemanager进程在同一节点上并置以启用数据位置。这种设计使得能够在存储数据的机器上执行计算,从而最小化通过网络发送大块数据的必要性,这导致更快的执行时间。
yarn应用程序
yarn只是一个资源管理器,它知道如何将分布式计算资源分配给在hadoop集群上运行的各种应用程序。换句话说,yarn本身不提供任何可以分析hdfs中数据的处理逻辑。因此,必须将各种处理框架与yarn集成(通过提供applicationmaster的特定实现)以在hadoop集群上运行并处理来自hdfs的数据。
下面列出了最流行的分布式计算框架的简短描述,这些框架可以在由yarn支持的hadoop集群上运行。
-
mapreduce - hadoop的传统和最古老的处理框架,将计算表示为一系列map和reduce任务。它目前正被spark或flink等更快的引擎所取代。
-
apache spark - 一种用于大规模数据处理的快速通用引擎,可通过在内存中缓存数据来优化计算(后面部分将详细介绍)。
-
apache flink - 高吞吐量,低延迟的批处理和流处理引擎。它以其强大的实时处理大数据流的能力而着称。您可以在这篇全面的文章中找到spark和flink之间的差异:https://dzone.com/articles/apache-hadoop-vs-apache-spark
-
apache tez - 一个旨在加快hive执行sql查询的引擎。它可以在hortonworks数据平台上获得,它将mapreduce替换为hive的执行引擎。
监控yarn应用程序
可以使用resourcemanager webui跟踪在hadoop集群上运行的所有应用程序的执行,默认情况下,该管理程序在端口8088上公开。
对于每个应用程序,您都可以阅读一些重要信息。
如果单击“id”列中的条目,您将获得有关所选应用程序执行的更详细的指标和统计信息。
热门提示:使用resourcemanager webui,您可以检查可用于处理的ram总量和cpu核心数以及当前的hadoop集群负载。查看页面顶部的“群集指标”。
————————————————————
推荐阅读:
上一篇: 第36天并发编程之进程篇