Hadoop 是一个开源的分布式计算框架,用于解决大数据存储和处理的问题。它基于 Google 的 MapReduce 论文和 Google 文件系统(GFS)的思想,由 Apache 软件基金会开发和维护。Hadoop 的设计目标是能够处理以千万、亿计的数据为基础的应用程序,提供高可靠性、高性能和高可扩展性的数据处理服务。
Hadoop 的历史可以追溯到 2003 年,当时 Doug Cutting 和 Mike Cafarella 在开发一个全文搜索引擎的过程中遇到了存储和处理大数据的问题。为了解决这个问题,他们开始研究 Google 的 GFS 和 MapReduce 论文,并基于这些思想开发了 Hadoop。最初的 Hadoop 项目包括两个主要组件:Hadoop 分布式文件系统(HDFS)和 MapReduce 分布式计算框架。后来,Hadoop 生态系统中涌现出了一些基于 Hadoop 的工具和技术,如 Pig、Hive、HBase、Sqoop、Flume 和 Spark 等,使得 Hadoop 成为了一个完整的大数据处理平台。
随着大数据技术的快速发展,Hadoop 的地位和影响力也越来越大。目前,Hadoop 已经成为了大数据处理的事实标准,但同时也面临着一些挑战和问题。为了应对这些挑战,Hadoop 社区正在不断地推出新的技术和工具,以满足不同场景下的需求,如:
Hadoop 是一个开源的分布式计算框架,它具有高可靠性、高可扩展性、高效性、高容错性等特点,适合处理大规模数据的存储和分析。Hadoop 由多个核心组件构成,包括 Hadoop 分布式文件系(HDFS)、MapReduce 分布式计算框架、YARN、Hadoop Common 和 ZooKeeper。
HDFS 是 Hadoop 的分布式文件系统,它是 Hadoop 最核心的组件之一。HDFS 主要的作用是存储 PB 级别的大规模数据,并提供了多种数据备份、数据恢复和故障转移的技术,保证了数据的可靠性和稳定性。以下是 HDFS 的主要特点:
分布式存储:HDFS 将文件划分成多个块,每个块都会存储到不同的数据节点上,实现了数据的分布式存储和访问。
数据冗余:HDFS支持数据的冗余备份,可以将数据块备份到多个数据节点上,实现了数据的高可靠性和容错性。
数据读写:HDFS支持数据的随机读写和流式读写,能够满足不同场景下的数据读写需求。
故障恢复:HDFS可以自动检测和处理节点故障,能够保证数据的可靠性和稳定性。
MapReduce 是 Hadoop 的分布式计算框架,它能够将大规模数据集分成小的数据块进行并行处理,从而实现高性能和高效率的数据处理。MapReduce 由 Map 和 Reduce 两个阶段组成,Map 阶段将数据切分并映射到多个计算节点上,Reduce 阶段将结果合并并输出到文件系统中。以下是 MapReduce 的主要特点:
分布式计算:MapReduce 支持分布式计算,能够将大规模数据集分成小的数据块进行并行处理,提高了数据处理的效率和性能。
数据切分:MapReduce 能够将数据切分成多个小块进行处理,从而实现了数据的分布式存储和访问。
容错性:MapReduce 支持容错处理,能够自动检测和处理节点故障,从而保证了计算的可靠性和稳定性。
YARN 是 Hadoop 的资源管理器,它负责管理和分配集群中的计算资源,从而实现集群的管理和任务调度。YARN 的主要作用是将计算框架(如 MapReduce)和资源管理(如 HDFS)分别,实现了计算和资源管理的分离。以下是 YARN 的主要特点:
集群管理:YARN 能够管理集群中的资源,分配计算资源给不同的应用程序。
资源分配:YARN能够动态地分配和管理计算资源,保证不同应用程序之间的资源隔离和公平分配。
任务调度:YARN能够调度和监控不同的计算任务,从而实现了任务的并发和并行执行。 可扩展性:YARN 能够支持大规模集群,具有良好的可扩展性和高效性。
Hadoop Common 是 Hadoop 的基础组件,它包含了 Hadoop 所有模块都需要使用的公共库和工具,如输入输出、序列化、压缩、安全等。Hadoop Common 负责为整个 Hadoop 生态系统提供支持,并提供了一些工具和库,方便用户开发和管理 Hadoop 应用程序。
ZooKeeper 是 Hadoop 的分布式协调服务,它能够提供高可靠性的数据管理和分布式协调服务。ZooKeeper 的主要作用是为分布式应用程序提供一致性服务和协调管理,包括配置管理、命名服务、分布式锁和分布式协调等。以下是 ZooKeeper 的主要特点:
一致性:ZooKeeper 能够保证数据的一致性和可靠性,即使在节点故障的情况下也能够保证数据的正确性。 可靠性:ZooKeeper
能够提供高可靠性的服务,保证了分布式应用程序的稳定性和可用性。 分布式锁:ZooKeeper
支持分布式锁的实现,能够帮助应用程序实现分布式协调和管理。
命名服务:ZooKeeper 能够提供命名服务,为应用程序提供统一的命名空间管理。
Hadoop 的数据处理流程通常包括以下几个步骤:
Hadoop 提供了许多数据处理工具和技术,以下是其中的几个主要工具和技术:
Hive 是一个基于 Hadoop 的数据仓库和查询工具,它提供了类 SQL 的查询语言(HiveQL),可用于对存储在 HDFS 中的数据进行查询和分析。Hive 的执行引擎将 HiveQL 查询转换为 MapReduce 作业,然后在 Hadoop 集群中执行。除了 HiveQL,Hive 还提供了其他功能,如数据分区、数据压缩和数据聚合等。
Pig 是一个基于 Hadoop 的数据分析和处理工具,它提供了一种名为 Pig Latin 的脚本语言,可用于对存储在 HDFS 中的数据进行转换和处理。Pig Latin 脚本将被编译成 MapReduce 作业,并在 Hadoop 集群中执行。Pig 还提供了许多内置函数和运算符,以支持复杂的数据处理操作。
HBase 是一个基于 Hadoop 的分布式 NoSQL 数据库,它提供了实时读写访问 Hadoop 集群中的数据的能力。HBase 可以存储非结构化和半结构化数据,支持海量数据的高并发读写访问。HBase 的数据模型类似于关系型数据库,但其内部实现基于 Hadoop 的 HDFS。
Sqoop 是一个基于 Hadoop 的数据导入和导出工具,它可以将关系型数据库中的数据导入到 Hadoop 集群中的 HDFS 或 HBase 中,也可以将 Hadoop 集群中的数据导出到关系型数据库中。Sqoop 支持多种关系型数据库,如 MySQL、Oracle、PostgreSQL 等。
Flume 是一个基于 Hadoop 的日志收集和分
析工具,能够帮助将分布在多个节点上的数据汇集到一个中心节点上进行分析和处理。
Flume 支持灵活的配置方式,可以通过配置文件或者命令行参数来指定 Source、Channel 和 Sink 的类型、属性、拓扑结构等。
总的来说,Flume 是一个非常实用的工具,可以帮助处理分布在多个节点上的数据,简化数据处理流程,提高数据分析和处理的效率。
Hadoop 集群是由多台机器组成的分布式系统,每台机器都可以执行 Hadoop 的各种任务。在搭建和管理 Hadoop 集群之前,需要进行架构和规划,确定需要使用多少台机器,每台机器的配置和角色等。接下来,需要进行 Hadoop 的安装、配置、启动和停止等工作,并对集群进行监控和管理,处理故障并进行优化和调优。
在进行 Hadoop 集群的架构和规划之前,需要确定需要处理的数据量、数据类型、数据来源等,以及对数据进行的处理方式和目的。根据这些需求,可以确定需要使用多少台机器、每台机器的配置和角色等。一般来说,Hadoop 集群至少需要一台主节点和多台从节点,其中主节点通常运行 NameNode 和 JobTracker,从节点运行 DataNode 和 TaskTracker。可以使用 Hadoop 提供的工具,如 Hadoop Capacity Planner 或 Cloudera Manager 等来进行集群规划和设计。
Hadoop 集群的搭建和配置需要经过以下几个步骤:
Hadoop 是基于 Java 开发的,所以需要先安装 Java 运行环境。
# 安装 OpenJDK
sudo yum update
sudo yum install java-1.8.0-openjdk
从 Hadoop 官网下载最新版本的 Hadoop 压缩包,解压到 /usr/local/hadoop 目录下。
sudo mkdir /usr/local/hadoop
cd /usr/local/hadoop
sudo wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
sudo tar -xzvf hadoop-3.3.1.tar.gz
sudo mv hadoop-3.3.1/* .
sudo rm -rf hadoop-3.3.1
打开 /etc/profile 文件,添加以下内容。
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
执行以下命令使环境变量生效。
source /etc/profile
进入 Hadoop 的 conf 目录,编辑以下配置文件。
core-site.xml
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://localhost:9000value>
property>
configuration>
hdfs-site.xml
Copy code
<configuration>
<property>
<name>dfs.replicationname>
<value>1value>
property>
configuration>
mapred-site.xml
Copy code
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
configuration>
yarn-site.xml
Copy code
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
configuration>
在命令行中输入以下命令格式化 NameNode。
hdfs namenode -format
在命令行中输入以下命令启动 Hadoop。
start-dfs.sh
start-yarn.sh
在浏览器中访问 http://localhost:9870,如果可以打开 Hadoop 的 web 界面,则说明 Hadoop 已经安装和配置成功。
在所有节点上,打开 /etc/hosts 文件,添加主机名和 IP 地址的对应关系。
Copy code
sudo vi /etc/hosts
添加以下内容。
192.168.1.1 hadoop-master
192.168.1.2 hadoop-slave-1
192.168.1.3 hadoop-slave-2
在所有节点上,安装和配置 SSH 服务。
sudo yum install openssh-server
sudo systemctl start sshd.service
sudo systemctl enable sshd.service
在主节点上,生成 SSH 密钥。
ssh-keygen -t rsa
将公钥复制到所有从节点。
ssh-copy-id username@hadoop-slave-1
ssh-copy-id username@hadoop-slave-2
Hadoop 是基于 Java 开发的,所以需要先安装 Java 运行环境。
# 安装 OpenJDK
sudo yum update
sudo yum install java-1.8.0-openjdk
从 Hadoop 官网下载最新版本的 Hadoop 压缩包,解压到 /usr/local/hadoop 目录下。
sudo mkdir /usr/local/hadoop
cd /usr/local/hadoop
sudo wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
sudo tar -xzvf hadoop-3.3.1.tar.gz
sudo mv hadoop-3.3.1/* .
sudo rm -rf hadoop-3.3.1
在所有节点上,打开 /etc/profile 文件,添加以下内容。
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
执行以下命令使环境变量生效。
source /etc/profile
在主节点上,进入 Hadoop 的 conf 目录,编辑以下配置文件。
core-site.xml
Copy code
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://hadoop-master:9000value>
property>
configuration>
hdfs-site.xml
<property>
<name>dfs.permissions.enabledname>
<value>falsevalue>
property>
configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop-mastervalue>
property>
<property>
<name>yarn.nodemanager.resource.memory-mbname>
<value>4096value>
property>
<property>
<name>yarn.nodemanager.resource.cpu-vcoresname>
<value>2value>
property>
configuration>
在主节点上,打开 /usr/local/hadoop/etc/hadoop/slaves 文件,添加从节点的主机名。
hadoop-slave-1
hadoop-slave-2
在主节点上,打开 /usr/local/hadoop/etc/hadoop/hadoop-env.sh 文件,设置 JAVA_HOME 环境变量。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
在主节点上,格式化 NameNode。
hdfs namenode -format
启动 Hadoop。
start-dfs.sh
start-yarn.sh
在浏览器中输入以下地址,查看 Hadoop 状态。
http://hadoop-master:9870
在主节点上,创建一个目录。
hdfs dfs -mkdir /test
在主节点上,将一个本地文件上传到 HDFS。
hdfs dfs -put /usr/local/hadoop/etc/hadoop/hadoop-env.sh /test
在主节点上,列出 HDFS 中的文件。
hdfs dfs -ls /test
在主节点上,从 HDFS 中下载一个文件。
hdfs dfs -get /test/hadoop-env.sh /tmp
在主节点上,停止 Hadoop。
Copy code
stop-dfs.sh
stop-yarn.sh
# 启动 ZooKeeper
zkServer.sh start
# 启动 NameNode
start-dfs.sh
# 启动 DataNode
start-yarn.sh
# 启动 ResourceManager
yarn --daemon start resourcemanager
# 启动 NodeManager
yarn --daemon start nodemanager
# 启动 JobHistoryServer
mapred --daemon start historyserver
停止集群也需要按照特定的顺序停止不同的节点,通常按照以下顺序停止:
(1)停止 JobHistoryServer:先停止 JobHistoryServer。
(2)停止 NodeManager:停止 NodeManager。
(3)停止 ResourceManager:停止 ResourceManager。
(4)停止 DataNode:停止 DataNode。
(5)停止 NameNode:停止 NameNode。
(6)停止 ZooKeeper:如果使用了 ZooKeeper,则最后停止 ZooKeeper。
可以使用以下命令停止集群:
# 停止 JobHistoryServer
mapred --daemon stop historyserver
# 停止 NodeManager
yarn --daemon stop nodemanager
# 停止 ResourceManager
yarn --daemon stop resourcemanager
# 停止 DataNode
stop-yarn.sh
# 停止 NameNode
stop-dfs.sh
# 停止 ZooKeeper
zkServer.sh stop
在启动和停止集群之前,需要确保配置正确且没有错误,并且集群中所有节点都处于正常状态。这些操作在 Hadoop 集群管理中非常重要,可以保证集群的稳定性和可靠性。
Hadoop Web UI 是一个内置的 Web 应用程序,可以通过浏览器访问它。通过 Hadoop Web UI,可以查看集群的整体健康状况,例如 NameNode 和 DataNode 的状态、ResourceManager 和 NodeManager 的状态、作业的状态和进度等等。可以使用以下 URL 访问 Hadoop Web UI:
除了 Hadoop Web UI 外,Hadoop 还提供了一些命令行工具来监控和管理 Hadoop 集群。以下是一些常用的命令行工具:
在 Hadoop 集群中,每个组件都会生成日志文件,用于记录运行时的事件和错误。可以使用以下命令来查看 Hadoop 日志文件:
除了 Hadoop 内置的监控工具外,还有一些第三方监控工具可以使用,例如 Nagios、Ganglia、Zabbix 等等。这些工具可以提供更详细的监控数据、自定义告警和警报等功能,有助于实现更高级别的监控和管理。