🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀各种软件安装与配置_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 环境
2. 创建hadoop用户
1. Terminal(终端)
2. Bash(Bourne Again Shell)
3. 更新apt
4. 安装并使用vim
5. 安装SSH、配置SSH无密码登陆
6. 安装Java环境
7. 安装Hadoop3.3.5
8. Hadoop单机配置(非分布式)
9. Hadoop伪分布式配置
10. 运行Hadoop伪分布式实例
11. 总结
1. 环境
本教程使用 Ubuntu 22.04 64位作为系统环境(或者Ubuntu 22.04/20.04/18.04都可以),请自行安装Ubuntu系统。具体可以参考下面文章:
【一篇搞定配置】在VirtualBox内安装运行Unbuntu-CSDN博客
装好了 Ubuntu 系统之后,在安装 Hadoop 前还需要做一些必备工作。
2. 创建hadoop用户
如果你安装 Ubuntu 的时候不是用的 "hadoop" 用户,那么需要增加一个名为 hadoop 的用户。
核心思想:创建一个用户专门用来使用hadoop服务
原因如下:
权限管理:
- 使用独立的用户账户可以提高安全性。通过专门的 hadoop 用户,您可以限制访问权限,仅允许该用户进行 Hadoop 相关操作,从而避免其他用户对系统的干扰或误操作。
资源隔离:
- 将 Hadoop 服务运行在独立的用户账户上,可以更轻松地管理资源,如内存、CPU 等,确保 Hadoop 进程不会与其他用户的进程竞争系统资源。
简化管理:
- 所有与 Hadoop 相关的文件和进程都归 "hadoop" 用户所有,方便后续的管理和监控。一旦出现问题,可以更容易地定位和解决。
首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户 :
sudo useradd -m hadoop -s /bin/bash
这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell。
我们都知道shell的意思是命令解释器,bin中放的是很多系统底层服务所需要的代码脚本。
这里,我开始思考bash是什么?bash和terminal的关系是什么?
1. Terminal(终端)
Terminal(终端) 是一个应用程序,它提供了一个用户与计算机之间进行命令行交互的界面。在 Ubuntu 中,
Terminal
是一个 GUI 应用程序(图形界面应用),用于打开一个命令行窗口。当你启动
Terminal
时,它会创建一个 shell 会话,通常是 Bash shell,用来接受和执行用户输入的命令。
Terminal
是用户与操作系统之间的交互媒介,通过它,你可以输入命令、运行程序、编辑文件等。它的本质是一个界面工具,用来显示与操作系统的交互。2. Bash(Bourne Again Shell)
Bash 是一个 shell,即命令行解释器,是一种用来执行命令的程序。它提供了一个环境,用于解释用户输入的命令并与操作系统交互。Bash 也是一种脚本语言,你可以在 Bash 中编写脚本来自动化任务。
Bash 是 Ubuntu 默认的 shell,也就是说,当你打开一个终端窗口时,默认情况下是运行 Bash shell。
简单来说:
1、bash是shell的一种类型。
2、terminal是shell会话的一个可视化应用程序。
3、terminal是皮,shell是terminal能够运行的内核。
4、Ubuntu中默认的shell就是bash shell。
5、打开terminal其内核默认为bash shell
sudo命令: 本文中会大量使用到sudo命令。sudo是ubuntu中一种权限管理机制,管理员可以授权给一些普通用户去执行一些需要root权限执行的操作。当使用sudo命令时,就需要输入您当前用户的密码.
密码:在Linux的终端中输入密码,终端是不会显示任何你当前输入的密码,也不会提示你已经输入了多少字符密码。而在windows系统中,输入密码一般都会以“*”表示你输入的密码字符
输入法中英文切换: ubuntu中终端输入的命令一般都是使用英文输入。linux中英文的切换方式是使用键盘“shift”键来切换,也可以点击顶部菜单的输入法按钮进行切换。ubuntu自带的Sunpinyin中文输入法已经足够读者使用。
Ubuntu终端复制粘贴快捷键: 在Ubuntu终端窗口中,复制粘贴的快捷键需要加上 shift,即粘贴是 ctrl+shift+v。
接着使用如下命令设置密码,可简单设置为 hadoop,按提示输入两次密码:
sudo passwd hadoop
可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题:
最后注销当前用户(点击屏幕右上角的齿轮,选择注销),返回登陆界面。在登陆界面中选择刚创建的 hadoop 用户进行登陆。
3. 更新apt
用 hadoop 用户登录后,我们先更新一下 apt,后续我们使用 apt 安装软件,如果没更新可能有一些软件安装不了。按 ctrl+alt+t 打开终端窗口,执行如下命令:
sudo apt-get update
核心思想:
1、apt
是 Ubuntu 系统中的一个包管理工具,用来安装、更新和删除软件包。2、apt是一个库,里面有很多软件的安装包。
3、更新apt就是让apt从网上获取最新的软件安装包,以防后续的软件安装和更新出现问题。
4、apt是软件安装包的库+包管理工具。
若出现如下 "Hash校验和不符" 的提示,可通过更改软件源来解决。若没有该问题,则不需要更改。从软件源下载某些软件的过程中,可能由于网络方面的原因出现没法下载的情况,那么建议更改软件源。在学习Hadoop过程中,即使出现“Hash校验和不符”的提示,也不会影响Hadoop的安装。
首先点击左侧任务栏的【系统设置】(齿轮图标),选择【软件和更新】
点击 “下载自” 右侧的方框,选择【其他节点】
在列表中选中【mirrors.aliyun.com】,并点击右下角的【选择服务器】,会要求输入用户密码,输入即可。
接着点击关闭。
此时会提示列表信息过时,点击【重新载入】
最后耐心等待更新缓存即可。更新完成会自动关闭【软件和更新】这个窗口。如果还是提示错误,请选择其他服务器节点如 mirrors.163.com 再次进行尝试。更新成功后,再次执行 sudo apt-get update
就正常了。
4. 安装并使用vim
Vim 是一个高度可定制的 文本编辑器,最初由 Bram Moolenaar 在 1991 年创建,基于 vi 编辑器(UNIX 系统中最常用的编辑器)。Vim 是 "Vi IMproved"(即 "Vi 改进版")的缩写,意味着它在经典的 vi 编辑器基础上进行了大量的扩展和增强。
(如果这里大家想要使用gredit也是可以的,但是猫猫不建议使用gredit!!!!!)
(vim功能远比gredit强大!!!!可能。。。。入门有点难)
主要特点:
模式化编辑:Vim 的最大特点是它的 模式化编辑。与传统的文本编辑器(如 gedit、Notepad 等)不同,Vim 使用多种模式来处理文本。常见的模式包括:
- 普通模式(Normal Mode):这是 Vim 默认的工作模式,用户可以在这个模式下通过键盘快捷键进行文本移动、删除、复制、粘贴等操作。
- 插入模式(Insert Mode):在此模式下,用户可以像其他编辑器一样直接输入文本。你可以通过按
i
或a
进入插入模式。- 命令模式(Command Mode):在此模式下,你可以执行命令(如保存文件、查找文本、替换文本等)。进入命令模式的方法通常是按下
:
。- 可视模式(Visual Mode):用来选择文本,选择后可以执行诸如复制、剪切等操作。
高效的键盘操作:由于 Vim 的设计基于模式化编辑,用户可以通过键盘快速移动光标、选择文本、进行批量操作而无需使用鼠标。熟练使用 Vim 后,用户可以显著提高文本编辑效率,特别是在处理大文件时。
高度可定制性:Vim 允许用户通过配置文件(
~/.vimrc
)高度自定义其行为。你可以设置快捷键、定义命令、安装插件,甚至通过编程语言(Vimscript)编写脚本来扩展 Vim 的功能。插件系统:Vim 拥有一个丰富的插件生态系统,你可以安装各种插件来增强其功能,如代码自动完成、语法高亮、版本控制集成、调试工具等。插件可以通过工具如 Vundle 或 vim-plug 来管理。
跨平台支持:Vim 是跨平台的,可以运行在几乎所有操作系统上,包括 Linux、macOS、Windows 等,且运行效率高,占用资源少。
轻量级:与许多功能强大的文本编辑器(如 Visual Studio Code 或 Sublime Text)相比,Vim 是一个非常轻量级的工具,启动速度快,占用内存少,适合在资源有限的环境中使用。
面向程序员的特性:
- 语法高亮:Vim 支持多种编程语言的语法高亮,帮助程序员更容易地阅读和编辑代码。
- 代码折叠:支持折叠代码块,帮助用户集中注意力于当前需要处理的代码部分。
- 自动补全:通过插件,Vim 可以提供代码自动补全、跳转到函数定义等功能,类似于集成开发环境(IDE)中的特性。
sudo apt-get install vim
这里本人出了点问题一直显示安装失败。
后面检查发现:浏览器也无法访问百度。
因此断定是网络连接出了问题!!!!!
在修改虚拟机网络连接后,一切正常~~~~
vim的常用模式有分为命令模式,插入模式,可视模式,正常模式。本教程中,只需要用到正常模式和插入模式。二者间的切换即可以帮助你完成本指南的学习。
- 正常模式
正常模式主要用来浏览文本内容。一开始打开vim都是正常模式。在任何模式下按下Esc键就可以返回正常模式。 - 插入模式
插入编辑模式则用来向文本中添加内容的。在正常模式下,输入i键即可进入插入编辑模式。 - 退出vim
如果有利用vim修改任何的文本,一定要记得保存。Esc键退回到正常模式中,然后输入:wq即可保存文本并退出vim。
5. 安装SSH、配置SSH无密码登陆
集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令),Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server:
sudo apt-get install openssh-server
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地访问和管理计算机。SSH协议为用户提供了一种加密的、安全的方式来连接远程计算机.
SSH:主要用于实现安全的远程登录、远程命令执行,以及安全的数据传输。
核心想法:
1、SSH:是一个shell(命令解释器),用来执行一些命令。
2、SSH作用为实现远程登录、远程数据传输、远程执行命令。
3、SSH能够保证安全。
安装后,可以使用如下命令登陆本机:
ssh localhost
此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 hadoop,这样就登陆到本机了。
但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便。
首先退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:
exit # 退出刚才的 ssh localhost
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
~的含义: 在 Linux 系统中,~ 代表的是用户的主文件夹,即 "/home/用户名" 这个目录,如你的用户名为 hadoop,则 ~ 就代表 "/home/hadoop/"。 此外,命令中的 # 后面的文字是注释,只需要输入前面命令即可。
此时再用 ssh localhost
命令,无需输入密码就可以直接登陆了。
到这一步就配置完成SSH了!!!!!!
之后我们就可以使用ssh localhost来登录SSH,并在SSH上面运行远程控制、登录等命令
下面的jdk-8u371-linux-x64.tar.gz、hadoop-3.3.5.tar.gz均放在/home/Downloads/目录下
6. 安装Java环境
Hadoop 需要 JDK(Java Development Kit) 的原因主要是因为 Hadoop 是用 Java 编写的,并且很多 Hadoop 组件和操作都依赖于 Java 来运行。
手动安装,推荐采用本方式
Hadoop3.3.5需要JDK版本在1.8及以上。需要按照下面步骤来自己手动安装JDK1.8。
我们已经把JDK1.8的安装包jdk-8u371-linux-x64.tar.gz放在了百度云盘,可以点击这里到百度云盘下载JDK1.8安装包(提取码:ziyu)。请把压缩格式的文件jdk-8u371-linux-x64.tar.gz下载到本地电脑,假设保存在“/home/linziyu/Downloads/”目录下。
cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
cd ~ #进入hadoop用户的主目录
cd Downloads #注意区分大小写字母,刚才已经通过FTP软件把JDK安装包jdk-8u371-linux-x64.tar.gz上传到该目录下
sudo tar -zxvf ./jdk-8u371-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下
上面使用了解压缩命令tar,如果对Linux命令不熟悉,可以参考常用的Linux命令用法。
JDK文件解压缩以后,可以执行如下命令到/usr/lib/jvm目录查看一下:
cd /usr/lib/jvm
ls
可以看到,在/usr/lib/jvm目录下有个jdk1.8.0_371目录。
下面继续执行如下命令,设置环境变量:
cd ~
vim ~/.bashrc
上面命令使用vim编辑器(查看vim编辑器使用方法)打开了hadoop这个用户的环境变量配置文件,请在这个文件的开头位置,添加如下几行内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
结果如下:
保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:
source ~/.bashrc
这时,可以使用如下命令查看是否安装成功:
java -version
如果能够在屏幕上返回如下信息,则说明安装成功:
hadoop@ubuntu:~$ java -version
java version "1.8.0_371"
Java(TM) SE Runtime Environment (build 1.8.0_371-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
结果如下:
至此,就成功安装了Java环境。下面就可以进入Hadoop的安装。
7. 安装Hadoop3.3.5
Hadoop安装文件,可以到Hadoop官下载hadoop-3.3.5.tar.gz。
也可以直接点击这里从百度云盘下载软件(提取码:ziyu),进入百度网盘后,进入“软件”目录,找到hadoop-3.3.5.tar.gz文件,下载到本地。
我们选择将 Hadoop 安装至 /usr/local/ 中:
cd Downloads
sudo tar -zxvf /hadoop-3.3.5.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.3.5/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd /usr/local/hadoop
./bin/hadoop version
相对路径与绝对路径: 请务必注意命令中的相对路径与绝对路径,本文后续出现的 ./bin/...
,./etc/...
等包含 ./ 的路径,均为相对路径,以 /usr/local/hadoop 为当前目录。例如在 /usr/local/hadoop 目录中执行 ./bin/hadoop version
等同于执行 /usr/local/hadoop/bin/hadoop version
。可以将相对路径改成绝对路径来执行,但如果你是在主文件夹 ~ 中执行 ./bin/hadoop version
,执行的会是 /home/hadoop/bin/hadoop version
,就不是我们所想要的了。
结果如下:
8. Hadoop单机配置(非分布式)
Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar
可以看到所有例子),包括 wordcount、terasort、join、grep 等。
在此我们选择运行 grep 例子,我们将 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/* # 查看运行结果
执行成功后如下所示,输出了作业的相关信息,输出的结果是符合正则的单词 dfsadmin 出现了1次
‘
注意,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output
删除。
rm -r ./output
9. Hadoop伪分布式配置
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
修改配置文件 core-site.xml,通过 gedit 编辑会比较方便:
gedit ./etc/hadoop/core-site.xml
将当中的:
<configuration>
</configuration>
修改为下面配置:
<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>
同样的,打开配置文件 hdfs-site.xml:
gedit ./etc/hadoop/hdfs-site.xml
修改配置文件 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>
Hadoop配置文件说明:
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,执行 NameNode 的格式化:
cd /usr/local/hadoop
./bin/hdfs namenode -format
成功的话,会看到 "successfully formatted" 的提示,具体返回信息类似如下:
2023-07-11 14:28:30,560 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = hadoop/127.0.1.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 3.3.5 *************************************************************/ ...... 2023-07-11 15:31:35,677 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name **has been successfully formatted**. 2023-07-11 15:31:35,700 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression 2023-07-11 15:31:35,770 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 393 bytes saved in 0 seconds . 2023-07-11 15:31:35,810 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 2023-07-11 15:31:35,816 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid = 0 when meet shutdown. 2023-07-11 15:31:35,816 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hadoop/127.0.1.1 *************************************************************/
如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程都是进行不下去的。如果已经按照前面教程在.bashrc文件中设置了JAVA_HOME,还是出现 Error: JAVA_HOME is not set and could not be found. 的错误,那么,请到hadoop的安装目录修改配置文件“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”这行,然后,把它修改成JAVA安装路径的具体地址,比如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次启动Hadoop。
接着开启 NameNode 和 DataNode 守护进程。
cd /usr/local/hadoop
./sbin/start-dfs.sh #start-dfs.sh是个完整的可执行文件,中间没有空格
若出现如下SSH提示,输入yes即可。
启动时可能会出现如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable WARN 提示可以忽略,并不会影响正常使用。
启动 Hadoop 时提示 Could not resolve hostname:
如果启动 Hadoop 时遇到输出非常多“ssh: Could not resolve hostname xxx”的异常情况,如下图所示:
这个并不是 ssh 的问题,可通过设置 Hadoop 环境变量来解决。首先按键盘的 ctrl + c 中断启动,然后在 ~/.bashrc 中,增加如下两行内容(设置过程与 JAVA_HOME 变量一样,其中 HADOOP_HOME 为 Hadoop 的安装目录):
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
保存后,务必执行 source ~/.bashrc
使变量设置生效,然后再次执行 ./sbin/start-dfs.sh
启动 Hadoop。
启动完成后,可以通过命令 jps
来判断是否成功启动,若成功启动则会列出如下进程: "NameNode"、"DataNode" 和 "SecondaryNameNode"(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
Hadoop无法正常启动的解决方法: 一般可以查看启动日志来排查原因,注意几点:
- 启动时会提示形如 "DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out",其中 DBLab-XMU 对应你的机器名,但其实启动日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以应该查看这个后缀为 .log 的文件;
- 每一次的启动日志都是追加在日志文件之后,所以得拉到最后面看,对比下记录的时间就知道了。
- 一般出错的提示在最后面,通常是写着 Fatal、Error、Warning 或者 Java Exception 的地方。
- 可以在网上搜索一下出错信息,看能否找到一些相关的解决方法。
此外,若是 DataNode 没有启动,可尝试如下的方法(注意这会删除 HDFS 中原有的所有数据,如果原有的数据很重要请不要这样做):
# 针对 DataNode 没法启动的解决方法
cd /usr/local/hadoop
./sbin/stop-dfs.sh # 关闭
rm -r ./tmp # 删除 tmp 文件,注意这会删除 HDFS 中原有的所有数据
./bin/hdfs namenode -format # 重新格式化 NameNode
./sbin/start-dfs.sh # 重启
成功启动后,可以访问 Web 界面 http://localhost:9870 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
核心要点:
1、执行
./sbin/start-dfs.sh
启动 Hadoop。2、通过命令
jps
来判断是否成功启动。3、启动后可以访问 Web 界面 http://localhost:9870 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
运行成功后Web界面为:
10. 运行Hadoop伪分布式实例
上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:
./bin/hdfs dfs -mkdir -p /user/hadoop
核心思想:
1、想要运行Hadoop就需要两个核心技术:a. HDFS;b. mapreduce
2、HDFS:用于分布式存储;MapReduce:用于分析计算数据
3、使用伪分布式Hadoop,本质就是在本地启用HDFS。从而让Hadoop并不是读取本地文件来分析,而是从HDFS从读取数据来使用MapReduce处理。
4、伪分布和分布唯一区别:有没有真实使用多个终端去操作
5、用户想要使用HDFS就需要为自己创建目录,本质就是在NameNode中注册,方便后续查找对应的DataNode。
注意: 教材《大数据技术原理与应用》的命令是以"./bin/hadoop dfs"开头的Shell命令方式,实际上有三种shell命令方式。
- hadoop fs
- hadoop dfs
- hdfs dfs
hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
hadoop dfs只能适用于HDFS文件系统
hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统
接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
复制完成后,可以通过如下命令查看文件列表:
./bin/hdfs dfs -ls input
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep input output 'dfs[a-z.]+'
查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
./bin/hdfs dfs -cat output/*
我们也可以将运行结果取回到本地:
rm -r ./output # 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*
Hadoop 运行程序时,输出目录不能存在,否则会提示错误 "org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists" ,因此若要再次执行,需要执行如下命令删除 output 文件夹:
./bin/hdfs dfs -rm -r output # 删除 output 文件夹
运行程序时,输出目录不能存在: 运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,否则会提示错误,因此运行前需要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作:
Configuration conf = new Configuration();
Job job = new Job(conf);
/* 删除输出目录 */
Path outputPath = new Path(args[1]);
outputPath.getFileSystem(conf).delete(outputPath, true);
若要关闭 Hadoop,则运行
./sbin/stop-dfs.sh
注意: 下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh
就可以!
11. 总结
如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~
本文转载自:Hadoop3.3.5安装教程_单机/伪分布式配置_Hadoop3.3.5/Ubuntu22.04(20.04/18.04/16.04)_厦大数据库实验室博客
作者:厦门大学计算机系林子雨副教授