• NUMA


    在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。

    在使用spark standalone或者yarn时,如果碰到跨cpu核数访问的情况,可以修改相应的代码。

    Yarn:

     --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor.java
    +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DefaultContainerExecutor_patched.java
     
       private static final int WIN_MAX_PATH = 260;
     
    +  //Soji
    +  private static int count = 0;
    +
       protected final FileContext lfs;
     
       public DefaultContainerExecutor() {
    @@ -78,7 +81,11 @@
       DefaultContainerExecutor(FileContext lfs) {
         this.lfs = lfs;
       }
    -
    +   
    +  protected int updateCount(){
    +  //Change '4' to nummber of NUMA nodes on your system
    +    return count++%4;
    +  }
       protected void copyFile(Path src, Path dst, String owner) throws IOException {
         lfs.util().copy(src, dst);
       }
    @@ -310,9 +317,11 @@
       private final class UnixLocalWrapperScriptBuilder
           extends LocalWrapperScriptBuilder {
         private final Path sessionScriptPath;
    +    private int count;
     
         public UnixLocalWrapperScriptBuilder(Path containerWorkDir) {
           super(containerWorkDir);
    +      this.count=0;
           this.sessionScriptPath = new Path(containerWorkDir,
               Shell.appendScriptExtension("default_container_executor_session"));
         }
    @@ -342,6 +351,7 @@
             throws IOException {
           DataOutputStream out = null;
           PrintStream pout = null;
    +      int numanode = updateCount();
           try {
             out = lfs.create(sessionScriptPath, EnumSet.of(CREATE, OVERWRITE));
             pout = new PrintStream(out, false, "UTF-8");
    @@ -353,7 +363,10 @@
             pout.println("echo $$ > " + pidFile.toString() + ".tmp");
             pout.println("/bin/mv -f " + pidFile.toString() + ".tmp " + pidFile);
             String exec = Shell.isSetsidAvailable? "exec setsid" : "exec";
    -        pout.println(exec + " /bin/bash "" +
    +        //pout.println("#numanode is "+numanode);
    +        //pout.println(exec + " /bin/bash "" +
    +        pout.println(exec +" numactl --membind="+numanode+" --cpunodebind="+numanode+ " /bin/bash "" +
    +        //pout.println(exec +" numactl --localalloc --cpunodebind="+numanode+ " /bin/bash "" +
                 launchDst.toUri().getPath().toString() + """);
           } finally {
             IOUtils.cleanup(LOG, pout, out);

    Standalone:

  • 相关阅读:
    一致性哈希算法
    Discourse 的标签(Tag)只能是小写的原因
    JIRA 链接 bitbucket 提示错误 Invalid OAuth credentials
    JIRA 如何连接到云平台的 bitbucket
    Apache Druid 能够支持即席查询
    如何在 Discourse 中配置使用 GitHub 登录和创建用户
    Apache Druid 是什么
    Xshell 如何导入 PuTTYgen 生成的 key
    windows下配置Nginx支持php
    laravel连接数据库提示mysql_connect() :Connection refused...
  • 原文地址:https://www.cnblogs.com/lightsun/p/7099170.html
Copyright © 2020-2023  润新知