1、NameNode多目录配置 ·hdfs-site.xmlHDFS-集群扩容以及缩容·如果已经存在NameNode,需要删除之前的data、logs目录;再格式化NameNode hdfs namenode -format 2、DataNode多目录配置 ·hdfs-site.xml ·hdfs-site.xml dfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2 ·存在多个data目录时,按照顺序进行存储,第一个文件存第一个data,第二个文件存第二个data` 3、磁盘间数据均衡 ·当新加一块硬盘时,可以执行磁盘数据均衡(hadoop3.x新特性) ·生成均衡计划 dfs diskbalancer -plan 主机名 ·执行均衡计划 hdfs diskbalancer -execute 主机名.plan.json ·查看当前均衡任务的执行情况 hdfs disbalancer -query 主机名 ·取消均衡任务 hdfs disbalancer -cancel 主机名.plan.json dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2
·添加白名单&黑名单 ·在NameNode所在节点的hadoop/ect/hadoop下创建whitelist和blacklist目录 ·配置hdfs-site.xmlHDFS故障排查 NameNode数据丢失dfs.hosts /opt/module/hadoop-3.1.3/etc/hadoop/whitelist ·注意 第一次添加白名单和黑名单需要重启集群,不是第一次只需要刷新NameNode节点 ·hdfs dfsadmin -refreshNodes ·服役新的服务器 ·单起新服役的服务器DataNode和NodeManager ·hdfs --daemon start|stop datanode ·yarn --daemon start|stop nodemanager ·退役服务器 ·添加指定服务器到黑名单 ·第一次添加需要重启集群,不是则舒心NameNode节点 hdfs dfsadmin -refreshNodes ·等待退役完成,关闭服务 ·服务器数据均衡 ·开始|关闭数据均衡 ·sbin/start-balancer.sh -threshold 10 10 表示各个节点磁盘空间利用率不超过10% ·sbin/stop-balancer.sh ·开启数据均衡需要占用内存,最好在一台空闲的机器上进行 dfs.hosts.exclude /opt/module/hadoop-3.1.3/etc/hadoop/blacklist
·NameNode存储数据丢失 /opt/module/hadoop-3.1.3/data/dfs/name下的数据 ·拷贝Secondery NameNode中的数据到 /opt/module/hadoop-3.1.3/data/dfs/name ·使用-importCheckpoint选项启动NameNode守护进程,从而将Secondery NameNode中数据拷贝到NameNode目录中集群安全模式&磁盘修复
·安全模式开启条件 ·集群刚开启时 fsimage和edits会进行合并 30s后自动退出 ·datanode进行上报数据信息 30s后自动退出 ·datanode中数据丢失,只允许丢失一个块,小于99.99999% ·如果安全模式开启,将对应的NameNode数据删除就可以接触安全模式 ·bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态) ·bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态) ·bin/hdfs dfsadmin -safemode leave (功能描述:手动离开离开安全模式状态) ·bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态关闭后执行其他 *** 作) 先退出再进入,在hdfs的web端会显示丢失的数据信息Hadoop企业优化
·MapReduce跑的慢的原因 ·硬件问题 ·I/O *** 作优化 ·数据倾斜 ·Map和Reduce数设置不合理 ·Map运行时间太长,导致Reduce等待过久 ·小文件太多 ·大量的不可切片的超大压缩文件 ·Spill次数过多 ·Merge次数过多等
·Map数据的输入 ·CombineTextInputFormat作为输入,处理小文件 ·压缩<保证文件可以切片 --Bzip2 LZO> ·通过一个MapReduce将数据进行合并;Map不做任何处理,Reduce进行合并 ·Map阶段 ·减少溢写(Spill)的次数 ·调整mapreduce.task.io.sort.mb<环形缓冲区大小,默认为100MB;一般进行1:10进行 maptask(默认一个1G):环形缓冲区 = 1:10>以及mapreduce.map.sort.spill.parcent<溢写百分比,默认为80%;一般留置30mb>的参数值-- ·减少合并(Merge次数) ·调整mapreduce.task.io.sort.factor(默认为10,跟硬件资源相关,合并溢写文件个数) ·在Map之后,不影响业务逻辑前提下,进行Combine处理 ·Reduce阶段 ·合理设置MapTask和ReduceTask数 ·设置MapTask和ReduceTask共存:共存指的时Map运行一定程度后,可以让Reduce提前申请资源,并不是提前开始任务 ·调整mapreduce.job.reduce.slowstart.completedmaps参数(默认为0.05) ·规避使用ReduceTask ·合理设置Reduce端的Buffer 默认情况下,数据达到一个阈值的时候,Buffer中的数据就会写入磁盘,然后Reduce会从磁盘中获取所有的数据。也就是说,Buffer和Reduce是没有直接关联的,中间多次写磁盘->读磁盘的过程,既然有这个弊端,那么就可以通过参数来配置,使得Buffer中的一部分数据可以直接输送到Reduce,从而减少io开销:mapreduce.reduce.input.buffer.percent,默认为0.0。当值大于0的时候,会保存指定比例的内存读Buffer中的数据直接拿给Reduce使用。这样一来,设置Buffer需要内存;读取数据需要内存,Reduce计算也要内存,所以要根据作业的情况进行调整. ·I/O的传输:MapTask的输出 ·采用数据压缩的方式(Snappy和LZO) ·使用SequenceFile二进制文件(较难) ·数据倾斜 ·数据倾斜现象 ·数据频率倾斜--某个区域的数据量要远远大于其他区域 ·数据大小倾斜--部分记录的大小远远大于平均值 ·减少数据倾斜的方法 ·抽样和范围分区 通过对原始数据进行抽样得到的结果集来预设分区边界值 ·自定义分区 ·Combiner ·采用Map Join,避免采用Reduce Join常用的调优参数
·以下参数是在用户自己的MR应用程序中配置就可以生效--mapred-site.xml ·mapreduce.map.memory.mb 一个MapTask可以使用的资源上限(单位:MB),默认为1024.如果MapTask实际使用的资源量超过该值,则会被强制杀死 ·mapreduce.reduce.memory.mb 一个ReduceTask可使用的资源上限(单位:MB),默认为1024.如果ReduceTask实际使用的资源量超过该值,则会被强制杀死 ·mapreduce.map.cpu.vcores 每个MapTask可使用最多cup core数目,默认为1 ·mapreduce.reduce.cpu.vcoures 每个ReduceTask可使用的最多cup core数目,默认为1 ·mapreduce.reduce.shuffle.parallelcopies 每个Reduce去Map中取数据的并行数,默认为5 ·mapreduce.reduce.shuffle.merge.percent Buffer中的数据达到多少比例开始写去磁盘.默认为0.66;也就是达到百分之66开始溢写 ·mapreduce.reduce.shuffle.input.buffer.percent Buffer大小占Reduce可用内存的比例。默认值0.7;也就是MapTask内存中百分之70是用来存储数据的 ·mapreduce.reduce.input.buffer.percent 指定多少比例的内存用来存放Buffer中的数据,默认值为0.0;一般情况下雨开始溢写比例相同 ·应该在YARN启动之前就配置子服务器的配置文件中才能生效yarn-site.xml ·yarn.scheduler.minimum-allocation-mb 给应用程序Container分配的最小内存,默认值为:1024 ·yarn.scheduler.manimum-allocation-mb 给应用程序Container分配的最大内存,默认值:8192 ·yarn-scheduler.minimum-allocation-vcores 每个Container申请的最小cup核数,默认值为1 ·yarn-scheduler.maximum-allocation-vcores 每个Container申请的最大CUP核数,默认值为32 ·yarn-nodemanager.resource.memory-mb 给每个Container分配的最大物理内存,默认值为8192 ·Shuffle性能优化的关键参数,应在YARN启动之前就配置好mapred-site.xml ·mapreduce.task.io.sort.mb Shuffle的环形缓冲区大小,默认为100MB ·mapreduce.map.sort.spill.percent 环形缓冲区溢写的阈值,默认我80% ·容错相关参数(MapReduce性能优化) ·mapreduce.map.maxattempts 每个Map Task最大重试次数,一旦重试次数超过该值,则认为Map Task运行失败,默认值:4 ·mapreduce.reduce.maxattempts 每个Reduce Task最大重试次数,一旦重试次数超过该值,则认为Map Task运行失败,默认值:4 ·mapreduce.task.timeout Task超时时间,经常需要设置的一个参数,该参数表达的意思为:如果一个Task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该Task处于Block状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远Block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000(10分钟)。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是:“AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.”Hadoop小文件优化方法
·弊端 每个小文件在NameNode中占150字节;每个小文件占一个切片,需要一个MapTask ·小文件优化方向 ·在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS。 ·在业务处理之前,在HDFS上使用MapReduce程序对小文件进行合并。 ·在MapReduce处理时,可采用CombineTextInputFormat提高效率。 ·开启uber模式,实现jvm重用 ·Hadoop Aechive 是一个高效的将小文件放入HDFS块中的文件存档工具,能够将多个小文件打包成一个HAR文件(类似于压缩),从而达到减少NameNode的内存使用 ·SequenceFile SequenceFile是由一系列的二进制k/v组成,如果为key为文件名,value为文件内容,可将大批小文件合并成一个大文件 ·CombineTextInputFormat ·开启uber模式,实现jvm重用,默认情况下,每个Task任务都需要启动一个jvm来运行,如果Task任务计算的数据量很小,我们可以让同一个Job的多个Task运行在一个Jvm中,不必为每个Task都开启一个Jvm. ·可以理解为,将多个MapTask放进一个Container里面,如果太多可能出现装不下,发生内存泄漏 ·最好关掉yarn虚拟内存,一个Container中占用1024MB的资源,同时申请2.1倍的虚拟资源 ·开启uber模式,在mapred-site.xml中添加配置Hadoop新特性 hadoop2.xmapreduce.job.ubertask.enable true mapreduce.job.ubertask.maxmaps 9 mapreduce.job.ubertask.maxreduces 1 mapreduce.job.ubertask.maxbytes
·集群建数据拷贝 ·scp实现集群间两个远程主机之间的文件复制 scp -r 文件地址 [主机用户@]主机ip:存放地址 如果在两个远程主机之间ssh没有配置的情况下可以使用该方式。 ·distcp命令实现两个Hadoop集群之间的递归数据复制(广泛应用于版本的升级和服务器迭代) bin/hadoop distcp hdfs://hadoop101:8020/文件地址 hdfs://hadoop102:8020/文件地址 ·小文件存档 ·HDFS存档文件或HAR文件<对内还是一个一个单独文件,对NameNode是一个整体> ·需要启动YARN进程,通过YARN计算 ·归档文件 hadoop archive -archiveName 重命名.har -p 输入目录 输出目录 ·查看归档 hadoop fs -ls har:目录 ·解归档文件 hadoop fs -cp har://数据存在目录 输出目录 ·回收站 通过程序删除文件不会经过回收站,需要调用moveToTrash()才能;网页直接删除也不会走回收站;只有命令行hadoop fs -rm 才会走 ·core-site.xml ·fs.trash.interval=0表示禁用,其他值表示文件存活时间hadoop3.x·fs.trash.checkpoint.interval=0,检查回收站的间隔时间,默认为0,表示与存活时间相等 ·恢复数据 hadoop fs -mv /user/gq/.Trash/Current/user/gq/input 其他目录 fs.trash.interval 1
·多NN的HA架构 ·能够实现多个NN的存在 ·纠删码 ·查看集群支持的纠删码策略:hdfs ec -listPolicies
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)