来源: 2021-09-18 hive sql,怎么计算这个sql会产生多少个map数?
Hadoop 默认块大小设置的依据是什么?
块大小即切片大小是可以通过修改配置参数来改变的,但是默认情况下是和切块blocksize大小一致,这样做的目的就是为了在读取数据的时候正好能一次性读取一个块的数据,避免了在集群环境下发生跨机器读取的情况,如果跨机器读取会造成额外的网络IO,不利于MR程序执行效率的提升。
为什么默认值设置为128M?
- HDFS中平均寻址时间大概为10ms;
- 经过测试发现,寻址时间为传输时间的1%时,为最佳状态;所以最佳传输时间为10ms/0.01=1000ms=1s
- 目前磁盘的传输速率普遍为100MB/s , 网卡普遍为千兆网卡传输速率普遍也是100MB/s;计算出最佳block大小:100MB/s x 1s = 100MB ,所以我们设定block大小为128MB。
实际在工业生产中,需要经过集群之间的具体情况进行设置。比如: 跨物理机/机架之间文件传输速率为200MB/s时,一般设定block大小为256MB , 文件传输速率为400MB/s时,一般设定block大小为512MB . 不过最大一般不会超过512MB , 因为目前固态硬盘的读写速率应该不会超过512MB(如果做RAID另行考虑.)。
hadoop的块大小,从哪个版本开始是128M
从2.7.3版本开始block size的默认大小为128M,之前版本的默认值是64M.
HDFS 中的 block 默认保存几份?
负责HDFS数据存储的是哪一部分?
SecondaryNameNode的目的是什么?
他的目的使帮助NameNode合并编辑日志,减少NameNode 启动时间
文件大小设置,增大有什么影响?
HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。
为什么块的大小不能设置的太小,也不能设置的太大?
如果块设置过大:
一方面,从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢;另一方面,mapreduce中的map任务通常一次只处理一个块中的数据,如果块过大运行速度也会很慢。
- 如果块设置过小:
一方面存放大量小文件会占用NameNode中大量内存来存储元数据,而NameNode的内存是有限的,不可取;
另一方面文件块过小,寻址时间增大,导致程序一直在找block的开始位置。
如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。
[
](https://blog.csdn.net/wx1528159409/article/details/84260023)
附参考资料: