作者:Piotr Krewski&Adam Kawa
翻译:陈之炎
校对:丁楠雅
本文约6000字,建议阅读10分钟。
本文为你介绍hadoop的核心概念,描述其体系架构,指导您如何开始使用Hadoop以及在Hadoop上编写和执行各种应用程序。作者:GETINDATA公司创始人兼大数据顾问彼得亚·雷克鲁斯基(Piotr Krewski)和GETINDATA公司首席执行官兼创始人亚当·卡瓦(Adam Kawa)
目录
内容简介
设计理念
HADOOP组件
HDFS
YARN
YARN 应用程序
监控 YARN 应用程序
用HADOOP处理数据
HADOOP 的其它工具
其它资源
内容简介
Hadoop是目前最流行的大数据软件框架之一,它能利用简单的高级程序对大型数据集进行分布式存储和处理。本文将介绍Hadoop的核心概念,描述其体系架构,指导您如何开始使用Hadoop以及在Hadoop上编写和执行各种应用程序。
Hadoop是阿帕奇(Apache)软件基金会发布的一个开源项目,它可以安装在服务器集群上,通过服务器之间的通信和协同工作来存储和处理大型数据集。因为能够高效地处理大数据,Hadoop近几年获得了巨大的成功。它使得公司可以将所有数据存储在一个系统中,并对这些数据进行分析,而这种规模的大数据分析用传统解决方案是无法实现或实现起来代价巨大的。
以Hadoop为基础开发的大量工具提供了各种各样的功能,Hadoop还出色地集成了许多辅助系统和实用程序,使得工作更简单高效。这些组件共同构成了Hadoop生态系统。
Hadoop可以被视为一个大数据操作系统,它能在所有大型数据集上运行不同类型的工作负载,包括脱机批处理、机器学习乃至实时流处理。
您可以访问hadoop.apache.org网站获取有关该项目的更多信息和详细文档。
您可以从hadoop.apache.org获取代码(推荐使用该方法)来安装Hadoop,或者选择Hadoop商业发行版。最常用的三个商业版有Cloudera(CDH)、Hortonworks(HDP)和MapR。这些商业版都基于Hadoop的框架基础,将一些组件进行了打包和增强,以实现较好的集成和兼容。此外,这些商业版还提供了管理和监控平台的(开源或专有的)工具。
设计理念
Hadoop在解决大型数据集的处理和存储问题上,根据以下核心特性构建:
分布式:存储和处理并非构建在一台大型超级计算机之上,而是分布在一群小型电脑上,这些电脑之间可以相互通信并协同工作。
水平可伸缩性:只需添加新机器就可以很容易地扩展Hadoop集群。每台新机器都相应地增加了Hadoop集群的总存储和处理能力。
容错:即使一些硬件或软件组件不能正常工作,Hadoop也能继续运行。
成本优化:Hadoop不需要昂贵的高端服务器,而且在没有商业许可证的情况下也可以正常工作。
编程抽象:Hadoop负责处理与分布式计算相关的所有纷杂的细节。由于有高级API,用户可以专注于实现业务逻辑,解决他们在现实世界中的问题。
数据本地化:Hadoop不会将大型数据集迁移到应用程序正在运行的位置,而是在数据所在位置运行应用程序。
Hadoop组件
Hadoop有两个核心组件:
HDFS:分布式文件系统
YARN:集群资源管理技术
许多执行框架运行在YARN之上,每个框架都针对特定的用例进行调优。下文将在“YARN应用程序”中重点讨论。
我们来看看它们的架构,了解一下它们是如何合作的。
HDFS
HDFS是Hadoop分布式文件系统。
它可以在许多服务器上运行,根据需要,HDFS可以轻松扩展到数千个节点和乃至PB(Petabytes 10的15次方字节)量级的数据。
HDFS设置容量越大,某些磁盘、服务器或网络交换机出故障的概率就越大。
HDFS通过在多个服务器上复制数据来修复这些故障。
HDFS会自动检测给定组件是否发生故障,并采取一种对用户透明的方式进行必要的恢复操作。
HDFS是为存储数百兆字节或千兆字节的大型文件而设计的,它提供高吞吐量的流式数据访问,一次写入多次读取。因此对于大型文件而言,HDFS工作起来是非常有魅力的。但是,如果您需要存储大量具有随机读写访问权限的小文件,那么RDBMS和Apache HBASE等其他系统可能更好些。
注:HDFS不允许修改文件的内容。只支持在文件末尾追加数据。不过,Hadoop将HDFS设计成其许多可插拔的存储选件之一。例如:专用文件系统MapR-Fs的文件就是完全可读写的。其他HDFS替代品包括Amazon S3、Google Cloud Storage和IBM GPFS等。
HDFS架构
HDFS由在选定集群节点上安装和运行的下列进程组成:
NameNode:负责管理文件系统命名空间(文件名、权限和所有权、上次修改日期等)的主进程。控制对存储在HDFS中的数据的访问。如果NameNode关闭,则无法访问数据。幸运的是,您可以配置多个NameNodes,以确保此关键HDFS过程的高可用性。
DataNodes:安装在负责存储和服务数据的集群中的每个工作节点上的从进程。
图1说明了在一个4节点的集群上安装HDFS。一个节点的主机节点为NameNode进程而其他三节点为DataNode进程
注:NameNode和DataNode是在Linux操作系统 (如RedHat、CentOS、Ubuntu等)之上运行的Java进程。它们使用本地磁盘存储HDFS数据。
HDFS将每个文件分成一系列较小但仍然较大的块(默认的块大小等于128 MB--更大的块意味着更少的磁盘查找操作,从而导致更大的吞吐量)。每个块被冗余地存储在三个DataNode上,以实现容错(每个文件的副本数量是可配置的)。
图2演示了将文件分割成块的概念。文件X被分割成B1和B2块,Y文件只包含一个块B3。在集群上将所有块做两个备份。
与HDFS交互
HDFS提供了一个简单的类似POSIX的接口来处理数据。使用HDFS DFS命令执行文件系统操作。
要开始使用Hadoop,您不必经历设置整个集群的过程。Hadoop可以在一台机器上以
所谓的伪分布式模式运行。您可以下载sandbox虚拟机,它自带所有HDFS组件,使您可以随时开始使用Hadoop!只需按照以下链接之一的步骤:
mapr.com/products/mapr-sandbox-hadoop
hortonworks.eom/products/hortonworks-sandbox/#install
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 Create a subdirectory in your home directory.
$ hdfs dfs -mkdir songs
注意,相对路径总是引用执行命令的用户的主目录。HDFS上没有“当前”目录的概念(换句话说,没有“CD”命令):
将文件移到新创建的子目录:
$ hdfs dfs -mv songs.txt songs
从HDFS中删除一个目录:
$ hdfs dfs -rm -r songs
注:删除的文件和目录被移动到trash中 (HDFS上主目录中的.trash),并保留一天才被永久删除。只需将它们从.Trash复制或移动到原始位置即可恢复它们。
您可以在没有任何参数的情况下键入HDFS DFS以获得可用命令的完整列表。
如果您更喜欢使用图形界面与HDFS交互,您可以查看免费的开源HUE (Hadoop用户体验)。它包含一个方便的“文件浏览器”组件,允许您浏览HDFS文件和目录并执行基本操作。