暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

HDFS安装配置

原创 逆风飞翔 2022-10-19
1237

HDFS安装配置

 

一、准备知识

此处先分别是介绍HDFS的三种安装模式,接着介绍什么是集群的纵向配置和横向配置,最后介绍安装配置文件的目录结构。

1.1 HDFS的三种安装模式

本地模式,所有的功能都在一个JVM里面实现,以线程方式模拟角色,一般用于调试和测试MapReduce程序。

伪分布式模式,每个角色对应一个进程,所有进程都在一个物理节点上,多个进程模拟分布式环境。

全分布式模式,每个角色对应一个进程,并且这些角色分布在集群中不同的物理节点上。

三种不同模式对应的安装与配置有所差异,后续会详细讨论。

1.2 纵向配置和横向配置

Hadoop1.x的系统栈,HDFS包含NameNode和DataNode等角色,MapReduce框架包含JobTracker、TaskTracker、MapTask和ReduceTask等角色。

在系统栈的纵向方向中,底层为上层提供服务,例如HDFS的进程都运行在JVM(java虚拟机)之上,依赖JVM。同时HDFS为MapReduce的守护进程和任务提供统一的存储空间。如何确保下层为上层提供服务要进行相关的配置。

在系统栈的横向方向中,以HDFS为例,NameNode与DataNode之间,DataNode与DataNode之间要进行交互,交互式的方式就是网络,需要配置各物理节点的IP和端口。同样,JobTacker与TaskTracker之间,MapTask和ReduceTask之间都需要通过网络进行交互。

总结一下,纵向配置主要涉及操作系统的环境变量,用来支持底层组件为上层提供服务;横向配置主要用于不同节点间组件的相互协调。

1.3 Hadoop的目录结构


表安装配置HDFS涉及的几个配置文件;

“Hadoop namenode -format”命令用于对集群进行初始化;

“start-dfs.sh”和“stop-dfs.sh”为启动和停止集群的脚本。

其余目录的介绍如下:

$HADOOP_HOME/bin;用于执行hadoop脚本命令,被hadoop-daemon.sh调用执行,也可以单独执行,一切命令的核心。

$HADOOP_HOME/sbin;用于启动停止相关组件如HDFS、MapReduce和Yarn,启动这些组件对应的守护进程。

$HADOOP_HOME/etc/hadoop;Hadoop全局和各个组件的配置文件,这些配置文件和配置项决定了组件的工作机制。

$HADOOP_HOME/logs目录;该目录存放的是Hadoop运行的日志,查看日志对寻找Hadoop运行错误非常有帮助。

$HADOOP_HOME/include目录;对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。

$HADOOP_HOME/lib目录;该目录下存放的是Hadoop运行时依赖的jar包,Hadoop在执行时会把lib目录下面的jar全部加到classpath中。

$HADOOP_HOME/libexec目录;各个服务对应的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。

 

二、集群规划

集群的规划有助于读者从宏观上把握安装配置运维的脉络,有助于培养良好的文档习惯和思维方式。集群的规划要确定以下几个问题:(1)集群有多少个节点,每个节点的资源(CPU核数、内存、磁盘大小);(2)每个节点的机器名和IP地址是什么;(3)NameNode和DataNode分别有几个,每个节点打算部署成什么角色。


图1-4 集群规划示意图

图1-4描述了集群的规划示意图,在该规划中待配置的HDFS集群有15个节点,每个节点的配置均为(8个core,16GB内存,2TB磁盘空间);每个节点的机器名分别为westgis101~westgis115,IP地址为10.103.104.101~115;其中westgis101为集群的NameNode,westgis102~ westgis114等13个节点为DataNode节点,westgis115为Client角色。

集群的规划是一个复杂的问题,在实际工作环境中有两个问题需要充分考虑:

(1)混合部署,一个集群里面可能要同时部署Hadoop、HBase和Spark,这些大数据组件对应的守护进程运行在同一个物理节点,需要根据应用程序的特征来考虑资源分配的问题。

  (2)异构问题,集群中的服务器很可能不是同一批购置,硬件参数如CPU、内存和磁盘大小不一,型号不一,有些节点可能配置GPU等。节点的异构问题也会影响集群的规划。

 

二、安装配置概述


图1-5 安装配置步骤

集群的安装部署可以分为三大步:

(1)集群的准备工作, 涉及全部节点。分别是:集群的全局时钟配置,账号和权限和节点存储路径,配置主机名和IP地址的映射,主节点到所有从节点的免密码登录。

(2)单节点的配置,以主节点为例。分别是:集群的纵向配置和横向配置,前者主要是单机环境变量配置(如java安装路径和Hadoop安装路径),后者是HDFS相关参数的配置(如主节点IP地址和端口号)。

(3)配置文件的拷贝,涉及所有从节点。将主节点上的横向配置和纵向配置拷贝到每一个从节点。此处可以用脚本的方式自动完成拷贝功能。

总结一下,篇幅太长读的很辛苦,后续博文会详细讲解具体的每一步配置。初学计算机要像学英文一样,注重阅读和记忆。

 

安装配置详细过程

上一篇讲述了预备知识和安装配置的概述,这一篇讲解详细的安装配置过程。

 

图1-1 详细的安装过程

   此处实验环境同上一篇涉及的15台服务器,操作系统为centos7.6,jdk的版本为1.8,Hadoop的版本为2.7.0

一、Step1 集群准备工作(全部节点)

1.1 全局时钟NTP的配置

    全局时钟是使计算机时间同步化的一种协议,如果集群中节点的时间不同步,很多分布式系统无法正常工作。

     在上一篇的集群规划中描述了15个节点,分别是westgis101~westgis115。我们将westgis101当成NTP的服务器,其它14个节点与NTP服务器进行时间同步。需要注意的是,如果集群中每台服务器都可以连接互联网,我们也可以选择互联网上的NTP服务器。但是,考虑到企业内部集群不一定能访问互联网,我们也可以选择在内部确定一台NTP服务器。

     一般情况下,Centos7.6 已经自带NTP,其配置文件路径为/ect/ntp.conf,只需要修改配置文件即可。

     NTP服务器的配置,在westgis101上打开配置文件 vim etc/ntp.conf 并增加如下内容:

----------------------------------------

     #授权10.103.104.0网段上所有机器可以从这台机器上查询和时间同步

     restrict 10.103.104.0 mask 255.255.255.0 nomodify notrap

     #当外部NTP服务器无法连接时,使用本机为NTP服务器

     server 127.0.0.1

     fudge 127.0.0.1 stratum 10

-------------------------------------------

     此处10代表计算机在网络top中的层级数,一般在15以内。

     NTP客户端的配置,在westgis102~westgis115所有节点上执行。打开配置文件

vim etc/ntp.conf 增加如下内容:

---------------------------------------------

   #只需在配置文件的server下在加一条代码,允许同步10.0.0.31这台主机时间

   server 10.101.103.101 iburst

--------------------------------------------

    重启NTP服务,在每个节点上执行命令:   systemctl restart ntpd

 

1.2 每个节点创建相同的账号

  使用root账户执行命令创建账号,例如账号名为xiongwen。需要执行以下命令:   useradd -m xiongwen

备注:useradd命令的详细使用方法可以通过man useradd的方式获得。

 

1.3 主机名和IP地址的映射

 打开文件/etc/hosts,增加HDFS集群涉及的所有节点的IP地址和节点名称,如图1-2所示。


图1-2 HDFS集群涉及的所有节点

1.4 主节点到从节点的免密码登录

主节点到所有从节点,即westgis101到westgis102~westgis115,此处westgis101为NameNode,其它节点为DataNode。以westgis102为例,配置可以分为三小步,分别是:

a. 在westgis101上产生公钥和私钥文件

      私钥/home/xiongwen/.ssh/id_rsa

      公钥/home/xiongwen/.ssh/id_rsa.pub

b. 将公钥文件id_rsa.pub远程拷贝到slave节点任意位置,例如/tmp

       scpid_rsa.pub  xiongwen@westgis102:/tmp

c. 将公钥文件追加到/home/xiongwen/.ssh/

       远程登录到westgis102节点

       cat tmp/id_rsa.pub>> home/xiongwen/.ssh/authorized_keys

 

二、单节点配置(以主节点为例)

   纵向配置主要涉及各节点操作系统的环境变量配置,横向配置主要用于不同节点间组件的相互协调。

2.1 纵向配置

如果使用root账户配置全部用户的环境变量,修改配置文件/ect/profile。

如果使用xiongwen配置环境变量,则修改配置文件/home/xiongwen/.bashrc

增加如下内容:

#Hadoop

export HADOOP_HOME=/opt/bigdata/hadoop

export PATH={HADOOP_HOME}/bin:$PATH

#Java

export JAVA_HOME=/opt/bigdata/jdk

export PATH={JAVA_HOME}/bin:$PATH

/*此处需要说明的是:/opt/bigdata/hadoop和/opt/bigdata/jdk分别为hadoop和jdk安装包所在路径*/

 

2.2 横向配置

横向配置涉及$/HADOOP_HOME/etc/hadoop目录下的四个配置文件,分别是:core-site.xml, hdfs-site.xml. hadoop-env.sh和slaves

a. 配置core-site.xml 

<configuration>

   <property>

        <name>fs.defaultFS</name>

        <value>hdfs://westgis101:8020</value> 

  </property>

 </configuration>

/*此处wetgis101为NameNode的机器名,8020为RPC通讯端口*/

 

b. 配置hdfs-site.xml

<configuration>

  <property>

        <name>dfs.replication</name>

        <value>3</value> 

  </property>

 <property>

       <name>dfs.namenode.name.dir</name>

        <value>/opt/hdfs/name</value> 

  </property>

 <property>

        <name>dfs.datanode.data.dir</name>

        <value>/opt/hdfs/data</value> 

  </property>

</configuration>

/*此处dfs.replation为数据的备份个数,一般情况为3*/

/*此处/opt/hdfs/name为元数据在NameNode本地存储路径,手动创建*/

/*此处/opt/hdfs/data为实际数据在DataNode本地存储路径,手动创建*/

 

c. 配置hadoop-env.sh

在文件最后增加 export JAVA_HOME=/opt/bigdata/jdk

/*在配置文件中增加jdk的路径*/

 

d. 配置slaves

打开该文件,将HDFS集群所有的DataNode机器名加入到文件中,每行一个DataNode,形式如:

westgis102

westgis103

westgis104

......

三、复制主节点配置到所有从节点

首先,将NameNode上环境变量配置文件拷贝到每个DataNode,接着将NameNode上$/HADOOP_HOME/etc/hadoop下的四个配置文件拷贝到所有DataNode节点。

此处可以写全自动化的脚本在主节点上执行,脚本内容如下:

scp $/HADOOP_HOME/etc/hadoop/core-site.xml                    xiongwen@westgis102: $/HADOOP_HOME/etc/hadoop/

/*写脚本的过程中,配置文件名和节点名称均可以作为变量*/

 

四、集群的初始化与启动

 a.格式化HDFS

    hadoop namenode -format

 b.启动HDFS

  主节点执行 $HADOOP_HOME/sbin/start-dfs.sh

c.Web监控界面

    URL   http://westgis101:50070

   /*监控界面显示了集群的相关信息如NN节点个数、节点存储空间等信息*/

 d.命令行状态查看集群状态

   hadoop dfsadmin –report    /*显示节点个数、节点存储空间等信息*/

 e.停止HDFS

    主节点执行 $HADOOP_HOME/sbin/stop-dfs.sh

 

五、常见的错误排查方法

 a. 查看java进程(一)

   jps  /*显示当前账户java进程*/

 b.查看java进程(二)

  ps aux|grep java /*显示当前节点java进程,功能比(一)强大*/

 c.查看端口是否开启

   netstat –tunlp|grep 50070   

 d.占用某个端口的进程

   lsof–i:50070 

 e.异常处理查看日志

   $HADOOP_HOME/logs/*-DataNode-.log

   $HADOOP_HOME/logs/*-DataNode-.out

 

HDFS的安装模式

伪分布模式

在本地文件系统上运行

NameNode、DataNode、secondarynamenode全部部署在一台机器上,在一台机器上模拟分布式部署

集群模式

运行在多台机器的HDFS上

 

需要配置好的文件:

1、设置静态IP地址

2、设置DNS解析

Hadoop 集群之间通过主机名互相访问,因此需要设置DNS解析

设置主机名:编辑配置文件“/etc/sysconfig/network”

      NETWORKING=yes

      HOSTNAME=hadoop

设置节点IP与主机名的映射:编辑文件“/etc/hosts”

例如:192.168.126.110 hadoop

注意:标红需保持一致

验证配置:执行“ping  hadoop/192.168.126.110”命令。

3、关闭防火墙

4、设置SSH自动登录

5、安装JDK

 

安装HDFS

1.解压hadoop安装包

tar zxvf hadoop-2.6.0-cdh5.5.0.tar.gz 

2. 重命名:

mv hadoop-2.6.0-cdh5.5.0  hadoop

3.配置环境变量:

vi etc/profile

#set java enviroment

export JAVA_HOME=/opt/software/java/jdk1.8.0

export JRE_HOME=/opt/software/java/jdk1.8.0/jre

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export CLASSPATH=.:$JRE_HOME/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

            

#set zookeeper enviroment

export ZOOKEEPER_HOME=/opt/software/zookeeper

export PATH=$PATH:$ZOOKEEPER_HOME/bin

      

#set hadoop enviroment

export HADOOP_HOME=/opt/software/hadoop/hadoop-2.7.3

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

 

 

4.修改配置文件: hadoop-env.sh 

cd home/hadoop/hadoop/etc/hadoop

vi hadoop-env.sh 

 

export JAVA_HOME=/home/hadoop/jdk

 

vi core-site.xml

<property>

   <name>fs.default.name</name>

<value>hdfs://master2:9000</value>

   <description>change your own hostname</description>

</property>

<property>

   <name>hadoop.tmp.dir</name>

   <value>file:/opt/software/hadoop/hadoop-2.7.3/temp</value>

</property> 

<property>

   <name>io.file.buffer.size</name>

   <value>131702</value>

</property>

 

5.修改配置文件:hdfs-site.xml

<property>   <name>dfs.namenode.name.dir</name>

   <!--namenode节点数据存储目录-->

   <value>/opt/software/hadoop/hadoop-2.7.3/hdfs/name</value>

</property>

 

<property>

   <!--datanode数据存储目录-->

   <name>dfs.datanode.data.dir</name>

   <value>/opt/software/hadoop/hadoop-2.7.3/hdfs/data</value>

</property>

 

<property>

   <!--指定DataNode存储block的副本数量,不大于DataNode的个数就行-->

   <name>dfs.replication</name>

   <value>1</value>

</property>

 

<property>

<!--指定master的http地址-->

<name>dfs.namenode.http-address</name>

<value>master2:50070</value>

</property>

 

<property>

   <!--指定master的https地址-->

   <name>dfs.namenode.secondary.https-address</name>

   <value>master2:50091</value>

</property>

 

<property>

   <!--必须设置为true,否则就不能通过web访问hdfs上的文件信息-->

   <name>dfs.webhdfs.enabled</name>

   <value>true</value>

</property>

 

6.修改配置文件:mapred-site.xml

<property>

   <name>mapreduce.framework.name</name>

   <value>yarn</value>

</property>

 

<property>

   <name>mapreduce.jobhistory.address</name>

   <value>0.0.0.0:10020</value>

</property>

 

<property>

   <name>mapreduce.jobhistory.webapp.address</name>

   <value>0.0.0.0:19888</value>

</property>

 

7.配置:yarn-site.xml

<property>

<name>yarn.resourcemanager.hostname</name>        

   <value>master2</value>

</property>

 

<property>

   <!--用户可通过该地址在浏览器中查看集群各类信息。-->

   <name>yarn.resourcemanager.webapp.address</name>      

   <value>master2:8088</value>

</property>

 

<property>

   <!--NodeManager上运行的附属服务。需配置成mapreduce_shuffle,

才可运行MapReduce程序-->

   <name>yarn.nodemanager.aux-services</name>     

   <value>mapreduce_shuffle</value>

</property>

 

8. vi slaves

slave01

........

 

9.hdfs初始化:

hdfs namenode -format    ---格式化namenode

注意:如果NameNode出现错误,删掉name文件并重新格式化即可。

 

 

显示成功即可。

 

10.启动HDFS

 

start-dfs.sh

 

jps

 

start-yarn.sh

 

 

 

 

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论