Hadoop是一个分布式集群架构,专为处理PB级海量数据而设计,通过多节点协作实现数据存储、清洗和转换。
其核心组件包括HDFS(分布式文件系统)、MapReduce(计算引擎)和Yarn(资源调度器)。
相比传统数据库(如Oracle)在处理上亿条数据时的性能瓶颈,Hadoop通过任务拆分分发机制(如按部门分组计算平均薪资)显著提升处理效率。
典型生态工具涵盖Hive、Spark、Zookeeper等。
操作上支持HDFS文件交互(put/get/appendToFile)和集群管理(初始化、启动监控等)。
该架构通过分布式计算解决了单机处理大规模数据的局限性。
hadoop
hadoop 是一个集群架构,为了处理海量的数据(PB级别)清洗、转换、存储的一个架构。------大型的计算机。
Oracle 处理单表上亿条数据就有压力。这个时候需要一个集群架构,去做任务的拆解分发,分发给多个服务器去共同处理。这个架构就可以是 hadoop 集群架构。
集群环境:由多个服务器节点组建到一起的运行环境
集群环境:
-
分布式集群环境:由多个节点(CLUSTER)组建而成的
-
伪分布式集群环境:由单节点组建而成,模拟多节点运行的集群环境
计算机的必备组件有:
sql
| 计算机 | Hadoop |
|--------|--------|
| 硬盘 | HDFS ------ 分布式的文件存储系统 |
| CPU | MapReduce ------ 计算引擎 |
| 任务管理器 | Yarn ------ 资源调度 |
示例:查询每个部门的员工平均薪资
sql
SELECT
DEPTNO, AVG(SAL)
FROM EMP -- 有 10 亿条数据
GROUP BY DEPTNO;
这个 SQL 丢到 hadoop 环境运行。
-
基于分组键 DEPTNO 拆分 EMP 表的 10 亿条数据
-
10 号部门:3.3 亿条
-
20 号部门:3.3 亿条
-
30 号部门:3.4 亿条
-
-
将 10 号部门的数据丢给 A 节点去计算 AVG(SAL)
将 20 号部门的数据丢给 B 节点去计算 AVG(SAL)
将 30 号部门的数据丢给 C 节点去计算 AVG(SAL)
-
将 A、B、C 三个节点计算好的结果进行合并。
Hadoop 中常见的组件有:
-
Hive ------ 数仓管理工具(Hive 数据库)
-
Zookeeper ------ 集群管理工具
-
Spark ------ 计算引擎(基于内存,可用于离线/实时)
-
Azkaban ------ 调度工具
-
Kafka ------ 消息队列
-
Hbase ------ NoSQL 数据库
-
Sqoop ------ ETL 工具
启动 Hadoop 集群
-
删除历史 tmp 文件
bash
bashrm -rf /tmp/hadoop-hadoop/dfs/name/* rm -rf /tmp/hadoop-hadoop/dfs/data/* -
集群初始化
bash
bashhadoop namenode -format -
初始化元数据库
bash
bashmysql drop database metastore; -- 忽略报错然后按
ctrl + z -
切换到集群运行目录
bash
bashcd /opt/module/hadoop-3.3.0/ -
执行启动命令
bash
bashsbin/start-all.sh -
启动验证
输入
jps,验证有 6 个进程就说明没问题。
访问 web 界面:
-
HDFS 的 web 界面:
http://192.168.5.100:9870/explorer.html -
集群的监控/调度页面:
http://192.168.5.100:8088/cluster
HDFS 相关指令
HDFS 的指令(文件/目录必须使用绝对路径):
bash
hadoop fs -Linux命令 # 在 Linux 窗口运行
例如:
bash
bash
hadoop fs -mkdir -p /2608/test
hadoop fs -touch /2608/test/aaa.txt
hadoop fs -chmod -R 777 /2608
HDFS 与节点之间的文件交互
Linux 本地文件上传到 HDFS:
bash
hadoop fs -put 本地文件路径 hdfs的存放路径
示例:将本地 task.sh 存放到 HDFS 的 /2608/test 目录
bash
bash
hadoop fs -put task.sh /2608/test
验证:查看 HDFS 上是否存在该文件。
练习:
-
在 HDFS 上新建目录
/test -
将本地 Linux 环境的
/home/hadoop/2608/task.sh文件上传到 HDFS 的/test目录下 -
验证 HDFS 上是否能看到
task.sh的文件内容
HDFS 文件下载到 Linux 本地:
bash
hadoop fs -get hdfs的存放路径 本地文件路径
示例:将 HDFS 上 /2608/test/task.sh 文件下载到本地
bash
bash
hadoop fs -get /2608/test/task.sh /home/hadoop/2608/test/aaa.sh
将本地文件内容合并写入 HDFS 文件
-
HDFS 存在空文件
/2608/test/filebash
bashhadoop fs -touch /2608/test/file -
将本地 Linux 的
aaa、bbb文件内容写入到 HDFS 的/2608/test/filebash
bashhadoop fs -appendToFile aaa bbb /2608/test/file
总结:
-
get:从 HDFS 取文件到 Linux 本地 -
put:从 Linux 本地文件存放到 HDFS -
appendToFile:把本地文件追加写入到 HDFS 文件
练习:
-
将 HDFS 的
/test/task.sh文件下载到本地/home/hadoop/2608目录 -
在
/home/hadoop/2608目录新建文件xxx以及yyy,内容分别是1~5以及6~10 -
在 HDFS 上新建文件
/test/num -
将本地的
xxx以及yyy写入到 HDFS 文件/test/num
配置 Host
-
新建
hosts文件bash# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost 192.168.5.100 node100 -
打开 Windows 的目录
C:\Windows\System32\drivers\etc -
将
hosts文件覆盖进去
目的:让本地 Windows 知道 node100 映射的 IP 是 192.168.5.100