当前位置: 首页 > article >正文

hadoop集群搭建

hadoop集群搭建

官网地址:https://hadoop.apache.org/releases.html

一、前置准备(以下配置针对3台服务器)

1.1 配置jdk环境变量

执行: vim /etc/profile.d/my_env.sh
配置如下(jdk解压目录在/usr/local/jdk/jdk1.8.0_221):

 #JAVA_HOME 
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_221 
export PATH=$PATH:$JAVA_HOME/bin
1.2 配置hadoop环境变量

把hadoop解压到/opt/module/hadoop-3.1.3目录
执行: vim /etc/profile.d/my_env.sh

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
1.3 配置主机

准备好3台服务器
192.168.10.162
192.168.10.163
192.168.10.164
配置主机名:vim /etc/hosts

192.168.10.162 hadoop62
192.168.10.163 hadoop63
192.168.10.164 hadoop64

检验:

hostname 输出 主机名
java -version 输出jdk版本
hadoop version输出 hadoop的版本号

1.4 配置3台机器免密互访

如果需要用root账号免密就在/root/.ssh目录下,如果是非root账号免密就在/home/账号名/.ssh 目录下执行:
例如,我想使用hadoop账号免密访问,那么我在162机器的/home/hadoop目录执行,
ssh-keygen -t rsa 回车3次会生成两个文件 id_rsa 、id_rsa.pub
②在162执行 ssh-copy-id hadoop63,第一次需要输入密码执行
③在162执行 ssh hadoop63 即可发现,无需密码可访问163
在163,164分别执行以上步骤即可相互之间免密登录

记住:使用root账号创建的公钥私钥位于/root/.ssh下里
只对root账号可以互勉 使用非root账号:
①useradd hadoop
②创建目录 mkdir -p /home/hadoop
③执行ssh-keygen -t rsa生成的公钥私钥位于/home/hadoop/.ssh目录下
④其他步骤与上面一致

1.5 服务器时间同步

1.安装时间同步器 (root账户)
yum install ntp
2.操作命令
查看状态 systemctl status ntpd
启动 systemctl start ntpd
开机启动 systemctl is-enabled ntpd

3.编辑162机器 vim /etc/ntp.conf
①因为我的ip是192.168.10.162,即允许次网段的来同步时间
修改前 #restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
修改后 restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
②注释掉联网更新时间
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
③末尾加上:当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10

4.让硬件时间与系统时间一起同步
vim /etc/sysconfig/ntpd 添加: SYNC_HWCLOCK=yes

5.重启162
systemctl start ntpd
systemctl enable ntpd

6.关闭163,164的时间服务 systemctl stop ntpd systemctl disable ntpd

7.分别执行 crontab -e 编辑内容(1分钟同步一次): */1 * * * * /usr/sbin/ntpdate hadoop62

二、配置hadoop集群

2.1 配置文件修改

在162的/opt/module/hadoop-3.1.3/etc/hadoop目录下分别修改
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml

内容如下:

core-site.xml

<configuration>
 <!-- 指定 NameNode 的地址 -->
 <property>
 	<name>fs.defaultFS</name>
 	<value>hdfs://hadoop62:8020</value>
 </property>
 <!-- 指定 hadoop 数据的存储目录 -->
 <property>
 	<name>hadoop.tmp.dir</name>
 	<value>/opt/module/hadoop-3.1.3/data</value>
 </property>
       <!--使用HDFS网页登录使用的静态用户为hadoop,也就是是否有权限去删除文件 -->
 <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
 </property>
</configuration>

========================================================
hdfs-site.xml

<configuration>
<!-- nn web 端访问地址-->
<property>
	 <name>dfs.namenode.http-address</name>
	 <value>hadoop62:9870</value>
 </property>
<!-- 2nn web 端访问地址-->
 <property>
	 <name>dfs.namenode.secondary.http-address</name>
	 <value>hadoop64:9868</value>
 </property>
</configuration>

=====================================================
yarn-site.xml

<configuration>
 <!-- 指定 MR 走 shuffle -->
 <property>
	 <name>yarn.nodemanager.aux-services</name>
	 <value>mapreduce_shuffle</value>
 </property>
 <!-- 指定 ResourceManager 的地址-->
 <property>
	 <name>yarn.resourcemanager.hostname</name>
	 <value>hadoop63</value>
 </property>
 <!-- 环境变量的继承 -->
 <property>
 	<name>yarn.nodemanager.env-whitelist</name>
 
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
 </property>
 <!-- 开启日志聚集功能 -->
<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>
</configuration>

=====================================================

mapred-site.xml

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

配置完传输到162,163,164各一份

2.2 配置hadoop主机(告诉hadoop集群由哪几台机器组成)

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
配置主机:
hadoop62
hadoop63
hadoop64

2.3 初始化集群

第一次启动需要初始化:
仅在162的 /opt/module/hadoop-3.1.3 目录执行
hdfs namenode -format

2.4 文件授权(确保账号hadoop存在,如果不存在就创建:useradd hadoop )

给文件夹及文件授权
chown -R hadoop:hadoop /opt/module/hadoop-3.1.3/

2.5 启动hdfs

在162机器上执行: 仅在162的目录 /opt/module/hadoop-3.1.3
sbin/start-dfs.sh

执行完后,去3台机器上执行jps 查看结果:
162:NameNode、DataNode,
163:DataNode,
164:DataNode、SecondaryNameNode

访问:http://192.168.10.162:9870

2.6 启动yarn

启动yarn仅在163的目录 /opt/module/hadoop-3.1.3
执行:sbin/start-yarn.sh

访问: http://192.168.10.163:8088/

2.7 启动历史日志

启动mapred,在162的/opt/module/hadoop-3.1.3目录执行
bin/mapred --daemon start historyserver

如果停止162的历史服务记录: mapred --daemon stop historyserver

3.编写脚本一键启停

shell脚本,在162的 /home/hadoop/bin下编写一个脚本 myhadoop.sh

#!/bin/bash
if [ $# -lt 1 ]
then
 echo "No Args Input..."
 exit ;
fi
case $1 in
"start")
 echo " =================== 启动 hadoop 集群 ==================="
 echo " --------------- 启动 hdfs ---------------"
 ssh hadoop62 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
 echo " --------------- 启动 yarn ---------------"
ssh hadoop63 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
 echo " --------------- 启动 historyserver ---------------"
 ssh hadoop62 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
 echo " =================== 关闭 hadoop 集群 ==================="
 echo " --------------- 关闭 historyserver ---------------"
 ssh hadoop62 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
 echo " --------------- 关闭 yarn ---------------"
 ssh hadoop63 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
 echo " --------------- 关闭 hdfs ---------------"
 ssh hadoop62 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
 echo "Input Args Error..."
;;
esac

完成后,
赋权:chmod +x myhadoop.sh
停止:sh myhadoop.sh stop
启动: sh myhadoop.sh start

一个脚本能查看所有服务的jps进程
vim jpsall
内容:

#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
 echo =============== $host ===============
 ssh $host jps 
done

完成后, 赋权:
chmod +x jpsall
执行 sh jpsall 可以看到每台服务器的jps进程
============================================
纠错,如果集群坏了:
1.停止进程
2.删除data和logs目录
3.重新初始化和启动


http://www.kler.cn/a/418610.html

相关文章:

  • 【力扣】541.反转字符串2
  • Web 端网站后台裁剪功能:提升图像管理效率的利器
  • 纪念我的第一个Linux C程序
  • 基于Java Springboot蛋糕订购小程序
  • 不同类型转换
  • 积鼎科技携手西北工业大学动力与能源学院共建复杂多相流仿真联合实验室
  • 如何使用Spring Boot进行Web开发?
  • mysql系列2—InnoDB数据存储方式
  • Android内容提供者
  • SARIMA 模型Matlab代码
  • 制造入门知识-下篇
  • Qt中模拟鼠标消息并与系统鼠标消息进行区分
  • 信息收集-谷歌语法使用大全
  • 随时掌控健康,时刻监测血压,dido医疗级气泵血压手表评测
  • 单片机-- 复位的方式
  • stm32里一个定时器可以提供多路信号吗?
  • 简单web项目自定义部署Dockerfile
  • 数据分析学习
  • MLinear论文解析
  • 前端入门指南:前端模块有哪些格式?分别什么情况使用
  • linux 中后端jar包启动不起来怎么回事 -bash: java: 未找到命令
  • mysql的操作命令收集
  • Ubuntu20.04下安装Matlab2018
  • 2-2-18-7 QNX 系统架构-动态链接
  • Qt 详解QRubberBand
  • Python plotly库介绍