把数据文件分布到不同的节点上的目的是什么?在不同的节点上分布式计算,计算靠近数据的原则。
* Rack为机架,Switch为交换机(千兆,百兆) * 浅黄色服务器为Master节点(雇主,负责统一管理) * 灰蓝色服务器为Slave节点(奴隶,负责具体任务)
注:masters文件用于指定secondary的主机而不是namenode。slaves文件用于指定datanode和tasktracker, namenode由core-site.xml fs.default.name指定,jobtracker由mapred-site.xml mapred.job.tracker指定
* HDFS提供分布式的存储机制,一个文件分成很多的数据块,很多的数据块有分布在不同的节点上 * HDFS认为硬件错误是常态,因此提供自动数据冗余,一个数据块可以有多个副本(可配置副本系数)。当一个副本所在节点硬件错误,可自动使用其他副本数据块。
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>topology.script.file.name</name>
<value>/opt/modules/hadoop/hadoop-1.0.3/bin/RackAware.py</value>
<!--机架感知脚本路径-->
</property>
<property>
<name>topology.script.number.args</name>
<value>20</value>
<!--机架服务器数量,由于我写了20个,所以这里写20-->
</property>
#!/usr/bin/python
#-*-coding:UTF-8 -*-
import sys
rack = {"hadoop-node-31":"rack1",
"hadoop-node-32":"rack1",
"hadoop-node-33":"rack1",
"hadoop-node-34":"rack1",
"hadoop-node-49":"rack2",
"hadoop-node-50":"rack2",
"hadoop-node-51":"rack2",
"hadoop-node-52":"rack2",
"hadoop-node-53":"rack2",
"hadoop-node-54":"rack2",
"192.168.1.31":"rack1",
"192.168.1.32":"rack1",
"192.168.1.33":"rack1",
"192.168.1.34":"rack1",
"192.168.1.49":"rack2",
"192.168.1.50":"rack2",
"192.168.1.51":"rack2",
"192.168.1.52":"rack2",
"192.168.1.53":"rack2",
"192.168.1.54":"rack2",
}
if __name__=="__main__":
print "/" + rack.get(sys.argv[1],"rack0")
由于hadoop没有明确的说明机架感知是感知IP还是感知主机名,所以就都写上。 然后将脚本赋予可执行权限chmod u+x RackAware.py,并放到bin/目录下。 重启namenode,如果配置成功,namenode启动日志中会输出:0 2011-12-21 14:28:44,495 INFO org.apache.hadoop.net.NetworkTopology: Adding a new node: /rack1/192.168.1.15:50010
在etc/hadoop/core-site.xml添加配置:
<property>
<name>fs.trash.interval</name>
<value>10080<value>
</property>
设置回收站数据保存时间:毫秒
喜欢 (1)or分享 (0)