当前位置: 首页 > news >正文

Hadoop 安装教程——单节点模式和分布式模式配置

文章目录

    • 一、预备知识
      • 1.1 Hadoop 发行版本
      • 1.2 部署方式
    • 二、预备条件
      • 2.1 环境准备
      • 2.2 创建新用户(可选)
      • 2.3 配置 SSH 无密码登录
      • 2.4 下载 Hadoop
      • 2.5 编辑 hadoop-env.sh 脚本
      • 2.6 编辑 dfs 和 yarn 脚本
    • 三、单节点模式部署
      • 3.1 官方使用案例
      • 3.2 查看运行结果
    • 四、伪分布模式部署
      • 4.1 修改配置文件
      • 4.2 格式化 Hadoop(首次)
      • 4.3 启动 Hadoop
      • 4.4 检查 Hadoop 状态
      • 4.5 停止 Hadoop
    • 五、常见问题
      • 5.1 启动 start-dfs.sh 脚本报错
      • 5.2 启动脚本时拒绝访问
    • 参考资料

一、预备知识

1.1 Hadoop 发行版本

Hadoop 的发行版本有:

  • Apache Hadoop:官方版本,由 Apache 软件基金会维护。
  • Hortonworks Data Platform (HDP):基于 Apache Hadoop 的企业级发行版,提供了额外的工具和组件(如 Hive、HBase、Spark 等),适合企业用户。
  • Cloudera Data Platform (CDP):Cloudera 的企业级解决方案,整合了 Hortonworks 和 Cloudera 的产品,提供更全面的功能和支持。

其中,Apache Hadoop 最适合新手入门学习。

1.2 部署方式

部署方式主要有以下三种:

  • 单节点模式:所有 Hadoop 组件运行在同一台机器上。这比较适合适合开发和测试。

  • 伪分布模式:在单台机器上模拟分布式环境,Hadoop 各组件在不同的进程中运行。这比较适合适合小规模测试和开发。

  • 完全分布式模式:在多台机器上部署 Hadoop 集群,每个节点上运行不同的 Hadoop 组件。这适合生产环境,要求对集群进行详细配置。

二、预备条件

2.1 环境准备

  • 安装 JDK。在 Hadoop Java Versions - Hadoop - Apache Software Foundation 查看Hadhoop 推荐的 Java 版本,最佳版本为 JDK 8 。

  • 配置 SSH 免密登录。如果要使用可选的启动和停止脚本,则必须安装 ssh 并且运行 sshd 才 能使用管理远程 Hadoop 守护进程的 Hadoop 脚本。此外,建议还安装 pdsh 以更好地管理ssh资源。

    $ sudo apt-get install ssh
    $ sudo apt-get install pdsh
    

    注意,pdsh 的远程命令类型为 rsh, 建议修改成 ssh。

2.2 创建新用户(可选)

创建一个新用户,用户名和密码设置为 hadoop

$ sudo useradd -m hadoop -s /bin/bash
$ sudo passwd hadoop

为了避免权限造成的问题,为 hadoop 用户增加管理员权限。

$ sudo adduser hadoop sudo

2.3 配置 SSH 无密码登录

Hadoop 在启动时需要通过 SSH 连接到各个节点(包括本地主机)。因此,我们需要配置无密码登录。

简单地介绍已下 SSH 登录原理:

  1. 密钥对生成:用户在本地生成一对密钥:一个私钥和一个公钥。私钥保留在本地,公钥可以共享给任何希望访问的服务器。
  2. 公钥复制:用户将公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。
  3. 身份验证过程:当用户尝试通过 SSH 连接到服务器时,服务器会发送一条随机消息给用户。用户使用自己的私钥对该消息进行加密,然后将其返回给服务器。服务器使用存储在 authorized_keys 文件中的相应公钥来解密收到的消息。如果解密成功且消息匹配,身份验证通过,用户被允许访问。

(1) 确保 SSH 服务正在运行

首先,确保 SSH 服务在您的 Ubuntu 系统上运行。

# 检查 SSH 服务的状态
$ sudo systemctl status ssh# 如果服务未运行, 启动 SSH 服务
$ sudo systemctl start ssh

(2) 生成 SSH 密钥对

使用 ssh-keygen~/.ssh 目录下生成 SSH 密钥对。

# 输入密码 hadoop 才能登录。因此,我们需要实现无密登录
ssh localhost# 若没有该目录,执行一次 ssh localhost 后会自动生成
$ cd ~/.ssh/ # 生成密钥对
$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hadoop/.ssh/id_rsa
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:HGuMfZmVK09WBr0fPJ3Kj5xYnUuChwl08TlaSq5HN0k hadoop@ubuntu
The key's randomart image is:
+---[RSA 2048]----+
|           .o.   |
|         . ..oo  |
|        o ..oE+.o|
|       = +o+=++=.|
|      . S *=O+o.+|
|       . .oO.*.+.|
|         . .* * .|
|          .. + o |
|                 |
+----[SHA256]-----+

其中,id_rsa 为 私钥, id_rsa.pub 为公钥。

(3) 将公钥添加到目标服务器的authorized_keys

使用 ssh-copy-id 命令可以方便地将公钥复制到目标主机的 authorized_keys 文件中

# 方式一
$ ssh-copy-id -i ~/.ssh/id_rsa.pub localhost# 方式二
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

authorized_keys 是一个文本文件,位于用户的 ~/.ssh/ 目录下。它用于存储被授权可以无密码访问该用户帐户的 SSH 公钥。将公钥添加到 authorized_keys 文件中,以允许无密码访问。

确保 ~/.ssh/authorized_keys 的权限设置正确:

chmod 0600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

(4) 测试 SSH 连接

在终端中尝试通过 SSH 连接到 localhost 和主机名:

$ ssh ubuntu
The authenticity of host 'ubuntu (127.0.1.1)' can't be established.
ECDSA key fingerprint is SHA256:Joilwgpgx1Mc2K3XnL1iszZ+Y/EK+GltbMG6B28luBY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ubuntu' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.15.0-107-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/advantage240 updates can be applied immediately.
123 of these updates are standard security updates.
To see these additional updates run: apt list --upgradableYour Hardware Enablement Stack (HWE) is supported until April 2025.The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

其中, ubuntu 是为特定计算机设置的主机名,用于标识这台机器。

2.4 下载 Hadoop

在 Apache Download Mirrors 下载合适的 Hadoop 版本。如果官网下载太慢,可以考虑 hadoop/common (huaweicloud.com) 网站。

执行以下命令,下载 Hadoop 安装包。

# 下载安装包
$ wget --no-check-certificate https://repo.huaweicloud.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz# 解压安装包到指定目录
$ sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/# 将文件夹名改为hadoop
$ cd /usr/local
$ sudo mv ./hadoop-3.3.6/ ./hadoop            # 修改文件权限
$ sudo chown -R hadoop ./hadoop     

输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:

$ cd /usr/local/hadoop
$ ./bin/hadoop version

2.5 编辑 hadoop-env.sh 脚本

编辑 hadoop-env.sh 脚本, 设置必要的一些参数。

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_421

查看 Hadoop 脚本的使用文档

$/usr/local/hadoop-3.3.6/bin/hadoop

2.6 编辑 dfs 和 yarn 脚本

在 sbin/start-dfs.sh 和 sbin/stop-dfs.sh 脚本中,添加以下参数:

HDFS_DATANODE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root  
HDFS_DATANODE_SECURE_USER=hdfs

在 sbin/start-yarn.sh 和 sbin/stop-yarn.sh 脚本中,添加以下参数:

YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root

三、单节点模式部署

默认情况下,Hadoop配置为以非分布式模式运行,作为单个Java进程。这对于调试很有用。

3.1 官方使用案例

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.6.jar grep input output 'dfs[a-z.]+'

3.2 查看运行结果

查看运行结果:

$ cat output/*
1	dfsadmin
1	dfs.replication
1	dfs.permissions

四、伪分布模式部署

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行。

/usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xmlhdfs-site.xml

4.1 修改配置文件

etc/hadoop/core-site.xml:

<configuration><!-- 指定 Hadoop 文件系统的默认文件系统 URI --><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property><!-- 指定 Hadoop 运行时生成的临时文件的存储目录 --><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><description>Abase for other temporary directories.</description></property>
</configuration>

etc/hadoop/hdfs-site.xml

<configuration><!-- 指定了 HDFS NameNode 存储其元数据的目录 --><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/tmp/dfs/name</value></property><!-- 指定了 HDFS DataNode 存储实际数据块的目录 --><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/tmp/dfs/data</value></property><!-- 定义 HDFS 文件的默认副本数量 --><property><name>dfs.replication</name><value>1</value></property><!-- 定义 HDFS 是否启用权限检查 --><property><name>dfs.permissions</name><value>false</value></property><!-- 控制 Secondary NameNode(次要 NameNode)执行 HDFS 检查点(checkpoint)的周期 --><property><name>fs.checkpoint.period</name><value>3000</value></property>
</configuration>

etc/hadoop/mapred-site.xml:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.application.classpath</name><value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value></property>
</configuration>

etc/hadoop/yarn-site.xml:

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value></property>
</configuration>

4.2 格式化 Hadoop(首次)

在第一次启动的时候,格式化 HDFS(Hadoop 分布式文件系统)。

# 进入 Hadoop 安装目录
$ cd /usr/local/hadoop# 格式化 HDFS
$ bin/hdfs namenode -format

后面启动的时候,无需格式化。

4.3 启动 Hadoop

(1) 启动 HDFS

$ sbin/start-dfs.sh
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [ubuntu]

在成功启动后,我们还可以访问 Hadoop Web 界面 http://localhost:9870。

在这里插入图片描述

(2) 启动 YARN

启动 YARN。

$ sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers

在成功启动后,我们还可以访问 YARN 界面 http://localhost:8088 。
在这里插入图片描述

4.4 检查 Hadoop 状态

使用以下命令检查 Hadoop 服务的状态:

# 查看运行 Java 进程
$ jps
5079 ResourceManager
4508 DataNode
4348 NameNode
4782 SecondaryNameNode
5615 Jps
5231 NodeManager

此命令将显示当前正在运行的 Java 进程。您应该能够看到如下进程:

4.5 停止 Hadoop

$ sbin/stop-dfs.sh
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [ubuntu]$ sbin/stop-yarn.sh
Stopping nodemanagers
Stopping resourcemanager

五、常见问题

5.1 启动 start-dfs.sh 脚本报错

问题描述:

$ sudo sbin/start-dfs.sh
Starting namenodes on [ubuntu]
pdsh@ubuntu: ubuntu: rcmd: socket: Permission denied
Starting datanodes
pdsh@ubuntu: localhost: rcmd: socket: Permission denied
Starting secondary namenodes [ubuntu]
pdsh@ubuntu: ubuntu: rcmd: socket: Permission denied

解决方案:

(1) 查看 SSH 配置

检查 /etc/ssh/sshd_config 配置文件,确保以下基本配置

# 
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

如果有更改,记得重启 SSH 服务

$ sudo systemctl restart ssh

(2)pdsh 执行命令

pdsh(并行分布式 Shell)执行远程命令时的默认远程命令类型为 rsh 时, 会出现该问题。

# 检查 pdsh 的远程命令类型
$ pdsh -q -w localhost

更改为使用 ssh :

# 1. 临时设置
$ export PDSH_RCMD_TYPE=ssh# 2. 永久设置
$ echo 'export PDSH_RCMD_TYPE=ssh' >> ~/.bashrc

最后,重新加载 ~/.bashrc

$ source ~/.bashrc

(3)不建议的方案

在尝试以上方案后,依旧无法启动,建议删除 pdsh

apt-get remove pdsh

5.2 启动脚本时拒绝访问

报错信息:

$ sudo sbin/start-dfs.sh
Starting namenodes on [ubuntu]
ubuntu: root@ubuntu: Permission denied (publickey,password).
Starting datanodes
localhost: root@localhost: Permission denied (publickey,password).
Starting secondary namenodes [ubuntu]
ubuntu: root@ubuntu: Permission denied (publickey,password).

解决方案:

不要使用 sudo。事实上,在没有使用 sudo 的情况下依旧可以运行,我们可以考虑直接为用户增加管理员权限。

参考资料

Apache Hadoop 3.3.6 – Hadoop: Setting up a Single Node Cluster.

hadoop - HDFS_NAMENODE_USER, HDFS_DATANODE_USER & HDFS_SECONDARYNAMENODE_USER not defined - Stack Overflow

Hadoop安装教程——单机 / 伪分布式配置-阿里云开发者社区 (aliyun.com)


http://www.mrgr.cn/news/54784.html

相关文章:

  • gbn,sr和tcp的区别
  • 使用finalshell远程ssh连接ubuntu
  • 微信小程序中的文件查看方法
  • 基于ElementPlus的table组件封装
  • 鸿蒙开发 四十五 鸿蒙状态管理(嵌套对象界面更新)
  • springBoot集成nacos注册中心以及配置中心
  • Java项目-基于springboot框架的企业客户信息反馈系统项目实战(附源码+文档)
  • 人工智能中的深度学习模型:理论与代码实现
  • 第十六周:机器学习
  • 差分题目总和
  • 【电子通识】热敏打印头的结构类型和特点
  • 第十五届蓝桥杯Java大学b组(解)
  • 股票与基金资料收集
  • 二叉树的模拟实现—Java数据结构
  • 使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程
  • 字符串和集合的转换
  • Deformable DETR:结合多尺度特征、可变形卷积机制的DETR
  • Python画笔案例-089 绘制 三角圆图
  • 11.useComponentDidMount
  • STL-vector+题目
  • hadoop的MapReduce提交任务到yarn实操
  • 【Redis】数据结构(下)
  • fftw 的安装与编译
  • 算法题——二分查找类型题大全
  • java实现文件变动监听
  • vulnhub靶场之JOY