干货:Spark RDD写入HBase 优化

一、HBase部分

1-1、hbase.regionserver.handler.count

在这里插入图片描述
该配置参数用于定义regionserver上用于等待响应用户表级请求的线程数,通常的配置规则是:

  • 当每次请求的数据量较大时(如接近MB的单次put,cache较大的scan操作),设小一些;
  • 当每次请求负载较小时,则可把该值配置较大。同时在请求的数据量大小收到参数。
  • 如果单个请求的数据量很大,并且将该值配置的很大时,put并发量很高时,会给内存造成很大压力,甚至有可能触发内存溢出。
  • 正在进行的查询的总大小受设置hbase.ipc.server.max.callqueue.size限制
    在这里插入图片描述
    可以通过查看rpc.logging(regionserver打开DEBUG日志级别),根据在排队的线程数量消耗的内存大小来判断hbase.regionserver.handler.count配置是否过大或者过小。
    暂时更改为256

1-2、压缩

TODO

1-3、分裂

重要的设置包括hbase.regionserver.region.split.policy,hbase.hregion.max.filesize,hbase.regionserver.regionSplitLimit。分裂的简单观点是,当一个区域增长到时hbase.hregion.max.filesize,它就会分裂。对于大多数使用模式,您应该使用自动拆分。有关手动区域拆分的详细信息,请参阅手动区域拆分决策。

您可以选择自行管理拆分,而不是让HBase自动拆分您的区域。如果你很清楚你的键空间,手动管理分割是有效的

1-4、hbase.regionserver.optionallogflushinterval

HLog 条目的同步间隔:

如尚未累计到触发同步的 HLog 条目的指定数量,则在此间隔后使 HLog 同步到 HDFS (以秒为单位)

默认1s,暂时修改为5s

1-5、hbase.hregion.memstore.flush.size

HBase Memstore 刷新大小

如 memstore 大小超过此值,Memstore 将刷新到磁盘。通过运行由 hbase.server.thread.wakefrequency 指定的频率的线程检查此值。

默认128MB,根据机器性能调整
暂不做修改

1-6、hbase.hstore.blockingStoreFiles

HStore 阻塞存储文件

如在任意 HStore 中有超过此数量的 HStoreFiles,则会阻止对此 HRegion 的更新,直到完成压缩或直到超过为 ‘hbase.hstore.blockingWaitTime’ 指定的值。

默认16,暂时修改为32

1-7、hbase.rest.threads.min/max

HBase REST Server 最小/大线程数

HBase REST Server 线程池的最小大小。该服务器始终在池中保留至少此数量的线程。线程池可以增长到 hbase.rest.threads.max 设置的最大大小。

HBase REST Server 线程池的最大大小。该服务器可以处理此数量的并发请求。将此值设置过高的值会导致内存不足错误。

默认为2/100,暂时修改为10/200

1-8、hbase.client.write.buffer

HBase 客户端写入缓冲

写入缓冲区大小。较大缓冲区需要客户端和服务器中有较大内存,因为服务器将实例化已通过的写入缓冲区并进行处理,这会降低远程过程调用 (RPC) 的数量。为了估计服务器已使用内存的数量,请用值“hbase.client.write.buffer”乘以“hbase.regionserver.handler.count”。

默认为2MB,暂时修改为100MB

二、HDFS部分

2-1、dfs.datanode.handler.count

DataNode 服务器线程数

默认3,暂时修改为50

2-2、dfs.namenode.handler.count

NameNode 的服务器线程的数量。

默认30,暂时修改为150

2-3、dfs.datanode.balance.bandwidthPerSec

每个 DataNode 可用于平衡的最大带宽

默认10MB,暂时修改为100MB

2-4、dfs.datanode.max.transfer.threads

指定在 DataNode 内外传输数据使用的最大线程数

默认4096,暂时修改为16384

2-5、dfs.namenode.service.handler.coun

NameNode 用于服务调用的服务器线程数量。仅用于已配置 NameNode Service RPC Port 时

默认30,暂时修改为60

2-6、dfs.datanode.readahead.bytes

提前读取的字节数

启用shuffle readahead来改善MapReduce shuffle处理程序的性能;
读取块文件时,DataNode 可以使用 posix_fadvise 系统呼叫将数据显式放入操作系统缓冲区缓存中当前读取器位置之前。这样可以提高性能,尤其是在磁盘高度占用的情况下。该配置指定 DataNode 尝试提前读取的位置比当前读取位置提前的字节数。值为 0 时禁用此功能。CDH3u3 或之后的部署中支持此属性。

默认4MB,暂时修改为20MB


修改完以上值后,测试发现,性能竟然没有任何提升,运行io 测试工具(写5个150MB的文件):
sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.2.0-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 150结果为:
在这里插入图片描述

猜测以上修改对local模式作用不大??

三、Spark部分

3-1、driver-memory

参数说明:
该参数用于设置Driver进程的内存。
参数调优建议:
Driver的内存通常来说不设置,或者设置1G左右应该就够了。唯一需要注意的一点是,如果需

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值