使用Spark对ETL数据到HBase中可以做的优化点

优化一:HBase表的优化

  1. 在建立HBase表时,提前设置好表的数据存放的压缩的方式
  2. 提前建立region分区
  3. 设置读取表中的数据不缓存

优化二:Spark程序的优化

优化场景

Spark中有Driver与Executor
Executor执行Task
Executor执行Task的时候,有可能会用到Driver中的数据
那么就需要Driver将数据发送给Executor
Executor中如果要处理不同分区的数据时
每个Task是独立的,那么每个独立的Task都需要一份Driver中发送过来的数据
可以这样计算总的要存放的Driver发送过来的数据所占用的空间
如果Driver发送的数据有1MB大小
现在有1000个分区,那么就要执行1000个互不干扰的Task,那么Driver发送的数据所占用的总的内存空间就是:1000 X 1MB =1000MB
大约就是1个G,占用空间还是较为客观的

优化方式

Spark提供了两种方式来对上面的场景进行优化

方式1:broadcast variables:广播变量

使用广播变量将集合类别 广播出去:将数据发送到每一个Executor里面
在每一个Executor中会独立出一块空间,单独存放该数据
该数据为所有Task共享,只读的
这样,哪怕每一个Executor要执行上百个Task
要存放的数据也只有一份

方式2:accumulators:累加器

优化三:向HBASE表中存储数据的时候的优化

向HBase中加载数据时,有两种方法

方法1:使用put方式

使用put方式存储数据的过程较为复杂,但也是正规的方法
1:将要写入的数据先存放到WAL(预写日志文件中)
2:再将数据存放到对应的region的列簇中的MemoryStore中
3:当MemoryStore存放数据到一定程度时,将文件写入到HDFS文件中
4:形成StoreFile(HFile)文件
在第二步时,可以使用刷新操作,强制将数据写入到HDFS中

方法2:将数据直接存放到HDFS中

该方法会将数据文件生成HFile直接存放到HDFS中
使用该方法要预先建立好HBase表
存放到HDFS中后,可以将数据文件直接加载到HBase表中了
该方法相对于方法一来说,是非常快的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名一小卒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值