Hadoop-HDFS分布式环境

HDFS简单介绍 node

HDFS的英文全称是Hadoop Distributed File System,顾名思义,就是Hadoop分布式文件系统,是根据GoogleGFS的论文,由Doug Cutting使用Java开发的开源项目。HDFS自己是Hadoop项目的一部分,为Hadoop提供了底层的数据存储,以供上层的各类实际应用使用(如Map/Reduce)。HDFS是典型的Master/Slave集群架构,由一个NameNode和多个DataNode组成,NameNode只能是一个,扮演着Master的角色,负责对具体存储块的元数据进行保存,如某个存储块具体保存在哪一个DataNode上;DataNode能够为多个,扮演着Slave的角色,负责对具体的存储块进行保存,一个相同的存储块根据配置能够保存到多个DataNode上,以保持数据的高可用性。客户端与HDFS交互时,典型的,会先询问NameNode具体的存储块在哪一个DataNode上,而后客户端会直接联系相应的DataNode,来获取或写入数据。各个DataNode会定时发送心跳至NameNode,以便NameNode了解DataNode的可用状态及存储状态,这样能够保证某一个DataNode挂掉,NameNode能够作相应处理,以保证数据的高可用性。 linux

HDFS的目标就是使用大量的廉价PC机,来维护海量的大数据块,而且保证数据的高可用性,而且HDFS集群会随着更多PC机的加入,而提升数据的存储量(固然这与具体环境的硬盘相关)与吞吐量(固然这与具体环境的网卡带宽相关),单个Hadoop集群通常最大可达2000个节点。 apache

在可预见的将来,大数据(BigData)必然会常态化,当前业内的IT巨头均在对HDFS进行研究,如GoogleYahoo,阿里等,不过,开源世界好就好在,“科技巨头”搞的玩意,咱们草根也能够尝试一下,呵呵,下面就具体介绍一下HDFS的分布式环境搭建。 安全

 

具体搭建环境描述 bash

由三台机器组成,1NameNode2DataNode 架构

NameNode:172.16.4.14 并发

DataNode:172.16.4.20 app

DataNode:172.16.3.35 ssh

 

具体搭建过程描述 分布式

三台机器的全部配置保持一致就能够了,下面是以NameNode机器上的配置过程进行描述:

1、安装Java1.6(略);

2、以root登陆,为HDFS新建一个账号(不是必须的,但这样比较符合linux下的安全规范,呵呵)

[root@test-2 ~]# useradd hdfs

[root@test-2 ~]# passwd hdfs

Changing password for user test.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

 

3、下载Hadoop软件包,官方下载地址:http://www.apache.org/dyn/closer.cgi/hadoop/core/

使用hdfs用户上传至/home/hdfs目录,并解压至 /home/hdfs/hadoop

[hdfs@test-2 ~]# tar -zxvf hadoop-0.21.0.tar.gz

 

4、增长HADOOP_HOME环境变量

.bash_profile中,增长

export HADOOP_HOME /home/hdfs/hadoop

使修改生效

[hdfs@test-2 ~]$ . .bash_profile

 

5、修改JAVA_HOME环境变量

编辑/home/hdfs/hadoop/conf/hadoop-env.sh

JAVA_HOME的值修改成真实有效的地址,若是不知道,请执行echo $JAVA_HOME 查看;

 

6、配置ssh环境

HDFS的各类操做,是经过ssh登陆后进行,默认状况下,须要屡次输入密码,比较麻烦(你能够执行ssh localhost试一试,看看是否须要输入密码),咱们要对ssh进行配置;

执行下面命令:

[hdfs@test-2 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

[hdfs@test-2 ~]# cat /home/hdfs/.ssh/id_dsa.pub > /home/hdfs/.ssh/authorized_keys

[hdfs@test-2 ~]# chmod 600 /home/hadoop/.ssh/authorized_keys //这句必需要执行

 

而后你能够经过scp命令,将authorized_keys拷贝至全部的DataNode机器上,并在DataNode机器上对authorized_keys文件赋予600的权限

[hdfs@test-2 ~]# scp -r /home/hdfs/.ssh hdfs@172.16.4.20:/home/hdfs

完成以上操做后,能够尝试命令ssh localhost,以及ssh 172.16.4.20,看看如今使用ssh是否须要密码了,若是不须要,那恭喜你,成功了

 

7、对/home/hdfs/hadoop/conf/下的几个关键配置文件进行配置

core-site.xml配置

 

    

         fs.default.name

         hdfs://172.16.4.14:9000

    

 

 

hdfs-site.xml配置

 

    

         dfs.name.dir

         /home/hdfs/hadoop/data/dfs.name.dir

    

    

         dfs.data.dir

         /home/hdfs/hadoop/data/dfs.data.dir

    

    

         dfs.permissions

         false

    

    

         dfs.replication

         2

    

 

 

masters配置

172.16.4.14

 

slaves配置

172.16.3.35

172.16.4.20

 

并将全部改动的配置文件,同步至每一个DataNode机器的相同文件夹下(仍然可以使用scp命令)

 

8、对NameNode进行格式化(该操做只需对NameNode操做)

执行

[hdfs@test-2 bin]$ /home/hdfs/hadoop/bin/hadoop namenode -format

 

9、启动!

ok,至此最基本的配置已经完成,是否是还挺简单的?呵呵

让咱们来启动HDFS吧,只须要对master机器进行操做哦(还记得前面说的,会经过ssh连上slave机器,对DataNode进行操做吧?);

执行

[hdfs@test-2 bin]$ /home/hdfs/hadoop/bin/start-dfs.sh

 

若是启动遇到问题,请对NameNodeDataNode的日志进行查看,路径为/home/hdfs/hadoop/logs,看看是否有Exception抛出。

 

10、简单对HDFS进行试用

HDFS交互的脚本均在/home/hdfs/hadoop/bin下,咱们这里主要以./hadoop脚本为例

建立一个名为newdir的新目录

[hdfs@test-2 bin]$ ./hadoop fs -mkdir newdir

查看HDFS文件系统/user/hdfs目录下的文件列表

[hdfs@test-2 bin]$ ./hadoop fs -ls /user/hdfs

在个人机器上,输出:

11/10/01 23:55:10 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000

11/10/01 23:55:10 WARN conf.Configuration: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id

Found 4 items

drwxr-xr-x   - hdfs      supergroup          0 2011-09-26 17:30 /user/hdfs/apk

drwxr-xr-x   - hdfs      supergroup          0 2011-09-22 11:35 /user/hdfs/mydir

drwxr-xr-x   - Doug.Wang supergroup          0 2011-09-22 11:35 /user/hdfs/mydir_1

drwxr-xr-x   - hdfs      supergroup          0 2011-10-01 23:52 /user/hdfs/newdir

 

能够看到,我以前创建的文件夹apk,mydir,mydir_1newdir,其余的操做指令可经过./hadoop fs来进行查看

 

写在最后的

在搭建了HDFS的最简分布式环境后,对HDFS集群进行了简单的并发访问测试。首先将13M左右的文件存储至HDFS,而后客户端同时进行1000个并发读的操做,基本上,性能瓶颈就在HDFS节点的网卡上了。

下面这种场景,应该是不适合使用HDFS的:

在同一个IDC内部,部署一个HDFS集群,而且内部均存储着较大的文件(1M-100M),在同一个IDC内部,有多台机器做为客户端会访问HDFS集群,经过内部千兆以太网去读取文件。试想,若是客户端请求较多时,IDC内部的以太网通道立刻就堵塞了,可能会引发“数据风暴”。

所以,在实践中,咱们对HDFS的使用,大概应当是这样的:不要将HDFS做为一个单纯的存储系统来使用,而应当结合HDFS上层的Map/Reduce架构,使HDFS中的大块数据并不会频繁地进行传输移动。数据在哪,咱们就在哪进行计算。这也是符合Hadoop的设计目标与基本假设的:“移动计算比移动数据更加经济”。

相关文章
相关标签/搜索