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 root@192.168.0.10:/etc/hosts /etc/
[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave1
[root@centos1 /]# reboot
.
**(slave2)**
[root@centos1 /]# scp root@192.168.0.10:/etc/hosts /etc/
[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave2
[root@centos1 /]# reboot
.
**(slave3)**
[root@centos1 /]# scp root@192.168.0.10:/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
<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>
.
.
[root@centos1 /]# mv mapred-site.xml.tempalte mapred.site.xml
[root@centos1 /]# 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>
.
.
[root@centos1 /]# 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>
.
.
[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 /]# 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 root@192.168.0.10:/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 root@192.168.0.11:/etc/hosts /etc/
[root@centos1 /]# scp root@192.168.0.12:/etc/hosts /etc/
[root@centos1 /]# scp root@192.168.0.13:/etc/hosts /etc/
[root@centos1 /]# scp root@192.168.0.14:/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
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/excludes</value>
</property>
[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时表明这个节点已经被删除
原文地址:http://blog.51cto.com/13555423/2085261