2015-09-25 4 views
2

Моя цель - установить узел позиции блока реплики HDFS самостоятельно. После взглянуть на код HDFS, я найти дорожку вызова здесь (Hadoop 2,2 версии)Как установить положение блока реплик HDFS самостоятельно?

BlockManager.getDatanodeDescriptors(List<String>) line: 1400  
BlockManager.chooseTarget(String, int, DatanodeDescriptor, HashMap<Node,Node>, long, List<String>) line: 1378 
FSNamesystem.getAdditionalBlock(String, long, String, ExtendedBlock, HashMap<Node,Node>, List<String>) line: 2477 
NameNodeRpcServer.addBlock(String, String, ExtendedBlock, DatanodeInfo[], long, String[]) line: 555 
ClientNamenodeProtocolServerSideTranslatorPB.addBlock(RpcController, ClientNamenodeProtocolProtos$AddBlockRequestProto) line: 387 
ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(Descriptors$MethodDescriptor, RpcController, Message) line: 59582 
ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(RPC$Server, String, Writable, long) line: 585 
ProtobufRpcEngine$Server(RPC$Server).call(RPC$RpcKind, String, Writable, long) line: 928  

И я нахожу BlockManager.java хава chooseTarget методы:

public DatanodeDescriptor[] chooseTarget(final String src, 
    final int numOfReplicas, final DatanodeDescriptor client, 
    final HashMap<Node, Node> excludedNodes, 
    final long blocksize, List<String> favoredNodes) throws IOException { 

Я думаю, если Я мог бы установить значение List<String> favoredNodes, тогда моя цель может быть достигнута.

ответ

0

Я нахожу API от DistributedFileSystem.java (Hadoop 2,2 версия)

/** 
    * Same as 
    * {@link #create(Path, FsPermission, boolean, int, short, long, 
    * Progressable)} with the addition of favoredNodes that is a hint to 
    * where the namenode should place the file blocks. 
    * The favored nodes hint is not persisted in HDFS. Hence it may be honored 
    * at the creation time only. HDFS could move the blocks during balancing or 
    * replication, to move the blocks from favored nodes. A value of null means 
    * no favored nodes for this create 
    */ 
    public HdfsDataOutputStream create(final Path f, 
     final FsPermission permission, final boolean overwrite, 
     final int bufferSize, final short replication, final long blockSize, 
     final Progressable progress, final InetSocketAddress[] favoredNodes) 
      throws IOException { 
Смежные вопросы