hadoop安装与配置-shell脚本一键安装配置(集群版)

news2025/1/16 9:01:25

文章目录

  • 前言
  • 一、安装准备
    • 1. 搭建集群
  • 二、使用shell脚本一键安装
    • 1. 复制脚本
    • 2. 增加执行权限
    • 3. 分发脚本
    • 4. 执行脚本
    • 5. 加载用户环境变量
  • 三、启动与停止
    • 1. 启动/停止hadoop集群
      • (1) 复制hadoop集群启动脚本
      • (2) 增加执行权限
      • (3) 启动hadoop集群
      • (4) 停止hadoop集群
      • (5) 重启hadoop集群
    • 6. 浏览器访问
  • 总结


前言

本文介绍了在Hadoop集群中安装和配置Hadoop的过程。首先,我们搭建了一个集群,并确保集群节点之间可以免密登录。然后,我们使用Shell脚本一键安装Hadoop。脚本会下载指定版本的Hadoop,并将其安装到指定目录。接着,脚本会配置Hadoop的各项参数,包括核心配置、HDFS配置、MapReduce配置和YARN配置。最后,我们启动了Hadoop集群,并通过浏览器访问了HDFS和YARN的Web界面。


hadoopd单机版安装教程:hadoop安装与配置:使用Shell脚本一键下载、安装、配置Hadoop(单机版)

一、安装准备

1. 搭建集群

点击链接查看集群搭建教程:配置集群免密登录

二、使用shell脚本一键安装

以下所有操作均在hadoop101节点

1. 复制脚本

首先,在hadoop101节点,将以下脚本内容复制并保存为/tmp/install_hadoop_cluster.sh文件。

#!/bin/bash

# 设置3个节点的主机名或ip,修改为自己的
host_node1=192.168.145.103
host_node2=192.168.145.104
host_node3=192.168.145.105

# 安装版本
zk_version="3.1.3"
# 安装目录
zk_installDir="/opt/module/hadoop"

install_hadoop() {
  local version=$1
  local installDir=$2
  local node1=$3
  local node2=$4
  local node3=$5

  # 下载地址
  local downloadUrl="https://archive.apache.org/dist/hadoop/common/hadoop-$version/hadoop-$version.tar.gz"
  if [ -z "$(command -v wget)" ]; then
    sudo yum install -y wget
    echo "wget安装完成"
  fi
  if [ -z "$JAVA_HOME" ]; then
    echo "JAVA_HOME未设置,请安装jdk1.8,设置Java环境变量再来执行此脚本"
    exit 1
  fi
  if [ ! -d "${installDir}" ]; then
    sudo mkdir -p "${installDir}"
    if [ $? -eq 0 ]; then
      echo "安装目录${installDir}已创建"
    else
      echo "请确保您有足够的权限来创建目录,请增加权限后再次执行"
      exit 1
    fi
  fi
  if [ ! -f /tmp/hadoop-"$version".tar.gz ] ; then
    wget "$downloadUrl" -P /tmp
    if [ $? -eq 0 ]; then
      echo "hadoop-$version.tar.gz下载成功"
    else
      echo "hadoop-$version.tar.gz下载失败,请重试或手动下载到/tmp目录下再次执行"
      echo "下载地址:$downloadUrl"
      exit 1
    fi
  else
    echo "/tmp/hadoop-$version.tar.gz文件已存在"
  fi

  if [ -d "${installDir}"/hadoop-"$version" ]; then
    echo "${installDir}/hadoop-$version 已存在,正在删除..."
    sudo rm -rf "${installDir}"/hadoop-"$version"
  fi
  tar -zxvf /tmp/hadoop-"$version".tar.gz -C "${installDir}"
  if [ $? -eq 0 ]; then
    echo "/tmp/hadoop-$version.tar.gz解压成功"
  else
    echo "/tmp/hadoop-$version.tar.gz解压失败,请查看异常信息后重试"
    exit 1
  fi

  if [ -z "$HADOOP_HOME" ]; then
    # 设置hadoop用户环境变量
    echo >> ~/.bashrc
    echo '#HADOOP_HOME' >> ~/.bashrc
    echo "export HADOOP_HOME=${installDir}/hadoop-${version}" >> ~/.bashrc
    echo 'export PATH=$PATH:$HADOOP_HOME/bin' >> ~/.bashrc
    echo 'export PATH=$PATH:$AHDOOP_HOME/sbin' >> ~/.bashrc
  else
    echo "HADOOP_HOME已有设置:$HADOOP_HOME"
  fi

  # 配置hadoop
  echo "配置hadoop..."
  coresite="\
  <configuration>\n\
      <!--指定NameNode的地址-->\n\
      <property>\n\
          <name>fs.defaultFS</name>\n\
          <value>hdfs://$node1:8020</value>\n\
      </property>\n\
      <!--指定hadoop数据的存储目录-->\n\
      <property>\n\
          <name>hadoop.tmp.dir</name>\n\
          <value>$installDir/hadoop-$version/data</value>\n\
      </property>\n\
  	<!-- 配置访问hadoop的权限,能够让hive访问到 -->\n\
  	<property>\n\
  		<name>hadoop.proxyuser.root.hosts</name>\n\
  		<value>*</value>\n\
  	</property>\n\
  	<property>\n\
  		<name>hadoop.proxyuser.root.users</name>\n\
  		<value>*</value>\n\
  	</property>\n\
  </configuration>\
  "
  hdfssite="\
  <configuration>\n\
      <!-- namenode web端访问地址-->\n\
      <property>\n\
          <name>dfs.namenode.http-address</name>\n\
          <value>$node1:9870</value>\n\
      </property>\n\
      <!-- secondarynamenode web端访问地址-->\n\
      <property>\n\
          <name>dfs.namenode.secondary.http-address</name>\n\
          <value>$node3:9868</value>\n\
      </property>\n\
  	<property>\n\
  	  <name>dfs.permissions.enabled</name>\n\
  	  <value>false</value>\n\
  	</property>\n\
  </configuration>\
  "
  mapredsite="\
  <configuration>\n\
      <!--指定MapReduce程序运行在Yarn上-->\n\
      <property>\n\
          <name>mapreduce.framework.name</name>\n\
          <value>yarn</value>\n\
      </property>\n\
  	 <!--历史服务器端地址-->\n\
      <property>\n\
          <name>mapreduce.jobhistory.address</name>\n\
          <value>$node2:10020</value>\n\
      </property>\n\
      <!--历史服务器web端地址-->\n\
      <property>\n\
          <name>mapreduce.jobhistory.webapp.address</name>\n\
          <value>$node2:19888</value>\n\
      </property>\n\
  </configuration>\
  "
  yarnsite="\
  <configuration>\n\
      <!--指定MR走shuffle -->\n\
      <property>\n\
          <name>yarn.nodemanager.aux-services</name>\n\
          <value>mapreduce_shuffle</value>\n\
      </property>\n\
      <!--指定ResourceManager的地址-->\n\
      <property>\n\
          <name>yarn.resourcemanager.hostname</name>\n\
          <value>$node2</value>\n\
      </property>\n\
      <!--环境变量的继承-->\n\
      <property>\n\
          <name>yarn.nodemanager.env-whitelist</name>\n\
          <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>\n\
      </property>\n\
  	<!--开启日志聚集功能-->\n\
  	<property>\n\
  		<name>yarn.log-aggregation-enable</name>\n\
  		<value>true</value>\n\
  	</property>\n\
  	<!--设置日志聚集服务器地址-->\n\
  	<property>\n\
  		<name>yarn.log.server.url</name>\n\
  		<value>http://$node2:19888/jobhistory/logs</value>\n\
  	</property>\n\
  	<!--设置日志保留时间为7天-->\n\
  	<property>\n\
  		<name>yarn.log-aggregation.retain-seconds</name>\n\
  		<value>604800</value>\n\
  	</property>\n\
  </configuration>\
  "
  sed -i '/<configuration>/,/<\/configuration>/c '"$coresite"'' "$installDir"/hadoop-"$version"/etc/hadoop/core-site.xml
  sed -i '/<configuration>/,/<\/configuration>/c '"$hdfssite"'' "$installDir"/hadoop-"$version"/etc/hadoop/hdfs-site.xml
  sed -i '/<configuration>/,/<\/configuration>/c '"$mapredsite"'' "$installDir"/hadoop-"$version"/etc/hadoop/mapred-site.xml
  sed -i '/<configuration>/,/<\/configuration>/c '"$yarnsite"'' "$installDir"/hadoop-"$version"/etc/hadoop/yarn-site.xml
  echo "$node1" > "$installDir"/hadoop-"$version"/etc/hadoop/workers
  echo "$node2" >> "$installDir"/hadoop-"$version"/etc/hadoop/workers
  echo "$node3" >> "$installDir"/hadoop-"$version"/etc/hadoop/workers
  echo "hadoop的配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml都已配置完成"

  local ip_addr=$(ip addr | grep 'inet ' | awk '{print $2}'| tail -n 1 | grep -oP '\d+\.\d+\.\d+\.\d+')
  if [[ "$node1" == "$(hostname)" || "$node1" == "$ip_addr" ]]; then
    "$installDir"/hadoop-"$version"/bin/hdfs namenode -format
    if [ $? -eq 0 ]; then
      echo "格式化namenode成功"
    else
      echo "格式化namenode失败"
      exit 1
    fi
  fi
#  rm -rf /tmp/hadoop-"$version".tar.gz
  echo "hadoop下载、安装、配置完成"
}

install_hadoop "$zk_version" "$zk_installDir" "$host_node1" "$host_node2" "$host_node3"

2. 增加执行权限

在终端中执行以下命令,为脚本添加执行权限。

chmod a+x /tmp/install_hadoop_cluster.sh

3. 分发脚本

点击链接查看scp命令介绍及其使用:linux常用命令-find命令与scp命令详解(超详细)

使用scp命令把/tmp/install_kafka_cluster.sh脚本分发到hadoop102hadoop103节点的/tmp目录下。

scp /tmp/install_hadoop_cluster.sh hadoop102:/tmp
scp /tmp/install_hadoop_cluster.sh hadoop103:/tmp

如下图:
在这里插入图片描述

4. 执行脚本

执行以下命令,运行脚本开始下载、安装和配置Kafka。
首先在hadoop101执行,再使用远程连接命令让hadoop102hadoop103节点执行。

/tmp/install_hadoop_cluster.sh

请等待hadoop101安装配置完成,如有异常会有提示。

ssh hadoop102 /tmp/install_hadoop_cluster.sh

请等待hadoop102安装配置完成,如有异常会有提示。

ssh hadoop103 /tmp/install_hadoop_cluster.sh

请等待hadoop103安装配置完成,如有异常会有提示。

成功如下图所示:
在这里插入图片描述

5. 加载用户环境变量

执行以下命令,加载用户环境变量,首先在hadoop101执行,再使用远程连接命令让hadoop102hadoop103节点执行。

source ~/.bashrc
ssh hadoop102
source ~/.bashrc
exit
ssh hadoop103
source ~/.bashrc
exit

如下图所示:
在这里插入图片描述

三、启动与停止

集群之间切换启动过于麻烦,在这里直接写一个脚本来启动集群。

1. 启动/停止hadoop集群

(1) 复制hadoop集群启动脚本

将以下脚本内容复制并保存为~/bin/hadoop.sh文件。把HADOOP_HOME改为自己的安装目录,把node1node2node3改为自己的ip地址或主机名。

#!/bin/bash

# 设置hadoop安装目录
HADOOP_HOME="/opt/module/hadoop/hadoop-3.1.3"
# 集群节点
node1=192.168.145.103
node2=192.168.145.104
node3=192.168.145.105

# 启动hadoop
start_hadoop() {
  ssh $node1 "$HADOOP_HOME/sbin/start-dfs.sh"
  ssh $node2 "$HADOOP_HOME/sbin/start-yarn.sh"
}

# 停止hadoop
stop_hadoop() {
  ssh $node1 "$HADOOP_HOME/sbin/stop-dfs.sh"
  ssh $node2 "$HADOOP_HOME/sbin/stop-yarn.sh"
}

# 重启hadoop
restart_hadoop() {
  ssh $node1 "$HADOOP_HOME/sbin/stop-dfs.sh"
  ssh $node2 "$HADOOP_HOME/sbin/stop-yarn.sh"
  sleep 3
  ssh $node1 "$HADOOP_HOME/sbin/start-dfs.sh"
  ssh $node2 "$HADOOP_HOME/sbin/start-yarn.sh"
}

# 根据命令行参数执行相应操作
case "$1" in
start)
  start_hadoop
  ;;
stop)
  stop_hadoop
  ;;
restart)
  restart_hadoop
  ;;
*)
  echo "Usage: $0 {start|stop|restart}"
  exit 1
  ;;
esac

exit 0

(2) 增加执行权限

chmod a+x ~/bin/hadoop.sh

(3) 启动hadoop集群

hadoop.sh start

启动成功如下图所示:
在这里插入图片描述
如果启动时报如下错误

ERROR: Attempting to operate on hdfs namenode as root

解决方法:启动hadoop集群时报错

(4) 停止hadoop集群

hadoop.sh stop

(5) 重启hadoop集群

hadoop.sh restart

6. 浏览器访问

浏览器访问hdfs,地址:http://192.168.145.103:9870/,192.168.145.103改为自己node1的ip地址,如下图所示:
在这里插入图片描述
浏览器访问yarn,地址:http://192.168.145.104:8088/,192.168.145.104改为自己node2的ip地址,如下图所示:
在这里插入图片描述


总结

通过本文的步骤,您成功地安装和配置了Hadoop集群。您现在可以使用Hadoop来处理大规模的数据,并享受其强大的分布式计算能力。

希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!

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

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

相关文章

算法:合并两个有序数组(双指针)

/*** param {number[]} nums1* param {number} m* param {number[]} nums2* param {number} n* return {void} Do not return anything, modify nums1 in-place instead.*/ var merge function(nums1,m,nums2,n) {let p1 m-1 let p2 n-1let p mn-1// 逆遍历while(p1 > 0…

前端开发常用的Vscode插件整理(持续更新)

本文记录用vscode进行前端开发时&#xff0c;常用到的有用的vscode插件&#xff0c;将不定时更新&#xff5e; 1、Chinese (Simplified) 将编辑器变成简体中文 2、vscode-icon 让 vscode 资源树目录加上图标&#xff0c;官方出品的图标库 3、Import Cost 引入包大小计算,对于…

深度学习——第3章 Python程序设计语言(3.3 Python数据类型)

3.3 Python数据类型 目录 1. Python数值数据类型 2. Python库的导入和使用 3. Python序列数据类型 4. Python组合数据类型 计算机能处理各种类型的数据&#xff0c;包括数值、文本等&#xff0c;不同的数据属于不同的数据类型&#xff0c;有不同的存储方式&#xff0c;支持…

使用Tomcat部署静态项目并处理BUG

--听讲的习惯 Tomcat介绍 tomcat what_Arenaschi的博客-CSDN博客 Tomcat安装及配置教程&#xff08;超详细&#xff09; 那些年我们用过的tomcat_Arenaschi的博客-CSDN博客 简单使用tomcat查看版本信息等_windows查看tomcat版本命令-CSDN博客 Tomcat部署html静态网站的五种方…

Android hook式插件化详解

引言 Android插件化是一种将应用程序的功能模块化为独立的插件,并动态加载到主应用程序中的技术。通过插件化,开发者可以将应用程序的功能分解成独立的模块,每个模块可以作为一个插件单独开发、测试和维护,然后通过动态加载的方式集成到主应用程序中,实现功能的动态扩展和…

骨传导耳机是怎么传声的?骨传导和入耳式哪个危害大一点?

先说结论&#xff0c;骨传导耳机通过人体骨骼来传递声音&#xff0c;骨传导和入耳式耳机&#xff0c;入耳式耳机的危害要大一些&#xff01; 一、骨传导耳机传声原理 骨传导耳机利用骨传导技术&#xff0c;通过将声音转化为机械振动信号&#xff0c;然后通过头骨、颌骨等头骨…

第二十一章——网络通信总结

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmission…

基于Java SSM框架实现二手车交易网站系统项目【项目源码+论文说明】

基于java的SSM框架实现二手车交易网站系统演示 摘要 二手车交易网站采用B/S模式&#xff0c;促进了二手车交易网站的安全、质量、快捷的发展。传统的管理模式还处于手工处理阶段&#xff0c;管理效率极低&#xff0c;随着用户的不断增多&#xff0c;传统基于手工管理模式已经无…

ECharts的颜色渐变

目录 一、直接配置参数实现颜色渐变 二、使用ECharts自带的方法实现颜色渐变 一、两种渐变的实现方法 1、直接配置参数实现颜色渐变 横向的渐变&#xff1a; //主要代码 option {xAxis: {type: category,boundaryGap: false,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yA…

国产化软件突围!怿星科技eStation产品荣获2023铃轩奖“前瞻优秀奖”

11月11日&#xff0c;2023中国汽车供应链峰会暨第八届铃轩奖颁奖典礼在江苏省昆山市举行。怿星科技凭借eStation产品&#xff0c;荣获2023铃轩奖“前瞻智能座舱类优秀奖”&#xff0c;怿星CEO潘凯受邀出席铃轩奖晚会并代表领奖。 2023铃轩奖“前瞻智能座舱类优秀奖” 铃轩奖&a…

倚天屠龙:Github Copilot vs Cursor

武林至尊&#xff0c;宝刀屠龙。号令天下&#xff0c;莫敢不从。倚天不出&#xff0c;谁与争锋&#xff01; 作为开发人员吃饭的家伙&#xff0c;一款好的开发工具对开发人员的帮助是无法估量的。还记得在学校读书的时候&#xff0c;当时流行CS架构的RAD&#xff0c;Delphi和V…

CDN是什么?对网站的作用大吗?

CDN即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c;降低网络拥塞&#xff0c;提高用户访问响应速度和命中率…

带你解锁Python操作文件的姿势

什么是文件 文件是计算机中用于存储数据的一种数据结构。它可以是文本文件、图像文件、音频文件、视频文件等等。文件由一系列字节组成&#xff0c;每个字节都有一个唯一的地址。文件可以在计算机的硬盘、固态硬盘、光盘等存储介质上存储&#xff0c;并且可以在需要时被读取和…

2024 年甘肃省职业院校技能大赛信息安全管理与评估赛项规程

2024 年甘肃省职业院校技能大赛高职学生组电子与信息大类信息安全管理与评估赛项规程 一、赛项名称 赛项名称&#xff1a;信息安全管理与评估 赛项类别&#xff1a;团体赛 赛项归属&#xff1a;电子与信息大类 二、竞赛目的 极安云科专注技能竞赛&#xff0c;包含网络建设…

CentOS系统中设置反向代理服务器的步骤

在CentOS系统中设置反向代理服务器可以帮助你隐藏原始服务器的细节&#xff0c;并提高服务器的安全性。以下是在CentOS系统中设置反向代理服务器的步骤概述&#xff1a; 安装反向代理软件&#xff1a; 常见的反向代理软件包括Nginx和Apache。你可以选择其中之一来作为你的反向…

Java的Font类createFont方法创建 +~JF 临时文件

一、问题背景 有一个创建图片的项目&#xff0c;每个图片都包含很多的文字&#xff0c;项目中需要生成海量的这类图片。在windows电脑上运行程序发现C盘的存储空间不断下降&#xff0c;直至为0。 二、问题定位 1、定位磁盘的问题文件 当C盘存储空间为0时&#xff0c;使用《全…

针对Google 的 fuzzer-test-suite 的 pcre2-10.00 编译失败的解决方法

针对Google 的 fuzzer-test-suite 的 pcre2-10.00 编译失败的解决方法 查看文件 fuzzer-test-suite/pcre2-10.00/build.sh&#xff0c;文件内容如下&#xff1a; get_svn_revision svn://vcs.exim.org/pcre2/code/trunk 183 SRCbuild_lib build_fuzzer我们获悉&#xff0c;由…

OpenCvSharp从入门到实践-(07)绘制图形

目录 1、线段的绘制 1.1实例1-绘制线段拼成一个"王"字 2、矩形的绘制 2.1实例2-绘制一个矩形边框 2.2实例3-绘制一个实心矩形 3、圆的绘制 3.1实例4-绘制"交通灯" 4、多边形绘制 4.1实例5-绘制等腰梯形 5、文字的绘制 5.1实例6-绘制文字OpenCvS…

直流负载箱的技术发展趋势和创新有哪些?

直流负载箱广泛应用于电子、通信、航空航天等领域&#xff0c;随着科技的不断发展&#xff0c;直流负载箱也在不断创新和改进&#xff0c;直流负载箱在负载电流和电压的测量方面要求高精度和高稳定性。未来的发展趋势是提高负载箱的测量精度和稳定性&#xff0c;以满足更高要求…

2023年12月7日:QT实现登陆界面

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口设置this->resize(600,500);//重新设置窗口大小this->setWindowTitle("QQ-盗版");//设置窗口名为QQ-盗版this->setWindowIcon(QIcon("D:\\Qt\\funny\\pi…