在本文中,我们探讨了 Apache Hadoop,这是一个提供可扩展且高效的解决方案来管理和处理大数据的框架——这在当今数据驱动的世界中至关重要。
我们首先讨论其核心组件,包括 HDFS、YARN 和 MapReduce,然后介绍设置 Hadoop 集群的步骤。
最后,我们熟悉了框架内的基本操作,为进一步的探索打下了坚实的基础。
随着世界通过社交媒体平台、消息应用程序以及音频/视频流服务比以往任何时候都更加紧密地联系在一起,人类每天都会产生大量的数据。
因此,统计数据显示,所有数据中有 90% 是在过去两到三年内生成的。
由于数据在现代世界中的作用变得更具战略性,并且大多数数据都是非结构化格式,我们需要一个能够处理如此庞大数据集的框架——以 PB、ZB 或更大的规模,通常称为大数据。
在本教程中,我们将探索Apache Hadoop,这是一种被广泛认可的处理大数据的技术,它具有可靠性、可扩展性和高效的分布式计算能力。
什么是 Apache Hadoop?
Apache Hadoop是一个开源框架,旨在从单个服务器扩展到多台机器,每台机器提供本地计算和存储,方便在分布式计算环境中存储和处理大规模数据集。
该框架利用集群计算的强大功能——在集群中的多个服务器中以小块形式处理数据。
此外,Hadoop 与许多其他工具协同工作的灵活性使其成为现代大数据平台的基础——为企业从不断增长的数据中获取洞察力提供了可靠且可扩展的方式。
Hadoop的核心组件
Hadoop的四个核心组件构成了其系统的基础,实现了分布式数据存储和处理。
1. Hadoop 通用
它是一组必需的 Java 库,可供所有 Hadoop 模块共同使用,以便更好地发挥作用。
2. Hadoop 分布式文件系统(HDFS)
HDFS 是一个分布式文件系统,原生支持大型数据集,可提供高可用性和容错能力的数据吞吐量。
简单来说,它是Hadoop的存储组件,可以在多台机器上存储大量数据,并且能够在标准硬件上运行,具有成本效益。
3. Hadoop YARN
YARN 是 Yet Another Resource Negotiator 的缩写,它提供了一个用于调度作业的框架,并管理分布式系统的系统资源。
简而言之,它是 Hadoop 的资源管理组件,用于管理处理存储在 HDFS 中的数据所使用的资源。
4. Hadoop MapReduce
一种简单的编程模型,通过将非结构化数据转换为键值对(映射)来并行处理数据,然后将其拆分到节点之间并将结果组合成最终输出(减少)。
因此,用外行人的话来说,它就是 Hadoop 的大脑,提供两个阶段的主要处理引擎功能——映射和缩减。
设置
GNU/Linux平台 支持 Hadoop。因此,让我们在 Linux 操作系统上设置 Hadoop 集群。
先决条件
首先,我们需要为最新的 Apache Hadoop安装 Java 8/11。另外,我们可以按照此处对 Java 版本的建议进行操作。
接下来,我们需要安装 SSH 并确保sshd服务正在运行以使用 Hadoop 脚本。
下载并安装 Hadoop
我们可以按照详细指南在 Linux 中安装和配置 Hadoop。
安装完成后,让我们运行以下命令来验证已安装的 Hadoop 的版本:
hadoop version
以下是上述命令的输出:
Hadoop 3.4.0 Source code repository git@github.com:apache/hadoop.git -r bd8b77f398f626bb7791783192ee7a5dfaeec760 |
值得注意的是,我们可以在三种支持的操作模式下运行它——独立、伪分布式和完全分布式。但是,默认情况下,Hadoop 配置为在独立(本地非分布式)模式下运行,本质上运行单个 Java 进程。
基本操作
一旦我们的 Hadoop 集群启动并运行,我们就可以执行许多操作。
HDFS 操作
让我们了解一些使用 HDFS 命令行界面管理文件和目录的便捷操作。
例如,我们可以上传文件到 HDFS:
hdfs dfs -put /local_file_path /hdfs_path |
同样的,我们可以下载文件:
hdfs dfs -get /hdfs_file_path /local_path |
让我们列出 HDFS 目录中的所有文件:
hdfs dfs -ls /hdfs_directory_path |
以下是我们如何读取 HDFS 位置上的文件内容:
hdfs dfs -cat /hdfs_file_path |
此外,此命令还会检查 HDFS 磁盘使用情况:
hdfs dfs -du -h /hdfs_path |
此外,还有其他有用的命令,如-mkdir用于创建目录、-rm用于删除文件或目录,以及-mv用于移动以重命名可通过 HDFS 获得的文件。
运行 MapReduce 作业
Hadoop 发行版在hadoop-mapreduce-examples-3.4.0 jar 文件下包含一些简单的入门示例,用于探索 MapReduce 。
例如,让我们看一下WordCount,这是一个简单的应用程序,它扫描给定的输入文件并提取每个单词出现的次数作为输出。
首先,我们将在输入目录中创建一些文本文件 - textfile1.txt和textfile2.txt,其中包含一些内容:
echo "Introduction to Apache Hadoop" > textfile01.txt |
然后,让我们运行 MapReduce 作业并创建输出文件:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.0.jar wordcount input output |
输出日志展示了其他任务中的mapping和reducing操作:
2024-09-22 12:54:39,592 INFO impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s). |
一旦 MapReduce 作业结束,将在输出目录中创建part-r-00000文本文件,其中包含单词及其出现次数:
hadoop dfs -cat /output/part-r-00000 |
以下是该文件的内容:
Apache 1 |
类似地,我们可以查看其他示例,如使用TerraSort执行大规模数据排序、使用RandomTextWriter生成用于基准测试和测试的随机文本数据,以及使用Grep在hadoop-mapreduce-examples-3.4.0 jar 文件中提供的输入文件中搜索匹配的字符串。
管理 YARN 上的服务
现在,让我们看一些管理 Hadoop 服务的操作。例如,这是检查节点状态的命令:
yarn node -list
类似地,我们可以列出所有正在运行的应用程序:
yarn application -list
以下是我们部署服务的方法:
yarn deploy service service_definition.json
同样,我们可以启动一个已经注册的服务:
yarn app -launch service_name
然后,我们可以分别启动、停止和销毁服务:
yarn app -start service_name |
此外,还有一些有用的 YARN 管理命令,如daemonlog用于检查守护进程日志、nodemanager用于启动节点管理器、proxyserver用于启动 Web 代理服务器以及timelineserver用于启动时间线服务器。
Hadoop 生态系统
Hadoop 存储和处理大型数据集,并需要支持工具来完成摄取、分析和数据提取等任务。让我们列出 Hadoop 生态系统中的一些重要工具:
- Apache Ambari:基于 Web 的集群管理工具,可简化 Hadoop 集群的部署、管理和监控
- Apache HBase:适用于实时应用程序的分布式、面向列的数据库
- Apache Hive:一种数据仓库基础设施,允许类似 SQL 的查询来管理和分析大型数据集
- Apache Pig:一种高级脚本语言,可轻松实现数据分析任务
- Apache Spark:用于批处理、流式传输和机器学习的集群计算框架
- Apache ZooKeeper:为大规模分布式系统提供可靠、高性能、分布式协调服务的服务