大数据之Hadoop部署

news2024/9/9 4:09:37

文章目录

    • 服务器规划
    • 服务器环境准备
      • 1. 网络测试
      • 2. 安装额外软件包
      • 3. 安装基础工具
      • 4. 关闭防火墙
      • 5. 创建用户并配置权限
      • 6. 创建目录并设置权限
      • 7. 卸载JDK
      • 8. 修改主机名
      • 9. 配置hosts文件
      • 10. 重启服务器
    • 配置免密登录
    • 安装Java
    • 安装Hadoop
      • 1. Hadoop部署
      • 2. 配置Hadoop
      • 3. 格式化Hadoop文件系统
      • 4. 启动Hadoop集群
      • 5. 验证Hadoop集群
    • 注意事项
    • 参考文件

在这里插入图片描述

搭建一个Hadoop集群涉及到多个步骤,包括服务器规划, 服务器环境准备,配置SSH无密码登录,安装Java,安装Hadoop,配置Hadoop,以及格式化和启动Hadoop集群。以下是在三台CentOS系统服务器上搭建Hadoop集群的必要步骤和详细的描述:

服务器规划

  • 准备三台服务器(Hadoop101、Hadoop102、Hadoop103), 确保都已经安装了CentOS 7.9操作系统。
  • 为每台服务器配置静态IP地址,确保它们在同一子网内,并且子网掩码、网关和DNS设置正确。
  • 使得三台服务器之间可以互相ping通。
  • 确保三台服务器都能够访问互联网。
  • 角色规划
    • Hadoop101 作为NameNodeResourceManager,负责集群的文件系统命名空间和资源管理。
    • Hadoop102 作为SecondaryNameNode,辅助NameNode进行元数据备份,不直接处理客户端读写请求。
    • Hadoop101、Hadoop102、Hadoop103 作为DataNodeNodeManager,存储实际的数据块并提供计算能力
Hadoop101Hadoop102Hadoop103
NameNodeSecondaryNameNode-
DataNodeDataNodeDataNode
ResourceManager--
NodeManagerNodeManagerNodeManager

服务器环境准备

对每台服务器做如下检查和配置, 下面是在root用户下进行操作。

1. 网络测试

  • 确保虚拟机可以正常上网。
    ping www.baidu.com
    

2. 安装额外软件包

  • 安装epel-release以获取更多软件包。
    yum install -y epel-release
    

3. 安装基础工具

  • 如果是最小系统版,需要安装以下工具:
    • net-tools:包含ifconfig等网络配置命令。
      yum install -y net-tools
      
    • vim:文本编辑器。
      yum install -y vim
      

4. 关闭防火墙

  • 停止并禁用防火墙服务。
    systemctl stop firewalld
    systemctl disable firewalld.service
    

5. 创建用户并配置权限

  • 创建bigdata用户并设置密码。
    useradd bigdata
    passwd bigdata
    
  • 配置bigdata用户具有root权限,无需密码即可执行sudo命令。
    vim /etc/sudoers
    
    • /etc/sudoers文件中添加:
      bigdata   ALL=(ALL)     NOPASSWD:ALL
      

6. 创建目录并设置权限

  • /opt目录下创建modulesoftware文件夹。
    mkdir /opt/module
    mkdir /opt/software
    
  • 修改文件夹的所有者和所属组为bigdata
    chown bigdata:bigdata /opt/module
    chown bigdata:bigdata /opt/software
    
  • 查看文件夹的所有者和所属组。
    ls -al /opt
    

7. 卸载JDK

  • 如果服务器预装了JDK,执行以下命令卸载:
    rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
    

8. 修改主机名

  • 登录到目标服务器:使用SSH或其他远程登录方式登录到需要修改主机名的服务器。
  • 编辑主机名配置文件:使用文本编辑器(如vim)编辑/etc/hostname文件。
    sudo vim /etc/hostname
    
  • 设置新的主机名:在文件中输入新的主机名,例如hadoop101,然后保存退出。
  • 更新系统识别的主机名:使更改立即生效,可以使用以下命令:
    sudo hostname -F /etc/hostname
    

9. 配置hosts文件

  • 打开hosts文件:编辑/etc/hosts文件,以将IP地址映射到相应的主机名。
    sudo vim /etc/hosts
    
  • 添加或更新条目:在文件中添加或更新映射关系,每条映射占一行,格式为IP地址 空格 主机名。例如:
    192.168.10.101 hadoop101
    192.168.10.102 hadoop102
    192.168.10.102 hadoop103
    
    这里的IP地址替换为自己服务器的IP地址。
  • 确保无重复条目:检查hosts文件以确保没有重复或冲突的条目,这可能会导致网络解析问题。
  • 保存并关闭文件:完成编辑后,保存更改并关闭文本编辑器。

10. 重启服务器

  • 完成配置后,重启服务器以应用更改。
    reboot
    

配置免密登录

为了方便管理,需要在服务器之间使用bigdata用户配置SSH无密码登录。

  1. 切换到bigdata 用户

    su bigdata
    
  2. hadoop101生成SSH密钥对:

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    

    该命令会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)。

  3. hadoop101上执行命令 ssh-copy-id, 将hadoop101公钥复制到每台服务器的~/.ssh/authorized_keys

    ssh-copy-id hadoop101
    ssh-copy-id hadoop102
    ssh-copy-id hadoop103
    

安装Java

下面的操作使用bigdata 用户在 hadoop101上进行操作。

  • 切换到 /opt/software 目录

    cd /opt/software
    
  • 使用 wget 下载 Java 1.8 版本

    wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
    

    请检查链接是否有效,因为Oracle的下载链接可能会变化。

  • 使用 tar 解压文件到 /opt/module 目录

    tar -xzvf jdk-8u301-linux-x64.tar.gz -C /opt/module/
    
  • 生成软链接

    ln -s /opt/module/jdk1.8.0_301 /opt/module/jdk
    
  • 设置 JDK 的环境变量

    • 新建/etc/profile.d/bigdata_env.sh文件

      touch /etc/profile.d/bigdata_env.sh
      
    • 添加如下内容,然后保存(:wq)退出

      #JAVA_HOME
      export JAVA_HOME=/opt/module/jdk
      export PATH=$PATH:$JAVA_HOME/bin
      
    • 让环境变量生效

      source /etc/profile.d/bigdata_env.sh
      
  • 验证安装

    java -version
    echo $JAVA_HOME
    
  • 分发软件和环境变量

    • JAVA软件JAVA软连接环境变量配置文件 分发到hadoop102hadoop103
    # 分发到 hadoop102
    rsync -av "/opt/module/jdk1.8.0_202" "hadoop102:/opt/module"
    rsync -av "/opt/module/jdk" "hadoop102:/opt/module"
    sudo rsync -av "/etc/profile.d/bigdata_env.sh" "hadoop102:/etc/profile.d"
    # 分发到 hadoop103
    rsync -av "/opt/module/jdk1.8.0_202" "hadoop103:/opt/module/"
    rsync -av "/opt/module/jdk" "hadoop103:/opt/module/"
    sudo rsync -av "/etc/profile.d/bigdata_env.sh" "hadoop103:/etc/profile.d"
    

安装Hadoop

1. Hadoop部署

下面的操作使用bigdata 用户在 hadoop101上进行操作。

  • 进入Hadoop安装包路径

    • 打开终端,使用命令 cd /opt/software/ 进入包含Hadoop安装包的目录。
  • 下载Hadoop
    从华为镜像下载Hadoop的tar.gz包,并解压到合适的目录。

    # 下载hadoop3.3.1
    wget https://mirrors.huaweicloud.com/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
    
  • 解压Hadoop安装文件

    • 将Hadoop压缩包解压到/opt/module/目录。
      tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
      
  • 验证解压结果

    • 通过执行命令 ls /opt/module/hadoop-3.1.3 来检查Hadoop目录是否存在,以确认解压操作是否成功。
  • 创建Hadoop软连接

    • 如果解压成功,创建软连接hadoop,以简化路径。
      ln -s /opt/module/hadoop-3.1.3 /opt/module/hadoop
      
  • 编辑环境变量配置文件

    • 首先,使用 pwd 命令获取当前Hadoop安装目录的完整路径。

    • 接着,使用 sudo vim /etc/profile.d/bigdata_env.sh 命令以超级用户权限打开环境变量配置文件进行编辑。

    • 在打开的配置文件中,滚动到文件末尾(使用 Shift + G)。

    • 添加以下行来设置Hadoop的环境变量:

      # HADOOP_HOME
      export HADOOP_HOME=/opt/module/hadoop
      export PATH=$PATH:$HADOOP_HOME/bin
      export PATH=$PATH:$HADOOP_HOME/sbin
      
    • 这些行将Hadoop的bin和sbin目录添加到系统的PATH环境变量中,使得可以在任何位置调用Hadoop的命令。

    • 在Vim编辑器中,使用 :wq 命令保存更改并退出编辑器。

  • 使环境变量生效

    • hadoop101上执行下面的命令
      source /etc/profile.d/bigdata_env.sh
      
  • 验证安装

    • 通过下面命令验证安装是否成功,以及环境变量是否生效。
      hadoop version
      echo $HADOOP_HOME
      
  • 分发软件和环境变量

    • Hadoop软件Hadoop软连接环境变量配置文件 分发到hadoop102hadoop103
      # 分发到 hadoop102
      rsync -av "/opt/module/hadoop-3.1.3" "hadoop102:/opt/module"
      rsync -av "/opt/module/hadoop" "hadoop102:/opt/module"
      sudo rsync -av "/etc/profile.d/bigdata_env.sh" "hadoop102:/etc/profile.d"
      # 分发到 hadoop103
      rsync -av "/opt/module/hadoop-3.1.3" "hadoop103:/opt/module/"
      rsync -av "/opt/module/hadoop" "hadoop103:/opt/module/"
      sudo rsync -av "/etc/profile.d/bigdata_env.sh" "hadoop103:/etc/profile.d"
      

2. 配置Hadoop

进入hadoop配置目录cd /opt/module/hadoop/etc/hadoop/, 修改Hadoop配置文件core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml, workers ,设置集群模式和相关参数。

  • 文件core-site.xml配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    	<!-- 指定NameNode的地址 -->
    	<property>
    	    <name>fs.defaultFS</name>
    	    <value>hdfs://hadoop101:8020</value>
    	</property>
    	<!-- 指定hadoop数据的存储目录 -->
    	<property>
    	    <name>hadoop.tmp.dir</name>
    	    <value>/opt/module/hadoop/data</value>
    	</property>
    	
    	<!-- 配置HDFS网页登录使用的静态用户为bigdata -->
    	<property>
    	    <name>hadoop.http.staticuser.user</name>
    	    <value>bigdata</value>
    	</property>
    	
    	<!-- 配置该bigdata(superUser)允许通过代理访问的主机节点 -->
    	<property>
    	    <name>hadoop.proxyuser.bigdata.hosts</name>
    	    <value>*</value>
    	</property>
    	<!-- 配置该bigdata(superUser)允许通过代理用户所属组 -->
    	<property>
    	    <name>hadoop.proxyuser.bigdata.groups</name>
    	    <value>*</value>
    	</property>
    	<!-- 配置该bigdata(superUser)允许通过代理的用户-->
    	<property>
    	    <name>hadoop.proxyuser.bigdata.users</name>
    	    <value>*</value>
    	</property>
    </configuration>
    
  • 文件hdfs-site.xml配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    	<!-- nn web端访问地址-->
    	<property>
            <name>dfs.namenode.http-address</name>
            <value>hadoop101:9870</value>
        </property>
        
    	<!-- 2nn web端访问地址-->
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>hadoop102:9868</value>
        </property>
        
        <!-- 测试环境指定HDFS副本的数量1 -->
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
    </configuration>
    
  • 文件yarn-site.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    	<!-- 指定MR走shuffle -->
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        
        <!-- 指定ResourceManager的地址-->
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>hadoop101</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_MAPRED_HOME</value>
        </property>
        
        <!--yarn单个容器允许分配的最大最小内存 -->
        <property>
            <name>yarn.scheduler.minimum-allocation-mb</name>
            <value>512</value>
        </property>
        <property>
            <name>yarn.scheduler.maximum-allocation-mb</name>
            <value>4096</value>
        </property>
        
        <!-- yarn容器允许管理的物理内存大小 -->
        <property>
            <name>yarn.nodemanager.resource.memory-mb</name>
            <value>4096</value>
        </property>
        
        <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
        <property>
            <name>yarn.nodemanager.pmem-check-enabled</name>
            <value>true</value>
        </property>
        <property>
            <name>yarn.nodemanager.vmem-check-enabled</name>
            <value>false</value>
        </property>
    </configuration>
    
  • 文件mapred-site.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
    	<!-- 指定MapReduce程序运行在Yarn上 -->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    
  • 文件workers配置

    hadoop101
    hadoop102
    hadoop103
    
  • 分发配置文件

    • 将配置文件分发到hadoop102hadoop103
      # 分发到 hadoop102
      rsync -av "/opt/module/hadoop/etc/hadoop" "hadoop102:/opt/module/hadoop/etc/"
      # 分发到 hadoop103
      rsync -av "/opt/module/hadoop/etc/hadoop" "hadoop103:/opt/module/hadoop/etc/"
      

3. 格式化Hadoop文件系统

  • 在NameNode服务器上(hadoop101)格式化Hadoop文件系统。

    hdfs namenode -format
    

4. 启动Hadoop集群

  • 启动Hadoop集群的所有守护进程。

    start-dfs.sh
    start-yarn.sh
    

5. 验证Hadoop集群

  • 使用jps命令检查Java进程,确认Hadoop守护进程是否启动。

    jps
    # hadoop101 上启动以下进程
    6084 DataNode
    6552 NodeManager
    6426 ResourceManager
    5935 NameNode
    # hadoop102 上启动以下进程
    30834 ResourceManager
    28487 SecondaryNameNode
    28695 NodeManager
    28379 DataNode
    # hadoop103 上启动以下进程
    2466 NodeManager
    2340 DataNode
    
  • 页面查看

    • hdfs 页面地址 http://hadoop101:9870
      在这里插入图片描述

    • yarn 页面地址 http://hadoop101:8088

    在这里插入图片描述

注意事项

  • 企业开发中,单个服务器的防火墙通常是关闭的,但公司整体会设置安全的防火墙。

参考文件

Java | 华为镜像仓库

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PyQt5】一文向您详细介绍 QVBoxLayout() 的作用

【PyQt5】一文向您详细介绍 QVBoxLayout() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&a…

机器人控制系列教程之URDF文件语法介绍

前两期推文&#xff1a;机器人控制系列教程之动力学建模(1)、机器人控制系列教程之动力学建模(2)&#xff0c;我们主要从数学的角度介绍了机器人的动力学建模的方式&#xff0c;随着机器人技术的不断发展&#xff0c;机器人建模成为了机器人系统设计中的一项关键任务。URDF&…

我只有一点Python基础,对学习WebGIS开发有帮助吗?

经常有人后台私信问&#xff0c;我只有一点Python基础&#xff0c;对学习GIS开发有帮助吗&#xff1f; 关于这个问题的答案是&#xff0c;当然有&#xff01;Python适用于WebGIS开发。WebGIS是地理信息系统&#xff08;GIS&#xff09;技术与Web技术的结合&#xff0c;而Pytho…

Go语言学习:每日一练2

Go语言学习&#xff1a;每日一练2 目录 Go语言学习&#xff1a;每日一练2结构体零值数组切片映射指针 各个类型的零值一览 结构体 //定义 type Vertex struct {X, Y int } //使用 func main() { v1 : Vertex{1, 2} fmt.Println(v.X) //别的实例化方式 var v2 Vertex v2 : *new…

《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers》

期刊&#xff1a;CVPR 年份&#xff1a;2023 代码&#xff1a;https://github.com/XuJiacong/PIDNet 摘要 双分支网络架构已经证明了它在实时语义分割任务中的有效性和有效性。然而&#xff0c;高分辨率细节和低频上下文的直接融合的缺点是细节特征很容易被周围的上下文信息…

Nuxt3 的生命周期和钩子函数(三)

title: Nuxt3 的生命周期和钩子函数&#xff08;三&#xff09; date: 2024/6/27 updated: 2024/6/27 author: cmdragon excerpt: 摘要&#xff1a;概述了Nuxt3的关键生命周期钩子用途&#xff0c;如page:finish用于页面加载后处理&#xff0c;page:transition:finish处理过…

MySQL数据库简介和安装

文章目录 一、数据库原理目前情况数据库的发展史RDBMS关系型数据库关系型数据库理论 二、MySQL历史发展历程关系型数据库和非关系型数据库 三、安装mysql及优化yum安装编译安装mysql二进制安装优化操作 四、 安装mycli插件客户端工具 一、数据库原理 目前情况 我们正处于一个…

十三、Maven(1)

&#x1f33b;&#x1f33b;目录 一、maven价绍二、maven的功能1、项目自动化构建2、管理jar、war包3、实现项目结构设计 三、maven安装1、maven的安装环境需要jdk2、Maven的安装路径中不能出现中文和空格3、压缩包解压即可4、配置环境变量 四、maven的仓库1. Maven仓库配置2. …

AI提示词投喂新手教程(一):基础概念和工具

对于很多已经熟悉提示词工程&#xff08;prompt engineering&#xff09;的朋友来说&#xff0c;以下内容可能已经是老生常谈了。然而&#xff0c;仔细搜索和翻阅了星球上关于提示词的新手教程&#xff0c;发现对新手并不是很友好&#xff0c;内容零散且缺乏系统性。为此&#…

Construct公司 从 0 到 1 基于 Kitex+Istio 的微服务系统建设

本文根据 2024 年 5 月 25 日在上海举办的“云原生✖️AI 时代的微服务架构与技术实践”CloudWeGo 技术沙龙上海站活动中&#xff0c;Construct 服务端总监 Jason 的演讲《从 0 到 1 基于 Kitex Istio 的微服务系统建设》整理而来。 在微服务架构的浪潮中&#xff0c;企业面临…

Android 通知组

一. 通知组简介 从 Android 7.0&#xff08;API 级别 24&#xff09;开始&#xff0c;您可以在一个组中显示相关通知。如下所示: 图 1. 收起&#xff08;顶部&#xff09;和展开&#xff08;底部&#xff09;的通知组。 注意 &#xff1a;如果应用发出 4 条或更多条通知且未…

【笔记】HashMap的头插死循环问题

HashMap头插死循环是指在JDK1.7中&#xff0c;多线程环境下&#xff0c;HashMap进行扩容时由于多个线程一起执行扩容&#xff0c;可能会导致某一结点被错误插入头部并形成一个循环链表。 发生死循环的源码如下&#xff1a; // hashmap由数组链表构成 void transfer(Entry[] ne…

【Micro-ROS学习】

Micro-ROS 是专为 ROS 2 设计的&#xff0c;它允许在微控制器&#xff08;microcontrollers&#xff09;上实现ROS 2的功能。Micro-ROS 从 ROS 2 架构优化而来&#xff0c;目的是让那些资源有限的嵌入式设备也能够接入ROS 2生态系统&#xff0c;享受ROS 2带来的标准化通信、模块…

放烟花短视频素材去哪里找?去哪里下载?烟花素材网分享

在当代社会&#xff0c;短视频凭借其独有的魅力成为大众传递情感、记录生活、分享快乐的新兴方式。特别是在庆祝节日和特殊时刻时&#xff0c;烟花的绚丽效果常常被用来吸引观众的目光&#xff0c;成为视频作品中的亮点。然而&#xff0c;对于短视频制作者来说&#xff0c;寻找…

【Web3】Web3.js 启动!并解决Web3 is not a constructor报错

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 本节教大家如何启动Web3.js 目录 Web3 启动&#xff01; 于是很愉快的报错 创建实例&#xff01; 出来了 Web3&#xff1a;模块…

【工程实践】MQ中rebalance机制

问题起因&#xff0c;有些分区积压严重&#xff0c;有些分区又是空闲。之前了解过rebalance机制&#xff0c;想知道在这种情况下rebalance机制为什么不触发&#xff0c;从而将积压的数据匀给空闲的分区。 问了gpt&#xff0c;“mq的rebalance功能能否保证每个分区在同一时间段…

小型智能驱鸟器,建筑驱鸟专用

随着城市化进程的加快&#xff0c;鸟类与人类的居住空间逐渐交织重合&#xff0c;鸟类对建筑物的侵扰问题也愈发凸显。家庭庭院、住宅窗前、屋顶&#xff0c;甚至那些承载着历史与文化底蕴的名胜古迹和精美雕像&#xff0c;都时常受到鸟粪的污染。鸟粪具有腐蚀性且很难清理&…

【C++】STL-priority_queue

目录 1、priority_queue的使用 2、实现没有仿函数的优先级队列 3、实现有仿函数的优先级队列 3.1 仿函数 3.2 真正的优先级队列 1、priority_queue的使用 priority_queue是优先级队列&#xff0c;是一个容器适配器&#xff0c;不满足先进先出的特点&#xff0c;而是优先级高…

达梦数据库的系统视图v$database

达梦数据库的系统视图v$database 基础信息 OS版本&#xff1a; Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a; DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在达梦数据库&#xff08;Dameng Database&#xf…

前端基础--Vue2

前端技术发展史(了解) 1.前端历史 1.1.静态网页 1990 html 1.2.异步刷新-操作dom 1995 javascript 1.3.动态网站 Asp/jsp&#xff08;java&#xff09;,php等&#xff0c;后台臃肿 1.4.Ajax成为主流 异步请求 1.5.Html5 被认为是互联网的核心技术之一。HTML产生于19…