分布式⽂件系统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前的环境准备:
1. 配置java环境变量:export JAVA_HOME=/opt/java/jdk
2. hadoop部署在多台服务器上,主从节点之间、各节点之间可以通过TCP/IP协议相互访问[通过设置DNS或hosts⽂件,使得主机名和IP
地址绑定,实现通过主机名就能访问对⽅]
3. 确保hadoop所需端⼝打开:hadoop以及各类配套模板需要使⽤⼤量⽹络端⼝,但是⾃带的防⽕墙软件,设置不当造成功能⽆法正确运
⾏。
4. SSH接⼝免密登录
5. 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个重要的配置⽂件:
1. l:Hadoop全局的配置⽂件,也包含⼀些HDFS的宏观配置。
2. l:HDFS配置⽂件。
3. l:YARN配置⽂件。
4. l:MapReduce配置⽂件。
5. slaves:从节点列表。
6. hadoop-env.sh:与运⾏脚本的环境变量相关的配置⽂件。
2.l
//l⽂件
<configuration>
<property><!--指定namenode的地址-->
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
<description>node1节点为该集的Namenode,对应节点的端⼝是8020</description>
</property>
<property><!--⽤来指定使⽤hadoop时产⽣⽂件的存放⽬录-->
<name&p.dir</name>
<value>file:/data/hadoop/hadoop-2.6.0/tmp</value>
</property>
</configuration>
2.l
Namenode主要有3个配置项:dfs.namenode.name.dir、dfs.blocksize、plication。
Datanode主要有1个配置项:dfs.datanode.data.dir。
//Namenode主要有3个配置项dfs.namenode.name.dir、dfs.blocksize、plication。
/
/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&plication</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 配置机架感知策略
需要实现机架感知的配置内容,在l中实现两个配置项。
3 集的启动和停⽌
软件包sbin⽬录下的start-dfs.sh和stop-dfs.sh为HDFS的集启动和停⽌命令。
单独启动或停⽌⼀个HDFS进程,或者对单独的⾓⾊进⾏控制命令:hadoop-daemon.sh start | stop namenode
|datanode|secondarynamenode
4 使⽤和管理HDFS
hadoop分布式集搭建作为⽂件系统,HDFS的使⽤主要指对⽂件的上传、下载和移动,以及查看内容、建⽴或删除⽬录等。
查看HDFS状态,主要指查看节点的健康状态,查看存储容量,查看分块信息等。
控制HDFS,主要指对系统进⾏初始化,增加或删除⼦节点,以及提⾼HDFS的可⽤性等。
4.1 管理和操作命令
hdfs的命令⾏操作⽤命令hdfs实现,即命令⾏敲⼊:hdfs.hdfs命令⽂件放在Hadoop⽬录下的bin⼦⽬录中,包含了HDFS绝⼤多数的⽤户命令,不带任何参数地执⾏hdfs,可以看到所有可⽤的指令。
1. dfs:HDFS的⽂件系统操作指令。
2. dfsadmin:HDFS的集管理命令,⽐如:查看机架感知状态,可以执⾏hdfs dfsadmin-printTopology。
3. fsck:HDFS的集检查⼯具。
4. namenode-format:主节点格式化指令。
5. 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中的数据进⾏恢复。
1. 利⽤stop-dfs.sh命令停⽌整个集
2. 清空namenode原有的元数据信息,路径可以从配置项dfs.namenode.name.dir中获得。
3. 如果secondary namenode和namenode没有部署在同⼀个节点上,需要将secondary namenode存储的副本信息复制到namenode,其
路径和secondary namenode中的元数据副本的路径⼀致,可以从配置项dfs.namenode.checkpoint.dir中获得。
4. 执⾏hadoop namenode-importCheckpoint,系统将检查副本数据,并将其复制到dfs.namenode.name.dir所指⽰的路径当中。
4.5 ⼦节点添加与删除
⼤数据业务要求数据被不断采集、不断积累,需要分布式存储和NoSQL数据库等实现⽅便的横向扩展(scale out)。HDFS可以很⽅便的进⾏Datanode节点添加和删除。
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集保持运⾏状态
提前在l中配置lude属性,内容为⼀个本地⽂本⽂件的路径,该⽂件可以称为exclude⽂件,其结构和slave⽂件的相同,即为每⾏⼀个节点主机名的列表。记录在exclude⽂件中的主机,会在刷新之后被记作禁⽤状态,并在界⾯上看到这个状态。
在主节点执⾏hdfs dfsadmin -refreshNodes,刷新节点列表。
在节点写⼊exclude⽂件,并执⾏hdfs dfsadmin -refreshNodes,刷新节点列表。
添加/删除Datanode完成之后,可以通过两种⼿段查看结果。
在命令⾏执⾏hdfs dfsadmin -report 查看节点列表信息。
通过web界⾯,切换到Datanodes标签,可以查看⼦节点的列表,in operation表⽰正在使⽤的节点,decommissinoning,表⽰⽬前禁⽤的节点。
4.6 HDFS⽂件系统操作
可以通过执⾏hdfs dfs指令来进⾏各类操作,包括建⽴、删除⽬录、HDFS上的⽂件复制、移动和改名、本地⽂件系统和HDFS系统之间的⽂件相互复制等、⽂件的权限操作等。
hdfs dfs -ls / ----查看⽂件⽬录状态
hdfs dfs -lsr / ----递归查看hdfs的根⽬录下的内容的
hdfs dfs -mkdir /d1 ----在hdfs上创建⽂件夹d1
hdfs dfs -put <linux source > <hdfs destination> ----把数据从linux[本地⽂件]上传到hdfs的特定路径中[HDFS⽂件或路径]
hdfs dfs -get <hdfs source> <linux destination>----把数据从hdfs下载到linux的特定路径下
hdfs dfs -mv/-cp <hdfs source > <hdfs destination>---在HDFS系统中进⾏⽂件移动或复制,参数为HDFS的源地址和⽬的地址。
hdfs dfs -text <hdfs⽂件> ---将序列号⽂件转换成⽂本显⽰出来。
hdfs dfs -rm <hdfs⽂件> ----删除⽂件或空⽬录
hdfs dfs -rmr <hdfs⽂件> ----递归删除⽂件或空⽬录
//查看⽂件⽬录状态,-ls之后必须指明需要查看的⽬录
hdfs dfs -ls /hdfsdir/file1
hdfs dfs -ls hdfs://node1:8020/hdfsdir/file1
//建⽴新⽬录
hdfs dfs -mkdir /hdfsdir/dir1
//从本地⽂件系统向HDFS复制⽂件。-put、-copyFromLocal。
hdfs dfs -put localfile/hdfsdir/file1
hdfs dfs -put -f localfile1 localfile2/hadoopdir
//从HDFS向本地复制⽂件。-get、-copyToLocal。
hdfs dfs -get /hdfsdir/hdfsfile localfile
4.7 以web⽅式查看⽂件系统
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论