设为首页 收藏本站
查看: 644|回复: 0

[经验分享] Hadoop-HDFS分布式环境搭建

[复制链接]

尚未签到

发表于 2016-12-8 10:23:03 | 显示全部楼层 |阅读模式
最近在考虑一个移动互联网的AppStore项目,就应用及游戏如何存储,对多种内容存储容器进行了选型,其中也包括了对HDFS的考察,本篇是对HDFS的分布式环境搭建进行一个备忘录,以备日后参考。
 
HDFS简单介绍
HDFS的英文全称是HadoopDistributed 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可以做相应处理,以保证数据的高可用性。
HDFS的目标就是使用大量的廉价PC机,来维护海量的大数据块,并且保证数据的高可用性,并且HDFS集群会随着更多PC机的加入,而提高数据的存储量(当然这与具体环境的硬盘相关)与吞吐量(当然这与具体环境的网卡带宽相关),单个Hadoop集群一般最大可达2000个节点。
在可预见的未来,大数据(BigData)必然会常态化,当前业内的IT巨头均在对HDFS进行研究,如GoogleYahoo,阿里等,不过,开源世界好就好在,“科技巨头”搞的玩意,我们草根也可以尝试一下,呵呵,下面就具体介绍一下HDFS的分布式环境搭建。
 
具体搭建环境描述
由三台机器组成,1NameNode2DataNode
NameNode:172.16.4.14
DataNode:172.16.4.20
DataNode:172.16.3.35
 
具体搭建过程描述
三台机器的所有配置保持一致就可以了,下面是以NameNode机器上的配置过程进行描述:
1、安装Java1.6(略);
2、以root登录,为HDFS新建一个帐号(不是必须的,但这样比较符合linux下的安全规范,呵呵)
[iyunv@test-2 ~]# useradd hdfs
[iyunv@test-2 ~]# passwd hdfs
Changing password foruser test.
New UNIX password:
Retype new UNIXpassword:
passwd: allauthentication 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中,增加
exportHADOOP_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/.sshhdfs@172.16.4.20:/home/hdfs
完成以上操作后,可以尝试命令sshlocalhost,以及ssh 172.16.4.20,看看现在使用ssh是否需要密码了,如果不需要,那恭喜你,成功了
 
7、对/home/hdfs/hadoop/conf/下的几个关键配置文件进行配置
core-site.xml配置
<configuration>
     <property>
        <name>fs.default.name</name>
        <value>hdfs://172.16.4.14:9000</value>
     </property>
</configuration>
 
hdfs-site.xml配置
<configuration>
     <property>
         <name>dfs.name.dir</name>
        <value>/home/hdfs/hadoop/data/dfs.name.dir</value>
     </property>
     <property>
         <name>dfs.data.dir</name>
        <value>/home/hdfs/hadoop/data/dfs.data.dir</value>
     </property>
     <property>
        <name>dfs.permissions</name>
         <value>false</value>
     </property>
     <property>
        <name>dfs.replication</name>
         <value>2</value>
     </property>
</configuration>
 
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:10INFO security.Groups: Group mappingimpl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping;cacheTimeout=300000
11/10/01 23:55:10WARN conf.Configuration: mapred.task.id is deprecated. Instead, usemapreduce.task.attempt.id
Found 4 items
drwxr-xr-x   - hdfs     supergroup          0 2011-09-2617:30 /user/hdfs/apk
drwxr-xr-x   - hdfs     supergroup          0 2011-09-2211: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-0123: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的设计目标与基本假设的:“移动计算比移动数据更加经济”。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-311380-1-1.html 上篇帖子: Hadoop MapReduce工作机制 下篇帖子: 【转】Hadoop集群的NameNode的备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表