• 在 Ubuntu 22 的基础上进行 Hadoop 伪分布式(HDFS)的搭建


    一、使用VMware安装Ubuntu虚拟机

    推荐可以再下个Xshell用于操作终端。

    Xshell免费版官网下载地址:https://www.xshell.com/zh/free-for-home-school/

    二、伪分布式平台搭建

    Part1: 准备工作

    首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户 。这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 shell。

    sudo useradd -m hadoop -s /bin/bash
    • sudo命令: 本文中会大量使用到sudo命令。sudo是ubuntu中一种权限管理机制,管理员可以授权给一些普通用户去执行一些需要root权限执行的操作。当使用sudo命令时,就需要输入您当前用户的密码。

    接着使用如下命令设置密码,如果提示密码过于简单可以无视,只要两次相同即可:

    sudo passwd hadoop

    可为 hadoop 用户增加管理员权限,方便部署:

    sudo adduser hadoop sudo

    然后切换到新建的hadoop用户下:

    su hadoop

    更新 apt,在 Ubuntu 中使用 apt 来下载安装软件,如果没更新可能有一些软件安装不了。

    sudo apt-get update

    按照下图依次点击 ① ②:

     选择“其他”然后选择阿里云镜像服务器。这等效于我们平时在 Windows 系统下安装 python 包时使用清华镜像站。

     选择关闭后会提醒你信息过时

     后续操作将不再需要图形化界面,故建议使用 xshell 软件,下面演示一下,如不需要可以直接跳转至Part2。

    • step1:查询本机的ip地址:
    • step2:建立Windows与虚拟机的连接。
    • step3:连接建议勾选“记住用户名”“记住密码”

    Part2: SSH无密码登录配置

    安装vim,提示时按y即可:

    sudo apt-get install vim

      安装SSH,配置无密码登录:

    sudo apt-get install openssh-server

     SSH首次登陆提示),输入 yes 。然后按提示输入密码,利用 ssh-keygen 生成密钥,并将密钥加入到授权中:

    复制代码
    ssh localhost
    exit
    cd ~/.ssh/                     # 若没有该目录,再执行一次ssh localhost
    ssh-keygen -t rsa              # 会有提示,都按回车就可以
    cat ./id_rsa.pub >> ./authorized_keys  # 加入授权
    复制代码

    此时再用 ssh localhost 命令,无需输入密码就可以直接登录了。

    Part3: JDK的安装与配置

    我们需要先将 JDK1.8 (目前企业中主流的 java 版本仍然是 jdk1.8)下载到电脑。

    然后将文件上传到 Ubuntu 中,这里我采用的是 rz 的上传方式,需要借用 xshell 工具。

    cd ~
    sudo mkdir Downloads # 创建 ~/Downloads 目录用来存放下载的文件
    cd Downloads     # 进入目标目录
    rz            # 上传文件到 Ubuntu 系统中

    解压 JDK 文件:

    复制代码
    cd /usr/lib
    sudo mkdir jvm # 创建/usr/lib/jvm目录用来存放JDK文件
    cd ~ # 进入hadoop用户的主目录
    cd Downloads  
    sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm  # 把JDK文件解压到 /usr/lib/jvm 目录下
    复制代码

    配置环境变量:

    cd ~
    vim ~/.bashrc

    在文件中输入以下内容后,按 Esc 键,输入“:wq”保存并退出

    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH

    执行如下命令让.bashrc文件的配置立即生效:

    source ~/.bashrc

    验证环境变量是否生效:

    java -version

    如果能够在屏幕上返回如下信息,则说明安装成功:

    Part4: Hadoop的安装与配置

    首先,你需要下载一个 hadoop-3.3.4.tar.gz(这是一个官网链接),当然你也可以下载 3.1.3 的版本,这并没有很大的改变。

    然后使用同样的方法将文件上传到 Ubuntu 中。

    cd ~/Downloads     # 进入目标目录
    rz            # 上传文件到 Ubuntu 系统中

    将 Hadoop 安装至 /usr/local/ 中:

    sudo tar -zxvf ~/Downloads/hadoop-3.3.4.tar.gz -C /usr/local    # 解压到/usr/local中
    cd /usr/local/
    sudo mv ./hadoop-3.3.4/ ./hadoop            # 将文件夹名改为hadoop
    sudo chown -R hadoop ./hadoop       # 修改文件权限

    验证 hadoop 是否安装成功:

    cd /usr/local/hadoop
    bin/hadoop version

    如果能够在屏幕上返回如下信息,则说明安装成功:

    Part5: Hadoop伪分布式的搭建

    Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

    修改配置文件 core-site.xml

    vim etc/hadoop/core-site.xml

    将原先的<configuration>configuration>改为下面的内容:

    复制代码
    <configuration>
        <property>
            <name>hadoop.tmp.dirname>
            <value>file:/usr/local/hadoop/tmpvalue>
            <description>Abase for other temporary directories.description>
        property>
        <property>
            <name>fs.defaultFSname>
            <value>hdfs://localhost:9000value>
        property>
    configuration>
    复制代码

    修改配置文件 hdfs-site.xml

    vim etc/hadoop/hdfs-site.xml

    将原先的<configuration>configuration>改为下面的内容:

    复制代码
    <configuration>
        <property>
            <name>dfs.replicationname>
            <value>1value>
        property>
        <property>
            <name>dfs.namenode.name.dirname>
            <value>file:/usr/local/hadoop/tmp/dfs/namevalue>
        property>
        <property>
            <name>dfs.datanode.data.dirname>
            <value>file:/usr/local/hadoop/tmp/dfs/datavalue>
        property>
    configuration>
    复制代码

    配置完成后,执行 NameNode 的格式化:

    cd /usr/local/hadoop
    bin/hdfs namenode -format

    功格式化返回样例(部分):

    STARTUP_MSG: Starting NameNode
    STARTUP_MSG:   host = hadoop/127.0.1.1
    STARTUP_MSG:   args = [-format]
    STARTUP_MSG:  version = 3.3.4

    如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,首先你要确定前面关于JDK的环境变量配置文件中没有出现问题。然后,到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-all.sh  #start-all.sh是个可执行文件,中间没有空格

    对于伪分布式可以用 start-dfs.sh 启动hadoop,等效于前面的 start-all.sh

    如果启动 Hadoop 时遇到输出非常多“ssh: Could not resolve hostname xxx”的异常情况,可通过设置 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

    启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: "NameNode"、"DataNode" 和 "SecondaryNameNode"(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-all.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤。由于我前面执行的命令为 start-all.sh,所以是下面这个样子。

     

    成功启动后,可以访问 Web 界面 http://localhost:9870 (由于hadoop版本不同,可能你需要访问的端口号是50070)以及  http://localhost:8088 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

     

     

    伪分布式到此就搭建完成啦!

    下面会再补充一些报错以及解决方案

     

     (1)若是 DataNode 没有启动,可尝试如下的方法(注意这会删除 HDFS 中原有的所有数据,如果原有的数据很重要请不要这样做)

    复制代码
    cd /usr/local/hadoop
    sbin/stop-all.sh   # 关闭
    rm -r ./tmp     # 删除 tmp 文件,注意这会删除 HDFS 中原有的所有数据
    ./bin/hdfs namenode -format   # 重新格式化 NameNode
    sbin/start-all.sh  # 启动
    复制代码

     

    (2)解决 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable警告问题 

    vim ~/.bashrc
    # 添加以下内容
    export JAVA_LIBRARY_PATH=/usr/local/hadoop/lib/native

    然后重新应用环境变量

    source ~/.bashrc

     

    (3)当遇到9870端口被占用的问题时,可以通过更改启动时的端口号来实现启动,记得先通过 sbin/stop-dfs.sh 关闭服务,然后更改前面的 core-site.xml 文件,往里面添加以下内容到中间

    <property>
            <name>dfs.namenode.secondary.http-addressname>
            <value>localhost:50090value>
    property>

     

    (4)无法访问网站,这可能是Linux中的防火墙未关闭的问题:

    sudo ufw status    # 查看防火墙状态
    sudo ufw disable    # 关闭防火墙

     

     

     


     

    啊,好累,这篇写了巨久

    整理:BDT20040

  • 相关阅读:
    为什么前端要学 JavaScript ?JS都有哪些逆天的功能?
    设计模式面试问题总结
    软件设计模式系列之十一——装饰模式
    聚合大模型场景助力产业升级,WAIC 2024 容联云论坛即将开幕
    【Leetcode】1063. Number of Valid Subarrays
    AcWing 154. 滑动窗口(单调队列)
    js事件循环详解
    神经系统图 基本结构图,神经系统的组织结构图
    Linux--基本知识入门
    【Ubuntu】Ubuntu arm64 部署 Blazor Server 应用
  • 原文地址:https://www.cnblogs.com/liubaili/p/16884942.html