HDFS分布式文件系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS分布式文件系统相关的知识,希望对你有一定的参考价值。

hadoopo原理
hadoop2.0的HA 机制有两个namenode,一个是active namenode,状态是active;另外一个是standby namenode,状态是standby。两者的状态是可以切换的,但不能同时两个都是active状态,最多只有1个是active状态。只有active namenode提供对外的服务,standby namenode是不对外服务的。active namenode和standby namenode之间通过NFS或者JN(journalnode,QJM方式)来同步数据。
.
Hadoop的简介:
Hadoop是apache软件基金会的开源分布式计算平台hadoop集群包括两种角色Mater和Slave。一个HDFS集群由一个运行于Master上的NameNode和若干个运行于Slave节点的DataNode组成。
.
NameNode负责管理文件系统命名空间和客户端对文件系统的访问操作;DataNode管理存储的数据。文件以块形式在DataNode中存储,假如一个块大小设置为50MB,块的副本数为3(通过设置块的副本数来达到冗余效果,防止单个DataNode磁盘故障后数据丢失),一个40MB的文件将被存储在一个块中,然后将相同的3个块存储在3个DataNode中实现冗余。大文件将被切成小块存储。
.

项目要求:
搭建hadoop的HDFS,通过DataNode节点的添加与删除实现HDFS空间动态增加与减少,以及HDFS文件系统的基本管理。
.
.
环境:
master:Redhat 6.5 x86 :192.168.0.10
slave1:Redhat 6.5 x86 :192.168.0.11
slave2:Redhat 6.5 x86 :192.168.0.12
slave3:Redhat 6.5 x86 :192.168.0.13
slave4:Redhat 6.5 x86 :192.168.0.14

.
准备环境
master、slave1~3上配置域名解析与主机名

[[email protected] /]# vim /etc/hosts
 192.168.0.10 master
 192.168.0.11 slave1
 192.168.0.12 slave2
 192.168.0.13 slave3"
.
[[email protected] /]# vim /etc/sysconfig/network
HOSTNAME=master

[[email protected] /]# reboot

.

**(slave1)**
[[email protected] /]# scp [email protected]:/etc/hosts /etc/

[[email protected] /]# vim /etc/sysconfig/network
HOSTNAME=slave1

[[email protected] /]# reboot
.
**(slave2)**
[[email protected] /]# scp [email protected]:/etc/hosts /etc/

[[email protected] /]# vim /etc/sysconfig/network
HOSTNAME=slave2

[[email protected] /]# reboot
.
**(slave3)**
[[email protected] /]# scp [email protected]:/etc/hosts /etc/

[[email protected] /]# vim /etc/sysconfig/network
HOSTNAME=slave3

[[email protected] /]# reboot

.

(master 0.10)

JDK安装
[[email protected] /]# mount /dev/cdrom /media
[[email protected] /]# tar zxf jdk-7u65-linux-x64.gz -C /usr/src
[[email protected] /]# cd /usr/src
[[email protected] /]# mv jdk1.7.0_65/ /usr/local/java
[[email protected] /]# vim /etc/profile
export JAVA_HOME=/usr/local/java    //在末尾添加两行
export PATH=$PATH:$JAVA_HOME/bin

.

[[email protected] /]# source /etc/profile
[[email protected] /]# java -version

.
添加hadoop用户

[[email protected] /]# useradd hadoop
[[email protected] /]# passwd hadoop
同理:在slave1-slave3上重复步骤2)和步骤3),这里就不在演示

.
配置SSH密钥对
要求master免密码登录各slave,用于开启相应服务。
Master无密码连接slave,先切换hadoop用户,用ssh-keygen按照默认配置直接按Enter键生成密钥对,通过ssh-copy-id将公钥复制至3个slave主机中,复制过程需要输入slave主机的hadoop用户密码,作用是master远程启动slave。

[[email protected] /]# su - hadoop
[[email protected] /]# ssh-keygen
.
slave1上的hadoop用户的密码
[[email protected] /]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
[[email protected] /]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
[[email protected] /]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

.
安装hadoop,在master和slave上配置环境变量。
.
安装hadoop

[[email protected] /]# exit
[[email protected] /]# cd /meida
[[email protected] /]# tar zxf hadoop-2.4.0.tar.gz -C /usr/src
[[email protected] /]# cd /usr/src
[[email protected] /]# mv hadoop-2.4.0/ /usr/local/hadoop
[[email protected] /]# ls /usr/local/hadoop

hadoop不需编译安装,在上述6个目录中etc/hadoop是住配置文件目录sbin/下存放启动停止脚本
.

[[email protected] /]# chown -R hadoop:hadoop /usr/local/hadoop
.
配置环境变量
[[email protected] /]# vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/bin

.
配置hadoop

[[email protected] /]# cd /media

[[email protected] /]# /bin/cp -r hadoop /usr/local/hadoop/etc/
[[email protected] /]# su - hadoop
[[email protected] /]# cd /usr/local/hadoop/etc/hadoop
[[email protected] /]# vim hadoop-env.sh
export JAVA_HOME=/usr/local/java    //添加java环境变量

.
.

[[email protected] /]# vim core-site.xml
<configuration>
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://master:9000</value> //master主机名
 </property>
 <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/usr/local/hadoop/tmp</value>
  <description>hadoop 临时缓存目录</description>
 </property>
</configuration>

.
.

[[email protected] /]# mv mapred-site.xml.tempalte mapred.site.xml
[[email protected] /]# vim mapred-site.xml

<configuration>
<property>
<name>mapred.job.tracker</name>     //连接jobtrack服务区的配置项,默认local,map数为1,master是本机主机名
<value>master:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/usr/local/hadoop/var</value>    //作为本地计算机使用的文件夹,可配置多块硬盘用,分隔
</property>
</configuration>

.
.

[[email protected] /]# vim hdfs-site.xml

<configuration>
<property>
 <name>dfs.namenode.name.dir</name>
 <value>file:/usr/local/hadoop/name</value>
</property>
<property>
 <name>dfs.datanode.name.dir</name>
 <value>file:/usr/local/hadoop/name</value>
</property>
<property>
 <name>dfs.replication</name>
 <value>3</value>   //副本数每块复制几份
</property>
<property>
 <name>dfs.webhdfs.enabled</name>
 <value>true</value>    //启用web访问hdfs,访问格式httpd://master:50070
</property>

.
.

[[email protected] /]# vim masters

master  //在文件中指定namenode的主机名

[[email protected] /]# vim slaves
slave1
slave2
slave3

指定datanode的主机名有多少slave就写多少
.
每个slave主机重复步骤1)和步骤2)(即它们也需要安装hadoop并设置环境变量),等前两步完成了再由master通过SSH安全通道把刚才配置的6个文件复制给每个slave。
每个slave主机上重复1)和2)步骤的省略
.

[[email protected] /]#  scp * slave1:/usr/local/hadoop/etc/hadoop

[[email protected] /]#  scp * slave2:/usr/local/hadoop/etc/hadoop

[[email protected] /]#  scp * slave3:/usr/local/hadoop/etc/hadoop

.
.
使用HDFS初始化master
格式化HDFS文件系统
[[email protected] /]# hafs namenode -format

看到截图说明成功
技术分享图片

.
检查新生成的目录
[[email protected] /]# ll /usr/local/hadoop/name/br/>.
启动hadoop群集(开机hadoop的冗余功能)
启停hadoopde的管理命令位于@HADOOP_HOME/sbin下,以start-*或stop-*开头;单独启动HDFS分布式文件系统可使用start-dfs.sh,也可以使用以下命令启动整个hadoop集群
[[email protected] /]# start-all.sh
(输入master的hadoop用户密码)
(输入slave的hadoop的用户密码,所有slave密码要都一样)
验证访问
.
技术分享图片

技术分享图片

技术分享图片
[[email protected] /]# service iptables stop
通过浏览器查看NameNode,即master,访问http://192.168.0.10:50070,可以查看视图统计信息和HDFS存储信息等。
验证之前先关闭master和所有slave的防火墙
.
.
hadoop基本命令
使用“hadoop fs”命令可以结合普通的文件管理命令实现很多操作,如查看、修改权限、统计、获取帮助、创建、删除、上传下载文件等,更多的用法可使用“hadoop fs -help”或“hadoop fs -usage”命令查看。

[[email protected] /]# hadoop fs -ls /
[[email protected] /]# hadoop fs -mkdir /input
[[email protected] /]# hadoop fs -ls /
[[email protected] /]# hadoop fs -put /usr/local/hadoop/etc/hadoop/* /input
hadoop fs -ls /input

[[email protected] /]# hdfs dfsadmin -report //查看所哟节点
的状态

.
.
HDFS高级命令
开机安全模式

[[email protected] /]# hdfs dfsadmin -safemode enter
[[email protected] /]# hdfs dfsadmin -safemode leave

enter开启安全模式
leaves关闭安全模式
安全模式下拒接写入数据到slave,一般用于维护,修改配置文件的情况下,修改完就关闭安全模式
.
.
复制
将本地文件复制到HDFS上(注意不要在安全模式下)
[[email protected] /]# hadoop fs -copyFormLocal /etc/passwd /

将/etc/passwd本地源文件复制到HDFS的/下
格式:hadoop fs -copyFromLocal 本地源文件 HDFS的目录
.
将HDFS上的文件复制到本地

[[email protected] /]# hadoop fs -ls

[[email protected] /]# hadoop fs -copyFormLocal /passwd /var

[[email protected] /]# chmod 777 /var/
[[email protected] /]# hadoop fs -copyFormLocal /passwd /var

.
权限和归属
修改属组

[[email protected] /]# hadoop fs -chgrp root /passwd
[[email protected] /]# hadoop fs -ls /passwd
格式:hadoop fs -chgrp [-R] group 文件或目录

.
修改权限

[[email protected] /]# hadoop fs -chmod 755 /passwd
[[email protected] /]# hadoop fs -ls /passwd
格式:hadoop fs -chmod [-R] group 文件或目录

.
修改所有者

[[email protected] /]# hadoop fs -chown root:root /passwd
[[email protected] /]# hadoop fs -ls /passwd
格式:hadoop fs -chown [-R] group 属主:属组 文件或目录

.
统计显示目录中文件大小

[[email protected] /]# hadoop fs -du -s -h /passwd
格式:hadoop fs -du 目录

.
合并文件

[[email protected] /]# touch secret
[[email protected] /]# hadoop fs -getmerge -nl /passwd /home/hadoop/secret
[[email protected] /]# head -3 secret
格式:hadoop fs -getmerge [-nl] HDFS的源文件 本地主机的目的文件 源文件和目的文件都是一样的数据了

.
.
(slave4)
为HDFS集群添加节点
slave4节点安装jdk与hadoop,配置环境变量

[[email protected] /]# mount /dev/cdrom /media
[[email protected] /]# useradd hadoop
[[email protected] /]# passwd hadoop
[[email protected] /]# tar zxf jdk-7u65-linux-x64.gz -C /usr/src
[[email protected] /]# cd /usr/src
[[email protected] /]# mv jdk1.7.0_65/ /usr/local/java

[[email protected] /]# scp [email protected]:/etc/profile /etc

[[email protected] /]# source /etc/profile
[[email protected] /]# java -version

[[email protected] /]# cd /meida
[[email protected] /]# tar zxf hadoop-2.4.0.tar.gz -C /usr/src
[[email protected] /]# cd /usr/src
[[email protected] /]# mv hadoop-2.4.0/ /usr/local/hadoop

[[email protected] /]# chown -R hadoop:hadoop /usr/local/hadoop

.
.

(master)
配置/etc/hosts解析,NameNode与4台DataNode都要配置

[[email protected] /]# vim /etc/hosts
192.168.0.10    master
192.168.0.11    slave1
192.168.0.12    slave2
192.168.0.13    slave3
192.168.0.14    slave4  //把新的节点slave4添加到master的hosts文件中

.
(slave1.2.3.4)

[[email protected] /]# scp [email protected]:/etc/hosts /etc/
[[email protected] /]# scp [email protected]:/etc/hosts /etc/
[[email protected] /]# scp [email protected]:/etc/hosts /etc/
[[email protected] /]# scp [email protected]:/etc/hosts /etc/

0.14重启
.
(slave4)

[[email protected] /]# vim /etc/sysconfig/network
HOSTNAME=slave4
重启

.
(master)
配置ssh无密码连接

[[email protected] /]# su -hadoop
[[email protected] /]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

.
在master上修改hadoop配置后,复制到其他节点

[[email protected] /]# vim /usr/local/hadoop/etc/hadoop/slaves
slave1
slave2
slave3
slave4
[[email protected] /]# scp /usr/local/hadoop/etc/hadoop/* slave1:/usr/local/hadoop/etc/hadoop/
[[email protected] /]# scp /usr/local/hadoop/etc/hadoop/* slave2:/usr/local/hadoop/etc/hadoop/
[[email protected] /]# scp /usr/local/hadoop/etc/hadoop/* slave3:/usr/local/hadoop/etc/hadoop/
[[email protected] /]# scp /usr/local/hadoop/etc/hadoop/* slave4:/usr/local/hadoop/etc/hadoop/

.
(slave4)
新节点启动并平衡节点已经存储的数据,启动两个

[[email protected] /]# hadoop-daemon.sh start datanode
[[email protected] /]# hadoop-daemon.sh start tasltracker

.
查看进程状态有两条说明正确

[[email protected] /]# jps
3024 Jps
2924 DataNode

.
开启负载均衡

[[email protected] /]# start-balancer.sh

[[email protected] /]# service iptables stop

.
(master)
查看集群信息
[[email protected] /]# hadoop dfsadmin -report
.
删除DataNode节点
增加exclude配置,作用为存放要删除的DataNode信息

[[email protected] /]# vim /usr/local/hadoop/etc/hadoop/core-site.xml

<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/excludes</value>
</property>

[[email protected] /]# cd /usr/local/hadoop/etc/hadoop
.
[[email protected] /]#  vim excludes
slave4

.

刷新配置
[[email protected] /]# hdfs dfsadmin -refreshNodes

.
(slave4)

检查slave4的进程
[[email protected] /]# jps

.
(master)
查看集群信息

[[email protected] /]# hadoops fsadmin -report

当发现节点信息为decommisssioned时表明这个节点已经被删除

以上是关于HDFS分布式文件系统的主要内容,如果未能解决你的问题,请参考以下文章

从设计到实现:HDFS复制流程细节 | 分布式文件系统读书笔记

02 HDFS 分布式环境实战

浅谈HDFS分布式文件系统

HDFS 分布式文件系统

HDFS读写机制剖析

HDFS分布式文件系统