spark与磁盘交互,spark读hdfs

本文介绍了Spark系统中与磁盘交互的关键环节:包括shuffle过程中map数据的磁盘存储,日志和应用程序日志目录,依赖的jar包和file的保存位置,以及如何从HDFS、HBase和Sequence File加载数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark系统有几处与磁盘交换的地方:

1,spark的shuffle依然要将map的数据存储在磁盘上,所以在spark的环境变量中可以设置"spark.local.dir"的值保存spark的shuffle数据存储的位置,如果没有设置,shuffle的数据默认将放在"java.io.tmpdir"中,这段代码在core当中为:

  def getLocalDir(conf: SparkConf): String = {
    /*if the spark.local.dir is not set, get the default value from java.io.temdir..casa*/
    conf.get("spark.local.dir",  System.getProperty("java.io.tmpdir")).split(',')(0)
  }
其中的get函数为:

  /** Get a parameter, falling back to a default if not set */
  def get(key: String, defaultValue: String): String = {
    settings.getOrElse(key, defaultValue)
  }

在spark-env.sh中定义的方式如下(在环境变量spark.io.dir中如果有多个目录用逗号隔开,这样如果用多块硬盘可以减少shuffle写磁盘的时间):

export SPARK_JAVA_OPTS=" -Dspark.local.dir=/home/NewHadoop/data/shuffle,/mnt/disk2 "

2,spark系统与磁盘交换的还有日志和work中存储的app日志的目录

3,spark作业在运行的时候会依赖jar包和file,这些jar和file都要存储在磁盘上,我觉得应该也是存储在work中,但是现在写的作业还没有遇到那种复杂的情况,以后遇到再补上

4,spark中还有与磁盘交互的当然就是加载数据了,比如读磁盘上的文件,读hdfs,还可从hbase和sequence file加载数据,其中读hdfs和写hdfs如下:

val rdd2 = sc.textFile("hdfs://10.11.1.190:9000/home/zhanglei/storage/testData.1");
val data1 = rdd2.map(line => line.split(" "));//map是一对一
val data2 = rdd2.flatMap(line => line.split(" "));//flatMap是一对多
data2.saveAsTextFile("hdfs://10.11.1.190:9000/home/zhanglei/storage/testData.2");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值