无忧网站建设推荐,企业门户网站解决方案,网站编辑主要做什么,制作网站对话框环境篇#xff1a;呕心沥血CDH线上调优为什么出这篇文章#xff1f;近期有很多公司开始引入大数据#xff0c;由于各方资源有限#xff0c;并不能合理分配服务器资源#xff0c;和服务器选型#xff0c;小叶这里将工作中的总结出来#xff0c;给新入行的小伙伴带个方向呕心沥血CDH线上调优为什么出这篇文章近期有很多公司开始引入大数据由于各方资源有限并不能合理分配服务器资源和服务器选型小叶这里将工作中的总结出来给新入行的小伙伴带个方向不敢说一定对但是本人亲自测试发现集群使用率稳定提高了3分之1最高可达到2分之1有不对的地方欢迎留言指出。注可能有些服务没有设计使用到的小伙伴可以参照这种方式去规划。0 资源集群服务安排服务名称子服务CM-64GZK-Kafka(3台)-12GDataNode(3台)-64GNameNode1-64GNameNode2-64GResourcemanager1-32GResourcemanager2-32Ghive-hbase-16Ghive-hbase-16GMySQLMySQL√CMActivity MonitorAlert PublisherEvent ServerHost MonitorService Monitor√√√√√HDFSNameNodeDataNodeFailover ControllerJournalNodeX√XX√X√√√X√√XXX√YarnNodeManagerResourcemanagerJobHisoryServer√XXX√√X√√ZookeeperZookeeper Server√KafkaKafka Broker√HiveHive Metastore ServerHiveServer2Gateway(安装对应应用服务器)X√√√X√√X√HbaseHMasterHRegionServerThrift ServerX√√√X√XOozieOozie Server√HueHue ServerLoad BalancerX√√XSparkHistory ServerGateway(安装对应应用服务器)√XFlumeFlume Agent (安装对应应用服务器)SqoopSqoop(安装对应应用服务器)1 优化Cloudera Management1.1 Cloudera Management Service这些服务主要是提供监控功能目前的调整主要集中在内存放以便有足够的资源 完成集群管理。服务选项配置值Activity MonitorJava Heap Size2GAlert PublisherJava Heap Size2GEvent ServerJava Heap Size2GHost MonitorJava Heap Size4GService MonitorJava Heap Size4GReports ManagerJava Heap Size2GNavigator Metadata ServerJava Heap Size8G2 优化Zookeeper服务选项配置值ZookeeperJava Heap Size (堆栈大小)4GZookeepermaxClientCnxns (最大客户端连接数)1024ZookeeperdataDir (数据文件目录数据持久化路径)/hadoop/zookeeper (建议独立目录)ZookeeperdataLogDir (事务日志目录)/hadoop/zookeeper_log (建议独立目录)3 优化HDFS3.1 磁盘测试3.1.1 读测试hdparm 用于查看硬盘的相关信息或对硬盘进行测速、优化、修改硬盘相关参数设定#安装hdparmyum install hdparm#获取硬盘符fdisk -l#读测试(读取上一步获取硬盘符)hdparm -t /dev/vda三次测试结果Timing buffered disk reads: 500 MB in 0.84 seconds 593.64 MB/secTiming buffered disk reads: 500 MB in 0.93 seconds 538.80 MB/secTiming buffered disk reads: 500 MB in 0.74 seconds 672.95 MB/sec说明接近1s秒读取了500MB磁盘读速度约 500 MB/秒3.1.2 写测试dd 这里使用 time dd 简单测试写速度不要求很精确查看内存缓存情况free -m清除缓存sync; echo 3 /proc/sys/vm/drop_caches查block sizeblockdev --getbsz /dev/vda写测试echo 3 /proc/sys/vm/drop_caches; time dd if/dev/zero of/testdd bs4k count100000三次测试结果记录了1000000 的读入记录了1000000 的写出409600000 bytes (410 MB) copied, 0.574066 s, 714 MB/s --410MB复制用时0.57秒评估714M/s409600000 bytes (410 MB) copied, 1.84421 s, 222 MB/s --410MB复制用时1.84秒评估222 M/s409600000 bytes (410 MB) copied, 1.06969 s, 383 MB/s --410MB复制用时1.06秒评估383M/s3.1.3 网络带宽iperf3测量一个网络最大带宽#安装iperf3yum -y install iperf3#服务端iperf3 -s#客户端iperf3 -c 上调命令执行的服务机器IP测试结果[ ID]--线程idInterva--传输时间Transfer--接收数据大小Bandwidth--带宽每秒大小Retr角色[ 4]0.00-10.00 sec17.0 GBytes14.6 Gbits/sec0sender--发送[ 4]0.00-10.00 sec17.0 GBytes14.6 Gbits/secreceiver--接收3.2 官方压测3.2.1 用户准备由于只能使用yarn配置了允许用户故这里选择hive用户如果su hive不能进入则需要配置该步骤usermod -s /bin/bash hivesu hive3.2.2 HDFS 写性能测试测试内容HDFS集群写入10个128M文件(-D指定文件存储目录)hadoop jar /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/jars/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.0-tests.jar TestDFSIO -D test.build.data/test/benchmark -write -nrFiles 10 -fileSize 128INFO fs.TestDFSIO: ----- TestDFSIO ----- : writeINFO fs.TestDFSIO: Date time: Thu Jun 11 10:30:36 CST 2020INFO fs.TestDFSIO: Number of files: 10 --十个文件INFO fs.TestDFSIO: Total MBytes processed: 1280 --总大小1280MINFO fs.TestDFSIO: Throughput mb/sec: 16.96 --吞吐量 每秒16.96MINFO fs.TestDFSIO: Average IO rate mb/sec: 17.89 --平均IO情况17.89MINFO fs.TestDFSIO: IO rate std deviation: 4.74 --IO速率标准偏差INFO fs.TestDFSIO: Test exec time sec: 46.33 --总运行时间3.2.3 HDFS 读性能测试测试内容HDFS集群读取10个128M文件hadoop jar /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/jars/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.0-tests.jar TestDFSIO -D test.build.data/test/benchmark -read -nrFiles 10 -fileSize 128INFO fs.TestDFSIO: ----- TestDFSIO ----- : readINFO fs.TestDFSIO: Date time: Thu Jun 11 10:41:19 CST 2020INFO fs.TestDFSIO: Number of files: 10 --文件数INFO fs.TestDFSIO: Total MBytes processed: 1280 --总大小INFO fs.TestDFSIO: Throughput mb/sec: 321.53 --吞吐量 每秒321.53MINFO fs.TestDFSIO: Average IO rate mb/sec: 385.43 --平均IO情况385.43MINFO fs.TestDFSIO: IO rate std deviation: 107.67 --IO速率标准偏差INFO fs.TestDFSIO: Test exec time sec: 20.81 --总运行时间3.2.4 删除测试数据hadoop jar /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/jars/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.0-tests.jar TestDFSIO -D test.build.data/test/benchmark -clean3.3 参数调优服务选项配置值NameNodeJava Heap Size (堆栈大小)56GNameNodedfs.namenode.handler.count (详见3.3.2)80NameNodedfs.namenode.service.handler.count (详见3.3.2)80NameNodefs.permissions.umask-mode (使用默认值022)027(使用默认值022)DataNodeJava Heap Size (堆栈大小)8GDataNodedfs.datanode.failed.volumes.tolerated (详见3.3.3)1DataNodedfs.datanode.balance.bandwidthPerSec (DataNode 平衡带宽)100MDataNodedfs.datanode.handler.count (服务器线程数)64DataNodedfs.datanode.max.transfer.threads (最大传输线程数)20480JournalNodeJava Heap Size (堆栈大小)1G3.3.1 数据块优化dfs.blocksize 128M文件以块为单位进行切分存储块通常设置的比较大(最小6M默认128M),根据网络带宽计算最佳值。块越大寻址越快读取效率越高但同时由于MapReduce任务也是以块为最小单位来处理所以太大的块不利于于对数据的并行处理。一个文件至少占用一个块(如果一个1KB文件占用一个块但是占用空间还是1KB)我们在读取HDFS上文件的时候NameNode会去寻找block地址寻址时间为传输时间的1%时则为最佳状态。目前磁盘的传输速度普遍为100MB/S如果寻址时间约为10ms则传输时间10ms/0.011000ms1s如果传输时间为1S传输速度为100MB/S那么一秒钟我们就可以向HDFS传送100MB文件设置块大小128M比较合适。如果带宽为200MB/S那么可以将block块大小设置为256M比较合适。3.3.2 NameNode 的服务器线程的数量dfs.namenode.handler.count20*log2(Cluster Size)比如集群规模为16 8以2为底的对数是4故此参数设置为80dfs.namenode.service.handler.count20*log2(Cluster Size)比如集群规模为16 8以2为底的对数是4故此参数设置为80NameNode有一个工作线程池用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。该值需要设置为集群大小的自然对数乘以20,。3.3.3 DataNode 停止提供服务前允许失败的卷的数量DN多少块盘损坏后停止服务默认为0即一旦任何磁盘故障DN即关闭。 对盘较多的集群(例如DN有超过2块盘)磁盘故障是常态通常可以将该值设置为1或2避免频繁有DN下线。4 优化YARN MapReduce服务选项配置值参数说明ResourceManagerJava Heap Size (堆栈大小)4GResourceManageryarn.scheduler.minimum-allocation-mb (最小容器内存)2G给应用程序 Container 分配的最小内存ResourceManageryarn.scheduler.increment-allocation-mb (容器内存增量)512M如果使用 Fair Scheduler容器内存允许增量ResourceManageryarn.scheduler.maximum-allocation-mb (最大容器内存)32G给应用程序 Container 分配的最大内存ResourceManageryarn.scheduler.minimum-allocation-vcores (最小容器虚拟 CPU 内核数量)1每个 Container 申请的最小 CPU 核数ResourceManageryarn.scheduler.increment-allocation-vcores (容器虚拟 CPU 内核增量)1如果使用 Fair Scheduler,虚拟 CPU 内核允许增量ResourceManageryarn.scheduler.maximum-allocation-vcores (最大容器虚拟 CPU 内核数量)16每个 Container 申请的最大 CPU 核数ResourceManageryarn.resourcemanager.recovery.enabledtrue启用后ResourceManager 中止时在群集上运行的任何应用程序将在 ResourceManager 下次启动时恢复备注如果启用 RM-HA则始终启用该配置。NodeManagerJava Heap Size (堆栈大小)4GNodeManageryarn.nodemanager.resource.memory-mb40G可分配给容器的物理内存数量参照资源池内存90%左右NodeManageryarn.nodemanager.resource.cpu-vcores32可以为容器分配的虚拟 CPU 内核的数量参照资源池内存90%左右ApplicationMasteryarn.app.mapreduce.am.command-opts右红传递到 MapReduce ApplicationMaster 的 Java 命令行参数 -Djava.net.preferIPv4Stacktrue ApplicationMasteryarn.app.mapreduce.am.resource.mb (ApplicationMaster 内存)4GJobHistoryJava Heap Size (堆栈大小)2GMapReducemapreduce.map.memory.mb (Map 任务内存)4G一个MapTask可使用的资源上限。如果MapTask实际使用的资源量超过该值则会被强制杀死。MapReducemapreduce.reduce.memory.mb (Reduce 任务内存)8G一个 ReduceTask 可使用的资源上限。如果 ReduceTask 实际使用的资源量超过该值则会被强制杀死MapReducemapreduce.map.cpu.vcores2每个 MapTask 可使用的最多 cpu core 数目MapReducemapreduce.reduce.cpu.vcores4每个 ReduceTask 可使用的最多 cpu core 数目MapReducemapreduce.reduce.shuffle.parallelcopies20每个 Reduce 去 Map 中取数据的并行数。MapReducemapreduce.task.io.sort.mb(Shuffle 的环形缓冲区大小)512M当排序文件时要使用的内存缓冲总量。注意此内存由 JVM 堆栈大小产生(也就是总用户 JVM 堆栈 - 这些内存 总用户可用堆栈空间)MapReducemapreduce.map.sort.spill.percent80%环形缓冲区溢出的阈值MapReducemapreduce.task.timeout10分钟Task 超时时间经常需要设置的一个参数该参数表 达的意思为如果一个 Task 在一定时间内没有任何进 入即不会读取新的数据也没有输出数据则认为 该 Task 处于 Block 状态可能是卡住了也许永远会 卡住为了防止因为用户程序永远 Block 住不退出 则强制设置了一个该超时时间。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库通过网络拉取数据等)建议将该参数调大该参数过小常出现的错误提示是 AttemptID:attempt_12267239451721_123456_m_00 0335_0 Timed out after 600 secsContainer killed by the ApplicationMaster。5 优化Impala服务选项配置值参数说明Impala Daemonmem_limit (内存限制)50G由守护程序本身强制执行的 Impala Daemon 的内存限制。如果达到该限制Impalad Daemon 上运行的查询可能会被停止Impala DaemonImpala Daemon JVM Heap512M守护进程堆栈大小Impala Daemonscratch_dirs节点上多块独立磁盘(目录)Impala Daemon 将溢出信息等数据写入磁盘以释放内存所在的目录。这可能是大量数据Impala Catalog ServerJava Heap Size8G堆栈大小6 优化Kafka6.1 官方压测6.1.1 Kafka Producer 压力测试record-size 是一条信息有多大单位是字节。num-records 是总共发送多少条信息。throughput 是每秒多少条信息设成-1表示不限流可测出生产者最大吞吐量。bash /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/kafka//bin/kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput -1 --producer-props bootstrap.serverscdh01.cm:9092,cdh02.cm:9092,cdh03.cm:9092100000 records sent, 225733.634312 records/sec (21.53 MB/sec),8.20 ms avg latency, 66.00 ms max latency,3 ms 50th, 28 ms 95th, 30 ms 99th, 30 ms 99.9th.参数解析一共写入 10w 条消息吞吐量为 21.53 MB/sec每次写入的平均延迟为 8.20 毫秒最大的延迟为 66.00 毫秒。6.1.2 Kafka Consumer 压力测试zookeeper 指定 zookeeper 的链接信息topic 指定 topic 的名称fetch-size 指定每次 fetch 的数据的大小messages 总共要消费的消息个数bash /opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/kafka//bin/kafka-consumer-perf-test.sh --broker-list cdh01.cm:9092,cdh02.cm:9092,cdh03.cm:9092 --topic test --fetch-size 10000 --messages 10000000 --threads 1start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec2020-06-11 17:53:48:179, 2020-06-11 17:54:04:525, 57.2205, 3.5006, 600000, 36706.2278, 3051, 13295, 4.3039, 45129.7480start.time2020-06-11 17:53:48:179开始时间end.time2020-06-11 17:54:04:525结束时间(用时16秒)data.consumed.in.MB57.2205消费57M数据MB.sec3.50063.5M/Sdata.consumed.in.nMsg600000消费60万消息nMsg.sec36706.227836706条消息/Srebalance.time.ms3051平衡时间3Sfetch.time.ms13295抓取时间13Sfetch.MB.sec4.3039一秒抓取4.3Mfetch.nMsg.sec45129.7480一秒抓取45129条消息开始测试时间测试结束数据共消费数据57.2205MB吞吐量 3.5M/S共消费600000条平均每秒消费36706.2278条。6.1.3 Kafka 机器数量计算Kafka 机器数量(经验公式) 2 X(峰值生产速度 X 副本数 /100) 1先拿到峰值生产速度再根据设定的副本数就能预估出需要部署 Kafka 的数量。比如我们的峰值生产速度是 50M/s。副本数为 2。Kafka 机器数量 2 X( 50 X 2 / 100 ) 1 3 台6.2 参数调优服务选项配置值参数说明Kafka BrokerJava Heap Size of Broker2GBroker堆栈大小Kafka BrokerData Directories多块独立磁盘Kafka 服务Maximum Message Size10M服务器可以接收的消息的最大大小。此属性必须与使用者使用的最大提取大小同步。否则不守规矩的生产者可能会发布太大而无法消费的消息Kafka 服务Replica Maximum Fetch Size20M副本发送给leader的获取请求中每个分区要获取的最大字节数。此值应大于message.max.bytes。Kafka 服务Number of Replica Fetchers6用于复制来自领导者的消息的线程数。增大此值将增加跟随者代理中I / O并行度。7 优化HBase服务选项配置值参数说明HBaseJava Heap Size18G客户端 Java 堆大小(字节)主要作用来缓存Table数据但是flush时会GC不要太大根据集群资源一般分配整个Hbase集群内存的70%16-48G就可以了HBasehbase.client.write.buffer512M写入缓冲区大小调高该值可以减少RPC调用次数单数会消耗更多内存较大缓冲区需要客户端和服务器中有较大内存因为服务器将实例化已通过的写入缓冲区并进行处理这会降低远程过程调用 (RPC) 的数量。HBase MasterJava Heap Size8GHBase Master 的 Java 堆栈大小HBase Masterhbase.master.handler.count300HBase Master 中启动的 RPC 服务器实例数量。HBase RegionServerJava Heap Size31GHBase RegionServer 的 Java 堆栈大小HBase RegionServerhbase.regionserver.handler.count100RegionServer 中启动的 RPC 服务器实例数量根据集群情况可以适当增加该值主要决定是客户端的请求数HBase RegionServerhbase.regionserver.metahandler.count60用于处理 RegionServer 中的优先级请求的处理程序的数量HBase RegionServerzookeeper.session.timeout180000msZooKeeper 会话延迟(以毫秒为单位)。HBase 将此作为建议的最长会话时间传递给 ZooKeeper 仲裁HBase RegionServerhbase.hregion.memstore.flush.size1G如 memstore 大小超过此值Memstore 将刷新到磁盘。通过运行由 hbase.server.thread.wakefrequency 指定的频率的线程检查此值。HBase RegionServerhbase.hregion.majorcompaction0合并周期在合格节点下Region下所有的HFile会进行合并非常消耗资源在空闲时手动触发HBase RegionServerhbase.hregion.majorcompaction.jitter0抖动比率根据上面的合并周期有一个抖动比率也不靠谱还是手动好HBase RegionServerhbase.hstore.compactionThreshold6如在任意一个 HStore 中有超过此数量的 HStoreFiles则将运行压缩以将所有 HStoreFiles 文件作为一个 HStoreFile 重新写入。(每次 memstore 刷新写入一个 HStoreFile)您可通过指定更大数量延长压缩但压缩将运行更长时间。在压缩期间更新无法刷新到磁盘。长时间压缩需要足够的内存以在压缩的持续时间内记录所有更新。如太大压缩期间客户端会超时。HBase RegionServerhbase.client.scanner.caching1000内存未提供数据的情况下扫描仪下次调用时所提取的行数。较高缓存值需启用较快速度的扫描仪但这需要更多的内存且当缓存为空时某些下一次调用会运行较长时间HBase RegionServerhbase.hregion.max.filesize50GHStoreFile 最大大小。如果列组的任意一个 HStoreFile 超过此值则托管 HRegion 将分割成两个8 优化Hive服务选项配置值参数说明HiveServer2Java Heap Size4GHive MetaStoreJava Heap Size8GHive GatewayJava Heap Size2GHivehive.execution.engineSpark执行引擎切换Hivehive.fetch.task.conversionmoreFetch抓取修改为more可以使全局查找字段查找limit查找等都不走计算引擎而是直接读取表对应储存目录下的文件大大普通查询速度Hivehive.exec.mode.local.auto(hive-site.xml 服务高级配置客户端高级配置)true开启本地模式在单台机器上处理所有的任务对于小的数据集执行时间可以明显被缩短Hivehive.exec.mode.local.auto.inputbytes.max(hive-site.xml 服务高级配置客户端高级配置)50000000文件不超过50MHivehive.exec.mode.local.auto.input.files.max(hive-site.xml 服务高级配置客户端高级配置)10个数不超过10个Hivehive.auto.convert.join开启在join问题上让小表放在左边 去左链接(left join)大表这样可以有效的减少内存溢出错误发生的几率Hivehive.mapjoin.smalltable.filesize(hive-site.xml 服务高级配置客户端高级配置)5000000050M以下认为是小表Hivehive.map.aggr开启默认情况下map阶段同一个key发送给一个reduce当一个key数据过大时就发生数据倾斜。Hivehive.groupby.mapaggr.checkinterval(hive-site.xml 服务高级配置客户端高级配置)200000在map端进行聚合操作的条目数目Hivehive.groupby.skewindata(hive-site.xml 服务高级配置客户端高级配置)true有数据倾斜时进行负载均衡生成的查询计划会有两个MR Job第一个MR Job会将key加随机数均匀的分布到Reduce中做部分聚合操作(预处理)第二个MR Job在根据预处理结果还原原始key按照Group By Key分布到Reduce中进行聚合运算完成最终操作Hivehive.exec.parallel(hive-site.xml 服务高级配置客户端高级配置)true开启并行计算Hivehive.exec.parallel.thread.number(hive-site.xml 服务高级配置客户端高级配置)16G同一个sql允许的最大并行度针对集群资源适当增加9 优化Oozie、Hue服务选项配置值参数说明OozieJava Heap Size1G堆栈大小HueJava Heap Size4G堆栈大小标签Java,MB,CDH,hive,sec,Heap,呕心沥血,上调,Size来源 https://www.cnblogs.com/ttzzyy/p/13098188.html