`
superlxw1234
  • 浏览: 552349 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44554
社区版块
存档分类
最新评论

Spark读取HDFS文件,任务本地化(NODE_LOCAL)

阅读更多

       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 WebUI

 

 

进入spark-sql,从hive中扫描一张表,执行情况如下:

 

 

Spark WebUI

 

 

        奇怪的是,所有读取HDFS文件的Task Locality Level全部是ANY,也就是说,没有一个使用NODE_LOCAL本地化任务,这样导致集群的网络消耗非常大(因为所有的数据都要经网络拷贝一遍),如图,后面那个峰值是执行任务的网络情况:

 

 

Spark NetWork

 

 

       直接说原因和解决办法吧。

 

       请注意最上面集群情况的图中,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 WebUI

 

 

再次进入spark-sql,执行同样的任务,所有的Task Locality Level都是NODE_LOCAL,没有网络传输,速度比之前快了好几倍。

 

 

Spark WebUI

 

 

这才是期望的结果,至于导致salves文件中配置的明明是hostname,为何Spark集群中解析成IP地址的原因,后续再查吧。

 

本文同步自我的大数据田地关注Hadoop、Spark、Hive等大数据技术)。

更多关于Spark、SparkSQL的技术文章

 

14
7
分享到:
评论

相关推荐

    hdfs_video_jar.zip_HDFS video_Hadoop 文件_hdfs_hdfs下MP4视频播放

    `hdfs_video_jar`这个文件名暗示了压缩包内可能包含一个Java JAR文件,可能是一个自包含的应用程序,用于从HDFS读取MP4视频流并播放。这样的应用可能会使用以下技术: 1. Hadoop的`org.apache.hadoop.fs.FileSystem...

    ConsoleApplication1_hdfs_console_sld提取_

    本文将深入探讨如何使用C#语言与HDFS进行交互,实现文件操作,特别是针对"ConsoleApplication1_hdfs_console_sld提取_"这个项目标题所涉及的场景。 首先,要进行HDFS操作,我们需要一个C#的HDFS客户端库。Apache ...

    hdfs_design.rar_HDFS-OPERATE_hadoop_hadoop java_hdfs

    文件“hdfs_design.pdf”很可能是HDFS设计的详细解读,涵盖了HDFS的架构、数据复制策略、故障恢复机制、NameNode和DataNode的角色以及客户端API等内容。这部分内容将帮助你深入理解HDFS的内部工作原理,如Block和...

    HDFS.zip_Hadoop 平台_hadoop_hdfs

    2. **下载文件**:`hadoop fs -get hdfs://namenode:port/path localfile`,从HDFS下载文件到本地。 3. **查看目录**:`hadoop fs -ls hdfs://namenode:port/path`,列出HDFS路径下的文件和目录。 4. **创建目录**...

    Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作

    - 上传本地文件到HDFS:`client.copy_from_local('local_path', '/hdfs_path')` 3. **Pandas转换文本文件到CSV**: - 首先,安装Pandas库:`pip install pandas` - 使用`pd.read_table()`读取HDFS上的文本文件,...

    HDFS文件读写操作

    HDFS的文件读取流程主要包括以下步骤: 1. **客户端发起请求**:客户端向NameNode发起读取文件的请求。NameNode会返回文件的元数据信息,包括文件所在的具体DataNode的位置。 2. **检查文件存在性**:NameNode会...

    读取HDFS序列化文件解析key、value可视化输出

    ReadArbiKV是读取任务序列文件到一个map变量里面,可以启动调试模式进行变量查看; ReadAndWritePatterns是读取序列文件,并解析其key和value,然后可视化输出,所谓可视化输出是指不是乱码的输出,具体可以参考...

    python解析hdfs文件和实现方式

    hdfs = HDFileSystem(host='your_hdfs_host', port=your_hdfs_port) # 读取Parquet文件 table = pq.read_table('hdfs:///path/to/your/file.parquet', filesystem=hdfs) # 将数据转换为DataFrame并保存到本地 ...

    apache_hdfs_broker.tgz

    配置和使用`apache_hdfs_broker`需要遵循特定的步骤,这通常涉及修改Hadoop的配置文件(如`hdfs-site.xml`),设置Broker的相关参数,如地址、端口等。此外,可能还需要对应用进行相应的代码调整,以使用Broker提供...

    HDFS文件系统基本文件命令、编程读写HDFS

    2. 下载 HDFS 文件:使用 FileSystem.copyToLocalFile() 方法将 HDFS 文件下载到本地文件系统。 3. 创建 HDFS 目录:使用 FileSystem.mkdirs() 方法创建一个新的 HDFS 目录。 4. 删除 HDFS 文件或目录:使用 ...

    SparkSQL HDFS JAVA调用完整实例

    SparkSession spark = SparkSession.builder().appName("SparkSQL_HDFS_Java").getOrCreate(); DataFrame df = spark.read().format("csv").option("header", "true").load("hdfs://namenode:port/path/to/file....

    HDFS用户指南(Hdfs_user_guide)0.21_中文版.doc

    HDFS用户指南(Hdfs_user_guide)0.21_中文版,供大家学习参考。

    揭秘大数据存储基石HDFS-理论篇.pptx_揭秘大数据存储基石HDFS_pptx_

    HDFS优化了批量数据读写,而非低延迟随机访问,因此更适合离线批处理任务,如MapReduce等大数据处理框架。 ### 9. 名称空间管理 NameNode负责管理整个文件系统的命名空间,包括文件和目录的创建、删除和重命名等...

    大数据课程-Hadoop集群程序设计与开发-3.HDFS分布式文件系统_lk_edit.pptx

    1. **NameNode(名称节点)**:作为HDFS集群的核心,NameNode负责管理文件系统的命名空间和文件的元数据,如文件路径、文件的所有者、权限信息、文件的块列表以及块所在的DataNode位置等。当NameNode关闭时,整个...

    python读取hdfs上的parquet文件方式

    从hdfs上使用python获取parquet格式数据的方法(当然也可以先把文件拉到本地再读取也可以): 1、安装anaconda环境。 2、安装hdfs3。 conda install hdfs3 3、安装fastparquet。 conda install fastparquet 4、...

    hdfs.zip_hdfs_hdfs java

    在这个例子中,`namenode-host`和`port`需要替换为实际的HDFS NameNode主机和端口,`path/to/local/file`是本地文件的路径,而`/hdfs/path/to/destination`是HDFS上的目标路径。 **2. 从HDFS下载文件** 下载HDFS上...

    HDFS文件的查看

    hdfs文件的查看 hdfs fs -cat /文件名

    实验七:Spark初级编程实践

    Spark 可以读取多种数据源,包括本地文件系统和 HDFS(Hadoop 分布式文件系统)。在 Spark Shell 中,可以使用内置函数读取文件,如 `sc.textFile()`,并进行简单的数据分析。实验中统计了 `/home/hadoop/test.txt`...

Global site tag (gtag.js) - Google Analytics