当前位置: 首页 > 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.cnnetsun.cn/news/1898050.html

相关文章:

  • L1-044 稳赢(15分)
  • 从理论到实践:信息量、码元与比特的深度解析及通信系统中的应用
  • SEPIC拓扑设计实战:从元件参数计算到PCB布局的完整指南
  • lingbot-depth-pretrain-vitl-14开源部署:镜像内软链机制㊸与双目录防御设计解析
  • 人工智能艺术新范式:忍者像素绘卷:天界画坊在AIGC领域的应用探索
  • 幻兽帕鲁词条修改(幻兽帕鲁改存档工具)
  • 百度网盘提取码智能获取:3分钟掌握零门槛资源解锁技巧
  • Win10 + MATLAB R2021a 环境下的 TrueTime2.0 工具箱安装与网络控制系统仿真实践
  • AirPodsDesktop开源方案:Windows用户的苹果耳机完整体验终极指南
  • 避开这些坑!用CycloneDDS连接宇树Go2机器人的ROS2配置心得
  • 优峰技术:光学可调滤波器在光通信测试中的核心应用与选型指南
  • Qwen3.5-9B-AWQ-4bit解析Matlab算法:实现代码翻译与性能优化
  • ros2 run命令完全指南:从基础格式到高级参数配置(以turtlesim为例)
  • 抖音下载神器:5分钟掌握批量无水印下载与智能管理
  • 黄山派LVGL8实战:用Gui Guider的MultiLanguage模板快速做个多语言Demo
  • 英飞凌Aurix2G TC3XX时钟树配置实战:从20MHz晶振到300MHz主频的MCAL保姆级教程
  • 万维钢:复利的真正秘密,不是利率,是时间
  • 描述性统计分析在企业AI应用调查中的实战指南
  • Eth-Trunk(链路聚合)实战:从原理到配置的深度解析
  • AIAgent多租户隔离不是选题——是生死线:基于17个金融/医疗客户落地案例的SLA保障型隔离架构白皮书
  • Oracle19c静默建库实战:如何用dbca.rsp模板快速生成生产级数据库?
  • 青岛制造行业ERP系统深度评测:用友T+cloud产品力解析
  • Microsoft Edge 浏览器下载文件时,提示【xxx可能会损害你的设备。是否仍要保留?】解决方案
  • CnOpenData A股上市公司公司章程公告数据
  • AIAgent元学习能力白皮书核心节选(SITS2026唯一授权中文首发,72小时后下线)
  • keepalived的高可用和负载均衡
  • 用8051单片机DIY呼吸灯:从硬件选型到代码调试全流程(附完整源码)
  • HsmsApplication 半导体行业SECS协议上位机系统功能说明
  • 深度优先遍历DFS:从入门到精通
  • 当你的 Agent 需要记住三个月前的对话