当前位置: 首页 > news >正文

hadoop(服务器伪分布式搭建)

1. 报错 Windows 上写的脚本 拷贝到 Linux(比如 CentOS)系统时会出现。

bash: ./set_java_home.sh: /bin/bash^M: bad interpreter: No such file or directory

报错原因

^M 是 Windows 的换行符(\r\n)
Linux 使用的是 Unix 格式的换行符(\n)
所以你的脚本第一行的 #!/bin/bash 实际上变成了:
#!/bin/bash^M

解决方法把脚本转换为 Unix 格式

使用 dos2unix 命令

dos2unix set_java_home.sh
##如果没有下面就是安装命令
yum install dos2unix -y

2. 解决centos里面多版本java,统中默认的 Java(通过 alternatives 指定的)自动同步到 JAVA_HOME,以保证一致性。

#!/bin/bash# 配置你的 Java 安装路径(按你提供的内容)
JAVA8_PATH="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64"
JAVA11_PATH="/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64"# 参数校验
if [[ $1 == "8" ]]; thenecho "🔄 正在切换到 Java 8..."sudo alternatives --set java $JAVA8_PATH/jre/bin/javasudo alternatives --set javac $JAVA8_PATH/bin/javacexport JAVA_HOME=$JAVA8_PATH
elif [[ $1 == "11" ]]; thenecho "🔄 正在切换到 Java 11..."sudo alternatives --set java $JAVA11_PATH/bin/javasudo alternatives --set javac $JAVA11_PATH/bin/javacexport JAVA_HOME=$JAVA11_PATH
elseecho "❌ 参数错误,请输入 8 或 11,例如:"echo "   source ./switch-java.sh 8"echo "   source ./switch-java.sh 11"return 1
fi# 清理旧 PATH 中的 JAVA_HOME 相关路径
export PATH=$(echo "$PATH" | awk -v RS=: -v ORS=: '/java/ {next} {print}' | sed 's/:$//')# 加入新 JAVA_HOME/bin
export PATH=$JAVA_HOME/bin:$PATH# 显示结果
echo "✅ 已切换至 JAVA_HOME: $JAVA_HOME"
java -version
##到对应位置运行这个脚本,前面加上source,就是全局运行,不加的话就是在一个进程里面运行,检查的时候可能检查不到
source switch-java.sh 8
source switch-java.sh 11
##检查命令
echo $JAVA_HOME

下图是切换Java8的source scripts/switch-java.sh 8
在这里插入图片描述
下图是切换java11的source scripts/switch-java.sh 11
在这里插入图片描述

设置重新启动服务器,以后默认的环境变量中的java的版本

vim ~/.bashrc
##添加
# 每次登录自动设置 Java 8 为默认(你自己上面脚本存放的位置)
source $HOME/scripts/switch-java.sh 8
或
# 每次登录自动设置 Java 11 为默认$HOME指的是根目录root
source $HOME/scripts/switch-java.sh 11
# 最后执行
source ~/.bashrc

Hadoop

安装教程
官网链接:https://hadoop.apache.org/releases.html
不同的安装包的区别

文件名含义
source源码包,需要你自己编译(不推荐初学者)
binary官方编译好的二进制包(✅推荐)
binary-aarch64针对 ARM 架构的电脑(如苹果 M1/M2、树莓派)
binary-lean精简版本(一般不推荐)

推荐下载的安装包:Hadoop 3.3.6 binary
下载地址:https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
下载完成后上传到服务器
我上传的目录是/usr/local

cd /usr/local/
tar -zxvf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 hadoop

执行完上述命令后Hadoop 安装路径是 /usr/local/hadoop
在这里插入图片描述
配置环境变量配置文件

vim ~/.bashrc
#把下面的内容写到配置文件里面
#我的java已经配置了,不需要配置java了如图
# Hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

在这里插入图片描述

#让配置文件生效重新加载
source ~/.bashrc
#测试是否生效,如下图已经安装完成
hadoop version

在这里插入图片描述

hadoop理解

干嘛用的:
是为了解决“单机无法处理超大数据”的问题,通过“分布式存储(HDFS)+ 分布式计算(MapReduce)”来高效地处理海量数据。
用于存储和处理超大规模数据(TB、PB 级别)。
原理:
1.把大文件切成小块分布存储在多台机器上(HDFS)
2.把任务拆成小任务并行处理,最后汇总结果(MapReduce)
核心组件与原理图解
在这里插入图片描述
Hadoop 核心原理组件解释

组件功能
HDFS分布式文件系统,把大文件切成块存到多台机器,每块默认保存 3 份(容错)
MapReduce分布式计算框架,把任务拆成 map → shuffle → reduce,分布式并行处理
YARN资源调度框架,决定哪些机器执行哪些任务
NameNodeHDFS 中的“总目录”,保存文件结构、块位置(元数据)
DataNode实际存储数据块的节点
ResourceManager管理所有节点资源,分配任务
NodeManager每个节点的“本地资源控制器”,接收任务并执行

应用场景:分布式存储和海量数据计算,用在“大数据”场景下。

场景描述
日志分析网站、APP、大型平台的用户访问日志分析(TB 级)
数据仓库(Hive)用 SQL 处理海量结构化数据
ETL 处理(+Sqoop)数据抽取(从 MySQL 导入)、转换、加载
搜索引擎爬虫把抓取网页分布式处理、存储
图像视频处理多节点同时处理图片/视频数据(如压缩、转码)
机器学习预处理对大规模训练数据进行 MapReduce 处理
互联网企业分析系统淘宝、百度、腾讯、头条等早期都用了 Hadoop 搭建离线数据处理平台

Hadoop优势

优势说明
高可扩展加机器就能扩容(线性扩展)
高容错自动备份副本,节点宕了也不会丢数据
大规模处理支持 TB/PB 级别数据处理
高性价比可用普通商用服务器构建分布式平台
开源生态丰富Hive、Spark、HBase、Flink 都能集成 Hadoop 存储

不适合的地方

不适合场景说明
实时计算(ms 级)Hadoop 是离线批处理,延迟分钟级
小数据场景启动 MapReduce 比处理本身还慢
高频低延迟系统比如金融交易系统、秒杀系统,不适合 Hadoop
高并发 OLTPHadoop 不支持事务处理和高并发读写操作

运行模式

模式是否需要配置 XML是否需要创建 tmp、namenode、datanode 等目录是否需要启动服务
1. 本地模式(Local Mode)❌ 不需要❌ 不需要❌ 不需要
2. 伪分布式模式✅ 需要✅ 必须创建✅ 启动 HDFS/YARN
3. 真分布式模式✅ 需要✅ 必须创建(不同节点)✅ 启动多节点服务

hadoop部署伪分布式

第一步创建 Hadoop 所需的工作目录

mkdir -p /usr/local/hadoop/tmp
mkdir -p /usr/local/hadoop/hdfs/namenode
mkdir -p /usr/local/hadoop/hdfs/datanode
目录作用
/usr/local/hadoop/tmpHadoop 运行时的临时文件目录(如锁文件、缓存)
/usr/local/hadoop/hdfs/namenode存储 NameNode 元数据(如文件目录结构、块位置)
/usr/local/hadoop/hdfs/datanode存储 DataNode 的实际数据块(HDFS 文件数据)

NameNode 认为 /usr/local/hadoop/hdfs/namenode 是它的持久存储位置。
DataNode 把数据块写入 /usr/local/hadoop/hdfs/datanode。
tmp 用来缓存、写日志、写运行时中间文件。

第 2 步:编辑配置文件
配置文件路径:/usr/local/hadoop/etc/hadoop/
2.1. core-site.xml

vim /usr/local/hadoop/etc/hadoop/core-site.xml

内容:需要外部访问配置hdfs://主机名称:9000

<configuration><property><name>fs.defaultFS</name><value>hdfs://主机名称(或者是你的ip注意要和下面的文件中的保持一致):9000</value></property><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop/tmp</value></property>
</configuration>

2.2 hdfs-site.xml

vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml

内容:

<configuration><!-- 设置副本数为1(伪分布式) --><property><name>dfs.replication</name><value>1</value></property><!-- NameNode 存储目录 --><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/hdfs/namenode</value></property><!-- DataNode 存储目录 --><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/hdfs/datanode</value></property><!-- DataNode 注册使用公网IP(重要) --><property><name>dfs.datanode.hostname</name><value>你自己的主机名称或者是ip</value></property><!-- DataNode 与客户端通信使用 hostname(IP) --><property><name>dfs.datanode.use.datanode.hostname</name><value>true</value></property><!-- 客户端使用 hostname(IP) 访问 DataNode --><property><name>dfs.client.use.datanode.hostname</name><value>true</value></property><!-- 开放 NameNode RPC(绑定到所有网卡) --><property><name>dfs.namenode.rpc-bind-host</name><value>0.0.0.0</value></property><!-- 可选:关闭主机名校验,允许 IP 注册 --><property><name>dfs.namenode.reject-unresolved-datanode-hostname</name><value>false</value></property></configuration>

2.3 mapred-site.xml

vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

内容:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

2.4 yarn-site.xml

vim /usr/local/hadoop/etc/hadoop/yarn-site.xml

内容:

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>

第三步配置免密登录

ssh-keygen -t rsa        # 全部回车
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh localhost            # 确保不需要输入密码

第四步:格式化 HDFS(只做一次)

hdfs namenode -format
#后面如果再需要格式化需要关闭这两个
stop-dfs.sh
stop-yarn.sh

第五步:启动命令

#停止命令
stop-dfs.sh
#启动命令
start-dfs.sh
start-yarn.sh
#jps用于列出当前系统中所有的HotSpot Java虚拟机进程
jps                             # 查看服务是否正常## 报错
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
#你在用 root 用户执行 start-dfs.sh 命令
#Hadoop 默认不允许你用 root 来启动 HDFS 守护进程(安全考虑)## 下面是解决方法 以及其他命令
#创建用户
useradd hadoop
passwd hadoop
#把Hadoop 安装目录权限改给 hadoop 用户:
chown -R hadoop:hadoop /usr/local/hadoop
#给hadoop用户赋予sudo权限(centos7)
usermod -aG wheel hadoop
#其他关于防火墙的命令可选
sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
#切换用户
su - hadoop
vim ~/.bashrc #编辑,不同用户不同的环境变量文件
#切换完用户后从新配置java和hadoop的环境变量(如下图)
#我Java的环境变量是一个脚本文件(Java8 和java11需要切换),根据自己的需求配置
#保存后再执行(让配置文件生效)
source ~/.bashrc
#验证是否生效
echo $JAVA_HOME
echo $HADOOP_HOME
which hadoop

在这里插入图片描述
在这里插入图片描述总总结:hadoop是什么,是用来处理海量数据的,然后有两大核心模块,一个就是,分布式文件HDFS(Hadoop Distributed File System),里面有两种节点NameNode和DataNode ,HDFS会把一个大文件分成块(block默认大小是128MB)每个块会有多个副本存在不同的服务器上(默认3个),具体的内容存在DataNode里面,而NameNode相当于DataNode的目录。

hadoop操作上传,下载,读取文件的命令

#查看HDFS的根目录
hdfs dfs -ls /
# 创建用户目录
hdfs dfs -mkdir -p /user/hadoop
# 创建临时目录(某些程序可能会用到)
hdfs dfs -mkdir /tmp
# 设置临时目录权限为 777(某些程序依赖)
hdfs dfs -chmod -R 777 /tmp上传文件
hdfs dfs -put /本地路径/文件名 /HDFS目标路径
#列子
hdfs dfs -put /home/hadoop/files/剑来01.mp4 /user/hadoop/
#查看是否上传成功
hdfs dfs -ls /user/hadoop/

在这里插入图片描述

# 查看文件块和位置
hdfs fsck /user/hadoop/剑来01.mp4 -files -blocks -locations
输出:
Status: HEALTHY
# ✅ 文件健康,未缺块、未损坏Number of data-nodes:	1
# 📦 当前集群中只有1个 DataNode(单节点伪分布式)Number of racks:	1
# 📶 当前仅配置了1个机架(Rack)Total dirs:	0
# 📁 总共目录数量为0(因为只检查了一个文件)Total symlinks:	0
# 🔗 符号链接数量为0(HDFS中很少使用符号链接)Replicated Blocks:Total size:	2655188930 B# 📄 文件总大小约 2.65GBTotal files:	1# 📁 本次检查的文件数量Total blocks (validated):	20 (avg. block size 132759446 B)# 📦 文件被切分为20个块,每个块平均约132MB(符合HDFS默认128MB)Minimally replicated blocks:	20 (100.0 %)# ✅ 所有块至少有1个副本,符合设定的副本数Over-replicated blocks:	0 (0.0 %)# 📈 没有副本数量超出配置的块Under-replicated blocks:	0 (0.0 %)# 📉 没有副本数量不足的块Mis-replicated blocks:	0 (0.0 %)# ⚠️ 块没有分布不合理(如所有副本都集中在同一节点)的问题Default replication factor:	1# 🔁 当前系统默认副本数为1(单节点无法设置更高)Average block replication:	1.0# 📊 所有块平均有1个副本Missing blocks:	0# ❌ 没有缺失的块Corrupt blocks:	0# ❌ 没有损坏的块Missing replicas:	0 (0.0 %)# ❌ 所有副本都存在,没有副本缺失Blocks queued for replication:	0# 📋 没有等待复制的块(说明副本充足)Erasure Coded Block Groups:Total size:	0 BTotal files:	0Total block groups (validated):	0Minimally erasure-coded block groups:	0Over-erasure-coded block groups:	0# ✳️ 未使用 Erasure Coding(纠删码),这是一种高级存储方式,用于节省空间,当前未启用# 查看集群副本默认配置
hdfs getconf -confKey dfs.replication
# 输出文件大小
hdfs dfs -du -h /user/hadoop/
#下载
hdfs dfs -get /user/hadoop/剑来01.mp4 ./
#预览内容
#查看文件的开头
hdfs dfs -cat /user/hadoop/data1.txt | head
#查看结尾(日志)
hdfs dfs -tail /user/hadoop/log.txt
#查看前几行
hdfs dfs -cat /user/hadoop/data2.csv | head -n 5
#过滤
hdfs dfs -ls /user/hadoop/ | grep '\.csv'
#查找
hdfs dfs -find / -name "*.csv"
#查找特定名字
hdfs dfs -find / -name "data2025-*.txt"
#删除
hdfs dfs -rm /user/hadoop/剑来01.mp4
#用 hdfs dfs -ls 查看上传了哪些文件
#用 -cat、-tail、head 查看内容判断是不是你要的
#用 -du -h 看大小,或 grep / find 辅助筛选

Hadoop端口介绍

端口类型服务用法是否浏览器能访问
9000RPC通信端口NameNodeHadoop 命令通信(如 put、get、ls)❌ 不行,后台服务端口
9870Web UINameNode Web浏览 HDFS 目录、查看块位置✅ 可以
9864Web UIDataNode Web查看 DataNode 状态和数据块✅ 可以
8088Web UIYARN ResourceManager查看作业运行状态✅ 可以

hadoop安全模式

重新启动的时候会进入到安全模式

# 查看安全模式状态
hdfs dfsadmin -safemode get
#强制退出安全模式
hdfs dfsadmin -safemode leave
# 输出示例:
# Safe mode is ON
# 或
# Safe mode is OFF
http://www.lryc.cn/news/592114.html

相关文章:

  • 瀚高数据库开启Oracle兼容模块
  • Oracle 11g RAC 高可用集群部署最佳实践
  • SQLite / LiteDB 单文件数据库为何“清空表后仍占几 GB”?——原理解析与空间回收实战
  • Golang 中 JSON 和 XML 解析与生成的完全指南
  • sqli-labs靶场通关笔记:第29-31关 HTTP参数污染
  • 配置本地git到gitlab并推送
  • 【LeetCode 热题 100】199. 二叉树的右视图——(解法一)BFS
  • Visual Studio编译WPF项目生成的文件介绍
  • Newline全场景方案闪耀2025中国智慧生活大会
  • UniApp -- 小程序自定义导航栏组件
  • 共享模式、社群与开源链动2+1模式AI智能名片S2B2C商城小程序的协同发展研究
  • usb转can测试
  • 为Notepad++插上JSON格式化的翅膀
  • 全国计算机等级考试二级题库【C语言】:程序修改题型——结构体、可变数组、链表 自制答案详解合辑
  • 在 ASP.NET Core 和 JavaScript 中配置 WebSocket
  • 【计算机网络】MAC地址与IP地址:网络通信的双重身份标识
  • 依托CCLinkIE转ModbusTCP网关的转换达成西门子PLC连接配置案例
  • 计算机网络基础:从协议到通信全解析(大致框架)
  • Selenium自动化浏览器操作指南
  • websocket案例 599足球比分
  • IDEA高效开发:Database Navigator插件安装与核心使用指南
  • 【后端】.NET Core API框架搭建(10) --配置163邮件发送服务
  • 应用集成体系深度解析:从数据互通到流程协同
  • 实现库存显示和状态按钮的Question
  • nginx定制http头信息
  • python实现Markdown转化PDF的方案
  • 关于字符编辑器vi、vim版本的安装过程及其常用命令:
  • 小架构step系列18:工具
  • web3 区块链技术与用
  • 6 种无线传输照片从安卓到 Mac 的方法