Spark数据本地性
来源:互联网 发布:ipv6 直播软件 编辑:程序博客网 时间:2024/06/11 10:57
分布式计算系统的精粹在于移动计算而非移动数据,但是在实际的计算过程中,总存在着移动数据的情况,除非是在集群的所有节点上都保存数据的副本。移动数据,将数据从一个节点移动到另一个节点进行计算,不但消耗了网络IO,也消耗了磁盘IO,降低了整个计算的效率。为了提高数据的本地性,除了优化算法(也就是修改spark内存,难度有点高),就是合理设置数据的副本。设置数据的副本,这需要通过配置参数并长期观察运行状态才能获取的一个经验值。
Spark中的数据本地性有三种:
- PROCESS_LOCAL是指读取缓存在本地节点的数据
- NODE_LOCAL是指读取本地节点硬盘数据
- ANY是指读取非本地节点数据
通常读取数据PROCESS_LOCAL>NODE_LOCAL>ANY,尽量使数据以PROCESS_LOCAL或NODE_LOCAL方式读取。其中PROCESS_LOCAL还和cache有关,如果RDD经常用的话将该RDD cache到内存中,注意,由于cache是lazy的,所以必须通过一个action的触发,才能真正的将该RDD cache到内存中。
最近在做一个文本匹配的实验,发现处理的数据Locality Level都是ANY级别的,从而导致数据在网络上传输,造成效率低下,后来发现:
Spark中 Worker Id和Address中都使用的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是主节点
hostname是Worker所在的hostname即slave1,启动masterURL是”spark://master1:7070”
- Spark数据本地性
- Spark数据本地性
- Spark数据本地性
- spark读取hdfs数据本地性异常
- Spark性能调优-数据本地性
- spark读取hdfs数据本地性异常
- Spark性能调优-数据本地性
- Spark不同Cluster Manager下的数据本地性表现
- Spark 之 Stage划分、数据本地性算法实现
- Spark性能优化第五季-数据本地性调优
- TaskScheduler解密:Spark shell案例,TaskScheduler和SchedulerBackend、FIFO与FAIR模式调度解密、Task数据本地性资源分配
- RegionServer数据本地性
- idea本地调试spark
- spark本地模式
- Spark 本地模式
- python本地开发spark
- spark本地调试hive
- 本地执行Spark程序示例
- git分支切换问题
- CGLib动态代理原理及实现
- 12. 改变JDK编译版本【从零开始学Spring Boot】
- Linux中根据进程名称批量杀死进程命令
- 使用FormData
- Spark数据本地性
- 如何避免SQL Server日志撑爆硬盘及完整模式下的备份还原
- 长轮询和短轮询的区别
- Nginx源码学习-从零开始(1)
- svn和git的区别
- DD-路径图、MM-路径图的定义与区别联系
- C语言格式输入函数scanf()详解
- PHP考勤登录系统--中
- C#获取SQLServer数据库表名和字段名