zoukankan      html  css  js  c++  java
  • Hbase优化

    一:高可用

    1):关闭集群 

      stop-hbase.sh

    2):在conf目录下创建 backup-masters 文件

      touch backup-masters

    3):backup-masters文件中配置高可用 HMaster 节点

      echo k200 > backup-masters

    4):将整个 conf 目录 scp 到其他节点

      scp -r /soft/hive/conf/ k200:/soft/hive/

    5):打开页面测试

    二:Hadoop 的通用性优化

    1):NameNode 元数据备份使用 SSD 

    2):定时备份NameNode 上的元数据

      通过定时任务复制元数据目录即可

    3):为 NameNode 指定多个元数据目录

      使用 dfs.name.dir 或者 dfs.namenode.name.dir 指定。这样可以提供元数据的冗余和健壮性,以免发生故障。

    4):NameNode的dir自恢复

      设置 dfs.namenode.name.dir.restore 为 true,允许尝试恢复之前失败的dfs.namenode.name.dir目录,在创建 checkpoint时做此尝试,如果设置了多个磁盘,建议允许。

    5):HDFS保证 RPC 调用会有较多的线程数

      hdfs-site.xml:

      属性:dfs.namenode.handler.count

      解释:该属性是 NameNode 服务默认线程数,默认值为10,根据机器的可用内存可以调整为 50~100

      属性:dfs.datanode.handler.count

      解释:该属性是 DataNode 的处理线程数,默认值为10,如果 HDFS客户端程序读写请求比较多,可以调高到 15~20,设置的值越大,内存消耗越多。一般业务中5~10即可。

    6):HDFS副本数的调整

      hdfs.site.xml

      属性:dfs.replication

      解释:如果数据量巨大,且不是非常之重要,可以调整为 2~3,如果数据非常重要,可以调整为3~5.

    7):HDFS文件快大小的调整

      hdfs-site.xml

      属性:dfs.blocksize

      解释:块大小定义,该属性应该根据存储的大量的单个文件大小来设置,如果大量的单个文件都小于 100M,建议设置成 64M 块大小,对于大于 100M 或者达到 GB 的这种情况,建议

    设置成 256M,一般设置范围波动在 64M~256M 之间。

    8):MapReduce Job 任务服务线程数调整

      mapred-site.xml

      属性:mapreduce.jobtracker.handler.count

      解释:该属性是Job任务线程数,默认值为10,根据机器的可用内存可以调整为50~100

    9):Http 服务工作线程数

      mapred-site.xml

      属性:mapreduce.tasktracker.http.threads

      解释:定义HTTP 服务器工作线程数,默认值为40,对于大集群可以调整到80~100

     三:Linux优化

    1):开启文件系统的预读缓存可以提高读取速度

      blockdev --setra 32768 /dev/sda 

      注意:ra 是readahead的缩写

    2):关闭进程睡眠池

      sysctl -w vm.swappiness=0

      即不允许后台进程进入睡眠状态,如果进程空闲,则直接 kill 掉 释放资源

    四:ZooKeeper 优化

    1):优化Zookeeper 会话超时时间

      hdfs-site.xml

      参数:zookeeper.session.timeout

      解释:In hbase-site.xml,setzookeeper.session.timeout to 30 seconds or less to less to bound failure detection(20~30 seconds is a good start).该值会直接关系到 master 发现服务器宕机的最大周期,默认值为 30

      秒,如果该值过小,会在 HBase 在写入大量数据发生而GC 时,导致RegionServer 短暂的不可用,从而没有向 ZK 发送心跳包,最终导致认为从节点 shutdown。

      一般 20 台左右的集群需要配置 5 台zookeeper。

    Hbase 优化 

    一:预分区

    将数据索要投放的分区提前大致的规划好,以提高HBase 性能

    hbase> create 'staff','info','partition1',SPLITS => ['1000','2000','3000','4000']

    {NAME =>'info' ,COMPRESSION => 'SNAPPY' } ,SPLITS => ['1000', '2000' , '3000' , '4000' ]

    2)  生成 16 进制序列预分区

      create 'staff2','info','partition2',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

    3)   按照文件中设置的规则预分区

    4)  使用 JavaAPI 创建预分区

    //自定义算法,产生一系列 Hash 散列值存储在二维数组中

    byte[][] splitKeys = 某个散列值函数

    //创建 HBaseAdmin 实例

    HBaseAdmin hAdmin = new HBaseAdmin(HBaseConfiguration.create());

    //创建 HTableDescriptor 实例

    HTableDescriptor tableDesc = new HTableDescriptor(tableName);

    //通过 HTableDescriptor 实例和散列值二维数组创建带有预分区的HBase 表

    hAdmin.createTable(tableDesc, splitKeys);

    二: RowKey 设计

    一条数据的唯一标识就是 rowkey,那么这条数据存储于哪个分区,取决于 rowkey 处于哪个一个预分区的区间内,设计 rowkey 的主要目的 ,就是让数据均匀的分布于所有的 region中,在一定程度上防止数据倾斜。

  • 相关阅读:
    Python入门-函数进阶
    Python入门-初始函数
    Leetcode300. Longest Increasing Subsequence最长上升子序列
    Leetcode139. Word Break单词拆分
    Leetcode279. Perfect Squares完全平方数
    Leetcode319. Bulb Switcher灯泡开关
    Leetcode322. Coin Change零钱兑换
    二叉树三种遍历两种方法(递归和迭代)
    Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
    Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  • 原文地址:https://www.cnblogs.com/Vowzhou/p/10676842.html
Copyright © 2011-2022 走看看