保姆级教程教你如何安装Hadoop,实现Hadoop单机(非分布式)配置

ops/2024/10/16 2:30:33/

下载Ubutu镜像

前往阿里镜像站https://mirrors.aliyun.com/oldubuntu-releases/releases/16.04.0/?spm=a2c6h.25603864.0.0.6be57ff3u2zMGR
选择下载ubuntu-16.04-desktop-amd64.iso
下载时间较久,请耐心等待

创建实验用虚拟机

选择创建新的虚拟机
在这里插入图片描述选择典型并下一步

在这里插入图片描述

选择安装程序光盘映像文件点击浏览,选中此前下载的光盘镜像文件

在这里插入图片描述

如下图设置
在这里插入图片描述
在这里插入图片描述

设置最大虚拟机占用内存100GB(并不会立即使用100GB),并选中将虚拟磁盘存储为单个文件
在这里插入图片描述

点击完成
在这里插入图片描述
等待虚拟机安装完成
安装完成后,如下图所示
在这里插入图片描述
选择xmudblab并输入123456,回车即登录完成
按下CTRL+ALT+T键,即可打开终端命令行
点击窗口左上角的圆X按钮,即可关闭终端
在这里插入图片描述选择左边栏中的 Floppy Disk 即可进行系统文件管理(类似打开Windows我的电脑)
打开后,选中Floppy Disk右键,再点击Quit,即可关闭
在这里插入图片描述
至此,完成虚拟机的安装

配置虚拟机环境

hadoop_35">创建hadoop用户

sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop		# 给Hadoop用户设置密码
sudo adduser hadoop sudo	# 给Hadoop用户提权,避免不必要的权限问题

配置网络

点击VM上边的编辑,选择虚拟网络编辑器,点击右下角的更改设置,对NAT模式进行修改
在这里插入图片描述选择名称为VMnet8的NAT模式,取消使用本地DHCP服务器,并如下设置子网IP及子网掩码
先点击应用,再点击确定,保存设置
在这里插入图片描述在Ubutu虚拟机中,点击喇叭左边的按钮,选择编辑网络连接

在这里插入图片描述
点击因特网,选中第一个网络连接,并点击编辑在这里插入图片描述
点击IPV4,并点击下方的Method,选中Manual选项
然后点击Add添加IPV4地址,子网地址为172.25.254.10子网掩码为255.255.255.0网关为172.25.254.2

IPV4地址的设置与VM的虚拟网络编辑器息息相关

然后设置DNS:114.114.114.114
最后点击Save,进行保存退出,再点击Close,然后重启Ubutu虚拟机在这里插入图片描述

更新apt

点击右边的设置界面,选择软件包&更新
在这里插入图片描述
点击Download ...右边的倒三角,在弹出的窗口中,往上滑,找到China并点击,选择...aliyun...,并点击Choose Server
在这里插入图片描述
点击Reload重新加载,等待加载完成,若加载失败,选择其他中国服务器,再进行加载在这里插入图片描述

# 加载完成后,打开终端,并输入命令,进行更新
sudo apt-get update	# 成功更新,如下图所示
sudo apt-get install vim -y # 安装新的编辑器

在这里插入图片描述

安装SSH、配置SSH无密码登陆

sudo apt-get install openssh-server	# Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server
ssh localhost	# 尝试远程连接本机
exit	# 退出刚才的 ssh localhost
cd ~/.ssh/	# 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa	# 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys	# 加入授权
# 这样,本机就可以被远程连接(使用xshell来代替VM)
# 另一方面,实现了Hadoop集群、单节点模式 SSH 的免密登陆
# 从此处开始,以后操作均在xshell中进行

安装Java环境

# 安装 Java 环境(Java 21.0.04)
sudo apt-get install wget -y	# 安装下载工具
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz	
# 若虚拟机下载失败,请使用Windows前往官网进行下载,下载完成后,上传至虚拟机
sudo mkdir /usr/lib/jvm -p	# 创建放置Java的目录
sudo tar -zxvf ./jdk-21_linux-x64_bin.tar.gz -C /usr/lib/jvm	# 解压Java压缩包vim ~/.bashrc	# 编辑环境变量
...	# 在最下一行输入
export JAVA_HOME=/usr/lib/jvm/jdk-21.0.4
export JRE_HOME=${JAVA_HOME}/jre 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
export PATH=${JAVA_HOME}/bin:$PATHsource ~/.bashrc	# 刷新环境变量
java -version	# 安装成功,命令显示如下

在这里插入图片描述

安装 Hadoop3.3.5

wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz	# 同理,下载Hadoop
sudo tar -zxvf ./hadoop-3.3.5.tar.gz -C /usr/localcd /usr/local/
sudo mv ./hadoop-3.3.5/ ./hadoop
sudo chown -R hadoop:hadoop hadoop/	# 修改权限

在这里插入图片描述

/usr/local/hadoop/bin/hadoop version	# 安装成功,显示如下

在这里插入图片描述

Hadoop单机配置(非分布式

Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行
分布式即单 Java 进程,方便进行调试

运行例子:将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input   # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*          # 查看运行结果

在这里插入图片描述Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除

rm -r ./output

部署Hadoop伪分布式

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件

Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/
Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现

# 以下是伪分布式需要修改的配置文件
vim ./etc/hadoop/core-site.xml
...
<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property>
</configuration>

Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件)
因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项
在这里插入图片描述

vim ./etc/hadoop/hdfs-site.xml
...
<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/tmp/dfs/data</value></property>
</configuration>

在这里插入图片描述

vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# 在第54行基础上,去掉注释,并添加JAVA的具体路径
export JAVA_HOME=/usr/lib/jvm/jdk-21.0.44

在这里插入图片描述配置完成后,执行 NameNode 的格式化

cd /usr/local/hadoop
./bin/hdfs namenode -format	# 启动完成,如下图所示

在这里插入图片描述开启 NameNode 和 DataNode 守护进程

cd /usr/local/hadoop
./sbin/start-dfs.sh  # start-dfs.sh是个完整的可执行文件,中间没有空格
# 启动完成,如下图所示

在这里插入图片描述

# 可通过 jps 命令来判断是否启动成功
hadoop@ubuntu:/usr/local/hadoop$ jps
6355 SecondaryNameNode
6566 Jps
6007 NameNode
6138 DataNode
# SecondaryNameNode NameNode DataNode 均出现,表示启动成功

启动成功后,可以访问Web界面http://localhost:9870查看NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件,此方法需要Windows主机有虚拟机的主机解析?

运行Hadoop伪分布式

./bin/hdfs dfs -mkdir -p /user/hadoop	# 在 HDFS 中创建用户目录
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
./bin/hdfs dfs -ls input	# 查看文件列表

在这里插入图片描述
分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于分布式读取的是HDFS中的文件(不是Ubutu虚拟机中的文件)

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep input output 'dfs[a-z.]+'./bin/hdfs dfs -cat output/* # 查看的是位于 HDFS 中的输出结果

在这里插入图片描述Hadoop 运行程序时,输出目录不能存在,否则会提示错误
因此若要再次执行,需要执行如下命令删除 output 文件夹

./bin/hdfs dfs -rm -r output    # 删除 output 文件夹

若要关闭 Hadoop,则运行

./sbin/stop-dfs.sh

下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以


http://www.ppmy.cn/ops/114085.html

相关文章

sql刷题常用函数

ROW_NUMBER() ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) 是一个窗口函数&#xff0c;用于生成每个分组内的唯一行号。这个函数非常适合在分组数据中进行排序&#xff0c;并为每一行分配一个序号。下面是对你的具体示例的详细解释&#xff1a; ROW_NUMBER() OVER (…

使用python-pptx将PPT转换为图片:将每张幻灯片保存为单独的图片文件

哈喽,大家好,我是木头左! 本文将详细介绍如何使用python-pptx将PPT的每一张幻灯片保存为单独的图片文件。 安装python-pptx库 需要确保已经安装了python-pptx库。可以通过以下命令使用pip进行安装: pip install python-pptx导入所需库 接下来,需要导入一些必要的库,包…

Scrapy爬虫IP代理池:提升爬取效率与稳定性

在互联网时代&#xff0c;数据就是新的黄金。无论是企业还是个人&#xff0c;数据的获取和分析能力都显得尤为重要。而在众多数据获取手段中&#xff0c;使用爬虫技术无疑是一种高效且广泛应用的方法。然而&#xff0c;爬虫在实际操作中常常会遇到IP被封禁的问题。为了解决这个…

QT 带箭头的控件QPolygon

由于对当前项目需要绘制一个箭头控件&#xff0c;所以使用了QPainter和QPolygon来进行绘制&#xff0c;原理就是计算填充&#xff0c;下面贴出代码和效果图 这里简单介绍下QPolygon QPolygon是继承自 QVector<QPoint>那么可以很简单的理解为&#xff0c;他就是一个点的…

C++—vector的常见接口与用法(正式进入STL)

目录 0.提醒 1.介绍 2.构造 1.正常构造 2.默认值构造 3.调用默认构造函数构造 3.遍历 1.迭代器 2.范围for 3.下标访问 4.容量 1.capacity&#xff1a;返回当前容器的容量 2.reserve&#xff1a;如果传的k比当前容量大&#xff0c;则扩容到比k大或者等于k的数&…

字符串长度

如果不给你数组长度&#xff0c;读入一个数组怎么半 int target; std::cin.ignore(); string line; std::getline(std::cin,line); std::istringstream iss(line); int temp1; while(iss>>temp1) {f.emplace_back(temp1); } 题目1&#xff1a;输入&#xff0c;一个钱总数…

linux + 宝塔 + django + websocket 部署

记坑一个&#xff1a; 如果服务器上的代码views.py/settings.py/模板html等更新了&#xff0c;需要重启daphne服务&#xff0c;否则还是显示旧内容。测试中某段代码修改后&#xff0c;尝试重启python项目、重启nginx都依然显示旧内容&#xff0c;莫名其妙到怀疑人生&#xff0c…

MySQL索引测试

在MySQL中&#xff0c;即使表中没有数据&#xff0c;查询优化器也会考虑使用索引来执行查询。但在某些情况下&#xff0c;查询优化器可能会选择不使用索引&#xff0c;这通常是基于成本效益分析的结果。 表中没有任何数据时&#xff0c;无论是否使用索引&#xff0c;查询结果都…