【原创】大叔问题定位分享(12)Spark保存文本类型文件(text、csv、json等)到hdfs时为什么是压缩格式的...
问题重现
rdd.repartition(1).write.csv(outPath)
写文件之后发现文件是压缩过的
write时首先会获取hadoopConf,然后从中获取是否压缩以及压缩格式
org.apache.spark.sql.execution.datasources.DataSource
def write(
org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand
val hadoopConf = sparkSession.sessionState.newHadoopConfWithOptions(options)
org.apache.hadoop.mapreduce.lib.output.TextOutputFormat
public RecordWriter<K, V> getRecordWriter(TaskAttemptContext job) throws IOException, InterruptedException {Configuration conf = job.getConfiguration();boolean isCompressed = getCompressOutput(job);String keyValueSeparator = conf.get(SEPERATOR, "\t");CompressionCodec codec = null;String extension = "";if (isCompressed) {Class<? extends CompressionCodec> codecClass = getOutputCompressorClass(job, GzipCodec.class);codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, conf);extension = codec.getDefaultExtension();}
isCompressed取的是mapreduce.output.fileoutputformat.compress,codecClass取的是mapreduce.output.fileoutputformat.compress.codec
hadoopConf初始化过程为
org.apache.spark.sql.internal.SessionState
def newHadoopConf(): Configuration = {val hadoopConf = new Configuration(sparkSession.sparkContext.hadoopConfiguration)
org.apache.spark.SparkContext
_hadoopConfiguration = SparkHadoopUtil.get.newConfiguration(_conf)def newConfiguration(conf: SparkConf): Configuration = {val hadoopConf = new Configuration()appendS3AndSparkHadoopConfigurations(conf, hadoopConf)hadoopConf}def appendS3AndSparkHadoopConfigurations(conf: SparkConf, hadoopConf: Configuration): Unit = {...conf.getAll.foreach { case (key, value) =>if (key.startsWith("spark.hadoop.")) {hadoopConf.set(key.substring("spark.hadoop.".length), value)}}
hadoopConf默认会从classpath中加载所有的hadoop相关配置文件,可以通过spark-shell来简单测试:
scala> val hc = spark.sparkContext.hadoopConfiguration
hc: org.apache.hadoop.conf.Configuration = Configuration: core-default.xml, core-site.xml, mapred-default.xml, mapred-site.xml, yarn-default.xml, yarn-site.xml, hdfs-default.xml, hdfs-site.xml
scala> println(hc.get("mapreduce.output.fileoutputformat.compress"))
true
scala> println(hc.get("mapreduce.output.fileoutputformat.compress.codec"))
org.apache.hadoop.io.compress.DefaultCodec
综上,只需要在创建SparkConf的时候设置spark.hadoop.mapreduce.output.fileoutputformat.compress=false即可不压缩,
val sparkConf = new SparkConf().set("spark.hadoop.mapreduce.output.fileoutputformat.compress", "false")
另外还可以通过option来控制
rdd.repartition(1).write.option("compression", "none").csv(outPath)
转载于:https://www.cnblogs.com/barneywill/p/10109568.html
【原创】大叔问题定位分享(12)Spark保存文本类型文件(text、csv、json等)到hdfs时为什么是压缩格式的...相关推荐
- 【原创】大叔问题定位分享(11)Spark中对大表子查询加limit为什么会报Broadcast超时错误...
当两个表需要join时,如果一个是大表,一个是小表,正常的map-reduce流程需要shuffle,这会导致大表数据在节点间网络传输,常见的优化方式是将小表读到内存中并广播到大表处理,避免shuff ...
- 【原创】大叔问题定位分享(4)Kafka集群broker节点从zookeeper上消失
kafka_2.8.0-0.8.1 一 现象 生产环境一组kafka集群经常发生问题,现象是kafka在zookeeper上的broker节点消失,此时kafka进程和端口都在,然后每个broker都 ...
- impala java 堆内存配置_【原创】大叔问题定位分享(38)impala报错内存不足
impala有时查询报错内存不足,并持续一段时间后自动恢复,报错时日志如下: org.apache.hive.service.cli.HiveSQLException: ExecQueryFInsta ...
- 【原创】大叔问题定位分享(33)oozie提交任务报错ArithmeticException: / by zero
oozie提交workflow后执行task报错: 2019-07-04 17:19:00,559 ERROR [RMCommunicator Allocator] org.apache.hadoop ...
- 【原创】大叔问题定位分享(33)beeline连接presto报错
hive2.3.4 presto0.215 使用hive2.3.4的beeline连接presto报错 $ beeline -d com.facebook.presto.jdbc.PrestoDriv ...
- vim 变成只读了_Vim 强制保存只读类型文件的方法
发现问题: 在使用vim时,当我们以普通用户去打开一个只有root用户才有权限操作的文件时,我们编辑完成之后,正要保存,却发现,这个文件我们没有权限修改. 每次遇到这样的问题,我都很头疼,好不容易把文 ...
- Vim 强制保存只读类型文件的方法
发现问题: 在使用vim时,当我们以普通用户去打开一个只有root用户才有权限操作的文件时,我们编辑完成之后,正要保存,却发现,这个文件我们没有权限修改. 每次遇到这样的问题,我都很头疼,好不容易把文 ...
- 爬取豆瓣TOP250并将数据保存为txt文件和csv文件并存入MySQL数据库
项目源码 import requests # 发起请求的库 from fake_useragent import UserAgent # 构造user-Agent的库 import mysql.con ...
- 数据库(一)数据类型:BLOB数据类型的读取办法,它可以用来保存Byte[]类型的图片信息。
参考: http://www.shareblogs.top/402/ https://www.cnblogs.com/demi-pansha/p/5742105.html https://www.2c ...
最新文章
- Java中使用FTPClient上传下载
- 为什么要用GCD-Swift2.x
- 【ARM】数据操作指令(下)
- matplotlib plt.plot
- sql中join与left-join图解区别
- 45分钟,411个中小品牌天猫双11实现新跨越
- 利用FSMT进行文件服务器迁移及整合
- 警惕“***性社工”现象
- Java 蓝桥杯 字符串基本用法
- Spring MVC学习笔记——SiteMesh的使用(转)
- 程序员梗_那些程序员才懂的梗,看到第10张笑喷了,网友:太真实了
- 一步一步安装 Windows Server 2008 Beta3(Code Name Longhorn)
- 宝藏 窗帘 窗布VRay材质球素材推荐
- mysql 等距随机_随机起点对称等距抽样公式的简便运用
- 怎么使计算机桌面整洁,如何管理电脑桌面,让桌面清洁,干净,大气......
- 77、基于STM32单片机的超市餐饮二维码/条形码摄像头识别结账扫码系统设计
- C语言遍历windows目录文件 并对文件进行读写操作
- Go内存溢出与内存泄露
- Windows 7下载
- 对TCG的概要分析和对TPM的学习-可信根说明以及RTM(二)
热门文章
- 算法学习入门书籍 -- 2022.02.13
- NOIP2015普及组第1题 45 金币 方法三(python3实现)
- 1.5 编程基础之循环控制 11 整数的个数(2022.01.09)--python
- Qt工作笔记-代理及自定义委托,实现开关功能
- Qt工作笔记-仿大佬风格代码(使用#ifdef Q_OS_WIN32)
- linux cpu load 详解,理解linux cpu load - 什么时候应该担心了
- Java单机部署,Nacos docker单机模式部署实现过程详解
- TCP客户端服务器(Python)
- mysql并发_MySQL并发更新数据时的处理方法
- python如何画虚线_Python威力巨大,五分钟如何绘制出漂亮的系统架构图?