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

【无标题】第二章 Hadoop3安装

2.1 启动Docker容器

2.1.1 加载镜像

用来将一个Docker镜像从/cg/images/hadoop_node.tar.gz压缩包加载到本地Docker环境里面

docker load < /cg/images/hadoop_node.tar.gz

运行结果如下:

docker run --name master --privileged --ulimit nofile=65535:65535 --hostname master --ip 172.18.0.2 --add-host=slave1:172.18.0.3 --add-host=slave2:172.18.0.4 --add-host=slave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro -v /headless/course/:/course hadoop_node /service_start.sh docker run --name slave1 --privileged --ulimit nofile=65535:65535 --hostname slave1 --ip 172.18.0.3 --add-host=master:172.18.0.2 --add-host=slave2:172.18.0.4 --add-host=slave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh docker run --name slave2 --privileged --ulimit nofile=65535:65535 --hostname slave2 --ip 172.18.0.4 --add-host=master:172.18.0.2 --add-host=slave1:172.18.0.3 --add-host=slave3:172.18.0.5 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh docker run --name slave3 --privileged --ulimit nofile=65535:65535 --hostname slave3 --ip 172.18.0.5 --add-host=master:172.18.0.2 --add-host=slave1:172.18.0.3 --add-host=slave2:172.18.0.4 -itd -v /cgsrc:/cgsrc:ro hadoop_node /service_start.sh

docker run:创建并启动一个docker容器

--name master:容器的名字叫master

--privileged:赋予容器特权模式。允许它访问主机上所有设备。

--ulimit nofile=65535:65535:设置容器的最大文件描述符数量(软限制/硬限制)。默认值较小,Hadoop,HDFS等大数据组件会频繁打开文件/网络连接,必须调高避免“too many open files”错误。

--hostname master:定义容器内主机名为 master。

--ip 172.18.0.2:手动分配静态IP地址,适用于需要固定IP的集群(很多台电脑,组成的一个集合)环境。

--add-host:将 slave1、slave2、slave3 的IP映射写入容器内的 /etc/hosts 文件,实现主机名解析,加入集群。

-v /cgsrc:/cgsrc: ro 将主机的 /cgsrc 目录以只读模式挂载到容器内相同路径。

-v /headless/course/:/course 将主机目录 /headless/course/ 挂载到容器的 /course 目录,默认读写权限。

hadoop_node:指定使用的Docker镜像名称。

/service_start.sh:是容器启动后自动执行的脚本,通常用于初始化服务(如启动Hadoop集群)。

-itd:组合参数表示以交互终端模式后台运行容器。

2.1.2 启动容器

docker ps:查看所有启动的容器

docker ps -a:查看所有容器

docker start+容器的名字:启动容器

2.1.3 进入容器

docker exec -it --privileged 容器的名字 /bin/bash 进入容器

2.2 配置java环境

2.2.1 创建java文件夹

cd 文件夹:切换目录

mkdir 创建的文件夹:创建文件

2.2.2 复制文件

cp 被复制文件的地址及文件名 粘贴到的地址 复制文件

cp /cgsrc/jdk-8u171-linux-x64.tar.gz /usr/local/java/

ls :列出目录下内容,默认仅显示文件名/目录名

常用选项:
-l 显示详细信息
-a 显示隐藏文件
-h 人类可读的文件大小

ll列出目录下内容,ls -l的别名)显示权限、所有者、大小等详细信息

2.2.3 解压

tar -zxvf 压缩包的名字:解压

tar -zxvf jdk-8u171-linux-x64.tar.gz

2.2.4 删除

rm -f:要删除的文件名 删除文件

-r:递归删除目录
-f:强制删除

rm -f jdk-8u171-linux-x64.tar.gz

2.2.5 编辑环境变量

vim 文件的名字 编辑文件的内容vim

vim ~/.bashrc

进入文件过后(i进入insert模式 )

esc退出模式,wq!退出编辑

2.2.6 让环境变量生效

source ~/.bashrc #让环境变量生效 echo $JAVA_HOME #检验变量值 java -version #查看java版本

2.3 配置分布式模式

HDFS:NameNode(1个) DataNode(多个) SecondaryNameNode(1个,尽量不要与NN安装在同一台服务器)

YARN:ResourceManager(1个) 很消耗内存,尽量不要和NN,2NN放在同一台服务器上。NodeManager(多个)

hadoop1hadoop2hadoop3hadoop4
NameNodeDataNodeDataNode

DataNode

SecondaryNode

NameNode

NodeManager

ResourcdManager

NodeManagerNodeManager

2.3.1 准备工作

ifconfig 接口名 行为 用于配置和显示网络接口信息

ifconfig #显示所有网络接口信息 ifconfig I0 #显示特定接口信息 ifconfig I0 up #启用网络接口 ifconfig I0 down #禁用网络接口 ifconfig I0 192.168.1.100 #为接口分配IP地址


IP地址与Mask地址区

IP地址Mask地址

用于标识网络中的设备。

分为IPv4(32位)和IPv6(128位)

包含网络部分和主机部分,具体划分由子网掩码决定

用于划分IP地址的网络部分和主机部分

由连续的1(网络位)和0(主机位)组成。

与IP地址进行按位“与”运算,可得到网络地址。

IP地址标识设备Mask地址定义网络范围
IP地址可变Mask地址通常由网络规划固定

ping ip地址 :ICMP协议,测试两台计算机之间的连通性(OSI第三层)

ping master

2.3.2 SSH(Secure Shell安全外壳协议)

一台电脑控制另一台电脑(有密码)

第一步:客户端生成密钥对(私钥)和(公钥)。

第二步:客户端发送公钥到服务器,运行

第三步,服务器用公钥加密

1.生成公钥和私钥

cd ~/.ssh #到.ssh目录中
ssh-keygen -t rsa #执行该命令后,遇到提示信息,均按Enter即
一键获取完整项目代码
.ssh文件夹下的文件功能解:

known_hosts 记录ssh访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密码登录服务器公钥
2.将公钥文件追加到另一个文件authorized_keys中

cat 文件名 显示文件内容

cat 文件名1 >> 合并后文件名 合并文件

cat ./id_rsa.pub >> ./authorized_keys #完成后可以执行 ssh 本机 来验证一下,可能会遇到提示信息,只要输入 yes 即可,测试成功后执行 exit 命令返回原来的终端。


3.scp 一台电脑文件地址用户是root@另一台台电脑:文件复制到的路径 将公钥复制到被控制电脑

scp ~/.ssh/id_rsa.pub root@slave1:/root #scp从一台电脑的~/.ssh/id_rsa.pub的文件,复制到slave1这台电脑上,用户是root,放到了slave1里面的/root这个路径下面 #执行scp复制文件时会要求输入相应的slave的密码,默认为:83953588abc #!!!要在本机(控制别人的)上执行

安全拷贝

1.从hadoop102服务器上,将本服务器的文件推给hadoop103:

scp -r jdkı.8.0_212/ root@hadoop103:/opt/module/


2.在hadoop103服务器上操作,将hadoop102的文件拿过来

scp -r root@hadoop102:/opt/module/jdkı.8.0_212/ ./

同理hadoop也可以这么操作

scp -r root@hadoop102:/opt/module/hadoop-3.1.3/ ./
scp root@master:/root/.ssh/id_rsa.pub ~/

3.在103服务器上,将102的文件拷贝到104

scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module/
scp root@master:/root/.ssh/id_rsa.pub root@slave3:/root

4.传输完成后在被控制电脑上将SSH公钥加入授权:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm -f ~/id_rsa.pub

这样就可以在控制电脑上无密码 ssh 被控制电脑 登录到各个被控制电脑了。

2.4 安装Hadoop并配置环境

2.4.1 安装Hadoop

1.将hadoop包复制到/usr/local下面

cp /cgsrc/hadoop-3.4.0.tar.gz /usr/local/

2.解压

tar 解压,压缩

-z 使用gzip解压

× 解压文件

c 压缩文件

v 显示解压过程

f 指定文件名

tar -zxvf hadoop-3.4.0.tar.gz

3.修改名字

mv 旧的名字 新名字 移动/重命名文件

mv hadoop-3.4.0 hadoop

4.修改配置文件

vim ~/.bashrc

在配置文件添加hadoop的相关路径
让配置文件生效

5.查看hadoop的版本

hadoop version

1.bin:存放操作命令,具体包含如(hdfs,mapred,yarn)

2.etc:所有配置文件

3.include:头文件

4.Iib:本地库(native库) 压缩的动态链接

5.libexec:拓展库

6.sbin:集群相关的命令

7.share:学习的资料,文档

2.4.2 配置集群环境

/usr/local/hadoop/etc/hadoop/的配置文件下的

workers(DataNode节点)

core-site.xml 整个集群的核心配置

hdfs-site.xml 配置hdfs

mapred-site.xml 配置mapreduce

yarn-site.xml 配置yarn

hadoop-env.sh

1.编辑workers

vim workers

master slave1 slave2 slave3

2.修改core-site.xml

<configuration> <!--默认文件系统的URI地址(内部接口) --> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <!--临时工作目录(默认一个月就删除) --> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> </property> </configuration>

3.配置hdfs

<configuration> <!--secondary namenode --> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <!--hdfs 存数据的份数 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!--namenode 元数据所在的物理地址 --> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <!--datanode数据 存储的物理地址 --> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>

4.配置mapreduce

<configuration> <!--mapreduce程序运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--job的历史服务器端地址(内部通讯端口) --> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <!--历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>

5.配置yarn

<configuration> <!--指定yarn ResourceManager主机名,客户端等通过该主机名访问RM --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <!--配置NodeManager的辅助服务,这里是YARN上运行MapReduce的必须配置 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--NodeManager监控本地磁盘的健康状况(磁盘上限98.5) --> <property> <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name> <value>98.5</value> </property> </configuration>

2.4.3 配置slave节点

1.将/usr/local/下面的hadoop文件压缩成hadoop.master.tar.gz,并放到root文件夹下

tar -zcvf ~/hadoop.master.tar.gz ./hadoop

2.将master这台机器上的root/hadoop.master.tar.gz这个压缩包上传复制到slave1这台机器的/root路径下,并且登录slave1的账户是root

3.将~/hadoop.master.tar.gz的这个文件解压,而且解压到/usr/local文件夹下面

tar -zxvf ~/hadoop.master.tar.gz -C /usr/local/

4.格式化节点,配置集群的时候执行一次

hdfs namenode -format

5.启动hdfs

start-dfs.sh #启动 stop-dfs.sh #关闭 jps #jps用于列出当前系统所有正在运行的 Java 虚拟机进程及其 PID

usr/local/hadoop/sbin/目录下

master节点:namenode secondarynamenode DataNode(workers如果有localhost,就有)

slave1,2,3 :datanode

如果没有说明(core-site.xml hdfs-site.xml等有问题)

172.18.0.2:9870 在浏览器web中查看节点状态

6.启动yarn

必须是在启动了hdfs的前提条件下

start-yarn.sh #启动 stop-yarn.sh #关闭

master节点:resourcemanager,nodemanager

slave1,2,3:nodemanager

172.18.0.2:8088在浏览器web中查看节点状态

2.5 环境测试

启动hdfs start-dfs.sh

namenode(1个) secondary namenode (1个)

datanode(slave1 slave2 slave3 master)

启动yarn start-yarn.sh

resoucemanager(1个) nodemanager(slave1.2.3 master)

启动顺序:start-dfs.sh 》 start-yarn.sh

关闭的顺序:stop-yarn.sh 》 stop-dfs.sh

172.18.0.2:9870 172.18.0.2(namenode所在机器的ip) 9870是默认的web端访问hdfs的端口号

172.18.0.2.8088 172.18.0.2(resouce manager所在电脑的ip地址) 8088是默认的web端访问yarn的端口号

2.5.1 测试hdfs上传文件

1.创建一个本地文件csh.txt

vi 文件名名字

2.创建一个hdfs的文件夹

hadoop fs -mkdir 文件夹的路径和名字

3.将本地文件上传到hdfs系统里面的文件夹里

hadoop fs -put 本地文件的路径和名字 要上传到hdfs这个系统的具体路径

4.查看文件是否上传成功

引入:QQ邮箱 123456@qq.com

逻辑地址:并非真正意义上存放文件的地址(如上QQ邮箱)

物理地址:真实存放文件的地址

hdfs系统

逻辑地址:/cInput/csh.txt

物理地址:hdfs里面配置的/usr/local/hadoop/tmp/dfs/data

/usr/local/hadoop/tmp/dfs/data/current/BP-138730807-172.18.0.2-1774329732458/current/finalized/subdir0/subdir0


问题:hdfs存放数据(datanode真正存放数据的节点),hdfs默认存3份,存哪几个机器上?

如下图:存放位置在master,slave3,slave1上面(不同电脑有不同分配)

pwd 用于显示用户当前所处的完整工作目录路径

2.5.2 测试大文件上传

1.本地有一个大文件

2.在HDFS系统里面创建一个新的文件夹

3.本地大文件上传到新的文件夹

4.查看,反思

hdfs系统存放文件是按照块存储。如果是大文件,分成多个块,分别存储。

hdfs:/bigFiles/jdk-8u171-linux-x64.tar.gz

物理地址:/usr/local/hadoop/tmp/dfs/data

cat blk_1073741826 >> tmp.tar.gz #将其追加到tmp.tar.gz
tar -zxvf tmp.tar.gz #解压

2.5.3 wordcount测试

副线任务:修改配置文件mapred-site.xml (在matser slave1 slave2 slave3上都执行)

为什么配这些属性?

在mapred-site.xml中配置下列属性,主要是为了确保MapReduce作业在YARN环境下运行时能够正确找到Hadoop的相关路径和依赖库。这些属性的具体用途如下:

yarn.app.mapreduce.am.env
该属性用于设置MapReduce ApplicationMaster(AM)进程的环境变量。AM负责协调MapReduce作业的执行,包括任务的调度和监控。通过设置HADOOP_MAPRED_HOME,AM能够定位Hadoop的安装路径,从而加载必要的库和配置文件。

mapreduce.map.env
该属性用于设置Map任务的环境变量。Map任务在执行时需要访问Hadoop的核心库和配置文件,HADOOP_MAPRED_HOME的配置确保了任务能够正确加载这些资源。

mapreduce.reduce.env
该属性用于设置Reduce任务的环境变量。与Map任务类似,Reduce任务也需要访问Hadoop的核心库和配置文件,HADOOP_MAPRED_HOME的配置确保了任务能够正确加载这些资源。

HADOOP_MAPRED_HOME=/usr/local/hadoop

表示Hadoop的安装路径为/usr/local/hadoop。

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. See accompanying LICENSE file. --> <!-- Put site-specific property overrides in this file. --> <configuration> <!--mapreduce程序运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--job的历史服务器端地址(内部通讯端口) --> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <!--历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> <!-- 设置MapReduce Application Master环境变量 --> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <!-- 设置Map任务执行时的环境变量 --> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <!-- 设置Reduce任务执行时的环境变量 --> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> </configuration>

主线任务:2.5.1上传了HDFS(/cInput/csh.txt)小文件,我们统计这个文件里面每个单词出现的频率

1.确保你的HDFS系统里面/cInput/csh.txt这个文件是存在的

2.测试wordcount是否可以执行成果

cd /usr/local/hadoop/share/hadoop/mapreduce/

hadoop jar jar包的名字 调用方法的名字(wordcount) 输入路径 (/cInput/csh.txt这个输入文件必须存在) 输出路径(必须不存在,如果已经存在会报错) 在 Hadoop 集群上运行指定的 Jar 包程序,调用其中的特定方法处理输入路径中的数据,并将结果写入输出路径

hadoop jar hadoop-mapreduce-examples-3.4.0.jar wordcount /cInput/csh.txt /cOutput #调用Hadoop的wordcount方法对输入文件/cInput/csh.txt进行词频统计,并将结果输出到/cOutput目录

3.解读wordcount运行过程和结果展示

mapreduce:map+reduce 先动map,再动reduce,如上

是否成功:job completed successfully

多了一个cOutput,说明有输出,如下

真正的输出结果在part-r-00000里面

4.查看结果

hadoop fs -cat 文件路径和文件名 查看hdfs中文件的内容

拓展
1.常用端口号
hadoop 3.x

HDFS NameNode内部通道端口8020/9000/9820

HDFS NameNode对用户的查询端口

9870
Yarn查看任务运行情况的端口8088
历史服务器19888

hadoop2x

HDFS NameNode内部通常端口8020/9000
HDFS NameNode对用户的查询端口50070
Yarn查看任务运行情况的端口8088
历史服务器19888

2.常用的配置文件
hadoop 3.x

core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers (/hadoop/etc/hadoop)

hadoop 2.x

core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves

http://www.jsqmd.com/news/642732/

相关文章:

  • 对称式目镜设计中的光扇图分析与像差校正
  • VisionTransformer(二)—— 多头注意力机制:从理论到PyTorch实战解析
  • 收藏!小白/程序员入行AI应用开发必看,别被招聘要求吓退(附实操资源)
  • 常州装修设计领域评测与推荐——聚焦实力标杆,认准鸿鹄领跑优势
  • YOLOFuse效果展示:实测RGB+红外融合检测,复杂环境下精度显著提升
  • Dify低代码平台实战:5步搞定企业级AI应用开发(附避坑指南)
  • Redis 常用数据类型
  • day02统计师考试(初级)统计法的特点
  • 从理论到实践:信息量、码元与比特的深度解析及通信系统中的应用
  • 基于CNN卷积神经网络的锂电池SOC估计,MATLAB代码,二维图+三维图!
  • 人工智能艺术新范式:忍者像素绘卷:天界画坊在AIGC领域的应用探索
  • 当AI搜索引擎开始替用户做消费决策,品牌的媒介宣发逻辑也正在被彻底改写
  • 外汇流动性和市场情绪指标MT4、MT5
  • 深入大模型-37-learn-claude-code之第十二课学习claude code编程思想的体会
  • pgRouting安装及使用示例
  • 马尔可夫性、极小性和忠实性的关系:因果图与数据的深层逻辑
  • ZR.Admin.NET + Vue3实战:从本地开发到Nginx部署的完整避坑指南
  • 使用腾讯QClaw来拯救一个重度脂肪肝患者
  • 100G SFP光模块全解读:核心定义、关键特性与主流应用场景
  • L1-044 稳赢(15分)
  • RTA-OS Alarm配置避坑指南:从绝对/相对时间到自启动,这些细节别踩雷
  • FanControl完全指南:告别风扇噪音,5分钟打造完美静音电脑
  • Kylin-Desktop-V10-SP1-海光版(Hygon C86)安装与配置全指南
  • 5月19日起Roblox更新游戏发布要求,创作者反响不一!
  • 从云端到边缘:拆解Capsule Update如何成为现代设备(IoT/服务器)固件管理的基石
  • 2025年终极指南:R3nzSkin国服特供版——一键解锁LOL全皮肤的完整解决方案
  • 手把手教你用Qwen3.5-2B:免费商用、一键部署,打造个人AI助手
  • 表格布局中的Flexbox应用
  • 多线程——面试中一个常考内容(13)
  • celery-redis异步任务具体应用