转载

云计算 反思课 4 HBase 优化的策略与思考

优化的最大敌人,是反向优化。

这次的小组作业还是挺费事费时的,虽然我也还没有做到满分,但是这两天的一些尝试还是值得记录一下的,也算是给大家提个醒。一个很深的感触:捷径就是把该走的该经历的都过完,想歪门邪道一步登天的,往往都是绕远路。

数据处理

这部分的任务可能是这次作业我做得最不好的地方,主要是因为没有在动手前设计好整个流程思路。因为时间紧,没有仔细分析问题和情境,但最终欲速则不达,像无头苍蝇一样试验各种方法出各种差错。盲目乐观和照搬 MySQL 部分的实现思路(我负责 HBase 部分),遇到问题之后依靠『侥幸』而不是『思考』来解决问题,实在是大失水准。

具体来看,主要有:

  1. 合并数据时候实现算法不细致,用测试集测试的时候没有检查出错误,到最后导入完数据开始部署好了才发现错,每次导入+部署的半个多小时就因为这里的失误而浪费了
  2. 处理数据的流程没有事先规划好,遇到错误拆东墙补西墙,最后全部推倒重来才做好,以后不能再这样
  3. 没有设计好测试用例,导致每个步骤都不知道自己对不对,依靠『侥幸』写代码肯定要出大问题

时间再紧也要谋定而后动,战略偷懒只会导致战术回旋空间变小,最终导致各种『无用功』。

平台选择

原先使用 Amazon EMR 来搭建 HBase,主要有几个问题:

  1. HBase 版本较低
  2. 没办法随时调整参数(虽然后来意识到参数是浮云)
  3. 性能糟糕(当然也可能是我不会用)
  4. 贵(除了机器本身的费用,EMR 也是要钱的)

所以后来选择使用 Cloudera 来搭建自己的 Hadoop 框架平台。因为老师没有给出太多相关的资料,基本上就是一边看着文档,一个坑一个坑踩过来的。虽然没有 Amazon EMR 这么简单粗暴,但是后来看到性能明显提升,也就值得了。总的来说有以下的感觉:

  1. 配置的过程其实已经尽可能简化了,基本需要手动操作的就是把交换空间设为 0,其他基本都可以在网络界面上完成(Cloudera 做得还是挺不错的,好顶赞)
  2. 根据自己的需要选择合适的服务,多的话用不上还占内存
  3. 多多利用 Cloudera 的监控表盘可以得到很多有用的信息,据此可以找到瓶颈所在
  4. RegionServer 中 Region 的分布平衡很重要,Region 不能太少也不能太多,没有所谓定值,需要不断测试和优化(实在不行的话,多 split 几次也没啥问题)
  5. 很多参数其实不懂具体的含义,对于这种大的平台还是需要仔细研究才能真正把强大的工具用好
  6. Cloudera 已经进行了一定的参数优化,基本上不用改动(尤其是在自己都不知道自己在干嘛的时候)

最后就是想要强调监控数据的重要性,如何挑选需要的数据,如何去分析这些数据里面都有门道,要好好学习。

参数设置

忽然想到这么一句话

按照大多数人数据库设计和代码实现的糟糕程度,根本轮不到拼参数

像我这样的初学者,往往过分夸大了参数的重要性,只有当系统达到了瓶颈,然后对应去调整相关参数才是有意义的。按照我之前的做法,既不知道问题在哪,更谈不上硬件的充分利用,就盲目根据网上的教程来进行『优化』,所做的基本都是『反向优化』。

所以这个时候搜索相关网页以及请教同学都是非常有帮助的,有了大致的方向会好很多,不然在一无所知的情况下真的很容易病急乱投医。

不同参数的设置一定要弄清楚具体代表什么,什么时候需要改,改了会有什么影响这一系列问题之后,再进行修改测试。

总的来说还是学到不少东西的,以后早些开始,继续努力。

原文  http://wdxtub.com/2016/03/29/cc-rethink-4/
正文到此结束
Loading...