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上配置域名解析与主机名

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

[root@centos1 /]# reboot

.

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

[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave1

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

[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave2

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

[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave3

[root@centos1 /]# reboot

.

(master 0.10)

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

.

[root@centos1 /]# source /etc/profile
[root@centos1 /]# java -version

.
添加hadoop用户

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

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

[root@centos1 /]# su - hadoop
[root@centos1 /]# ssh-keygen
.
slave1上的hadoop用户的密码
[root@centos1 /]# ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave1
[root@centos1 /]# ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave2
[root@centos1 /]# ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave3

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

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

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

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

.
配置hadoop

[root@centos1 /]# cd /media

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

.
.

[root@centos1 /]# vim core-site.xml

 
  fs.defaultFS
  hdfs://master:9000 //master主机名
 
 
  hadoop.tmp.dir
  file:/usr/local/hadoop/tmp
  hadoop 临时缓存目录
 

.
.

[root@centos1 /]# mv mapred-site.xml.tempalte mapred.site.xml
[root@centos1 /]# vim mapred-site.xml



mapred.job.tracker     //连接jobtrack服务区的配置项,默认local,map数为1,master是本机主机名
master:9001


mapred.local.dir
/usr/local/hadoop/var    //作为本地计算机使用的文件夹,可配置多块硬盘用,分隔

.
.

[root@centos1 /]# vim hdfs-site.xml



 dfs.namenode.name.dir
 file:/usr/local/hadoop/name


 dfs.datanode.name.dir
 file:/usr/local/hadoop/name


 dfs.replication
 3   //副本数每块复制几份


 dfs.webhdfs.enabled
 true    //启用web访问hdfs,访问格式httpd://master:50070

.
.

[root@centos1 /]# vim masters

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

[root@centos1 /]# vim slaves
slave1
slave2
slave3

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

[root@centos1 /]#  scp * slave1:/usr/local/hadoop/etc/hadoop

[root@centos1 /]#  scp * slave2:/usr/local/hadoop/etc/hadoop

[root@centos1 /]#  scp * slave3:/usr/local/hadoop/etc/hadoop

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

看到截图说明成功

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





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

[root@centos1 /]# hadoop fs -ls /
[root@centos1 /]# hadoop fs -mkdir /input
[root@centos1 /]# hadoop fs -ls /
[root@centos1 /]# hadoop fs -put /usr/local/hadoop/etc/hadoop/* /input
hadoop fs -ls /input

[root@centos1 /]# hdfs dfsadmin -report //查看所哟节点
的状态

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

[root@centos1 /]# hdfs dfsadmin -safemode enter
[root@centos1 /]# hdfs dfsadmin -safemode leave

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

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

[root@centos1 /]# hadoop fs -ls

[root@centos1 /]# hadoop fs -copyFormLocal /passwd /var

[root@centos1 /]# chmod 777 /var/
[root@centos1 /]# hadoop fs -copyFormLocal /passwd /var

.
权限和归属
修改属组

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

.
修改权限

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

.
修改所有者

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

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

[root@centos1 /]# hadoop fs -du -s -h /passwd
格式:hadoop fs -du 目录

.
合并文件

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

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

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

[root@centos1 /]# scp [email protected]:/etc/profile /etc

[root@centos1 /]# source /etc/profile
[root@centos1 /]# java -version

[root@centos1 /]# cd /meida
[root@centos1 /]# tar zxf hadoop-2.4.0.tar.gz -C /usr/src
[root@centos1 /]# cd /usr/src
[root@centos1 /]# mv hadoop-2.4.0/ /usr/local/hadoop

[root@centos1 /]# chown -R hadoop:hadoop /usr/local/hadoop

.
.

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

[root@centos1 /]# 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)

[root@centos1 /]# scp [email protected]:/etc/hosts /etc/
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/

0.14重启
.
(slave4)

[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave4
重启

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

[root@centos1 /]# su -hadoop
[root@centos1 /]# ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave4

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

[root@centos1 /]# vim /usr/local/hadoop/etc/hadoop/slaves
slave1
slave2
slave3
slave4
[root@centos1 /]# scp /usr/local/hadoop/etc/hadoop/* slave1:/usr/local/hadoop/etc/hadoop/
[root@centos1 /]# scp /usr/local/hadoop/etc/hadoop/* slave2:/usr/local/hadoop/etc/hadoop/
[root@centos1 /]# scp /usr/local/hadoop/etc/hadoop/* slave3:/usr/local/hadoop/etc/hadoop/
[root@centos1 /]# scp /usr/local/hadoop/etc/hadoop/* slave4:/usr/local/hadoop/etc/hadoop/

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

[root@centos1 /]# hadoop-daemon.sh start datanode
[root@centos1 /]# hadoop-daemon.sh start tasltracker

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

[root@centos1 /]# jps
3024 Jps
2924 DataNode

.
开启负载均衡

[root@centos1 /]# start-balancer.sh

[root@centos1 /]# service iptables stop

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

[root@centos1 /]# vim /usr/local/hadoop/etc/hadoop/core-site.xml


dfs.hosts.exclude
/usr/local/hadoop/etc/hadoop/excludes


[root@centos1 /]# cd /usr/local/hadoop/etc/hadoop
.
[root@centos1 /]#  vim excludes
slave4

.

刷新配置
[root@centos1 /]# hdfs dfsadmin -refreshNodes

.
(slave4)

检查slave4的进程
[root@centos1 /]# jps

.
(master)
查看集群信息

[root@centos1 /]# hadoops fsadmin -report

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

转载于:https://blog.51cto.com/13555423/2085261

你可能感兴趣的:(HDFS分布式文件系统)