分布式文件系HDFS-部署和配置
Posted wendyw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式文件系HDFS-部署和配置相关的知识,希望对你有一定的参考价值。
1 部署HDFS
HDFS的基本操作可以分为集群管理和文件系统操作两种类型:
- 集群管理:包括Namenodede 的格式化、集群的启动和停止、集群信息查看等。
- 文件系统:包括对目录、文件和权限等内容的操作。
HDFS中的命令主要在sbin和bin目录下[一般要进行环境变量的设置]:
- sbin:集群控制脚本(.sh)。
- bin:hadoop的文件系统命令和其他管理维护工具。
1.1 hadoop安装和维护的方式
主要有2种方式:
- 一是从开源软件的官网网站直接下载软件包。
- 二是利用集成化软件对Hadoop集群进行部署和维护。[集成化工具:amabri、cloudera manager、华为的FusionInsight]
第一种方式缺点:
- 配置优化难度
- 组件整合难度
1.2 部署HDFS的核心步骤和部署原则
1.2.1 集群规划
- hadoop系统的规模
- 组件和角色规划
- A.确定需要安装哪些组件:比如要实现Namenode的高可用性,就需要额外安装ZK组件。
- B.确定组件中的不同角色分别安装在哪些节点上:比如需要几个Datanode,分别安装在哪些服务器上,Namenode是安装在独立服务器上,还是和某个Datanode共享一台服务器。
- C.根据角色规划确定所需的服务器性能需求:比如namenode所在服务器可以适当加大内存,以适应fsimage的可能大小,并且安装多块硬盘,将元数据信息保存在多个硬盘路径上,防止单个硬盘发生故障。
- D.节点扩增:计算和存储能力不够时,很多时候就通过节点数量解决。
- 配置规划:Datanode和Namenode一般都可以配置多个存储路径。
- A.Datanode实现多硬盘均匀存储。
- B.Namenode可以实现多副本备份。
1.2.2 linux环境准备
HDFS作为hadoop的核心组件,随Hadoop一起整体部署。
安装hadoop前的环境准备:
- 配置java环境变量:export JAVA_HOME=/opt/java/jdk
- hadoop部署在多台服务器上,主从节点之间、各节点之间可以通过TCP/IP协议相互访问[通过设置DNS或hosts文件,使得主机名和IP地址绑定,实现通过主机名就能访问对方]
- 确保hadoop所需端口打开:hadoop以及各类配套模板需要使用大量网络端口,但是自带的防火墙软件,设置不当造成功能无法正确运行。
- SSH接口免密登录
- Hadoop以及分布式NoSQL数据库要求各个节点之间的时间同步:最常见的集群时间同步方案是部署NTP服务。
//确保hadoop所需端口打开,通过命令禁用并停止防火墙服务 systemctl mask filewalld systemctl stop fillwalld
1.2.3 Hadoop的软件包部署
- sbin目录:存放HDFS和Yarn组件的集群控制命令。
- bin目录:存放HDFS的文件系统命令行工具以及Yarn等组件的命令行工具。
- etc/hadoop目录:存放hadoop的配置文件。
- share目录:存放hadoop的各类库包(Jar)。
PS:分布式的时候,hadoop软件包需要解压缩,并复制到所有节点上,并且在每个节点上的存储位置都是相同的,并给予足够的用户访问权限。其次,进行系统配置。
2 HDFS的基本配置
HDFS的配置文件:大多数默认是XML和TXT格式存在。配置文件默认存放在/etc/hadoop目录下。
HDFS中6个重要的配置文件:
- core-site.xml:Hadoop全局的配置文件,也包含一些HDFS的宏观配置。
- dfs-site.xml:HDFS配置文件。
- yarn-site.xml:YARN配置文件。
- mapred-sie.xml:MapReduce配置文件。
- slaves:从节点列表。
- hadoop-env.sh:与运行脚本的环境变量相关的配置文件。
2.1 core-site.xml
//core-site.xml文件 <configuration> <property><!--指定namenode的地址--> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> <description>node1节点为该集群的Namenode,对应节点的端口是8020</description> </property> <property><!--用来指定使用hadoop时产生文件的存放目录--> <name>hadoop.tmp.dir</name> <value>file:/data/hadoop/hadoop-2.6.0/tmp</value> </property> </configuration>
2.2 dfs-site.xml
dfs-site.xml:HDFS的重要配置文件,其Namenode节点和Datanode节点相关的配置项不同。
Namenode主要有3个配置项:dfs.namenode.name.dir、dfs.blocksize、dfs.replication。
Datanode主要有1个配置项:dfs.datanode.data.dir。
//Namenode主要有3个配置项dfs.namenode.name.dir、dfs.blocksize、dfs.replication。 //Datanode主要有1个配置项 dfs.datanode.data.dir <configuration> <property> <name>dfs.namenode.name.dir</name> <value>/opt/dfs/name</value> <description>namenode的目录位置,对应的目录需要存在value里面的路径</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/dfs/data</value> <description>datanode的目录位置,对应的目录需要存在value里面的路径,可以是一个或多个用逗号分隔的本地路径</description> </property> <property> <name>dfs.replication</name> <value>2</value> <description>hdfs系统的副本数量 </description> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> <description>备份namenode的http地址,master是主机名</description> </property> </configuration>
2.3 slaves
slaves:在Namenode节点还需要建立一个名为slaves的文本文件,里面记录Datanode的子节点机名,用换行分割。
2.4 hadoop-env.sh
JAVA_HOME进行环境变量配置:export JAVA_HOME=/opt/java/jdk
2.5 配置机架感知策略
需要实现机架感知的配置内容,在core-site.xml中实现两个配置项。
net.topology.node.switch.mapping.imp:org.apache.hadoop.net.TableMapping,表示采用映射文件的方式实现机架映射。
net.topology.table.file.name:内容为映射文件的路径和名称。
3 集群的启动和停止
软件包sbin目录下的start-dfs.sh和stop-dfs.sh为HDFS的集群启动和停止命令。
其次可以通过查看http://namenode:50070/查看系统的状态,比如该系统的启动时间、版本、集群ID等信息。
4 使用和管理HDFS
作为文件系统,HDFS的使用主要指对文件的上传、下载和移动,以及查看内容、建立或删除目录等。
查看HDFS状态,主要指查看节点的健康状态,查看存储容量,查看分块信息等。
控制HDFS,主要指对系统进行初始化,增加或删除子节点,以及提高HDFS的可用性等。
4.1 管理和操作命令
hdfs的命令行操作用命令hdfs实现,即命令行敲入:hdfs.hdfs命令文件放在Hadoop目录下的bin子目录中,包含了HDFS绝大多数的用户命令,不带任何参数地执行hdfs,可以看到所有可用的指令。
- dfs:HDFS的文件系统操作指令。
- dfsadmin:HDFS的集群管理命令,比如:查看机架感知状态,可以执行hdfs dfsadmin-printTopology。
- fsck:HDFS的集群检查工具。
- namenode-format:主节点格式化指令。
- balaner:数据平衡指令。
4.2 格式化Namenode
hdfs namenode -format
4.3 Namenode的安全模式
当namenode启动时,需要将fsimage等信息读入内存,并且等待各个Datanode上报存储状态,在这个过程完成之前,叫安全模式。(safenode)
此时namenode为只读状态,只能读取不能写入,当足够数量的节点以及数据块处在健康状态时,系统会自动退出安全模式。
手动对安全模式进行管理:hdfs dfsadmin -safemode [enter | leave |get |wait]
4.4 元数据恢复
由于secondary namenode在进行元数据合并时,保存了元数据的副本信息,当Namenode发生损坏时,可以利用secondary namenode中的数据进行恢复。
- 利用stop-dfs.sh命令停止整个集群
- 清空namenode原有的元数据信息,路径可以从配置项dfs.namenode.name.dir中获得。
- 如果secondary namenode和namenode没有部署在同一个节点上,需要将secondary namenode存储的副本信息复制到namenode,其路径和secondary namenode中的元数据副本的路径一致,可以从配置项dfs.namenode.checkpoint.dir中获得。
- 执行hadoop namenode-importCheckpoint,系统将检查副本数据,并将其复制到dfs.namenode.name.dir所指示的路径当中。
4.5 子节点添加与删除
1.静态添加/删除Datanode的方法
- 利用stop-dfs.sh命令停止整个集群
- 在namenode节点上的slaves配置文件中添加新的节点,或删掉旧的节点。添加新节点时,要确保新节点和其他节点之间主机名和IP地址可以相互访问,可以实现SSH无密码访问等。
- 利用start-dfs.sh重新启动集群,在新节点配置正确的情况下,会随命令启动Datanode角色,并和Namenode连接。
- 可以执行hdfs balancer命令,在节点之间进行手动的数据平衡。删除节点之后,namenode会自动检查副本数量,并选择新的节点存储不足的副本。
2.动态添加Datanode的方法
- HDFS集群保持运行状态
- 在namenode节点上的slaves配置文件中添加新的节点。
- 在新节点执行hadoop-daemon.sh start datanode ,启动Datanode角色
- 在主节点执行hdfs dfsadmin -refreshNodes,刷新节点列表,Namenode会根据新列表和子节点建立联系。
3.动态删除Datanode的方法
- HDFS集群保持运行状态
- 提前在hdfs-site.xml中配置dfs.hosts.exclude属性,内容为一个本地文本文件的路径,该文件可以称为exclude文件,其结构和slave文件的相同,即为每行一个节点主机名的列表。
- 在主节点执行hdfs dfsadmin -refreshNodes,刷新节点列表。
- 在节点写入exclude文件,并执行hdfs dfsadmin -refreshNodes,刷新节点列表。
添加/删除Datanode完成之后,可以通过两种手段查看结果。
- 在命令行执行hdfs dfsadmin -report 查看节点列表信息。
- 通过web界面,切换到Datanodes标签,可以查看子节点的列表,in operation表示正在使用的节点,decommissinoning,表示目前禁用的节点。
4.6 HDFS文件系统操作
4.7 以web方式查看文件系统
以上是关于分布式文件系HDFS-部署和配置的主要内容,如果未能解决你的问题,请参考以下文章