3、Hadoop部署

news2024/12/26 0:48:00

1、 Hadoop部署

1)集群部署规划

注意:NameNode和SecondaryNameNode不要安装在同一台服务器

注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

hadoop102

hadoop103

hadoop104

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

2)将hadoop3.3.4.tar.gz导入到opt目录下面的software文件夹下面

3)进入到Hadoop安装包路径下

[shuidi@hadoop102 bin]$ cd /opt/software/

4)解压安装文件到/opt/module下面

[shuidi@hadoop102 software]$ tar -zxvf hadoop-3.3.4.tar.gz -C /opt/module/

5)查看是否解压成功

[shuidi@hadoop102 software]$ ls /opt/module/hadoop-3.3.4

6)重命名

[shuidi@hadoop102 module]$ mv /opt/module/hadoop-3.3.4 /opt/module/hadoop

7)将Hadoop添加到环境变量

(1)获取Hadoop安装路径

[shuidi@hadoop102 hadoop]$ pwd
/opt/module/hadoop

(2)打开/etc/profile.d/my_env.sh文件

[shuidi@hadoop102 hadoop]$ sudo vim /etc/profile.d/my_env.sh

在profile文件末尾添加JDK路径:(shitf+g)

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

(3)保存后退出

:wq

(4)分发环境变量文件

[shuidi@hadoop102 hadoop]$ sudo /home/shuidi/bin/xsync /etc/profile.d/my_env.sh

(5)source 是之生效(3台节点)

[shuidi@hadoop102 hadoop]$ source /etc/profile.d/my_env.sh
[shuidi@hadoop103 hadoop]$ source /etc/profile.d/my_env.sh
[shuidi@hadoop104 hadoop]$ source /etc/profile.d/my_env.sh

1.2 配置集群

1)核心配置文件

配置core-site.xml

[shuidi@hadoop102 hadoop]$ cd $HADOOP_HOME/etc/hadoop
[shuidi@hadoop102 hadoop]$ vim 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://hadoop102:8020</value>
    </property>
<!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop/data</value>
    </property>

<!-- 配置HDFS网页登录使用的静态用户为shuidi -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>shuidi</value>
   </property>

<!-- 配置该shuidi(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.shuidi.hosts</name>
        <value>*</value>
    </property>
<!-- 配置该shuidi(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.shuidi.groups</name>
        <value>*</value>
    </property>
<!-- 配置该shuidi(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.shuidi.users</name>
        <value>*</value>
    </property>
</configuration>

2)HDFS配置文件

配置hdfs-site.xml

[shuidi@hadoop102 hadoop]$ vim 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>hadoop102:9870</value>
    </property>
    
    <!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>
    
    <!-- 测试环境指定HDFS副本的数量1 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

3)YARN配置文件

配置yarn-site.xml

[shuidi@hadoop102 hadoop]$ vim 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>hadoop103</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>

4)MapReduce配置文件

配置mapred-site.xml

[shuidi@hadoop102 hadoop]$ vim 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>

5)配置workers

[shuidi@hadoop102 hadoop]$ vim /opt/module/hadoop/etc/hadoop/workers

在该文件中增加如下内容:

hadoop102
hadoop103
hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

1.3 配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

1)配置mapred-site.xml

[shuidi@hadoop102 hadoop]$ vim mapred-site.xml

在该文件里面增加如下配置。

<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>

1.4 配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。

开启日志聚集功能具体步骤如下:

1)配置yarn-site.xml

[shuidi@hadoop102 hadoop]$ vim yarn-site.xml

在该文件里面增加如下配置。

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>

<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>

<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

1.5 分发Hadoop

[shuidi@hadoop102 hadoop]$ xsync /opt/module/hadoop/

1.6 群起集群

1)启动集群

(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)

[shuidi@hadoop102 hadoop]$ cd /opt/module/hadoop/
[shuidi@hadoop102 hadoop]$ bin/hdfs namenode -format

(2)启动HDFS

[shuidi@hadoop102 hadoop]$ sbin/start-dfs.sh

(3)在配置了ResourceManager的节点(hadoop103)启动YARN

[shuidi@hadoop103 hadoop]$ sbin/start-yarn.sh

(4)Web端查看HDFS的Web页面:

http://hadoop102:9870/

(5)Web端查看SecondaryNameNode

① 浏览器中输入:http://hadoop104:9868/status.html

② 查看SecondaryNameNode信息

(5)Web 端查看 YARN 的 ResourceManager

①浏览器中输入:http://hadoop103:8088

② 查看 YARN 上运行的 Job 信息

(6)在 hadoop102 启动历史服务器

[shuidi@hadoop102 hadoop]$ mapred --daemon start historyserver

①浏览器中输入:http://hadoop102:19888/jobhistory

1.7 Hadoop群起脚本

(1)在/home/shuidi/bin目录下创建hdp.sh

[shuidi@hadoop102 hadoop]$ cd /home/shuidi/bin
[shuidi@hadoop102 bin]$ vim hdp.sh

(2)写入以下内容:

#!/bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi
case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

(3)增加权限

[shuidi@hadoop102 bin]$ chmod 777 hdp.sh

(4)启动集群

[shuidi@hadoop102 bin]$ hdp.sh start

日志如下。

=================== 启动 hadoop集群 ===================
 --------------- 启动 hdfs ---------------
Starting namenodes on [hadoop102]
Starting datanodes
Starting secondary namenodes [hadoop104]
 --------------- 启动 yarn ---------------
Starting resourcemanager
Starting nodemanagers
 --------------- 启动 historyserver ---------------

查看进程。

[shuidi@hadoop102 bin]$ xcall jps

结果如下。

--------- hadoop102 ----------
25600 Jps
23829 DataNode
24422 NodeManager
24713 JobHistoryServer
23641 NameNode
--------- hadoop103 ----------
18292 NodeManager
18139 ResourceManager
17725 DataNode
19647 Jps
--------- hadoop104 ----------
19202 SecondaryNameNode
19470 NodeManager
20574 Jps
19007 DataNode

(5)停止集群

[shuidi@hadoop102 bin]$ hdp.sh stop

日志如下

=================== 关闭 hadoop集群 ===================
 --------------- 关闭 historyserver ---------------
 --------------- 关闭 yarn ---------------
Stopping nodemanagers
Stopping resourcemanager
 --------------- 关闭 hdfs ---------------
Stopping namenodes on [hadoop102]
Stopping datanodes
Stopping secondary namenodes [hadoop104]

查看进程。

[shuidi@hadoop102 bin]$ xcall jps

结果如下。

--------- hadoop102 ----------
22310 Jps
--------- hadoop103 ----------
16439 Jps
--------- hadoop104 ----------
17756 Jps

2、项目经验

(1)项目经验之HDFS存储多目录

① 生产环境服务器磁盘情况

② 在hdfs-site.xml文件中配置多目录,注意新挂载磁盘的访问权限问题。

HDFS的DataNode节点保存数据的路径由dfs.datanode.data.dir参数决定,其默认值为file://${hadoop.tmp.dir}/dfs/data,若服务器有多个磁盘,必须对该参数进行修改。如服务器磁盘如上图所示,则该参数应修改为如下的值。

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///dfs/data1,file:///hd2/dfs/data2,file:///hd3/dfs/data3,file:///hd4/dfs/data4</value>
</property>

注意:每台服务器挂载的磁盘不一样,所以每个节点的多目录配置可以不一致。单独配置即可。

(2)项目经验之集群数据均衡

① 节点间数据均衡

开启数据均衡命令:

start-balancer.sh -threshold 10

对于参数10,代表的是集群中各个节点的磁盘空间利用率相差不超过10%,可根据实际情况进行调整。

停止数据均衡命令:

stop-balancer.sh

② 磁盘间数据均衡

生成均衡计划(我们只有一块磁盘,不会生成计划)

hdfs diskbalancer -plan hadoop103

执行均衡计划。

hdfs diskbalancer -execute hadoop103.plan.json

查看当前均衡任务的执行情况。

hdfs diskbalancer -query hadoop103

取消均衡任务。

hdfs diskbalancer -cancel hadoop103.plan.json

(3)项目经验之Hadoop参数调优

1HDFS参数调优hdfs-site.xml

The number of Namenode RPC server threads that listen to requests from clients. If dfs.namenode.servicerpc-address is not configured then Namenode RPC server threads listen to requests from all nodes.
NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。
对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。
<property>
    <name>dfs.namenode.handler.count</name>
    <value>10</value>
</property>

dfs.namenode.handler.count=,比如集群规模为8台时,此参数设置为41。可通过简单的python代码计算该值,代码如下。

[shuidi@hadoop102 ~]$ python
Python 2.7.5 (default, Apr 11 2018, 07:36:10) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> print int(20*math.log(8))
41
>>> quit()

②YARN参数调优yarn-site.xml

情景描述:总共7台机器,每天几亿条数据,数据源->Flume->Kafka->HDFS->Hive

面临问题:数据统计主要用HiveSQL,没有数据倾斜,小文件已经做了合并处理,开启的JVM重用,而且IO没有阻塞,内存用了不到50%。但是还是跑的非常慢,而且数据量洪峰过来时,整个集群都会宕掉。基于这种情况有没有优化方案。

解决办法:

内存利用率不够。这个一般是Yarn的2个配置造成的,单个任务可以申请的最大内存大小,和Hadoop单个节点可用内存大小。调节这两个参数能提高系统内存的利用率。

(a)yarn.nodemanager.resource.memory-mb

表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。

(b)yarn.scheduler.maximum-allocation-mb

单个任务可申请的最多物理内存量,默认是8192(MB)。

 

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

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

相关文章

SSM框架学习(二:SpringFramework实战指南)

目录 一、SpringFramework介绍 1.总体技术体系 &#xff08;1&#xff09;单一架构 &#xff08;2&#xff09; 分布式架构 2.Spring 和 SpringFramework概念 &#xff08;1&#xff09;广义的 Spring&#xff1a;Spring 技术栈&#xff08;全家桶&#xff09; &#xff…

【ARM】如何通过 KeilMDK 查看芯片的硬件信息

【更多软件使用问题请点击亿道电子官方网站】 文档目标&#xff1a;解决在开发过程中对于开发项目所使用的的芯片的参数查看的问题 问题场景&#xff1a;在项目开发过程中&#xff0c;经常需要对于芯片的时钟、寄存器或者一些硬件参数需要进行确认。大多数情况下是需要外部查找…

AI边缘控制器:重塑工业自动化与控制的新篇章

在智能制造和工业4.0的浪潮下&#xff0c;AI边缘控制器作为新一代智能控制设备&#xff0c;正逐步成为推动工业自动化与数字化转型的关键力量。这类基于x86架构的高性能IPC&#xff08;工业个人计算机&#xff09;形态产品&#xff0c;不仅继承了传统PC的可扩展性、开放性和可视…

Android SystemUI组件(06)导航栏创建分析虚拟按键

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧SystemBars分析中导航栏部分即可。 1 导航栏创建之makeStatusBarView 通过上一篇文章的…

闯关leetcode——9. Palindrome Number

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/palindrome-number/description/ 内容 Given an integer x, return true if x is a palindrome, and false otherwise. Example 1: Input: x 121 Output: true Explanation: 121 reads as 121 f…

Windows 10/11 Raspberry Pi PICO (RP2040) VScode开发环境搭建

Windows 10/11 Raspberry Pi PICO VScode开发环境搭建 概述下载树莓派官方开发环境配置工具安装开发环境 概述 下载树莓派官方开发环境配置工具 pico-setup-windows 点击"Download the lastest release" 下载文件为&#xff1a;《pico-setup-windows-x64-standalo…

Gz会员卡检索不到充值记录的处理方法

会员卡预收款查询报表&#xff08;9508&#xff09;中输入会员卡号后检索不到该卡的充值记录&#xff0c;在MemberCard表中检索到该会员卡&#xff0c;将PriorityID值改为0即可检索。 下图为检索后的结果。

ElasticSearch7.8下载、安装教程

文章目录 前言一、Windows安装ElasticSearch7.8二、Elasticsearch-head安装三、Kibana安装 前言 本文章演示elasticSearch7.8、elasticSearch-head(插件模式)、kibana的Windows下载、安装教程。安装前&#xff0c;请检查电脑是否已经安装好node环境和JDK环境。 一、Windows安装…

【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制

K8s 的鉴权管理&#xff08;二&#xff09;&#xff1a;基于属性 / 节点 / Webhook 的访问控制 1.基于属性的访问控制&#xff08;ABAC 鉴权&#xff09;2.基于节点的访问控制&#xff08;node 鉴权&#xff09;2.1 读取操作2.2 写入操作 3.基于 Webhook 的访问控制3.1 基于 We…

tekton pipeline workspaces

tekton pipeline workspace是一种为执行中的管道及其任务提供可用的共享卷的方法。 在pipeline中定义worksapce作为共享卷传递给相关的task。在tekton中定义workspace的用途有以下几点: 存储输入和/或输出在task之间共享数据secret认证的挂载点ConfigMap中保存的配置的挂载点…

AI基础 : Adversarial Search II 对抗性搜索

Non-deterministic Transitions AND-OR Search Trees • In deterministic environments在确定性环境中&#xff0c;分支仅由智能体的选择引起。, branching only occurs due to agent’s choice (OR Nodes) • In non-deterministic environments在非确定性环境中&#xff0c…

Linux多线程编程实战:深入探索互斥锁的艺术

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f985;Linux线程互斥&#x1f40f;进程线程间的互斥相关背景概念&#x1f98c;互斥锁mutex*下面是一个&#xff1a;操作共享变…

九、外观模式

外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;有叫门面模式&#xff0c;它为一个复杂子系统提供一个简单的接口&#xff0c;隐藏系统的复杂性。通过使用外观模式&#xff0c;客户端可以更方便地和复杂的系统进行交互&#xff0c;而无需直接…

在国产芯片上实现YOLOv5/v8图像AI识别-【4.4】RK3588网络摄像头推理后推流到RTSP更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 前言…

机器学习TFIDF的情感分类文章

一.中文分词 当读者使用Python爬取了中文数据集之后&#xff0c;首先需要对数据集进行中文分词处理。由于英文中的词与词之间是采用空格关联的&#xff0c;按照空格可以直接划分词组&#xff0c;所以不需要进行分词处理&#xff0c;而中文汉字之间是紧密相连的&#xff0c;并且…

HTML零基础教程(超详细)

一、什么是HTML HTML&#xff0c;全称超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。它通过一系列标签来定义网页的结构、内容和格式。HTML文档是由HTML元素构成的文本文件&#xff0c;这些元素包括标题、段…

《Nginx核心技术》第16章:实现Nginx的高可用负载均衡

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

[数据结构] 开散列法 闭散列法 模拟实现哈希结构(一)

标题&#xff1a;[数据结构] 开散列法 && 闭散列法 模拟实现哈希结构 个人主页&#xff1a;水墨不写bug 目录 一、闭散列法 核心逻辑的解决 i、为什么要设置位置状态&#xff1f;&#xff08;伪删除法的使用&#xff09; ii、哈希函数的设计 接口的实现 1、插入&a…

Linux 常用命令 - tail 【显示文件最后几行内容】

简介 tail 这个命令源自英文单词 “尾巴”&#xff0c;它的主要功能是显示文件的最后几行内容。通过使用 tail&#xff0c;用户可以查看文件的最新添加内容&#xff0c;特别是对于监控日志文件来说非常有用。tail 命令默认显示文件的最后 10 行&#xff0c;但这可以通过参数调…

走进低代码报表开发(一):探秘报表数据源

在前文当中&#xff0c;我们对勤研低代码平台的流程设计功能进行了介绍。接下来&#xff0c;让我们一同深入了解在企业日常运营中另一个极为常见的报表功能。在当今数字化时代&#xff0c;高效的报表生成对于企业的决策至关重要。勤研低代码开发平台能够以卓越的性能和便捷的操…