【一篇搞定配置】如何在Ubuntu上配置单机/伪分布式Hadoop

🌈 个人主页:十二月的猫-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服务 

原因如下:

  1. 权限管理

    • 使用独立的用户账户可以提高安全性。通过专门的 hadoop 用户,您可以限制访问权限,仅允许该用户进行 Hadoop 相关操作,从而避免其他用户对系统的干扰或误操作。
  2. 资源隔离

    • 将 Hadoop 服务运行在独立的用户账户上,可以更轻松地管理资源,如内存、CPU 等,确保 Hadoop 进程不会与其他用户的进程竞争系统资源。
  3. 简化管理

    • 所有与 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强大!!!!可能。。。。入门有点难)

主要特点:

  1. 模式化编辑:Vim 的最大特点是它的 模式化编辑。与传统的文本编辑器(如 gedit、Notepad 等)不同,Vim 使用多种模式来处理文本。常见的模式包括:

    • 普通模式(Normal Mode):这是 Vim 默认的工作模式,用户可以在这个模式下通过键盘快捷键进行文本移动、删除、复制、粘贴等操作。
    • 插入模式(Insert Mode):在此模式下,用户可以像其他编辑器一样直接输入文本。你可以通过按 i 或 a 进入插入模式。
    • 命令模式(Command Mode):在此模式下,你可以执行命令(如保存文件、查找文本、替换文本等)。进入命令模式的方法通常是按下 :
    • 可视模式(Visual Mode):用来选择文本,选择后可以执行诸如复制、剪切等操作。
  2. 高效的键盘操作:由于 Vim 的设计基于模式化编辑,用户可以通过键盘快速移动光标、选择文本、进行批量操作而无需使用鼠标。熟练使用 Vim 后,用户可以显著提高文本编辑效率,特别是在处理大文件时。

  3. 高度可定制性:Vim 允许用户通过配置文件(~/.vimrc)高度自定义其行为。你可以设置快捷键、定义命令、安装插件,甚至通过编程语言(Vimscript)编写脚本来扩展 Vim 的功能。

  4. 插件系统:Vim 拥有一个丰富的插件生态系统,你可以安装各种插件来增强其功能,如代码自动完成、语法高亮、版本控制集成、调试工具等。插件可以通过工具如 Vundlevim-plug 来管理。

  5. 跨平台支持:Vim 是跨平台的,可以运行在几乎所有操作系统上,包括 Linux、macOS、Windows 等,且运行效率高,占用资源少。

  6. 轻量级:与许多功能强大的文本编辑器(如 Visual Studio Code 或 Sublime Text)相比,Vim 是一个非常轻量级的工具,启动速度快,占用内存少,适合在资源有限的环境中使用。

  7. 面向程序员的特性

    • 语法高亮:Vim 支持多种编程语言的语法高亮,帮助程序员更容易地阅读和编辑代码。
    • 代码折叠:支持折叠代码块,帮助用户集中注意力于当前需要处理的代码部分。
    • 自动补全:通过插件,Vim 可以提供代码自动补全、跳转到函数定义等功能,类似于集成开发环境(IDE)中的特性。
sudo apt-get install vim

这里本人出了点问题一直显示安装失败。

后面检查发现:浏览器也无法访问百度。

因此断定是网络连接出了问题!!!!!

在修改虚拟机网络连接后,一切正常~~~~ 

vim的常用模式有分为命令模式插入模式可视模式正常模式。本教程中,只需要用到正常模式和插入模式。二者间的切换即可以帮助你完成本指南的学习。

  1. 正常模式
    正常模式主要用来浏览文本内容。一开始打开vim都是正常模式。在任何模式下按下Esc键就可以返回正常模式。
  2. 插入模式
    插入编辑模式则用来向文本中添加内容的。在正常模式下,输入i键即可进入插入编辑模式
  3. 退出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命令方式。

  1. hadoop fs
  2. hadoop dfs
  3. 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)_厦大数据库实验室博客

作者:厦门大学计算机系林子雨副教授

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用Python爬虫实现数据收集与挖掘

Python爬虫是一种自动化程序&#xff0c;可以模拟浏览器行为&#xff0c;自动地从互联网上抓取、分析和收集数据。Python爬虫通常使用requests、selenium等库来发送HTTP请求&#xff0c;获取网页内容&#xff0c;并使用BeautifulSoup、lxml等库来解析网页&#xff0c;提取所需的…

语音识别失败 chrome下获取浏览器录音功能,因为安全性问题,需要在localhost或127.0.0.1或https下才能获取权限

环境&#xff1a; Win10专业版 谷歌浏览器 版本 131.0.6778.140&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; 问题描述&#xff1a; 局域网web语音识别出现识别失败 chrome控制台出现下获取浏览器录音功能&#xff0c;因为安全性问题&#xff0c;需要在…

springboot444新冠物资管理系统的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装新冠物资管理系统软件来发挥其高效地信息处理的作用&#x…

arcgisPro将面要素转成CAD多段线

1、说明&#xff1a;正常使用【导出为CAD】工具&#xff0c;则导出的是CAD三维多线段&#xff0c;无法进行编辑操作、读取面积等。这是因为要素面中包含Z值&#xff0c;导出则为三维多线段数据。需要利用【复制要素】工具禁用M值和Z值&#xff0c;再导出为CAD&#xff0c;则得到…

当我用影刀AI Power做了一个旅游攻略小助手

在线体验地址&#xff1a;旅游攻略小助手https://power.yingdao.com/assistant/ca1dfe1c-9451-450e-a5f1-d270e938a3ad/share 运行效果图展示&#xff1a; 话不多说一起看下效果图&#xff1a; 智能体的截图&#xff1a; 工作流截图&#xff1a; 搭建逻辑&#xff1a; 其实这…

计算机组成原理的学习笔记(2)--数据的表示和运算·其一

学习笔记 前言 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记&#xff0c;仅用于学习交流。 正文 1. 浮点数表示 浮点数结构&#xff1a; 符号位&#xff08;1 位&#xff09;&#xff1a;表示数值的正负。 阶码&#xff08;8 位&#xff09;&#xff1a;表示指数部…

网络安全渗透有什么常见的漏洞吗?

弱口令与密码安全问题 THINKMO 01 暴力破解登录&#xff08;Weak Password Attack&#xff09; 在某次渗透测试中&#xff0c;测试人员发现一个网站的后台管理系统使用了非常简单的密码 admin123&#xff0c;而且用户名也是常见的 admin。那么攻击者就可以通过暴力破解工具&…

【AI图像生成网站Golang】项目测试与优化

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与优化 六、项目测试与优化 在开发过程中&#xff0c;性能优化是保证项目可扩展性和用户体验的关键步骤。本文将详细介绍我如何使用一…

数据库与缓存数据一致性方案【终极版】

核心流程 1. 删除数据库同步删除缓存&#xff1a; 缩小可能发生脏数据的时间窗 2. Binlog MQ删除缓存&#xff1a; 兜底所有入口&#xff0c;避免遗漏删除缓存场景&#xff0c;同时通过MQ的消息重试保证缓存一定删除成功 3. 监听Binlog延迟N秒进行数据一致性校验&#xf…

RK3576 介绍

RK3576 介绍 1 介绍1.1 概述1.2 RK3576、RK3588、RK3568 和 RK3399 的参数对比 2 DataSheet2.1 RK35762.2 RK35882.3 RK35682.4 RK3399 参考 1 介绍 1.1 概述 ARM 64位高性能八核通用处理器&#xff0c;丰富的PCIE/USB3.0/SATA/GMAC等各类高速及CAN FD/DSMC/UART/SPI/I2C/I3C…

01、NodeJS学习笔记,第一节:Node.js初识与内置模块

一、初识Node.js与内置模块 ##网址 https://nodejs.org##npm包 https://www.npmjs.com/ &#xff08;搜索&#xff09;https://registry.npmjs.org/ &#xff08;下载&#xff09;1、初识Node.js ##思考&#xff1a;为什么JavaScript可以在浏览器中被执行因为浏览器…

【数据集】50种汽车零件分类识别数据集10382张YOLO+VOC格式(已增强)

数据集格式&#xff1a;VOC格式YOLO格式 压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计&#xff1a;10382 Annotations文件夹中xml文件总计&#xff1a;10382 labels文件夹中txt文件总计&#xff1a;10382 标签种类数…

深度学习0-前置知识

一、背景 AI最大&#xff0c;它的目的是通过让机器模仿人类进而超越人类&#xff1b; ML次之&#xff0c;它是AI的一个分支&#xff0c;是让机器模仿人类的一种方法。开发人员用大量数据和算法“训练”机器&#xff0c;让机器自行学会如何执行任务&#xff0c;它的成功取决于…

arcgis for js实现地图截图、地图打印

地图截图 效果 实现 复制运行即可 要实现复杂的截图保存可以参考 官网案例 <!DOCTYPE html> <html lang"zn"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" />…

如何用上AI视频工具Sora,基于ChatGPT升级Plus使用指南

没有GPT&#xff0c;可以参考这个教程&#xff1a;详情移步至底部参考原文查看哦~ 1.准备工作 详情移步至底部参考原文查看哦~ 详情移步至底部参考原文查看哦~ 4.Sora使用 详情移步至底部参考原文查看哦 参考文章&#xff1a;【包教包会】如何用上AI视频工具Sora&#xff…

FFmpeg 安装教程(Windows 系统)

1. 前言 FFmpeg 是一个用于处理视频、音频等多媒体文件的开源工具包。它支持几乎所有的多媒体格式转换、剪辑和编辑&#xff0c;是开发者和多媒体工作者必备的工具。本文详细讲解如何在 Windows 系统上安装 FFmpeg 并进行基本配置。 2. 下载 FFmpeg 安装包 打开 Dpwnload FFmp…

#渗透测试#红队全栈 powshell基础使用

声明&#xff01; 学习视频来自B站up主 泷羽sec&#xff0c;任何违法事件与本人以及泷羽sec团队无关&#xff0c;切勿触碰法律底线&#xff0c;否则后果自负&#xff01;&#xff01;&#xff01;&#xff01; 目录标题 认识powsehll打开方式 使用方式美化自己的powershell简单…

学习maven(maven 项目模块化,继承,聚合)

前言 本篇博客的核心&#xff1a;理解maven 项目模块化&#xff0c;继承&#xff0c;聚合 的含义 maven 项目模块化 含义 maven项目模块化&#xff1a;使用maven 构建项目&#xff0c;管理项目的方式&#xff0c;我们可以将maven项目根据内在的关系拆分成很多个小项目【模块】…

搭建Tomcat(三)---重写service方法

目录 引入 一、在Java中创建一个新的空项目&#xff08;初步搭建&#xff09; 问题&#xff1a; 要求在tomcat软件包下的MyTomcat类中编写main文件&#xff0c;实现在MyTomcat中扫描myweb软件包中的所有Java文件&#xff0c;并返回“WebServlet(url"myFirst")”中…

Nautilus源码编译傻瓜式教程二

Nautilus源码编译傻瓜式教程一 Nautilus编译 依赖项文件 接上文,点击小锤子进行编译后出现如下的错误提示 看这个报错,未找到文件或目录,再看前面的git地址是github就知道肯定是下载有问题,查找下Nautilus项目,发现在nautilus/build-aux/flatpak/org.gnome.Nautilus.json文件…