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

14-Linux部署Hadoop集群

Linux部署Hadoop集群

简介

1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
2)主要解决,海量数据的存储和海量数据的分析计算问题。

Hadoop HDFS 提供分布式海量数据存储能力

Hadoop YARN 提供分布式集群资源管理能力

Hadoop MapReduce 提供分布式海量数据计算能力

前置要求

  • 请确保完成了集群化环境前置准备章节的内容
  • 即:JDK、SSH免密、关闭防火墙、配置主机名映射等前置操作

参考文章:

11-Linux部署集群准备:http://t.csdnimg.cn/zWbnd

Hadoop集群角色

Hadoop生态体系中总共会出现如下进程角色:

  1. Hadoop HDFS的管理角色:Namenode进程(仅需1个即可(管理者一个就够)
  2. Hadoop HDFS的工作角色:Datanode进程(需要多个(工人,越多越好,一个机器启动一个)
  3. Hadoop YARN的管理角色:ResourceManager进程(仅需1个即可(管理者一个就够)
  4. Hadoop YARN的工作角色:NodeManager进程(需要多个(工人,越多越好,一个机器启动一个)
  5. Hadoop 历史记录服务器角色:HistoryServer进程(仅需1个即可(功能进程无需太多1个足够)
  6. Hadoop 代理服务器角色:WebProxyServer进程(仅需1个即可(功能进程无需太多1个足够)
  7. Zookeeper的进程:QuorumPeerMain进程(仅需1个即可(Zookeeper的工作者,越多越好)

角色和节点分配

角色分配如下:

  1. node1:Namenode、Datanode、ResourceManager、NodeManager、HistoryServer、WebProxyServer、QuorumPeerMain
  2. node2:Datanode、NodeManager、QuorumPeerMain
  3. node3:Datanode、NodeManager、QuorumPeerMain

image-20221026202935745

安装

调整虚拟机内存

如上图,可以看出node1承载了太多的压力。同时node2和node3也同时运行了不少程序

为了确保集群的稳定,需要对虚拟机进行内存设置。

请在VMware中,对:

  1. node1设置4GB或以上内存
  2. node2和node3设置2GB或以上内存

大数据的软件本身就是集群化(一堆服务器)一起运行的。

现在我们在一台电脑中以多台虚拟机来模拟集群,确实会有很大的内存压力哦。

Zookeeper集群部署

Hadoop集群部署

  1. 下载Hadoop安装包、解压、配置软链接

    • 下载
    wget --no-check-certificate http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
    
    • 解压
    # 请确保目录/export/server存在
    tar -zxvf hadoop-3.3.0.tar.gz -C /export/server/
    
    • 软链接
    ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
    
  2. 修改配置文件:hadoop-env.sh

    Hadoop的配置文件要修改的地方很多,请细心

    cd 进入到/export/server/hadoop/etc/hadoop,文件夹中,配置文件都在这里

    修改hadoop-env.sh文件

    cd /export/server/hadoop/etc/hadoop
    vim hadoop-env.sh
    

    此文件是配置一些Hadoop用到的环境变量

    这些是临时变量,在Hadoop运行时有用

    如果要永久生效,需要写到/etc/profile中

    # 在文件开头加入:
    # 配置Java安装路径
    export JAVA_HOME=/export/server/jdk
    # 配置Hadoop安装路径
    export HADOOP_HOME=/export/server/hadoop
    # Hadoop hdfs配置文件路径
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    # Hadoop YARN配置文件路径
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    # Hadoop YARN 日志文件夹
    export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
    # Hadoop hdfs 日志文件夹
    export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs# Hadoop的使用启动用户配置
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    export YARN_PROXYSERVER_USER=root
    
  3. 修改配置文件:core-site.xml

    如下,清空文件,填入如下内容

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file.
    --><!-- Put site-specific property overrides in this file. -->
    <configuration><property><name>fs.defaultFS</name><value>hdfs://node1:8020</value><description></description></property><property><name>io.file.buffer.size</name><value>131072</value><description></description></property>
    </configuration>
    
  4. 配置:hdfs-site.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file.
    --><!-- Put site-specific property overrides in this file. --><configuration><property><name>dfs.datanode.data.dir.perm</name><value>700</value></property><property><name>dfs.namenode.name.dir</name><value>/data/nn</value><description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description></property><property><name>dfs.namenode.hosts</name><value>node1,node2,node3</value><description>List of permitted DataNodes.</description></property><property><name>dfs.blocksize</name><value>268435456</value><description></description></property><property><name>dfs.namenode.handler.count</name><value>100</value><description></description></property><property><name>dfs.datanode.data.dir</name><value>/data/dn</value></property>
    </configuration>
    
  5. 配置:mapred-env.sh文件

    # 在文件的开头加入如下环境变量设置
    export JAVA_HOME=/export/server/jdk
    export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
    export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
    
  6. 配置:mapred-site.xml文件

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file.
    --><!-- Put site-specific property overrides in this file. --><configuration><property><name>mapreduce.framework.name</name><value>yarn</value><description></description></property><property><name>mapreduce.jobhistory.address</name><value>node1:10020</value><description></description></property><property><name>mapreduce.jobhistory.webapp.address</name><value>node1:19888</value><description></description></property><property><name>mapreduce.jobhistory.intermediate-done-dir</name><value>/data/mr-history/tmp</value><description></description></property><property><name>mapreduce.jobhistory.done-dir</name><value>/data/mr-history/done</value><description></description></property>
    <property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    <property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    <property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    </configuration>
    
  7. 配置:yarn-env.sh文件

    # 在文件的开头加入如下环境变量设置
    export JAVA_HOME=/export/server/jdk
    export HADOOP_HOME=/export/server/hadoop
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
    export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
    
  8. 配置:yarn-site.xml文件

    <?xml version="1.0"?>
    <!--Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License. See accompanying LICENSE file.
    -->
    <configuration><!-- Site specific YARN configuration properties -->
    <property><name>yarn.log.server.url</name><value>http://node1:19888/jobhistory/logs</value><description></description>
    </property><property><name>yarn.web-proxy.address</name><value>node1:8089</value><description>proxy server hostname and port</description></property><property><name>yarn.log-aggregation-enable</name><value>true</value><description>Configuration to enable or disable log aggregation</description></property><property><name>yarn.nodemanager.remote-app-log-dir</name><value>/tmp/logs</value><description>Configuration to enable or disable log aggregation</description></property><!-- Site specific YARN configuration properties --><property><name>yarn.resourcemanager.hostname</name><value>node1</value><description></description></property><property><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value><description></description></property><property><name>yarn.nodemanager.local-dirs</name><value>/data/nm-local</value><description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description></property><property><name>yarn.nodemanager.log-dirs</name><value>/data/nm-log</value><description>Comma-separated list of paths on the local filesystem where logs are written.</description></property><property><name>yarn.nodemanager.log.retain-seconds</name><value>10800</value><description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>Shuffle service that needs to be set for Map Reduce applications.</description></property>
    </configuration>
    
  9. 修改workers文件

    # 全部内容如下
    node1
    node2
    node3
    
  10. 分发hadoop到其它机器

# 在node1执行
cd /export/serverscp -r hadoop-3.3.0 node2:`pwd`/
scp -r hadoop-3.3.0 node3:`pwd`/
  1. 在node2、node3执行

    # 创建软链接
    ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
    
  2. 创建所需目录

    • 在node1执行:

      mkdir -p /data/nn
      mkdir -p /data/dn
      mkdir -p /data/nm-log
      mkdir -p /data/nm-local
      
    • 在node2执行:

      mkdir -p /data/dn
      mkdir -p /data/nm-log
      mkdir -p /data/nm-local
      
    • 在node3执行:

      mkdir -p /data/dn
      mkdir -p /data/nm-log
      mkdir -p /data/nm-local
      
  3. 配置环境变量

    在node1、node2、node3修改/etc/profile

    export HADOOP_HOME=/export/server/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    执行source /etc/profile生效

  4. 格式化NameNode,在node1执行(注意请不要重复格式化,重复格式化会出现DataNode进程没有加载,解决方法看最后

    hadoop namenode -format
    

    hadoop这个命令来自于:$HADOOP_HOME/bin中的程序

    由于配置了环境变量PATH,所以可以在任意位置执行hadoop命令哦

  5. 启动hadoop的hdfs集群,在node1执行即可

    start-dfs.sh# 如需停止可以执行
    stop-dfs.sh
    

    start-dfs.sh这个命令来自于:$HADOOP_HOME/sbin中的程序

    由于配置了环境变量PATH,所以可以在任意位置执行start-dfs.sh命令哦

  6. 启动hadoop的yarn集群,在node1执行即可

    start-yarn.sh# 如需停止可以执行
    stop-yarn.sh
    
  7. 启动历史服务器

    mapred --daemon start historyserver# 如需停止将start更换为stop
    
  8. 启动web代理服务器

    yarn-daemon.sh start proxyserver# 如需停止将start更换为stop
    
验证Hadoop集群运行情况
  1. 在node1、node2、node3上通过jps验证进程是否都启动成功

  2. 验证HDFS,浏览器打开:http://192.168.149.131:9870

    image-20240228190509251

    创建文件test.txt,随意填入内容,并执行:

    hadoop fs -put test.txt /test.txthadoop fs -cat /test.txt
    
  3. 验证YARN,浏览器打开:http://192.168.149.131:8088

    执行:

    # 创建文件test.txt,填入如下内容
    bowen bowen hadoop
    jiaqi hadoop hadoop
    jiaqi bowen# 将文件上传到HDFS中
    hadoop fs -put test.txt /test.txt# 执行如下命令验证YARN是否正常
    hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount -Dmapred.job.queue.name=root.root /test.txt /output
    

image-20240228190616776

重复格式化NameNode导致DataNode进程没有加载

问题描述:

重复使用以下命令,导致namenode与datanode之间的不一致,最终DataNode进程没有启动

hadoop namenode -format

解决方案:

  • 关闭Hadoop程序
stop-all.sh
  • 进入Hadoop的安装目录找到etc/hadoop/目录下的hdfs-site.xml文件
cd /export/server/hadoop-3.3.0/etc/hadoop
  • 使用vim命令查看hdfs-site.xml,找到该文件中的datanode的存放路径
vim hdfs-site.xml

image-20240228191630101

  • 在node1、node2、node3都进行以下操作(删除datanode的存放路径下的所有文件)
rm -rf /data/dn/*
  • 重新格式化
hadoop namenode -format
  • 启动集群
start-all.sh
  • 使用jps命令查看进程
jps

image-20240228192215889

可以看到启动成功了

相关文章:

  • 高中数学:函数的单调性
  • 使用npm i命令时一直idealTree:npm: sill idealTree buildDeps卡住不动
  • 蓝桥杯倒计时41天!DFS进阶1——回溯
  • Vue+Flask电商后台管理系统
  • 【一起学习Arcade】(6):属性规则实例_约束规则和验证规则
  • 记录一次主机不能登录的异常现象解决的问题
  • 自动粘贴与网址管理,让您的网络生活更便捷!“
  • 04锁机制-分布式锁
  • 云上攻防-云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸
  • 人工智能_大模型013_AIGC生成式模型的增强检索_RAG知识补充检索_补充私域和实时场景知识_关键字检索增强---人工智能工作笔记0149
  • 基于yolov5的电瓶车和自行车检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】
  • 2403d,d的108版本更改
  • python爬虫之selenium知识点记录
  • Ubuntu制作本地安装源
  • 一周学会Django5 Python Web开发-Django5列表视图ListView
  • JavaScript-如何实现克隆(clone)函数
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • ERLANG 网工修炼笔记 ---- UDP
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript新鲜事·第5期
  • java中具有继承关系的类及其对象初始化顺序
  • React的组件模式
  • Spring Boot MyBatis配置多种数据库
  • 安装python包到指定虚拟环境
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 关于springcloud Gateway中的限流
  • 和 || 运算
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 探索 JS 中的模块化
  • 原生js练习题---第五课
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2015)JS ES6 必知的十个 特性
  • (23)Linux的软硬连接
  • (floyd+补集) poj 3275
  • (Forward) Music Player: From UI Proposal to Code
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (离散数学)逻辑连接词
  • (区间dp) (经典例题) 石子合并
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转载)Linux网络编程入门
  • .md即markdown文件的基本常用编写语法
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Project Open Day(2011.11.13)
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net操作Excel出错解决
  • /bin、/sbin、/usr/bin、/usr/sbin
  • :=
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @JSONField或@JsonProperty注解使用
  • @基于大模型的旅游路线推荐方案
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧