Hadoop分布式安装详解
1.服务器准备
- 使用vm virtualBox安装两台centos虚拟机master,hadoop01,分别作为主机,工作节点机器,此两台机器已经配置了免密
复制代码 2.软件准备
hadoop使用:hadoop-3.2.4
jdk使用:java SE 8,由于服务器准备的是centos x86_64架构,所以使用jdk-8u411-linux-x64.tar.gz
- hadoop下载地址:https://mirrors.cloud.tencent.com/apache/hadoop/common/
- jdk下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
复制代码 3.服务器配置
以下操作如有权限标题请切换root用户
1.关闭服务器防火墙
(主机,工作机均必要修改)
- systemctl status firewalld 查看状态,状态如果开启
- systemctl stop firewalld 关闭防火墙
- systemctl disable firewalld 关闭开机自启动
复制代码 防火墙关闭后截图
2.修改主机名+静态的域名解析
(主机,工作机均必要修改)
修改主机名
主机名要与静态域名一致,后面hdfs可视化页面上DataNode节点显示的就是主机名
- 查看当前服务器的hostname
- hostname
- vim /etc/hostname 主机改为master,节点机器改为hadoop01 (其实主机名可以自定义) 主机名在一个局域网内应该是唯一的
- 修改完成后立即生效执行
- systemctl restart systemd-hostnamed
复制代码
配置静态域名解析
vim /etc/hosts
留意
对于此处理解,目的就是为了可以直接使用域名举行机器之间的互通,所以以为修改主机名这步骤不是很紧张,因为核心是靠着静态解析域名hosts文件举行互通的**(因为已经修改了主机名没有实验没修改的情况,后面偶然机确认了在更新)**。
增补
后面在整理创建centos虚机文章的时候,重新加了一个节点正好验证主机名的作用,主机名修改是必要的,因为在hdfs页面上的 http address 上地点默认使用的就是主机名称见下图
修改后重启hdfs,页面已显示主机名
假如不修改从hdfs链接跳转进去是页面notfound
3.创建服务器应用用户
个人不太喜欢使用root权限,固然方便但是使用root权限部署大概也会存在风险。
- 创建用户
- useradd ldsx (自定义用户名)
- passwd ldsx (输入后创建密码可以忽略密码合规提示确认即可)
- 在应用用户目录下创建目录用于存放jdk,hadoopa安装包,hadoop数据
- cd /home/ldsx
- mkdir down_load 存放jdk hadoop安装包
- mkdir opt 存放初始化hadoop namenode,data的数据
复制代码 当然以上文件夹路径可以自定义设置,有权限执行即可。下文将以此部署路径用于截图参考,现实部署时如替换记得统一修改
4.jdk安装
在master中,先使用root用户修改jdk安装包rwx,方便使用应用用户解压。
- 把jdk移动到一个单独的目录下进行权限修改
- chmod 777 jdk-8u411-linux-x64.tar.gz
- 进行解压
- tar -zxvf jdk-8u411-linux-x64.tar.gz -C /home/ldsx/down_load/jdk_data_new
- 解压后查看版本是否成功
- /home/ldsx/down_load/jdk_data_new/jdk1.8.0_411/bin/java -version
复制代码 成功截图
记着这个jdk的位置后面必要配置环境变量
5.hadoop安装
在master中,先使用root用户修改hadoop安装包rwx,方便使用应用用户解压。
- chmod 777 hadoop-3.2.4.tar.gz
- tar -zxvf hadoop-3.2.4.tar.gz -C /home/ldsx/down_load/hadoop_data
复制代码 体系环境变量配置
- 在 /etc/profile.d下创建一个自己的环境变量文件
- vim /etc/profile.d/my_env.sh
- 内容如下:
- #JAVA_HOME
- export JAVA_HOME=/home/ldsx/down_load/jdk_data_new/jdk1.8.0_411 (更换自己实际路径)
- export PATH=$PATH:$JAVA_HOME/bin
- #HADOOP_HOME
- export HADOOP_HOME=/home/ldsx/down_load/hadoop_data/hadoop-3.2.4 (更换自己实际路径)
- export PATH=$PATH:$HADOOP_HOME/bin
- export PATH=$PATH:$HADOOP_HOME/sbin
复制代码 profile.d下创建文件表明
假如有疑惑为什么环境变量在profile.d下创建配置呢?
.bash_profile
.bashrc
/etc/bashrc
- Linux系统中环境变量加载会使用用户家目录下隐藏文件.bash_profile .bashrc,根据不同登录方式会选择其中一种环境变量进行加载。
- 1.打开文件 .bash_profile发现,其本质也是加载了了~/.bashrc文件。
- 2.打开.bashrc文件,此文件加载了/etc/bashrc
- 3.打开 /etc/bashrc 其中有一行代码为加载 /etc/profile.d/下所有sh文件的
- 总结:所以环境变量在profile.d下设置可以提供给所有用户使用,profile.d相当于基石。加载这里方便统一管理
复制代码 hadoop环境变量配置
- cd /home/ldsx/down_load/hadoop_data/hadoop-3.2.4/etc/hadoop
- vim hadoop-env.sh (自带)
- 增加如下内容
- export HDFS_NAMENODE_USER=ldsx
- export JAVA_HOME=/home/ldsx/down_load/jdk_data_new/jdk1.8.0_411
- export HADOOP_HOME=/home/ldsx/down_load/hadoop_data/hadoop-3.2.4
- export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
复制代码 hadoop下目录含义
解压后进入解压文件夹,截图为文件夹中内容
- (1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
- (2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件 (core,yaml,hdfs等配置)
- (3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
- (4)sbin目录:存放启动或停止Hadoop相关服务的脚本
- (5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
复制代码 hadoop下xml文件配置
以下文件均在hadoop etc目录下
core-site.xml
核心配置包罗,hadoop集群名称,体系访问地点,临时数据存放位置,
缓冲区设置,hdfs垃圾机制等。
- <configuration>
- <!--指定文件系统地址,外部程序通过这个地址存取文件 -->
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://master:7171</value>
- </property>
- <!--指定文件临时文件地址 -->
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/home/ldsx/opt/hadoopData/tmp</value>
- </property>
- <!--指定静态用户 页面使用的用户 -->
- <property>
- <name>hadoop.http.staticuser.user</name>
- <value>ldsx</value>
- </property>
- <property>
- <!--允许特定用户或组作为代理用户执行任务-->
- <name>hadoop.proxyuser.ldsx.hosts</name>
- <value>*</value>
- </property>
- <property>
- <name>hadoop.proxyuser.ldsx.groups</name>
- <value>*</value>
- </property>
- </configuration>
复制代码 静态用户设置部署时使用的应用用户。
hdfs-site.xml
- NameNode,secondaryNameNode的地点(secondaryNameNode不设置会在master启动)
- namenode,datanode数据保存路径
- 文件副本保存数
- block块巨细默认128M
- <property>
- <name>dfs.replication</name>
- <value>3</value>
- </property>
- <!--指定namenode数据目录 -->
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/home/ldsx/opt/hadoopData/dfs/name</value>
- </property>
- <!--指定datanode数据目录 -->
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>/home/ldsx/opt/hadoopData/dfs/data</value>
- </property>
- <!--指定namenode的HTTP服务地址 -->
- <property>
- <name>dfs.namenode.http-address</name>
- <value>master:50070</value>
- </property>
- <property>
- <name>hadoop.log.dir</name>
- <value>/home/ldsx/opt/hadoopData/log</value>
- </property>
- <!--SecondaryNameNode的HTTP服务地址-->
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>hadoop01:50090</value>
- </property>
- </configuration>
复制代码 yarn-site.xml
配置yarn的resourcemanager,日记信息,保留时间,web访问页面等,yarn默认访问端口8088
yarn.resourcemanager.webapp.address 默认8088
yarn.nodemanager.webapp.address 默认8042
- <configuration>
- <!--指定resourcemanager位置 -->
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>master</value>
- </property>
-
- <!-- 指定MR走shuffle -->
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
-
- <!--环境变量的继承 -->
- <property>
- <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
- </property>
- <!--日志聚合打开可使用 yarn logs -applicationId <app ID> -->
- <property>
- <name>yarn.log-aggregation-enable</name>
- <value>true</value>
- </property>
- <!-- 设置日志聚集服务器地址 -->
- <property>
- <name>yarn.log.server.url</name>
- <value>http://master:19888/jobhistory/logs</value>
- </property>
- <!-- 设置日志保留时间为7天 -->
- <property>
- <name>yarn.log-aggregation.retain-seconds</name>
- <value>604800</value>
- </property>
- </configuration>
复制代码 mapred-site.xml
设置mapreduce资源配置
workers节点配置
设置hdfs datanode在那些节点上启动,
设置yarn 的namemanger启动。通常情况下 纯干活节点这俩进程是同时存在的。
6.jdk,hadoop发送到节点
发送安装包并加载环境变量
- 1. 当4,5完成后,使用scp命令把jdk,hadoop发送到hadoop01服务器中,
- 注意需要路径结构与master完全一致,因为很多环境变量都是按照master设置的,如果节点路径与master不一致
- 可能在启动服务的时候出现问题!!!
- 2. /etc/profile.d/my_env.sh 创建的系统变量也需要发到hadoop01中 使用source /etc/profile.d/my_env.sh 加载环境变量
复制代码 7.启动服务
因为环境变量已经配置完 hadoop下sbin已经配置成体系路径可直接使用其中的shell脚本。
格式化NameNode
- 在master上执行
- hdfs namenode -format
复制代码
格式化成功配置的hdfs-site.xml中的namenode.name.dir出现如下文件
启动hdfs
master上进程
hadoop01上进程
hdfs web页面访问默认端口50070,hdfs-site中可自定义
留意假如是使用本机宿主机访问页面,必要配置本机的静态域名解析文件。我用的本机操作体系是windows,配置hosts文件即可,假如在本机直接访问搭建在假造机上的hdfs,不配置hosts大概出现hdfs页面文件无法上传的情况(碰到了忘记截图了)。
上传文件
关闭hdfs
同样hadoop01上的服务也结束。
启动yarn
master
hadoop01
页面访问
yarn.resourcemanager.webapp.address 默认8088
yarn.nodemanager.webapp.address 默认8042
关闭yarn
启动JobHistoryServer
用于检察Yarn历史服务日记
- mr-jobhistory-daemon.sh start historyserver
复制代码
关闭JobHistoryServer
- mr-jobhistory-daemon.sh stop historyserver
复制代码 8.碰到的标题
- 问题1:使用hdfs web页面上传数据报错 Failed to retrieve data from /webhdfs/v1/?op=LISTSTATUS: Server Error
- 解决方式:jdk版本过高,最没注意开始下载了jdk18,后面更换了jdk1.8解决了此问题
- 问题2:启动失败/namenode初始化失败
- 解决方式:检查一下当时使用的用户是不是部署使用的应用用户,检查部分使用的目录是不是应用用户有权限执行,因为最开始配置的datanode,namenode存储路径在opt下应用用户没权限操作导致格式化失败,更换配置到有权限的目录可以解决
- 问题3:启动任务后节点上的任务启动失败
- 解决方式:检查确认hadoop配置是否完全一致,master跟节点配置必须完全一致不然节点启动会存在问题,建议master修改后scp同步到工作节点。
- 问题4:设置的hdfs log路径未生效,仍在hadoop logs里面
- 解决方式:暂无 不确定是否正常后续确认。
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |