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/advantage

240 updates can be applied immediately.
123 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

Your 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)

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

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

相关文章

golang 手动解析 epub 电子书格式

如题&#xff0c;本篇简单分析如何使用go语言解析epub格式的电子书&#xff0c;获取其内部资源内容。 EPUB格式 首先我们需要了解epub格式具有哪些特点。 已知的是&#xff0c;epub是一种类似doc或者pdf&#xff0c;可以提供图文并茂电子书的格式。 那么我们首先使用二进制…

重学SpringBoot3-集成Hazelcast

重学SpringBoot3-集成Hazelcast 1. Hazelcast 的作用2. Spring Boot 3 整合 Hazelcast 的步骤2.1 添加 Hazelcast 依赖2.2 配置 Hazelcast 实例 3. 集成 Hazelcast 与 Spring Boot 缓存4. 验证 Hazelcast 缓存5. Hazelcast 集群配置6. 总结 Hazelcast 是一个流行的开源内存数据…

Linux重点yum源配置

1.配置在线源 2.配置本地源 3.安装软件包 4.测试yum源配置 5.卸载软件包

浅谈人工智能之基于阿里云使用vllm搭建Llama3

浅谈人工智能之基于阿里云使用vllm搭建Llama3 引言 随着人工智能技术的迅速发展&#xff0c;Llama3作为一个先进的语言模型&#xff0c;受到广泛关注。本文将介绍如何在阿里云上使用VLLM搭建Llama3&#xff0c;为用户提供一套完整的技术流程。 环境准备 阿里云账户 确保您…

记录:网鼎杯2024赛前热身WEB01

目录扫描&#xff0c;发现上传点&#xff0c;判断可能存在文件上传漏洞&#xff0c;并根据文件后缀判断网站开发语言为php 编写蚁剑一句话木马直接上传 蚁剑连接 这里生成 的flag是随机的&#xff0c;因为烽火台反作弊会随机生成环境&#xff0c;在一顿查找后&#xff0c;在hom…

【部署篇】RabbitMq-03集群模式部署

一、准备主机 准备3台主机用于rabbitmq部署&#xff0c;文章中是在centos7上安装部署rabbitmq3.8通过文章中介绍的方式可以同样在centos8、centos9上部署&#xff0c;只需下载对应的版本进行相同的操作。 主机IP角色说明192.168.128.31种子节点192.168.128.32普通节点192.16…

【达梦数据库】两台或多台服务器之间免密登录设置-【dmdba用户】

目录 背景1、服务器A免密登录本机1.1、生成私钥&#xff08;id_rsa&#xff09;和公钥&#xff08;id_rsa.pub&#xff09;1.2、追加公钥到服务器A的密码登录权限管理文件1.3、结果验证 2、服务器A免密登录服务器B2.1、确认服务器B有目的文件夹2.2、服务器A的公钥复制到服务器B…

网安加·百家讲坛 | 徐一丁:金融机构网络安全合规浅析

作者简介&#xff1a;徐一丁&#xff0c;北京小西牛等保软件有限公司解决方案部总监&#xff0c;网络安全高级顾问。2000年开始从事网络安全工作&#xff0c;主要领域为网络安全法规标准研究、金融行业安全咨询与解决方案设计、信息科技风险管理评估等。对国家网络安全法规标准…

react18中的合成事件与浏览器中的原生事件

React 通过将事件 normalize 以让他们在不同浏览器中拥有一致的属性。 合成事件 SyntheticEvent 实例将被传递给你的事件处理函数&#xff0c;它是浏览器的原生事件的跨浏览器包装器。除兼容所有浏览器外&#xff0c;它还拥有和浏览器原生事件相同的接口&#xff0c;包括 stopP…

项目文章 | 药学TOP期刊PRChIP-seq助力揭示激酶LIMK2促进梗死不良重构的机制

急性心肌梗死&#xff08;MI&#xff09;是全球死亡的主要原因&#xff0c;尽管MI的死亡率有所下降&#xff0c;缺血性心力衰竭的发病率却呈上升趋势。这一现象提示我们&#xff0c;尽管在急救和治疗急性心肌梗死方面取得了进展&#xff0c;但心脏在梗死后的长期功能恢复仍然是…

Pr 视频效果:自动重构

视频效果/变换/自动重构 Transform/Auto Reframe 自动重构 Auto Reframe效果是用于快速调整视频素材以适应不同长宽比的一项强大工具。 随着各种平台和设备的多样化&#xff0c;视频内容需要适应不同的屏幕尺寸和比例&#xff0c;如 16:9&#xff08;横屏&#xff09;、9:16&am…

「Qt Widget中文示例指南」如何实现半透明背景?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文将为大家展示如…

新鲜出炉,ECCV2024.9.25 首次提出基于 YOLO 目标检测的无源域自适应

原文标题&#xff1a;Source-Free Domain Adaptation for YOLO Object Detection 中文标题&#xff1a;基于 YOLO 目标检测的无源域自适应 论文地址&#xff1a; https://arxiv.org/abs/2409.16538 代码地址&#xff1a; GitHub - vs-cv/sf-yolo 1、Abstract 无源域自适应&…

单细胞 | 转录因子足迹分析

数据加载 在本案例中&#xff0c;将采用之前在轨迹构建案例中已经介绍并处理过的数据集。 library(Signac)library(Seurat)bone <- readRDS("cd34.rds")DimPlot(bone, label TRUE) 要执行足迹分析&#xff0c;必须首先向对象中添加Motif 信息&#xff0c;这包括每…

微软发布 Win11 22H2/23H2 十月可选更新KB5044380!

系统之家于10月23日发出最新报道&#xff0c;微软针对Win11 22H2和23H2用户&#xff0c;发布了10月可选更新KB5044380&#xff0c;用户安装后版本号升至22621.4391和22631.4391。本次更新开始推出屏幕键盘的新游戏板键盘布局&#xff0c;支持用户使用Xbox控制器在屏幕上移动和键…

Burp Suite基本介绍

Burp Suite基本介绍 官网&#xff1a;https://portswiggernet Burp的作用 目标: 用于渗透测试&#xff0c;发现漏洞手段:拦截HTTP数据、对数据进行分析和处理&#xff0c;漏洞扫描场景:测试SQL注入、文件上传、XSS、CSRF、FUZZ、重放攻击、密码暴破、爬取数据、逻辑漏洞... …

Spring Boot论坛网站:安全特性与性能优化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

word取消自动单词首字母大写

情况说明&#xff1a;在word输入单词后首字母会自动变成大写 &#xff08;1&#xff09;点击菜单栏文件 &#xff08;2&#xff09;点击“更多”——>“选项” &#xff08;3&#xff09;点击“校对”——>“自动更正选项” &#xff08;4&#xff09;取消“句首字母大写…

ubuntu22 安装labelimg制作自己的深度学习目标检测数据集

参考文章&#xff1a;目标检测---利用labelimg制作自己的深度学习目标检测数据集-CSDN博客 以上文章是windows下使用的方法&#xff0c;本章是在ubuntu22下使用的方法 一、准备工作 确保您的Ubuntu系统已安装Python 3.7或更高版本。可以通过在终端输入 python3 --version 来检…

kafka消息队列

kafka消息队列 什么是消息队列消息队列的应用场景异步处理应用耦合限流削峰消息驱动的系统 消息队列的两种模式点对点模式发布/订阅模式 常用的消息队列介绍PulsarPulsar 的特性Pulsar 存储架构Pulsar 消息消费 Kafka与Pulsar对比Pulsar 的主要优势&#xff1a;&#xff08;Pre…