磁盘: heads/sectors/cylinders,分别就是磁头/扇区/柱面,每个扇区512byte(现在新的硬盘每个扇区有4K) 文件系统: 文件系统不是一个扇区一个扇区的来读数据,太慢了,所以有了block(块)的概念,它是一个块一个块的读取的,block才是文件存取的最小单位. 文件系统中1个块是由连续的8个扇区组成. HDFS: 默认文件大小64M(或者是128M) hive小文件问题解决 问题描述 HDFS的文件元信息,包括位置.大小.分块信息等,都是保存在NameNode的内存中…
hive优化 一.小文件简述 1.1. HDFS上什么是小文件? HDFS存储文件时的最小单元叫做Block,Hadoop1.x时期Block大小为64MB,Hadoop2.x时期Block大小为128MB.(在hadoop部署下可以通过dfs.block.size进行设置) 小文件就是指,在HDFS上落地的文件大小远远小于一个Block块大小的文件. 1.2. 小文件形成的原因 1.3. 小文件的危害 内存占用 小文件存储在HDFS上,对应的每个文件都会在namenode中存有相应的元数据信息…
一.小文件是如何产生的 1.动态分区插入数据,产生大量的小文件,从而导致map数量剧增. 2.reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的). 3.数据源本身就包含大量的小文件. 二.小文件问题的影响 1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能. 2.在HDFS中,每个小文件对象约占150byte,如果小文件过多会占用大量内存.这样NameNode内存容量严重制约了集群的扩…
1.hive.merge.mapfiles,True时会合并map输出.2.hive.merge.mapredfiles,True时会合并reduce输出.3.hive.merge.size.per.task,合并操作后的单个文件大小.4.hive.merge.size.smallfiles.avgsize,当输出文件平均大小小于设定值时,启动合并操作.这一设定只有当hive.merge.mapfiles或hive.merge.mapredfiles设定为true时,才会对相应的操作有效.5.m…
我们知道,大部分Spark计算都是在内存中完成的,所以Spark的瓶颈一般来自于集群(standalone, yarn, mesos, k8s)的资源紧张,CPU,网络带宽,内存.Spark的性能,想要它快,就得充分利用好系统资源,尤其是内存和CPU.有时候我们也需要做一些优化调整来减少内存占用,例如将小文件进行合并的操作. 一.问题现象 我们有一个15万条总数据量133MB的表,使用SELECT * FROM bi.dwd_tbl_conf_info全表查询耗时3min,另外一个500万条总数…
处理小文件的时候,可以通过org.apache.hadoop.io.SequenceFile.Writer类将所有文件写出到一个seq文件中. 大致流程如下: 实现代码: package study.smallfile.sequence_one; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import…
在真实环境中,处理日志的时候,会有很多小的碎文件,但是文件总量又是很大.普通的应用程序用来处理已经很麻烦了,或者说处理不了,这个时候需要对小文件进行一些特殊的处理——合并. 在这通过编写java应用程序实现文件的合并并上传到HDFS.整体的处理思路是,从本地加载琐碎的小文件并写到HDFS中. package study.smallfile.javaapp; import java.io.File; import java.io.FileInputStream; import java.io.IO…
最近用spark在集群上验证一个算法的问题,数据量大概是一天P级的,使用hiveContext查询之后再调用算法进行读取效果很慢,大概需要二十多个小时,一个查询将近半个小时,代码大概如下: try: sql = """ select ltescrsrq, mr_ltencrsrq1, mr_ltencrsrq2, mr_ltencrsrq3, ltescrsrp, mr_ltencrsrp1, mr_ltencrsrp2, mr_ltencrsrp3, mr_ltesctad…
1. Map输入合并小文件对应参数:set mapred.max.split.size=256000000;  #每个Map最大输入大小set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小 set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小set hive.input.format=org.apache.hadoop.hive.ql.io.Com…
hadoop不支持传统文件系统的挂载,使得流式数据装进hadoop变得复杂. hadoo中,文件只是目录项存在:在文件关闭前,其长度一直显示为0:如果在一段时间内将数据写到文件却没有将其关闭,则若网络中断后,则我们得到的仅仅是一个空白文件:故:最好编写小文件,这样能尽快将其关闭-----错误. [mapper 单个文件块 1:1] 由于hdfs的元数据保存在NameNode的内存中,因此创建的文件越多,所需的RAM就越多.从MapReduce角度看,小文件会导致效率低下.通常情况下,,每个Map…