hadoop完全分布式搭建

文章目录

  • 集群部署规划
  • 服务器准备
  • Mobaxterm 远程登录
  • 实验前准备
    • 安装软件工具
    • 关闭防火墙
  • 安装 JDK 和 Hadoop
    • 创建软件包目录
    • 解压软件包
    • 配置环境变量
  • 集群搭建
    • 先创建 HDFS 工作目录和 LOG 目录
    • 配置集群
      • 配置环境
      • 配置 HDFS 主节点信息、持久化和数据文件的主目录
      • 配置 HDFS 默认的数据存放策略
      • 配置 Mapreduce 任务调度策略
      • 配置 YARN 资源管理角色的信息
      • 配置 DataNode 节点信息
      • 配置主机名对应 IP
    • SSH无密登录配置
      • 无密钥配置
      • .ssh文件夹下(~/.ssh)的文件功能解释
  • 集群启停方式
  • 编写集群常用脚本
    • 集群启停脚本
    • 查看集群所有服务器进程脚本 jpsall
    • 集群分发脚本 xsync
  • 脚本使用
  • 搭建Hadoop集群过程中常见错误的解决方案

集群部署规划

服务hadoop102hadoop103hadoop104
NameNode
DataNode
Secondary NameNode
ResourceManager
NodeManager
JobHistoryServer
IPv4192.168.88.102192.168.88.103192.168.88.104
NodeObjectmasterworker1worker2

服务器准备

可以是自己创建虚拟机,也可以用阿里云的云服务等。

Mobaxterm 远程登录

Mobaxterm 可以使用 MultiExec 功能开启多执行模式,让三台机器同时执行,如果是自己创建的虚拟机可以在一个机器上配置完集群,再进行完全克隆,之后只需要修改IP和主机名就可以了,可以减少很多不必要的重复操作。

实验前准备

安装软件工具

yum install net-tools
yum install vim

关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

安装 JDK 和 Hadoop


JDK 下载地址:编程宝库、华为镜像

Hadoop 下载地址:清华镜像源、所有历史版本、官方网址

这里用的是Hadoop3.3.1,如果用Hadoop2.x的遇到问题可以看下 搭建部署Hadoop2.x和3.x的区别

创建软件包目录

创建 software 目录,把 JDK 的 rpm包和 Hadoop 的 tar 包拷贝进去

mkdir software
cd software

在左侧打开 software 文件,直接将软件包拖拽至文件夹下即可

解压软件包

使用 rpm 安装 jdk,默认位置为 /usr/java/default,方便后面环境变量的配置(有的软件没配置 jdk 就会到这个路径下找)

rpm -ivh jdk-8u221-linux-x64.rpm

查看 Java 版本:

java -version
# output
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

解压hadoop软件包到/opt/目录下

tar -zxvf hadoop-3.3.1.tar.gz -C /opt/

配置环境变量

添加 hadoop 环境变量(不建议直接在 /etc/profile 文件内直接添加)

vim /etc/profile.d/hadoop.sh

# 或者(不建议)
vim /etc/profile/

添加内容:

export HADOOP_HOME=/opt/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

/etc/profile文件内有这样一段代码,可见他是遍历整个文件夹下 shell 文件只需要加一个hadoop.sh文件,里面配置所需要的属性,不用了之后方便删除。

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

配置完 source 命令执行一下/etc/profile文件,让新的环境变量 PATH 生效

source /etc/profile

集群搭建

先创建 HDFS 工作目录和 LOG 目录

创建 HDFS 的 NN 和 DN 工作主目录,创建 Hadoop 的 log 日志文件目录(建议将文件放在/var目录下)

mkdir -p /var/big_data /var/log_hadoop

配置集群

首先,进入$HADOOP_HOME/etc/hadoop目录

cd $HADOOP_HOME/etc/hadoop

配置环境

1)为 Hadoop 提供 JAVA 解释器路径信息,主要目的是解决远程访问 hadoop 时候JAVA_HOME无法继承的问题,同时将 Hadoop 的日志存储路径修改/var/log_hadoop路径下,其默认在$HADOOP_HOME/etc/hadoop/logs下,一般情况下建议重新指定路径。

vim hadoop-env.sh

添加内容如下:(找到对应位置,没有就加在最后;命令模式下,输入 😒 回车,光标就会定位到最后一行,按 O 在下一行输入内容)

export JAVA_HOME=/usr/java/default
export HADOOP_LOG_DIR=/var/log_hadoop

2)为 Yarn 任务、资源管理器提供 Java 运行环境

vim yarn-env.sh

添加内容如下:

export JAVA_HOME=/usr/java/default

配置 HDFS 主节点信息、持久化和数据文件的主目录

vim core-site.xml

添加如下内容:

	<property>
		<!-- 指定NameNode的地址 -->
		<name>fs.defaultFS</name>
		<value>hdfs://hadoop102:9000</value>
	</property>
	<property>
		<!-- 指定hadoop数据的存储目录 -->
		<name>hadoop.tmp.dir</name>
		<value>/var/big_data</value>
	</property>

配置 HDFS 默认的数据存放策略

vim hdfs-site.xml

添加如下内容:

    <property>
        <!-- DataNode存储block的副本量,不大于DataNode的个数-->
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <!-- 2nn web端访问地址-->
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
	</property>
    <property>
        <!-- 禁用 HDFS ACL(简单权限)-->
        <name>dfs.permissions</name>
        <value>false</value>
    </property>

配置 Mapreduce 任务调度策略

vim mapred-site.xml

添加如下内容:

    <property>
        <!-- 指定MapReduce程序运行在Yarn上 -->
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <!-- 历史服务器端地址 -->
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop103:10020</value>
    </property>
    <property>
        <!-- 历史服务器web端地址 -->
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop103:19888</value>
    </property>

配置 YARN 资源管理角色的信息

vim yarn-site.xml

添加如下内容:

	<property>
		<!-- 指定MR走shuffle -->
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<property>
		<!-- 指定ResourceManager的地址-->
		<name>yarn.resourcemanager.hostname</name>
		<value>hadoop102</value>
	</property>

配置 DataNode 节点信息

vim worker

添加如下内容(不要留任何空格):

hadoop102
hadoop103
hadoop104

配置主机名对应 IP

vim /etc/hosts

添加如下内容:

192.168.88.102  hadoop102
192.168.88.103  hadoop103
192.168.88.104  hadoop104

注意屏蔽或删除上面的127.0.0.1的信息

SSH无密登录配置

无密钥配置

1)免密登录原理,如下图所示

2)生成公钥和私钥,注意下面的指令要求3台机器都要执行,Mobaxterm可以使用MultiExec功能开启多执行模式,让三台机器同时执行。

ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

3)将公钥拷贝到要免密登录的目标机器上,各自文件下

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

.ssh文件夹下(~/.ssh)的文件功能解释

文件名含义
known_hosts记录ssh访问过计算机的公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
authorized_keys存放授权过得无密登录服务器公钥

集群启停方式

1)各个模块分开启停(配置ssh是前提)

(1)如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode

hdfs namenode -format

(2)整体启停 HDFS/YARN

start-dfs.sh
stop-dfs.sh
start-yarn.sh
stop-yarn.sh

或者

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/stop-dfs.sh
$HADOOP_HOME/etc/hadoop/sbin/start-yarn.sh
$HADOOP_HOME/etc/hadoop/sbin/stop-yarn.sh

如果使用的 hadoop 版本为 3.x 应该会出现在下述类型报错,显然是参数没有被定义

Starting namenodes on [hadoop102]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop104]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operati

下面我们需要在定义这些参数

方法一:/etc/profile.d/hadoop.sh 文件内添加

vim /etc/profile.d/hadoop.sh

内容如下:

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

方法二: 修改 start-dfs.sh、stop-dfs.sh、start-yarn.sh、stop-yarn.sh 四个文件

修改 HDFS 文件

vim $HADOOP_HOME/sbin/start-dfs.sh
vim $HADOOP_HOME/sbin/stop-dfs.sh

在顶部添加以下参数

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

修改 YARN 文件

vim $HADOOP_HOME/sbin/start-yarn.sh
vim $HADOOP_HOME/sbin/stop-yarn.sh

在顶部添加以下参数

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

2)各个服务组件逐一启动/停止

(1)启停 HDFS 组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

(2)启停 YARN

yarn --daemon start/stop resourcemanager/nodemanager

(3)启停 JobHistory

mr-jobhistory-daemon.sh start historyserver
mr-jobhistory-daemon.sh stop historyserver

3.x 版本的应该会出现下述警告

WARNING: Use of this script to start the MR JobHistory daemon is deprecated.
WARNING: Attempting to execute replacement "mapred --daemon start" instead.

不想看到的话,可以改为使用下述命令

mapred --daemon start historyserver
mapred --daemon stop historyserver

编写集群常用脚本

集群启停脚本

vim myhadoop.sh

添加内容如下:

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo "=========== 启动 hadoop 集群 ==========="

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

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

修改脚本执行权限

chmod 777 myhadoop.sh

查看集群所有服务器进程脚本 jpsall

vim jpsall

添加内容如下:

#!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
        echo =============== $host ===============
        ssh $host jps 
done

修改脚本执行权限

chmod 777 jpsall

集群分发脚本 xsync

/usr/local/bin 目录下创建 xsync 文件

cd /usr/local/bin
vim xsync

添加内容如下:

#!/bin/bash

#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
 echo no args;
 exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for i in hadoop102 hadoop103 hadoop104
do
 echo ------------------- $i --------------
 rsync -rvl $pdir/$fname $user@$i:$pdir
done

修改脚本执行权限

chmod 777 xsync

脚本使用

1)启停 Hadoop 集群全部模块

./myhadoop.sh start
./myhadoop.sh stop

2)查看 Hadoop 集群所有进程

./jpsall

运行代码可以看到 hdfs,yarm,historyserver 三个模块全部启动

查看三台机器所有进程:

hadoop102:NameNode,DataNode,ResourceManager,NodeManager,Jps

hadoop103:DataNode,NodeManager,JobHistoryServer,Jps

hadoop104:DataNode,SecondaryNameNode,NodeManager,Jps

3)分发文件

退回根目录,准备一个 test.txt 文件,

xsync test.txt

在另外两个服务器的根目录下存在 test.txt 即分发成功。

搭建Hadoop集群过程中常见错误的解决方案

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

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

相关文章

程序员养生之道:延寿不忘初心——延寿必备

文章目录 每日一句正能量前言如何养生饮食篇运动篇休息篇后记 每日一句正能量 现代社会已不是大鱼吃小鱼的年代&#xff0c;而是快鱼吃慢鱼的年代。 前言 在IT行业中&#xff0c;程序员是一个重要的职业群体。由于长时间的繁重编程工作&#xff0c;程序员们常常忽略了身体健康…

Unity中Shader编译目标渲染器

文章目录 前言一、Unity在打包时&#xff0c;会把Shader编译成不同平台对应的代码我们在状态栏&#xff0c;可以看见我们目前所处于的目标平台 二、在Unity中&#xff0c;怎么指定目标平台1、#pragma only_renderers2、#pragma exclude_renderers 三、我们测试一下看看效果1、 …

postman利用pre-request script自动设置token

场景&#xff1a; 我们请求接口&#xff1a;/api/rest/user/list获取用户列表&#xff0c;但是该接口需要在header中带上Authorization表示的鉴权Token才行。 而登录接口/api/rest/login&#xff0c;则可以返回改Token 常规方案 我们先调登录接口/api/rest/login获取到Toke…

极简云网络验证系统开源源码

极简云验证&#xff0c;多样化应用管理方式&#xff0c;多种项目任你开发&#xff0c;分布式应用开关&#xff0c;让您的应用开发更简单&#xff0c;完美实现多用户多应用管理。 支持多应用卡密生成&#xff1a; 卡密生成 单码卡密 次数卡密 会员卡密 积分卡密 卡密管理 卡密长…

了解http协议

http的相关概念 互联网&#xff1a;是网络的网络&#xff0c;是所有类型网络的母集 因特网&#xff1a;世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上&#xff0c;大家把连接在因特网上的计算机都成为主机。 万维网&#xff1a;数据库 URL&#xff1a;万维…

亚马逊云科技向量数据库与生成式AI的完美融合:落地实践详解(四)

以往 OpenSearch 摄入时的一些最佳实践中并不包含 knn 的情况&#xff0c;所以在 knn 索引存在的情况&#xff0c;不能完全参照之前的结论&#xff0c;通过以上三种不同的实验方式&#xff0c;在多次实验的过程中&#xff0c;本文得到了以下的一些实践经验和结论&#xff0c;供…

自研分布式IM-HubuIM RFC草案

HubuIM RFC草案 消息协议设计 基本协议 评估标准 【性能】协议传输效率&#xff0c;尽可能降低端到端的延迟&#xff0c;延迟高于200ms用户侧就会有所感知 【兼容】既要向前兼容也要向后兼容 【存储】减少消息包的大小&#xff0c;降低空间占用率&#xff0c;一个字节在亿…

一键添加特效与色彩变化,视频剪辑高手助力创作炫酷短片!

亲爱的视频创作者们&#xff0c;想要让你的视频更加炫酷、吸引眼球吗&#xff1f;现在&#xff0c;我们有一款神奇的工具&#xff0c;可以帮助你一键添加特效与色彩变化&#xff0c;让你的视频瞬间焕发新活力&#xff01; 首先第一步&#xff0c;我们要进入视频剪辑高手并在上…

关于Unity中字典在Inspector的显示

字典在Inspector的显示 方法一&#xff1a;实现ISerializationCallbackReceiver接口 《unity3D游戏开发第二版》记录 在编辑面板中可以利用序列化监听接口特性对字典进行序列化。 主要继承ISerializationCallbackReceiver接口 实现OnAfterDeserialize() OnBeforeSerialize() …

「实用场景教程」如何用日程控件DHTMLX Scheduler制作酒店预订日历?(三)

dhtmlxScheduler是一个类似于Google日历的JavaScript日程安排控件&#xff0c;日历事件通过Ajax动态加载&#xff0c;支持通过拖放功能调整事件日期和时间&#xff0c;事件可以按天&#xff0c;周&#xff0c;月三个种视图显示。 DHTMLX Scheduler正式版下载 在本教程中&…

Mac 安装 Django 并连接 MySQL

一、下载安装运行Django看官方教程就好了&#xff0c;网址&#xff1a;Django 安装_w3cschool 二、连接MySQL&#xff08;我用的是pymysql和mysqlclient&#xff09;&#xff1a; 1、创建好项目后找到这个文件 2、修改当中的连接信息&#xff0c;将这些信息改成你自己的就好了…

(三)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法&#xff08;TTA&#xf…

ruoyi+Hadoop+hbase实现大数据存储查询

前言 有个现实的需求&#xff0c;数据量可能在100亿条左右。现有的数据库是SQL Server&#xff0c;随着采集的数据不断的填充&#xff0c;查询的效率越来越慢&#xff08;现有的SQL Server查询已经需要数十秒钟的时间&#xff09;&#xff0c;看看有没有优化的方案。 考虑过S…

vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果

一、实现效果 使用echarts实现省市地图绘制根据数据在地图显示柱状图根据数据显示数据&#xff0c;涟漪效果 二、实现方法 1、安装echarts插件 npm install echarts --save2、获取省市json数据 https://datav.aliyun.com/portal/school/atlas/area_selector 通过 阿里旗下…

(2)(2.2) Lightware SF45/B(350度)

文章目录 前言 1 安装SF45/B 2 连接自动驾驶仪 3 通过地面站进行配置 4 参数说明 前言 Lightware SF45/B 激光雷达(Lightware SF45/B lidar)是一种小型扫描激光雷达&#xff08;重约 50g&#xff09;&#xff0c;扫描度可达 350 度&#xff0c;扫描范围 50m。 1 安装SF45…

老技术告诉你如何选择代理IP以满足数据采集需求

根据IDC发布的大数据行业最新报道显示&#xff0c;目前已经有越来越多的企业将重点放在大数据技术之上&#xff0c;以大数据来进行创新工业互联网的建设&#xff0c;携手央国企共同推进新型工业化。由此可见大数据的重要性。不过具体到每一位技术人员来说&#xff0c;在进行数据…

[读论文][跑代码]BK-SDM: A Lightweight, Fast, and Cheap Version of Stable Diffusion

github: GitHub - Nota-NetsPresso/BK-SDM: A Compressed Stable Diffusion for Efficient Text-to-Image Generation [ICCV23 Demo] [ICML23 Workshop] ICML 2023 Workshop on ES-FoMo 简化方式 蒸馏方式&#xff08;训练Task蒸馏outKD-FeatKD&#xff09; 训练数据集 评测指标…

【赠书第10期】从概念到现实:ChatGPT和Midjourney的设计之旅

文章目录 前言 1 ChatGPT的崛起 2 Midjourney的探索 3 技术创新的交汇 4 对未来的影响 5 结论 6 推荐图书 7 粉丝福利 前言 在过去的几年里&#xff0c;自然语言处理和聊天模型的领域取得了飞速的发展。ChatGPT 作为一个由OpenAI 开发的大型语言模型&#xff0c;以其强…

设计中的经验规则 - 3W规则

设计中的经验规则 - 3W规则 摘要应用 3W 规则还是有很多地方需要注意12 33W规则范围 摘要 PCB板上两条走线截面图&#xff0c;电流通过时产生的辐射。距离比较近 3W 经验规则总体来说&#xff0c;是一条可以放心使用的规则。毕竟传播的电磁场强度与距离的平方成反比&#xff…

VS2017 C++ Qt工程打包软件

在Debug模式下或者Release模式下编译成功&#xff0c;会在工程的Debug文件夹和Release文件夹生成exe执行文件&#xff0c;以Debug为例&#xff0c;将Debug模式下的exe复制到新的文件夹路径下&#xff0c;然后打开Qt中的MSVC 2017 64-bit 打开后然后在命令窗口cd到exe的路径下&…