文章目录
- 前言
- 一、安装准备
- 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
脚本分发到hadoop102
和hadoop103
节点的/tmp目录下。
scp /tmp/install_hadoop_cluster.sh hadoop102:/tmp
scp /tmp/install_hadoop_cluster.sh hadoop103:/tmp
如下图:
4. 执行脚本
执行以下命令,运行脚本开始下载、安装和配置Kafka。
首先在hadoop101
执行,再使用远程连接命令让hadoop102
和hadoop103
节点执行。
/tmp/install_hadoop_cluster.sh
请等待hadoop101
安装配置完成,如有异常会有提示。
ssh hadoop102 /tmp/install_hadoop_cluster.sh
请等待hadoop102
安装配置完成,如有异常会有提示。
ssh hadoop103 /tmp/install_hadoop_cluster.sh
请等待hadoop103
安装配置完成,如有异常会有提示。
成功如下图所示:
5. 加载用户环境变量
执行以下命令,加载用户环境变量,首先在hadoop101
执行,再使用远程连接命令让hadoop102
和hadoop103
节点执行。
source ~/.bashrc
ssh hadoop102
source ~/.bashrc
exit
ssh hadoop103
source ~/.bashrc
exit
如下图所示:
三、启动与停止
集群之间切换启动过于麻烦,在这里直接写一个脚本来启动集群。
1. 启动/停止hadoop集群
(1) 复制hadoop集群启动脚本
将以下脚本内容复制并保存为~/bin/hadoop.sh
文件。把HADOOP_HOME
改为自己的安装目录,把node1
、node2
、node3
改为自己的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来处理大规模的数据,并享受其强大的分布式计算能力。
希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!