Linux下的Hadoop分布式安装详解

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
  1. NameNode,secondaryNameNode的地址(secondaryNameNode不设置会在master启动)
  2. namenode,datanode数据保存路径
  3. 文件副本保存数
  4. 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里面
解决方式:暂无 不确定是否正常后续确认。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值