1 Hadoop 3.2.4分布式环境搭建
1 Hadoop 3.2.4分布式环境搭建
1 系统配置
3台centOS虚拟机
# 配置hosts解析 vim /etc/hosts192.168.88.129 hadoop1 192.168.88.130 hadoop2 192.168.88.131 hadoop3
修改主机名
hostnamectl set-hostname hadoop1 hostnamectl set-hostname hadoop2 hostnamectl set-hostname hadoop3
关闭防火墙
#关闭防火墙 systemctl stop firewalld.service #禁用开机启动 systemctl disable firewalld.service#重启防火墙 systemctl restart firewalld.service #查看防火墙状态 systemctl status firewalld.service
生产环境不允许直接关闭防火墙!!!只能配置策略,开通特定的端口!!
禁用selinux
修改
/etc/selinux/config
设置SELINUX=disabled
vim /etc/selinux/config
重启使主机名等配置生效
创建hadoop用户,并设置密码
useradd hadoop passwd hadoop
所有主机上都创建
密码:fmi135246
配置hadoop用户的root权限
vim /etc/sudoers
在
%wheel
下一行添加内容hadoop ALL=(ALL) NOPASSWD:ALL
NOPASSWD:ALL
表示使用sudo
命令时免输入密码 , 需要放在 %wheel
下一行 , 否则可能失效设置ssh免密登录
# 进入密钥目录(有可能不存在) cd ~/.ssh # 删除旧密钥 rm -rf ~/.ssh # 生成密钥 ssh-keygen -t rsa # 公钥复制到ssh指定的密钥文件 authorized_keys cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys#修改文件权限(不设置可能导致失败) chmod 600 ~/.ssh/authorized_keys # 测试免密登录 ssh -vvv hadoop1# 退出ssh登录 exit
ssh -vvv
-vvv 表示输出调试信息,如果免密失败,可以从调试信息中查看原因,我在测试中,非root用户,必须修改 authorized_keys 文件的权限,否则设置免密不成功将hadoop1的公钥内容添加到其他主机的
~/.ssh/authorized_keys
中,这样hadoop1可以免密登录其他主机# 在hadoop1上执行 ssh-copy-id hadoop1 ssh-copy-id hadoop2 ssh-copy-id hadoop3
其他主机上同理执行
2 JDK安装
解压安装包到
/opt/module
# 创建目录 sudo mkdir -p /opt/module # 修改权限 sudo chown -R hadoop:hadoop /opt/module # 解压安装包到/opt/module tar -xvf jdk-8u341-linux-x64.tar.gz -C /opt/module/ # 修改jdk目录名mv /opt/module/jdk1.8.0_341/ /opt/module/jdk
配置环境变量
可直接将jdk路径配置到
/etc/profile
文件,或者在/etc/profile.d/
新建my_env.sh
# 编辑文件 sudo vim /etc/profile.d/my_env.sh# 添加内容 export JAVA_HOME=/opt/module/jdk export PATH=$PATH:$JAVA_HOME/bin# 使变量生效 source /etc/profile# 测试jdk java -version
使用上个命令的参数
!$
,或者alt + .
3 安装hadoop
解压到
/opt/module/hadoop
tar -xvf hadoop-3.2.4.tar.gz -C /opt/modulesudo mv /opt/module/hadoop-3.2.4 /opt/module/hadoop
配置环境变量到
/etc/profile.d/my_env.sh
# 添加内容 export JAVA_HOME=/opt/module/jdk export PATH=$PATH:$JAVA_HOME/bin export HADOOP_HOME=/opt/module/hadoop export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin#export HDFS_NAMENODE_USER=root #export HDFS_DATANODE_USER=root #export HDFS_SECONDARYNAMENODE_USER=root #export YARN_RESOURCEMANAGER_USER=root #export YARN_NODEMANAGER_USER=root
$HADOOP_HOME/bin 和 $HADOOP_HOME/sbin 必须加入环境变量
配置文件分发到其他主机
scp /etc/profile.d/my_env.sh hadoop2:/etc/profile.d/ scp /etc/profile.d/my_env.sh hadoop3:/etc/profile.d/
rsync -av pdir/pdir/pdir/fname user@user@user@host:pdir/pdir/pdir/fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
使环境变量生效
source /etc/profile
配置
hadoop-env.sh
的jdk路径# 分别打开文件 vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh #vim /usr/local/hadoop/etc/hadoop/mapred-env.sh #vim /usr/local/hadoop/etc/hadoop/yarn-env.sh
添加
JAVA_HOME
配置export JAVA_HOME=/usr/local/jdk
验证配置
hadoop version
复制jdk和hadoop到其他主机
#通过ssh创建目录并修改权限 ssh hadoop2 'sudo mkdir -p /opt/module;sudo chown -R hadoop:hadoop /opt/module' ssh hadoop3 'sudo mkdir -p /opt/module;sudo chown -R hadoop:hadoop /opt/module' # 复制安装文件到hadoop2主机 scp -r /opt/module hadoop@hadoop2:/opt/ scp -r /opt/module hadoop@hadoop3:/opt/
登录其他主机配置jdk和hadoop的环境变量,参考前面配置
/etc/profile.d/my_env.sh
的步骤
4 hadoop配置文件配置
在
home/hadoop
目录下新建bin
目录,并将目录加到PATH
# 创建目录 mkdir -p /home/hadoop/bin # 修改环境变量 vim /etc/profile.d/my_env.sh
修改内容为:
export JAVA_HOME=/opt/module/jdk export PATH=$PATH:$JAVA_HOME/bin export HADOOP_HOME=/opt/module/hadoop export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:/home/hadoop/bin
编写集群文件分发脚本xsync
新建
xsync
文件vim ~/bin/xsync
添加如下内容
#!/bin/bash#1. 判断参数个数 if [ $# -lt 1 ] thenecho Not Enough Arguement!exit; fi#2. 遍历集群所有机器 for host in hadoop2 hadoop3 doecho ==================== $host ====================#3. 遍历所有目录,挨个发送for file in $@do#4. 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)#6. 获取当前文件的名称fname=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone done
添加执行权限
chmod +x ~/bin/xsync
测试将文件复制到其他主机
xsync /home/hadoop/bin
集群规划部署
hadoop1 hadoop2 hadoop3 HDFS NameNode
DataNodeDataNode SecondaryNameNode
DataNodeYARN NodeManager ResourceManager
NodeManagerNodeManager 规划原则:
NameNode
,SecondaryNameNode
,ResourceManager
均比较占内存,故应部署在不同的主机上配置文件说明
需要配置的配置文件位于hadoop安装目录下
$HADOOP_HOME/etc/hadoop
配置文件名 配置说明 core-site.xml 1 配置NameNode地址
2 配置hadoop数据存储目录
3 配置HDFS网页登录静态用户名hdfs-site.xml 1 配置NameNode web端访问地址
2 配置SecondaryNameNode web端访问地址yarn-site.xml 1 配置MR走shuffle
2 配置ResourceManger地址mapred-site.xml 1 配置MapReduce程序运行在yarn上 配置core-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://hadoop1:8020</value></property><!-- 指定hadoop数据的存储目录,需要手动创建目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop/data</value></property><!-- 配置HDFS网页登录使用的静态用户为hadoop --><property><name>hadoop.http.staticuser.user</name><value>hadoop</value></property> </configuration>
配置hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- nn web端访问地址--><property><name>dfs.namenode.http-address</name><value>hadoop1:9870</value></property><!-- 2nn web端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>hadoop3:9868</value></property> </configuration>
配置yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定MR走shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定ResourceManager的地址--><property><name>yarn.resourcemanager.hostname</name><value>hadoop2</value></property></configuration>
配置mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定MapReduce程序运行在Yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property> </configuration>
同步配置文件到其他主机
xsync $HADOOP_HOME/etc/hadoop/
登录其他主机查看配置文件是否同步成功
启动集群
配置workers
vim $HADOOP_HOME/etc/hadoop/workers
添加内容
hadoop1 hadoop2 hadoop3
不能有空行,行尾不能有空格
同步文件到其他主机
xsync $HADOOP_HOME/etc
启动集群
如果是第一次启动,需要现在 NameNode 节点上执行格式化
#在NameNode节点,即hadoop1上执行 hdfs namenode -format
注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的
$HADOOP_HOME/data
和$HADOOP_HOME/logs
目录,然后再进行格式化。在hadoop1主机启动HDFS
#在NameNode节点执行,即hadoop1上执行 start-dfs.sh
在hadoop2主机启动YARN
#在ResourceManager节点执行,即hadoop2上执行 start-yarn.sh
通过web服务查看NameNode和ResourceManager
# 查看HDFS的NameNode http://hadoop1:9870 # 查看YARN的ResourceManager http://hadoop2:8088
如果页面都能正常打开则集群启动成功
查看各节点进程
# hadoop1 主机 [hadoop@hadoop1 hadoop]$ jps 21745 NodeManager 21860 Jps 20682 NameNode 20797 DataNode# hadoop2主机 [hadoop@hadoop2 hadoop]$ jps 9986 DataNode 10535 NodeManager 10410 ResourceManager 10891 Jps# hadoop3主机 [hadoop@hadoop3 hadoop]$ jps 17488 NodeManager 17584 Jps 17397 SecondaryNameNode 17289 DataNode
5 配置历史服务器
为了查看程序的历史运行情况,可以配置历史服务器
配置mapred-site.xml
# 添加如下内容 <!-- 历史服务器端地址 --> <property><name>mapreduce.jobhistory.address</name><value>hadoop1:10020</value> </property><!-- 历史服务器web端地址 --> <property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop1:19888</value> </property>
同步配置到其他主机
xsync $HADOOP_HOME/etc
在hadoop1启动历史服务器
mapred --daemon start historyserver
查看进程
[hadoop@hadoop1 hadoop]$ jps 2176 NodeManager 1714 NameNode 2292 Jps 1865 DataNode 1533 JobHistoryServer
访问web
http://hadoop1:19888/jobhistory
6 配置日志聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
配置 yarn-site.xml
添加内容
<!-- 开启日志聚集功能 --> <property><name>yarn.log-aggregation-enable</name><value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop1:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为7天 --> <property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value> </property>
同步配置
xsync $HADOOP_HOME/etc
关闭NodeManager , ResourceManager , HistroyServer
# 在hadoop2上执行 stop-yarn.sh# 在hadoop1上执行 mapred --daemon stop historyserver
开启NodeManager , ResourceManager , HistroyServer
# 在hadoop2上执行 start-yarn.sh# 在hadoop1上执行 mapred --daemon start historyserver
7 编写Hadoop集群常用脚本
1 hadoop集群启停脚本
在
~/bin
目录下创建myhadoop.sh
vim ~/bin/myhadoop.sh
添加内容
#!/bin/bashif [ $# -lt 1 ] thenecho "No Args Input..."exit ; ficase $1 in "start")echo " =================== 启动 hadoop集群 ==================="echo " --------------- 启动 hdfs ---------------"ssh hadoop1 "/opt/module/hadoop/sbin/start-dfs.sh"echo " --------------- 启动 yarn ---------------"ssh hadoop2 "/opt/module/hadoop/sbin/start-yarn.sh"echo " --------------- 启动 historyserver ---------------"ssh hadoop1 "/opt/module/hadoop/bin/mapred --daemon start historyserver" ;; "stop")echo " =================== 关闭 hadoop集群 ==================="echo " --------------- 关闭 historyserver ---------------"ssh hadoop1 "/opt/module/hadoop/bin/mapred --daemon stop historyserver"echo " --------------- 关闭 yarn ---------------"ssh hadoop2 "/opt/module/hadoop/sbin/stop-yarn.sh"echo " --------------- 关闭 hdfs ---------------"ssh hadoop1 "/opt/module/hadoop/sbin/stop-dfs.sh" ;; *)echo "Input Args Error..." ;; esac
添加执行权限
chmod +x ~/bin/myhadoop.sh
测试脚本
# 停止 myhadoop.sh stop # 启动 myhadoop.sh start
同步文件
xsync ~/bin
2 查看三台主机的java进程脚本
在
~/bin
目录下创建jpsall
vim ~/bin/jpsall
添加内容
#!/bin/bashfor host in hadoop1 hadoop2 hadoop3 doecho =============== $host ===============ssh $host 'jps' done
添加执行权限
chmod +x ~/bin/jpsall
测试脚本
[hadoop@hadoop1 ~]$ jpsall =============== hadoop1 =============== 4448 DataNode 4723 NodeManager 4889 JobHistoryServer 4985 Jps 4299 NameNode =============== hadoop2 =============== 4372 DataNode 4550 ResourceManager 5053 Jps 4686 NodeManager =============== hadoop3 =============== 3420 SecondaryNameNode 3677 Jps 3310 DataNode 3503 NodeManager
同步到其他主机
xsync ~/bin/
8 默认常用端口号说明
端口 | Hadoop2.X | hadoop3.x |
---|---|---|
NameNode内部通信端口 | 8020/9000 | 8020/9000/9820 |
NameNode HTTP UI | 50070 | 9870 |
MapReduce 查看执行任务端口 | 8088 | 8088 |
历史服务器通信端口 | 19888 | 19888 |
1 Hadoop 3.2.4分布式环境搭建相关推荐
- 最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程(二)
继续上次的教程,这次安装hbase与hive.之前有同学反应百度网盘中没有hbase安装包,这次补上了,在上篇博客的网盘链接中已经有了,最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程 ...
- Hadoop单机和伪分布式环境搭建
hadoop环境搭建 1.三个环境 单机.伪分布式.分布式 2.三个分支 apache版本(Apache基金会) cdh版本(cloudera公司) ...
- Hadoop入门基础教程 Hadoop之完全分布式环境搭建
上一篇我们完成了Hadoop伪分布式环境的搭建,伪分布式模式也叫单节点集群模式, NameNode.SecondaryNameNode.DataNode.JobTracker.TaskTracker所 ...
- 2021年大数据环境搭建(二):分布式环境搭建
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 分布式环境搭建 集群规 ...
- Hadoop2.2.0伪分布式环境搭建(附:64位下编译Hadoop-2.2.0过程)
Hadoop2.2.0伪分布式环境搭建: 写在前面:Hadoop2.2.0默认是支持32位的OS,如果想要在64位OS下运行的话,可以通过在64位OS下面编译Hadoop2.2.0来实现,编译的操作步 ...
- HDFS伪分布式环境搭建-很不错
HDFS伪分布式环境搭建 原创 ZeroOne01 2018-03-24 19:51:20 评论(0) 655人阅读 HDFS概述及设计目标 什么是HDFS: 是Hadoop实现的一个分布式文件系统( ...
- Zookeeper分布式环境搭建
Zookeeper分布式环境搭建 一.分布式安装部署 1.前置条件 2.集群规划 3.解压安装 4.配置zoo.cfg文件 5.集群操作 二.配置参数解读 1.tickTime 2.initLimit ...
- ZooKeeper之分布式环境搭建
第1关:仲裁模式与伪分布式环境搭建 本关任务:了解ZooKeeper的仲裁模式,掌握伪分布式安装. vi /opt/zookeeper-3.4.12/conf/zoo.cfg 增加以下内容并保存:se ...
- jmeter分布式环境搭建
jmeter分布式环境搭建部署 jmeter分布式环境搭建 Jmeter运行方式:GUI和非GUI GUI.非GUI遇到的问题 如何解决? Jmeter分布式部署流程 Jmeter非GUI运行时动态参 ...
最新文章
- .net移动端开发_移动端开发1(前端一)
- discuz 的 group.php,DiscuzX用户组过期问题解决方法
- 深度学习常见算法之训练自己的数据
- 基于C#的计时管理器
- Exynos4412 IIC 总线驱动开发相关问题总结
- sql字符串拼接_Mybatis的SqlSession执行sql过程
- Telnet远程访问思科交换机、路由器
- spark消费kafka产生数据堆积怎么处理_SparkStreaming读取Kafka的两种方式
- python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现
- RedisUtil工具类
- 【c语言】背包问题的贪心法
- Java-幸运抽奖系统(综合练习)
- 计算机软件研究方法与技术路线,项目的研究方法与技术路线
- 手把手教大家实现一个电子签名
- 思科计算机网络(1)计算机网络概述
- qemu内存管理——扁平视图
- 推荐5款Windows桌面效率工具
- 【Hive】什么是数据仓库?数据仓库和数据库有什么关系?
- webservice 菜鸟探索之旅
- 一个自动将状态机生成代码的软件
热门文章
- 编译时遇到stray '\239' inprogram,stray '\187' inprogram,stray '\191' inprogram的解决办法
- 核磁共振成像常用技术——杨正汉(6)
- 超细的CSS学习笔记(CSS详解)
- DreamMail无法打开邮件数据库问题的解决办法
- matlab计算数据MEA与RMSE误差指标
- 声控助手_我从构建声控机器人获得的见解
- LIMS在国产软件,SampleManager,西门子OpcenterRdnl在原始记录中的三种实现形式
- Grammarly安装
- 详解区块链技术,如何运作
- aaa认证服务器安装位置,Cisco AAA服务器 安装调试及配置验证