zoukankan      html  css  js  c++  java
  • 【原】Spark数据本地性

    Spark数据本地性

    分布式计算系统的精粹在于移动计算而非移动数据,但是在实际的计算过程中,总存在着移动数据的情况,除非是在集群的所有节点上都保存数据的副本。移动数据,将数据从一个节点移动到另一个节点进行计算,不但消耗了网络IO,也消耗了磁盘IO,降低了整个计算的效率。为了提高数据的本地性,除了优化算法(也就是修改spark内存,难度有点高),就是合理设置数据的副本。设置数据的副本,这需要通过配置参数并长期观察运行状态才能获取的一个经验值。

    Spark中的数据本地性有三种:

    • PROCESS_LOCAL是指读取缓存在本地节点的数据
    • NODE_LOCAL是指读取本地节点硬盘数据
    • ANY是指读取非本地节点数据

    通常读取数据PROCESS_LOCAL>NODE_LOCAL>ANY,尽量使数据以PROCESS_LOCALNODE_LOCAL方式读取。其中PROCESS_LOCAL还和cache有关,如果RDD经常用的话将该RDD cache到内存中,注意,由于cachelazy的,所以必须通过一个action的触发,才能真正的将该RDD cache到内存中。

    最近在做一个文本匹配的实验,发现处理的数据Locality Level都是ANY级别的,从而导致数据在网络上传输,造成效率低下,后来发现:

    Spark中 Worker IdAddress中都使用的IP地址作为Worker的标识,而HDFS集群中一般都以hostname作为slave的标识,这样,Spark从 HDFS中获取文件的保存位置对应的是hostname,而Spark自己的Worker标识为IP地址,两者不同,因此没有将任务的Locality Level标记为NODE_LOCAL,而是ANY

    解决方法:在Standalone模式下,单独启动各个Worker节点,命令如下所示:

    $SPARK_HOME/sbin/start-slave.sh -h <hostname> <masterURI>

    例如:start-slave.sh -h slave1 spark://master1:7077

    假设我在slave1上启动Worker节点,master1是主节点

    hostnameWorker所在的hostnameslave1,启动masterURL”spark://master1:7070”

  • 相关阅读:
    Spring sprint @ ninth day
    微软面试:找水王问题
    Spring sprint @ first day
    软件工程概论 购书最低价格问题
    网络助手的NABCD分析
    记初学net-SNMP
    求二维数组联通子数组和的最大值 (联通涂色) beta!
    二维数组环状最大子矩阵
    一维数组中的最大子数组(环状)
    图书助手冲刺第七天
  • 原文地址:https://www.cnblogs.com/yourarebest/p/5122372.html
Copyright © 2011-2022 走看看