Hadoop基础
参考资料
- 腾讯大数据技术文章:https://blog.csdn.net/dftgcdf45645466/article/details/89065714
- Hadoop 安装参考:https://blog.csdn.net/hawkzy/article/details/83867384
- JDK 下载参考:https://blog.csdn.net/weixin_43252521/article/details/119119646
概述
Hadoop 是一个开源的分布式计算解决方案,可编写和运行分布式应用,用于处理大规模数据。
Hadoop 由两大部分组成:
- HDFS(Hadoop Distributed File System):分布式文件系统,负责数据存储
- MapReduce:分布式数据处理框架,负责数据计算
核心特点
- 适合离线场景和大规模数据分析
- 不适合对少量记录进行随机读写的在线事务处理场景
- 在处理半结构化和非结构化数据时,比关系型数据库更加灵活
- 所有数据最终都会转化为 key/value 形式,key/value 是基本数据单元
版本演进
Hadoop 1.0
版本号涵盖 0.20.x、0.21.x、0.22.x 和 1.x 系列。
核心架构:
- HDFS:由一个 NameNode 和多个 DataNode 组成
- MapReduce:由一个 JobTracker 和多个 TaskTracker 组成
Hadoop 2.0
版本号涵盖 0.23.x 和 2.x 系列。
针对 1.0 版本在扩展性和多框架支持方面的不足,引入了全新的资源管理框架 YARN。
YARN 将 JobTracker 中的资源管理和作业控制功能分开,分别由以下组件实现:
- ResourceManager:负责所有应用程序的资源分配
- ApplicationMaster:仅负责管理一个应用程序
HDFS 详解
HDFS 全称为 Hadoop Distributed File System,基于 Google File System(GFS)设计。
基本特性
- 保存大量数据,提供对分布在网络上的多个客户端的透明访问
- 通过可靠、可扩展的方式存储大量文件
- 通过块复制机制在集群中分发副本来确保可靠性
- 默认复制因子为 3,每个块在集群中存在三份副本
- 即使机器发生故障,块级复制也能保证数据可用性
节点架构
HDFS 集群的节点类型:
| 节点类型 | 角色 | 说明 |
|---|---|---|
| NameNode | master | 存储文件系统的目录树、文件元数据和集群中每个文件的位置信息,将客户端指向正确的 DataNode |
| Secondary NameNode | master | 执行 NameNode 的内务任务并生成内存结构快照,降低数据丢失风险 |
| DataNode | worker | 存储和管理本地磁盘上的 HDFS 块,向 NameNode 报告健康状况 |
注意:Secondary NameNode 虽然名字中有"Secondary",但它并不是 NameNode 的备份节点。
NameNode 和 DataNode 进程可以在一台机器上运行,但生产环境中通常使用一台运行 NameNode 的专用服务器加上数千台运行 DataNode 的机器组成集群。
生态系统与实际应用
Hive
Hive 是基于 Hadoop 的数据仓库工具,主要功能包括:
- 数据提取、转化、加载(ETL)
- 提供 SQL 查询功能
- 将 SQL 语句转换为 MapReduce 任务执行
典型应用场景:
- Facebook 的日志分析
- 淘宝搜索中的自定义筛选
- Twitter、LinkedIn 的社交推荐(“可能认识的人"功能)
- 天猫的商品推荐系统
- 垃圾邮件识别和过滤
- 用户特征建模
计算引擎演进
| 阶段 | 引擎 | 特点 |
|---|---|---|
| 第一代 | MapReduce | 笨重但稳定,Map 阶段各机器分别处理,Reduce 阶段汇总结果 |
| 第二代 | Tez、Spark | Map 和 Reduce 界限更模糊,数据交换更灵活,减少磁盘读写 |
| SQL 层 | Pig、Hive | Pig 用接近脚本的方式描述 MapReduce,Hive 使用 SQL,翻译成 MapReduce 程序执行 |
| 高速查询 | Impala、Presto、Drill | 牺牲通用性和稳定性,换取更快的 SQL 处理速度 |
| 流式计算 | Streaming | 数据流进来时就处理,适合实时场景,无法替代批处理系统 |
| 调度系统 | Yarn | 中央管理器,是目前最流行的资源调度框架 |
工作原理示例
问题背景
假设有一个 100M 大小的数据库备份 SQL 文件,需要在不导入数据库的情况下过滤出想要的内容。
小规模数据处理方法:
- 使用 Linux 的 grep 命令通过正则匹配
- 通过编程读取文件,对每行数据进行正则匹配
问题:如果是 1G、1T 甚至 1PB 的数据,上述方法就不适用了,因为单台服务器的性能有上限。
分布式计算解决方案
分布式计算的核心是利用分布式算法,将运行在单台机器上的程序扩展到多台机器上并行运行,使数据处理能力成倍增加。
Hadoop 的优势:
- 可以将多台廉价的 Linux PC 组成分布式集群
- 编程人员只需根据 MapReduce 规则定义好接口方法
- Hadoop 自动将计算分布到各个节点,并行执行
处理流程:
- 把大量数据文件导入 HDFS
- 编程人员定义 map 和 reduce(文件的行定义为 key,内容定义为 value)
- Hadoop 将程序分布到 N 个节点并行处理
- 通过 reduce 聚合结果并返回
Windows 环境配置指南
安装环境
-
Java 环境:JDK 版本不低于 1.8
- 下载地址:https://www.oracle.com/java/technologies/downloads/#java8-windows
-
Hadoop:
- 下载地址:http://archive.apache.org/dist/hadoop/core/
- 示例版本:hadoop-3.2.3
- Windows 环境还需要下载 winutils
-
Spark(可选):
- 下载地址:http://archive.apache.org/dist/spark/
- 示例版本:spark-3.1.2-bin-hadoop3.2
环境变量配置
| 变量名 | 变量值示例 | Path 添加内容 |
|---|---|---|
JAVA_HOME |
D:\java\jdk1.8 |
%JAVA_HOME%\bin、%JAVA_HOME%\jre\bin |
HADOOP_HOME |
D:\hadoop\hadoop-3.2.3 |
%HADOOP_HOME%\bin |
SPARK_HOME |
D:\spark\spark-3.1.2-bin-hadoop3.2 |
%SPARK_HOME%\bin、%SPARK_HOME%\sbin |
Hadoop 配置文件修改
在 D:\hadoop\hadoop-3.2.3\etc\hadoop 目录下修改以下配置文件:
1. core-site.xml
|
|
2. hdfs-site.xml
|
|
3. mapred-site.xml(由 mapred-site.xml.template 重命名得到)
|
|
4. yarn-site.xml
|
|
测试使用
-
格式化 NameNode:
hdfs namenode -format- 注意:格式化前需删除
D:\hadoop\hadoop-3.2.3\data\dfs\下两个文件夹的内容
可能遇到的问题:
https://blog.csdn.net/chasonsp/article/details/115349728
https://blog.csdn.net/weixin_43718641/article/details/117907516
https://zhuanlan.zhihu.com/p/140389153 - 注意:格式化前需删除
-
启动 Hadoop:进入 sbin 目录,执行
start-all.cmd- 浏览器访问 http://localhost:8088/ 查看 Hadoop 启动情况
- 浏览器访问 http://localhost:50070/ 查看 HDFS 状态
-
HDFS 基本操作:
| 操作 | 命令 |
|---|---|
| 创建目录 | hdfs dfs -mkdir /user/input |
| 上传文件 | hdfs dfs -put e:/test.txt /user/input |
| 查看文件 | hdfs dfs -cat /user/input/test.txt |
- 词频统计示例:
|
|
- 停止服务:
stop-all.cmd
常见问题
https://blog.csdn.net/superice_/article/details/102689227
https://jingyan.baidu.com/article/cdddd41cb0d76f53ca00e144.html
问题 1:Windows 用户名包含中文导致权限错误
- 解决方案:打开控制面板更改账户名称,或使用
netplwiz命令修改
Windows 修改用户名:
1、打开控制面板,点击用户账户下的更改账户类型,里面可以更改账户名称
2、然后需要修改 User 目录下的用户目录,有些麻烦,要小心注意1
3、cmd 输入 netplwiz,双击用户名进行修改,电脑需要重启
5、停止服务
D:\hadoop\hadoop-3.2.3\sbin\stop-all.cmd
问题 2:缺少 Group Policy Client 扩展
- 可通过执行以下批处理脚本解决:
|
|
https://blog.csdn.net/qq_36470475/article/details/115670312
拓展与后续学习建议
- 深入 Spark:学习 Spark 的 RDD 编程模型、DataFrame 和 Dataset API,以及 Spark SQL 的使用
- Hadoop 集群部署:了解生产环境中 Hadoop 集群的规划和部署,包括 NameNode HA、ResourceManager HA 等高可用方案
- 数据处理工具:学习 Pig、Hive、Impala 等上层工具,根据场景选择合适的查询引擎
- 流式计算:了解 Kafka + Flink/Spark Streaming 的实时数据处理架构
- 安全机制:学习 Hadoop 的安全机制,包括 Kerberos 认证、HDFS 权限控制等