我想尝试实现这篇论文工作,我从IEEE“虚拟云中的位置感知MapReduce”中获得了这项工作。这里总结:8台物理机,每台机器包含4台虚拟机,每台VM都安装了hadoop hdfs。假设我们有包含p个物理机的集群,每个集合都有一个硬盘,副本号是3.然后n个文件块从集群外的另一台计算机放入集群,或者在集群中随机生成。该模型是关于具有特定数据模式的数据模式生成和任务模式生成。每个块具有相同的概率放置在托管相同数量的虚拟机的物理机器上。由于hadoop的策略数据分配是随机的,因此使用hadoop策略,文件块副本可以在一台物理机器中堆叠,从而可能发生数据模式。 http://imageshack.us/photo/my-images/42/allstack.png/
建议的策略是循环分配和蛇形分配,理论上是这样的:http://imageshack.us/photo/my-images/43/proposed.png/
如何让hadoop意识到有些虚拟机在一台物理机器上?
让hadoop不要将文件块的第二和第三个副本复制到同一物理机器上的虚拟机上??? 我问过如何实现这样的,并得到回复,它正在使用机架感知配置。但我仍然感到困惑,需要更多的参考资料。
我怎样才能跟踪那些数据,那些文件块复制在物理机器上均匀分布,确保在一台物理机器上没有文件块副本全部堆叠? 是否确定如果我配置了机架识别,文件块副本均匀分布在物理机器上?
答案 0 :(得分:0)
假设:我们知道在哪台物理机上创建了哪台虚拟机。
这种假设在公共云环境中并不适用。因此下面描述的解决方案不能在那里工作下面描述的解决方案将在私有云中使用
实施机架感知涉及两个步骤
在core-site.xml中设置脚本文件名
<property>
<name>topology.script.file.name</name>
<value>core/rack-awareness.sh</value>
</property>
实施脚本
示例rack-awareness.sh可以如下所示
HADOOP_CONF=/etc/hadoop/conf
while [ $# -gt 0 ] ; do
nodeArg=$1
exec< ${HADOOP_CONF}/cluster.data
result=”"
while read line ; do
ar=( $line )
if [ "${ar[0]}” = “$nodeArg” ] ; then
result=”${ar[1]}”
fi
done
shift
if [ -z "$result" ] ; then
echo -n “/default/rack “
else
echo -n “$result “
fi
done
cluster.data的内容可以是
hadoopdata1.ec.com /dc1/rack1
hadoopdata1 /dc1/rack1
10.1.1.1 /dc1/rack2
正如您所看到的,Hadoop完全依赖于我们提供的机架值。您可以使用此事实在不同物理机器上存在的虚拟机上分发数据块。
例如。
Virtual Machine 1 (VM1) 10.83.51.2 is on Physical Machine 1 (PM1)
Virtual Machine 2 (VM2) 10.83.51.3 is on Physical Machine 1 (PM1)
Virtual Machine 2 (VM2) 10.83.51.4 is on Physical Machine 2 (PM2)
您可以将cluster.data设为
10.83.51.2 /DC1/rack1
10.83.51.3 /DC1/rack1
10.83.51.4 /DC1/rack2