当前位置:首页 > 技术 > 正文内容

Hadoop分布式计算框架入门指南

访客 技术 2026年9月16日 11

引言

当代计算环境随着网络基础设施的快速发展,社交媒体、电子商务以及物联网的普及产生了海量数据。这些数据的规模已远超传统单机处理能力,推动了人工智能领域的显著进步。大数据的存储与分析成为技术发展的关键方向,国家相关部门也发布了相关白皮书予以指导。

学习大数据技术,Hadoop是不可绕过的基础。作为当前最具影响力的分布式数据处理框架,Hadoop提供了一套完整的编程模型和生态系统。

概念说明:大数据具有四个核心特征——Volume(容量大)、Velocity(产生速度快)、Variety(结构多样)、Value(价值密度低)。其中Volume指数据量超出单台或少数高性能服务器的处理能力;Variety指数据不仅包含结构化数据,还包括半结构化数据(如传感器日志、文本格式的监测数据)以及非结构化数据(视频、图像等)。价值密度低是大数据的普遍特点,需要通过专业处理技术从海量数据中提取有效信息。

Hadoop技术体系

Hadoop是专为大规模分布式数据处理设计的开源框架,围绕其核心功能形成了丰富的生态系统,主要包括:

  • HBase:分布式NoSQL数据库
  • Hive:数据仓库基础设施
  • Pig:高级查询语言平台
  • Spark:快速通用计算引擎
  • ZooKeeper:分布式协调服务

应用场景解析

考虑一个实际场景:某研究机构需要分析过去30年的气象监测数据,数据来源于多个观测站点的文本日志文件。每个站点每0.1秒记录一条数据,单个文件记录15分钟数据(约9000条),每天96个文件,30年累计超过100万个文件,数据总量达百亿条级别。此外还需处理部分损坏文件和缺失值标记。

面对如此庞大的数据量,单机处理耗时过长。传统方案是搭建服务器集群,将任务分配到多台机器上并行处理,最终汇总结果。然而实现过程中会面临诸多挑战:任务分配策略(如何平衡新旧机器的性能差异)、结果汇总机制(网络传输中的数据可靠性保障)、故障恢复策略(节点宕机后的任务重分配)。这些非功能性需求的开发往往比核心业务逻辑更为复杂。

Hadoop正是为解决这类问题而设计的。开发者只需在map方法中定义数据处理逻辑,在reduce方法中定义结果聚合逻辑,其余工作由框架自动完成。这使得分布式计算的开发门槛大幅降低。

实际上,上述数据规模在某些场景下仍属中等。若每日产生TB级数据,即使采用高速固态硬盘,完整扫描也需要数小时。更理想的方案是将数据分散存储在由普通计算机组成的集群中,每个节点负责处理部分数据,最后汇总结果。Hadoop正是实现这一方案的最佳选择。

核心组件架构

Hadoop集群包含五类守护进程:

  • NameNode
  • DataNode
  • Secondary NameNode
  • JobTracker
  • TaskTracker

集群节点分为两类:主节点(NameNode、JobTracker所在)和从节点(DataNode、TaskTracker所在)。

NameNode

NameNode负责管理HDFS文件系统元数据,将文件分割为多个数据块,并记录各数据块在DataNode上的存储位置。一个集群通常只有一个NameNode,该节点通常不运行DataNode和TaskTracker进程。

DataNode

DataNode负责实际存储数据块,接受NameNode的调度管理。当数据块发生变化时,DataNode会通知NameNode;同时与其他DataNode保持通信,实现数据块的冗余复制,确保数据可靠性。

Secondary NameNode

Secondary NameNode定期与NameNode通信,获取元数据的快照备份。仅在主节点故障时作为备用NameNode使用。

JobTracker

JobTracker负责MapReduce任务的调度与监控,包括任务失败后的重试机制。运行在主节点上,通常不运行DataNode和TaskTracker。

TaskTracker

TaskTracker负责执行JobTracker分配的任务,并向JobTracker报告执行状态。运行在从节点上。

架构示意

Hadoop集群中NameNode和JobTracker可部署在同一节点(适用于小规模集群)或分别部署在独立节点(提高可靠性)。

环境配置

部署Hadoop前需准备以下软件环境:

  • JDK(推荐JDK 8)
  • ssh远程登录服务
  • sshd守护进程
  • ssh-keygen密钥生成工具

本文以Ubuntu 16.04为例进行说明。

JDK安装

创建安装目录并解压JDK压缩包: sudo mkdir /usr/local/lib/jvm sudo tar -zxvf ~/downloads/jdk-8u301-linux-x64.tar.gz -C /usr/local/lib/jvm

配置环境变量,编辑/etc/profile文件添加: export JAVA_HOME=/usr/local/lib/jvm/jdk1.8.0_301 export PATH=$JAVA_HOME/bin:$PATH

执行source /etc/profile使配置生效,验证安装:echo $JAVA_HOME

SSH服务配置

安装openssh-server: sudo apt install openssh-server

配置免密码登录: ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys

验证:ssh localhost

Hadoop安装

下载Hadoop 1.0.4版本,解压到目标目录: sudo tar -zxvf hadoop-1.0.4.tar.gz -C /usr/local/ sudo chown -R $USER:$USER /usr/local/hadoop-1.0.4

编辑conf/hadoop-env.sh,设置JAVA_HOME: export JAVA_HOME=/usr/local/lib/jvm/jdk1.8.0_301

Hadoop支持三种运行模式:本地模式、伪分布式模式、完全分布式模式。开发环境推荐使用伪分布式模式。

core-site.xml配置

<configuration>
   <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/user/hadoop/tmp/</value> 
   </property>
   <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

hdfs-site.xml配置

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

mapred-site.xml配置

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>localhost:9001</value>
    </property>
</configuration>

启动集群

格式化HDFS: cd /usr/local/hadoop-1.0.4/bin ./hadoop namenode -format

启动所有服务: ./start-all.sh

使用jps命令验证进程启动情况,应显示5个守护进程。

服务启动后可访问Web界面:50030端口查看MapReduce任务状态,50070端口查看HDFS状态。

实践示例:单词统计

完成环境配置后,运行Hadoop自带的WordCount示例程序进行验证。

创建测试目录结构: mkdir -p test/classes test/src

复制示例源码: cp src/examples/org/apache/hadoop/examples/WordCount.java test/src/

编译Java源程序: javac -classpath hadoop-core-1.0.4.jar:lib/commons-cli-1.2.jar -d test/classes test/src/WordCount.java

打包为JAR文件: jar -cvf test/WordCount.jar -C test/classes/ .

准备输入数据,在HDFS创建目录: bin/hadoop dfs -mkdir input

创建本地测试文件: echo "hello world hello hadoop" > test/data.txt

上传至HDFS: bin/hadoop fs -put test/data.txt /user/username/input/

执行单词统计任务: bin/hadoop jar test/WordCount.jar org.apache.hadoop.examples.WordCount input output

查看统计结果: bin/hadoop fs -cat output/part-r-00000

输出应类似:

hadoop  1
hello   2
world   1

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。