当前位置:   article > 正文

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

hadoop一键配置


前言

本文介绍了在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"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194

2. 增加执行权限

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

chmod a+x /tmp/install_hadoop_cluster.sh
  • 1

3. 分发脚本

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

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

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

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

4. 执行脚本

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

/tmp/install_hadoop_cluster.sh
  • 1

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

ssh hadoop102 /tmp/install_hadoop_cluster.sh
  • 1

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

ssh hadoop103 /tmp/install_hadoop_cluster.sh
  • 1

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

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

5. 加载用户环境变量

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

source ~/.bashrc
  • 1
ssh hadoop102
source ~/.bashrc
exit
  • 1
  • 2
  • 3
ssh hadoop103
source ~/.bashrc
exit
  • 1
  • 2
  • 3

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

三、启动与停止

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

(2) 增加执行权限

chmod a+x ~/bin/hadoop.sh
  • 1

(3) 启动hadoop集群

hadoop.sh start
  • 1

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

ERROR: Attempting to operate on hdfs namenode as root
  • 1

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

(4) 停止hadoop集群

hadoop.sh stop
  • 1

(5) 重启hadoop集群

hadoop.sh restart
  • 1

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来处理大规模的数据,并享受其强大的分布式计算能力。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/403606
推荐阅读
相关标签
  

闽ICP备14008679号