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

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

一、准备知识

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资源。
    1. $ sudo apt-get install ssh
    2. $ sudo apt-get install pdsh
    复制代码
    注意,pdsh 的长途下令类型为 rsh, 建议修改成 ssh。
2.2 创建新用户(可选)

创建一个新用户,用户名和密码设置为 hadoop
  1. $ sudo useradd -m hadoop -s /bin/bash
  2. $ sudo passwd hadoop
复制代码
为了避免权限造成的题目,为 hadoop 用户增长管理员权限。
  1. $ sudo adduser hadoop sudo
复制代码
2.3 设置 SSH 无密码登录

Hadoop 在启动时需要通过 SSH 连接到各个节点(包罗本田主机)。因此,我们需要设置无密码登录。
简单地先容已下 SSH 登录原理:

  • 密钥对生成:用户在本地生成一对密钥:一个私钥和一个公钥。私钥保存在本地,公钥可以共享给任何盼望访问的服务器。
  • 公钥复制:用户将公钥添加到目的服务器的 ~/.ssh/authorized_keys 文件中。
  • 身份验证过程:当用户实验通过 SSH 连接到服务器时,服务器会发送一条随机消息给用户。用户使用本身的私钥对该消息进行加密,然后将其返回给服务器。服务器使用存储在 authorized_keys 文件中的相应公钥来解密收到的消息。假如解密成功且消息匹配,身份验证通过,用户被允许访问。
(1) 确保 SSH 服务正在运行
首先,确保 SSH 服务在您的 Ubuntu 系统上运行。
  1. # 检查 SSH 服务的状态
  2. $ sudo systemctl status ssh
  3. # 如果服务未运行, 启动 SSH 服务
  4. $ sudo systemctl start ssh
复制代码
(2) 生成 SSH 密钥对
使用 ssh-keygen 在 ~/.ssh 目录下生成 SSH 密钥对。
  1. # 输入密码 hadoop 才能登录。因此,我们需要实现无密登录
  2. ssh localhost
  3. # 若没有该目录,执行一次 ssh localhost 后会自动生成
  4. $ cd ~/.ssh/
  5. # 生成密钥对
  6. $ ssh-keygen -t rsa -b 2048
  7. Generating public/private rsa key pair.
  8. Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
  9. Enter passphrase (empty for no passphrase):
  10. Enter same passphrase again:
  11. Your identification has been saved in /home/hadoop/.ssh/id_rsa
  12. Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub
  13. The key fingerprint is:
  14. SHA256:HGuMfZmVK09WBr0fPJ3Kj5xYnUuChwl08TlaSq5HN0k hadoop@ubuntu
  15. The key's randomart image is:
  16. +---[RSA 2048]----+
  17. |           .o.   |
  18. |         . ..oo  |
  19. |        o ..oE+.o|
  20. |       = +o+=++=.|
  21. |      . S *=O+o.+|
  22. |       . .oO.*.+.|
  23. |         . .* * .|
  24. |          .. + o |
  25. |                 |
  26. +----[SHA256]-----+
复制代码
其中,id_rsa 为 私钥, id_rsa.pub 为公钥。
(3) 将公钥添加到目的服务器的authorized_keys
使用 ssh-copy-id 下令可以方便地将公钥复制到目的主机的 authorized_keys 文件中
  1. # 方式一
  2. $ ssh-copy-id -i ~/.ssh/id_rsa.pub localhost
  3. # 方式二
  4. $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
复制代码
authorized_keys 是一个文本文件,位于用户的 ~/.ssh/ 目录下。它用于存储被授权可以无密码访问该用户帐户的 SSH 公钥。将公钥添加到 authorized_keys 文件中,以允许无密码访问。
确保 ~/.ssh/authorized_keys 的权限设置精确:
  1. chmod 0600 ~/.ssh/authorized_keys
  2. chmod 700 ~/.ssh
复制代码
(4) 测试 SSH 连接
在终端中实验通过 SSH 连接到 localhost 和主机名:
  1. $ ssh ubuntu
  2. The authenticity of host 'ubuntu (127.0.1.1)' can't be established.
  3. ECDSA key fingerprint is SHA256:Joilwgpgx1Mc2K3XnL1iszZ+Y/EK+GltbMG6B28luBY.
  4. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
  5. Warning: Permanently added 'ubuntu' (ECDSA) to the list of known hosts.
  6. Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.15.0-107-generic x86_64)
  7. * Documentation:  https://help.ubuntu.com
  8. * Management:     https://landscape.canonical.com
  9. * Support:        https://ubuntu.com/advantage
  10. 240 updates can be applied immediately.
  11. 123 of these updates are standard security updates.
  12. To see these additional updates run: apt list --upgradable
  13. Your Hardware Enablement Stack (HWE) is supported until April 2025.
  14. The programs included with the Ubuntu system are free software;
  15. the exact distribution terms for each program are described in the
  16. individual files in /usr/share/doc/*/copyright.
  17. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
  18. applicable law.
复制代码
其中, ubuntu 是为特定盘算机设置的主机名,用于标识这台机器。
2.4 下载 Hadoop

在 Apache Download Mirrors 下载合适的 Hadoop 版本。假如官网下载太慢,可以考虑 hadoop/common (huaweicloud.com) 网站。
执行以下下令,下载 Hadoop 安装包。
  1. # 下载安装包
  2. $ wget --no-check-certificate https://repo.huaweicloud.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
  3. # 解压安装包到指定目录
  4. $ sudo tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/
  5. # 将文件夹名改为hadoop
  6. $ cd /usr/local
  7. $ sudo mv ./hadoop-3.3.6/ ./hadoop            
  8. # 修改文件权限
  9. $ sudo chown -R hadoop ./hadoop     
复制代码
输入如下下令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
  1. $ cd /usr/local/hadoop
  2. $ ./bin/hadoop version
复制代码
2.5 编辑 hadoop-env.sh 脚本

编辑 hadoop-env.sh 脚本, 设置须要的一些参数。
  1. # The java implementation to use. By default, this environment
  2. # variable is REQUIRED on ALL platforms except OS X!
  3. export JAVA_HOME=/usr/local/jdk/jdk1.8.0_421
复制代码
检察 Hadoop 脚本的使用文档
  1. $/usr/local/hadoop-3.3.6/bin/hadoop
复制代码
2.6 编辑 dfs 和 yarn 脚本

在 sbin/start-dfs.sh 和 sbin/stop-dfs.sh 脚本中,添加以下参数:
  1. HDFS_DATANODE_USER=root
  2. HDFS_NAMENODE_USER=root
  3. HDFS_SECONDARYNAMENODE_USER=root  
  4. HDFS_DATANODE_SECURE_USER=hdfs
复制代码
在 sbin/start-yarn.sh 和 sbin/stop-yarn.sh 脚本中,添加以下参数:
  1. YARN_RESOURCEMANAGER_USER=root
  2. YARN_NODEMANAGER_USER=root
复制代码
三、单节点模式部署

默认环境下,Hadoop设置为以非分布式模式运行,作为单个Java进程。这对于调试很有效。
3.1 官方使用案例

将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出效果到 output 文件夹中
  1. $ cd /usr/local/hadoop
  2. $ mkdir input
  3. $ cp etc/hadoop/*.xml input
  4. $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
复制代码
3.2 检察运行效果

检察运行效果:
  1. $ cat output/*
  2. 1        dfsadmin
  3. 1        dfs.replication
  4. 1        dfs.permissions
复制代码
四、伪分布模式部署

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行。
在 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个设置文件 core-site.xml 和 hdfs-site.xml 。
4.1 修改设置文件

etc/hadoop/core-site.xml:
  1. <configuration>
  2.   <!-- 指定 Hadoop 文件系统的默认文件系统 URI -->
  3.   <property>
  4.           <name>fs.defaultFS</name>
  5.           <value>hdfs://localhost:9000</value>
  6.   </property>
  7.   
  8.   <!-- 指定 Hadoop 运行时生成的临时文件的存储目录 -->
  9.   <property>
  10.           <name>hadoop.tmp.dir</name>
  11.           <value>file:/usr/local/hadoop/tmp</value>
  12.     <description>Abase for other temporary directories.</description>
  13.   </property>
  14. </configuration>
复制代码
etc/hadoop/hdfs-site.xml:
  1. <configuration>
  2.   <!-- 指定了 HDFS NameNode 存储其元数据的目录 -->
  3.   <property>
  4.       <name>dfs.namenode.name.dir</name>
  5.       <value>file:/usr/local/hadoop/tmp/dfs/name</value>
  6.   </property>
  7.   <!-- 指定了 HDFS DataNode 存储实际数据块的目录 -->
  8.   <property>
  9.       <name>dfs.datanode.data.dir</name>
  10.       <value>file:/usr/local/hadoop/tmp/dfs/data</value>
  11.   </property>
  12.   <!-- 定义 HDFS 文件的默认副本数量 -->
  13.   <property>
  14.     <name>dfs.replication</name>
  15.     <value>1</value>
  16.   </property>
  17.   <!-- 定义 HDFS 是否启用权限检查 -->
  18.   <property>
  19.    <name>dfs.permissions</name>
  20.    <value>false</value>
  21.   </property>
  22.   <!-- 控制 Secondary NameNode(次要 NameNode)执行 HDFS 检查点(checkpoint)的周期 -->
  23.   <property>
  24.    <name>fs.checkpoint.period</name>
  25.    <value>3000</value>
  26.   </property>
  27. </configuration>
复制代码
etc/hadoop/mapred-site.xml:
  1. <configuration>
  2.     <property>
  3.         <name>mapreduce.framework.name</name>
  4.         <value>yarn</value>
  5.     </property>
  6.     <property>
  7.         <name>mapreduce.application.classpath</name>
  8.         <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
  9.     </property>
  10. </configuration>
复制代码
etc/hadoop/yarn-site.xml:
  1. <configuration>
  2.     <property>
  3.         <name>yarn.nodemanager.aux-services</name>
  4.         <value>mapreduce_shuffle</value>
  5.     </property>
  6.     <property>
  7.         <name>yarn.nodemanager.env-whitelist</name>
  8.         <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>
  9.     </property>
  10. </configuration>
复制代码
4.2 格式化 Hadoop(初次)

在第一次启动的时间,格式化 HDFS(Hadoop 分布式文件系统)。
  1. # 进入 Hadoop 安装目录
  2. $ cd /usr/local/hadoop
  3. # 格式化 HDFS
  4. $ bin/hdfs namenode -format
复制代码
后面启动的时间,无需格式化。
4.3 启动 Hadoop

(1) 启动 HDFS
  1. $ sbin/start-dfs.sh
  2. Starting namenodes on [localhost]
  3. Starting datanodes
  4. Starting secondary namenodes [ubuntu]
复制代码
在成功启动后,我们还可以访问 Hadoop Web 界面 http://localhost:9870。

(2) 启动 YARN
启动 YARN。
  1. $ sbin/start-yarn.sh
  2. Starting resourcemanager
  3. Starting nodemanagers
复制代码
在成功启动后,我们还可以访问 YARN 界面 http://localhost:8088 。

4.4 检查 Hadoop 状态

使用以下下令检查 Hadoop 服务的状态:
  1. # 查看运行 Java 进程
  2. $ jps
  3. 5079 ResourceManager
  4. 4508 DataNode
  5. 4348 NameNode
  6. 4782 SecondaryNameNode
  7. 5615 Jps
  8. 5231 NodeManager
复制代码
此下令将显示当前正在运行的 Java 进程。您应该能够看到如下进程:
4.5 停止 Hadoop

  1. $ sbin/stop-dfs.sh
  2. Stopping namenodes on [localhost]
  3. Stopping datanodes
  4. Stopping secondary namenodes [ubuntu]
  5. $ sbin/stop-yarn.sh
  6. Stopping nodemanagers
  7. Stopping resourcemanager
复制代码
五、常见题目

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

题目描述:
  1. $ sudo sbin/start-dfs.sh
  2. Starting namenodes on [ubuntu]
  3. pdsh@ubuntu: ubuntu: rcmd: socket: Permission denied
  4. Starting datanodes
  5. pdsh@ubuntu: localhost: rcmd: socket: Permission denied
  6. Starting secondary namenodes [ubuntu]
  7. pdsh@ubuntu: ubuntu: rcmd: socket: Permission denied
复制代码
解决方案:
(1) 检察 SSH 设置
检查 /etc/ssh/sshd_config 设置文件,确保以下基本设置
  1. #
  2. PermitRootLogin yes
  3. PubkeyAuthentication yes
  4. AuthorizedKeysFile     .ssh/authorized_keys
复制代码
假如有更改,记得重启 SSH 服务
  1. $ sudo systemctl restart ssh
复制代码
(2)pdsh 执行下令
pdsh(并行分布式 Shell)执行长途下令时的默认长途下令类型为 rsh 时, 会出现该题目。
  1. # 检查 pdsh 的远程命令类型
  2. $ pdsh -q -w localhost
复制代码
更改为使用 ssh :
  1. # 1. 临时设置
  2. $ export PDSH_RCMD_TYPE=ssh
  3. # 2. 永久设置
  4. $ echo 'export PDSH_RCMD_TYPE=ssh' >> ~/.bashrc
复制代码
最后,重新加载 ~/.bashrc:
  1. $ source ~/.bashrc
复制代码
(3)不建议的方案
在实验以上方案后,仍然无法启动,建议删除 pdsh。
  1. apt-get remove pdsh
复制代码
5.2 启动脚本时拒绝访问

报错信息:
  1. $ sudo sbin/start-dfs.sh
  2. Starting namenodes on [ubuntu]
  3. ubuntu: root@ubuntu: Permission denied (publickey,password).
  4. Starting datanodes
  5. localhost: root@localhost: Permission denied (publickey,password).
  6. Starting secondary namenodes [ubuntu]
  7. 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)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表