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

标签 hadoop replication allocation

我想尝试实现我从 IEEE“虚拟云中的位置感知 MapReduce”获得的这篇论文工作。这里总结一下:8台物理机,每台机器包含4台虚拟机,每台VM安装hadoop hdfs。假设我们有一个包含 p 台物理机的集群,每台都有一个硬盘,副本数为 3。那么 n 个文件 block 从集群外的另一台计算机放入集群或在集群中随机生成。该模型是关于具有一定数据模式的数据模式生成和任务模式生成。每个 block 都有相同的概率被放置在托管相同数量虚拟机的物理机上。可能会出现数据模式,使用 hadoop 策略,文件 block 副本所有堆栈在一台物理机器上,因为 hadoop 的策略数据分配是随机的。
http://imageshack.us/photo/my-images/42/allstack.png/

建议的策略是循环分配和蛇形分配,理论上是这样的:http://imageshack.us/photo/my-images/43/proposed.png/

如何让hadoop知道一些虚拟机在一台物理机器上?

使hadoop不将文件 block 的第二个和第三个副本复制到同一物理机上的虚拟机上???
我问过如何实现这样的,并得到答复,它使用机架感知配置。但我仍然感到困惑,需要更多关于此的引用。

我如何跟踪这些数据,那些文件 block 复制均匀分布在物理机器上,确保在一台物理机器上没有文件 block 副本全部堆栈?
确定我是否按照机架意识进行配置,文件 block 副本均匀分布在物理机上吗?

最佳答案

假设:我们知道哪个虚拟机是在哪个物理机上创建的。

这种假设在公共(public)云环境中不成立。因此,下面描述的解决方案不能在那里工作。下面描述的解决方案将在私有(private)云中工作

实现机架感知包括 2 个步骤

  • 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 完全依赖于我们提供的机架值。您可以使用此事实在存在于不同物理机上的虚拟机上分布数据 block 。

    例如。
    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
    

    关于hadoop - 虚拟机hadoop上的文件 block 复制分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15038771/

    相关文章:

    postgresql - 使用 Postgres 逻辑复制槽时如何限制 WAL 大小?

    elasticsearch - 如何将新节点添加到我的 Elasticsearch 集群

    c++ - C++修改使用堆栈参数构造的对象数据

    c - c 中声明和定义的内存分配

    apache-spark - SparkSQL 与 Hive on Spark - 区别和优缺点?

    hadoop - PIG 不读取我的自定义 InputFormat

    java - 在 Java 的 Spark Dataframe 中将 CSV 值转换为 Vector

    mysql 复制 5.5 master 到 5.7 slave

    c++:在if中分配一个变量

    java - HIPI测试运行由于NoclassdefinitionFound而失败