Spark也有数据本地化的概念(Data Locality),这和MapReduce的Local Task差不多,如果读取HDFS文件,Spark则会根据数据的存储位置,分配离数据存储最近的Executor去执行任务。
这么理解没错,我搭建的Spark集群情况是这样:
15台DataNode节点的HDFS集群,我在每个DataNode上都部署了一个Spark Worker,并且,启动Spark Application的时候,每个Worker都有一个Executor,这样理论上来说,只要读取HDFS文件,Spark都可以使用本地任务来读取 (NODE_LOCAL)。在$SPARK_HOME/conf/slaves文件中配置了每个Worker的hostname,之后在Master上,执行$SPARK_HOME/sbin/start-slaves.sh来启动Workers,启动之后集群如图显示:
进入spark-sql,从hive中扫描一张表,执行情况如下:
奇怪的是,所有读取HDFS文件的Task Locality Level全部是ANY,也就是说,没有一个使用NODE_LOCAL本地化任务,这样导致集群的网络消耗非常大(因为所有的数据都要经网络拷贝一遍),如图,后面那个峰值是执行任务的网络情况:
直接说原因和解决办法吧。
请注意最上面集群情况的图中,Worker Id和Address中都使用的IP地址作为Worker的标识,而HDFS集群中一般都以hostname作为slave的标识,这样,Spark从 HDFS中获取文件的保存位置对应的是hostname,而Spark自己的Worker标识为IP地址,两者不同,因此没有将任务的Locality Level标记为NODE_LOCAL,而是ANY。奇怪的是,我在Spark的slaves文件中都配置的是hostname,为何集群启动后都采用了 IP地址?最大的可能是/etc/hosts文件的配置。
解决办法是:没有采用slaves文件+start-slaves.sh的方式启动,而是每台Worker单独启动,
使用命令:$SPARK_HOME/sbin/start-slave.sh -h <hostname> <masterURI>,这样启动之后,Spark WEBUI中Worker Id和Address中都以hostname来显示了,如图:
再次进入spark-sql,执行同样的任务,所有的Task Locality Level都是NODE_LOCAL,没有网络传输,速度比之前快了好几倍。
这才是期望的结果,至于导致salves文件中配置的明明是hostname,为何Spark集群中解析成IP地址的原因,后续再查吧。
本文同步自我的大数据田地(关注Hadoop、Spark、Hive等大数据技术)。
相关推荐
spark读取hdfs,保存mongodb程序 3、Oozie 的Spark Action的调度验证以及不足,测试是否可以入库 4、Oozie 的 Shell Action的调度 5、Oozie 的定时器调度 6、Oozie 的HiveAction调度支持外部依赖包 7、Oozie整体项目...
ReadArbiKV是读取任务序列文件到一个map变量里面,可以启动调试模式进行变量查看; ReadAndWritePatterns是读取序列文件,并解析其key和value,然后可视化输出,所谓可视化输出是指不是乱码的输出,具体可以参考...
HDFS用户指南(Hdfs_user_guide)0.21_中文版,供大家学习参考。
打开hdfs下MP4文件Hadoop平台的应用因为初次接触望点评改进
本文档是关于hadoop中HDFS的文件读写操作的一份ppt,适用于学习hadoop新手.
hdfs文件的查看 hdfs fs -cat /文件名
理论篇揭秘大数据存储基石HDFS-理论篇.pptx
storm-hdfs, 用于与HDFS文件系统交互的风暴组件 风暴 HDFS用于与HDFS文件系统交互的风暴组件用法以下示例将在每 1,000个元组同步后将管道("|") -delimited文件写入HDFS路径 hdfs://localhost:54310/foo.,使它的对...
从hdfs上使用python获取parquet格式数据的方法(当然也可以先把文件拉到本地再读取也可以): 1、安装anaconda环境。 2、安装hdfs3。 conda install hdfs3 3、安装fastparquet。 conda install fastparquet 4、...
使用C#进行hdfs的操作hadoop
hdfs读取文件详细流程,绝对真实!
该代码是介绍了如何在搭好的hadoop平台上,实现对文件的操作
大数据课程——Hadoop集群程序设计与开发,教师版,提供教学大纲、教案、教学设计、实训文档等,课程内容包含教学准备环境、软件安装、作业、教学文档、演示视频,花费巨额时间亲自制作,下载后可私信提供上述所有...
1、实验环境: ...(1) 在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数; 图3 spark统计行数 (2) 在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”
hadoop中hdfs的编程指南,很有意义,推荐看一下。
SparkSQL HDFS JAVA调用完整实例,使用Maven管理,项目很小,里面实例很多。敬请下载。
不多说,直接上代码 ...读取hdfs文件 Returns: df:dataframe hdfs数据 ''' client = Client(HDFSHOST) # 目前读取hdfs文件采用方式: # 1. 先从hdfs读取二进制数据流文件 # 2. 将二进制文件另存为.cs
hdfs dfs -test -e 文件或目录名 第三步,查看检测结果: echo $? 若输出结果为0,则说明文件或目录存在,若为1,则说明文件或目录不存在。 二、Java代码实现 import org.apache.hadoop.conf.Configuration; ...
hdfs文件的下载
火花基读取文件文本并将其从HDFS写入拼花文件使用路径/ usr /...使用spark-submit运行jar文件: spark-submit --class main.Main --master local[2] target/<file>-V1.jar一个文件夹的pageviewlog在HDFS中诞生。使用cho