文章目录
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
start-dfs.sh
master上进程
hadoop01上进程
hdfs web页面访问默认端口50070,hdfs-site中可自定义
注意如果是使用本机宿主机访问页面,需要配置本机的静态域名解析文件。我用的本机操作系统是windows,配置hosts文件即可,如果在本机直接访问搭建在虚拟机上的hdfs,不配置hosts可能出现hdfs页面文件无法上传的情况(遇到了忘记截图了)。
上传文件
关闭hdfs
stop-dfs.sh
同样hadoop01上的服务也结束。
启动yarn
start-yarn.sh
master
hadoop01
页面访问
yarn.resourcemanager.webapp.address 默认8088
yarn.nodemanager.webapp.address 默认8042
关闭yarn
stop-yarn.sh
启动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里面
解决方式:暂无 不确定是否正常后续确认。
版权归原作者 百流 所有, 如有侵权,请联系我们删除。