• 【原】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”

  • 相关阅读:
    面向对象之类属性、类方法,静态方法
    python面向对象之继承
    python之面向对象练习
    python面向对象
    CentOS7.5最小化安装之后的配置
    怎么在一台电脑上安装win7与centos7双系统
    安装Win7时删除系统保留的100M隐藏分区
    win7在安装时跳过输入用户名界面,直接开启管理员用户
    ESP8266 wifi干扰钓鱼实现
    ESP8266 wifi干扰、钓鱼实现
  • 原文地址:https://www.cnblogs.com/yourarebest/p/5122372.html
Copyright © 2020-2023  润新知