虚拟机上的文件块复制分配hadoop

anhgbhbe  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(344)

我想尝试实现本文的工作,这是我从ieee“虚拟云中的位置感知mapreduce”。这里总结:8台物理机,每台包含4台虚拟机,每台虚拟机都安装了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不将文件块的第二个和第三个副本复制到同一物理机上的虚拟机上???我问过如何实现这样的配置,得到的答复是,它使用的是机架感知配置。但我还是很困惑,需要更多的参考资料。
我如何跟踪那些数据,那些平均分布在物理机器上的文件块复制,确保没有所有文件块复制都堆在一台物理机器上??如果按照机架感知进行配置,文件块复制副本会均匀分布在物理机器上吗??

7y4bm7vi

7y4bm7vi1#

假设:我们知道哪个虚拟机是在哪个物理机上创建的。
这种假设在公共云环境中并不成立。因此,下面描述的解决方案在那里不起作用。下面描述的解决方案将在私有云中工作
实现机架感知包括两个步骤
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

相关问题