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.重新初始化
和启动