169it科技资讯


当前位置:  数据库>nosql
本页文章导读:
    ▪完全分布式安装HBase        HBase是一个基于Hadoop的分布式的、面向列的开源数据库,它以Google的BigTable为原型。  高可用性、高性能、列存储、可伸缩、实时读写。  完全分布式安装HBase是在完全分布式安装好Had.........
    ▪搞一些好玩的东西——redis            日常开发中,总会接触到一些好玩的东西,比如这篇的redis,一说到redis,可能就有人跟memcache做比较了,是呀,memcache只能说是简单的kv内存数据结构,而redis支持的数据类型.........
    ▪Tair监控及统计技巧          Tair是淘宝自主开发的一个分布式 key/value 存储系统。Tair 分为持久化和非持久化两种使用方式. 非持久化的 Tair 可以看成是一个分布式缓存. 持久化的 Tair 将数据存放于磁盘中. 为.........

[1]完全分布式安装HBase
    来源:    发布时间: 2013-10-18

  HBase是一个基于Hadoop的分布式的、面向列的开源数据库,它以Google的BigTable为原型。

  高可用性、高性能、列存储、可伸缩、实时读写。

  完全分布式安装HBase是在完全分布式安装好Hadoop的基础上进行的。

  HBase的版本和Hadoop的版本需要匹配得上,尽量不要选择最新的版本,应该选稳定版本的。

  我这里用的是Hadoop-0.20.2和HBase-0.90.5。

  以下操作在hadoop的namenode主节点上进行,在主节点上配置好之后,再复制到各个从节点。

1、下载并安装HBase

  1)我这里把hbase-0.90.5.tar.gz放到/home/coder/目录下。

  2)解压hbase-0.90.5.tar.gz到/home/coder/hbase-0.90.5/

[coder@h1 ~]$ tar -zxvf hbase-0.90.5.tar.gz

 

2、配置hbase-env.sh文件

  该文件在hbase-0.90.5/conf/目录下。

  1)配置JDK安装目录

# The java implementation to use. Java 1.6 required.
export JAVA_HOME=/usr/java/jdk1.6.0_37

  2)配置Hadoop安装目录

# Extra Java CLASSPATH elements. Optional.
export HBASE_CLASSPATH=/home/coder/hadoop-0.20.2/conf

  3)配置由HBase负责启动和关闭zookeeper

# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=true

 

3、配置hbase-site.xml文件

  该文件在hbase-0.90.5/conf/目录下,文件内容配置如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
/**
* Copyright 2010 The Apache Software Foundation
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<configuration>
<property>
<!--指定HBase数据的存放位置-->
<name>hbase.rootdir</name>
<value>hdfs://h1:9000/hbase</value>
</property>
<property>
<!--启动分布模式-->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!--指定HBase主节点的主机名和端口-->
<name>hbase.master</name>
<value>h1:60000</value>
</property>
<property>
<!--设置所有zookeeper节点的主机名或IP-->
<name>hbase.zookeeper.quorum</name>
<value>h2,h3</value>
</property>
<property>
<!--指定zookeeper目录-->
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/coder/hbase-0.90.5/zookeeper</value>
</property>
</configuration>

 

4、配置regionservers文件

  该文件在hadoop-0.90.5/conf/目录下,我这里配置了两个从节点h2和h3作为Re

    
[2]搞一些好玩的东西——redis
    来源:    发布时间: 2013-10-18

 

     日常开发中,总会接触到一些好玩的东西,比如这篇的redis,一说到redis,可能就有人跟memcache做比较了,是呀,

memcache只能说是简单的kv内存数据结构,而redis支持的数据类型就丰富多了,当然最能让人看上眼的就是SortedSet。

有了它,我们就可以玩一些“贪心”的问题,比如适合“贪心”的优先队列,说到优先队列,我们以前实现了仅仅是内存形式的,

哎,内存毕竟是内存,当有海量数据的时候,最好能有一个序列化到硬盘的操作。。。恰恰这个场景redis就可以办到。。。

一:快速搭建

    好了,我们知道redis比较适合做的事情了,现在我们可以进行快速搭建。

第一步:下载redis-2.0.2.zip (32 bit)。然后改名为redis放在D盘中。

 

最重要的也就是下面两个:

redis-server.exe:        这个就是redis的服务端程序。

redis-cli.exe:             服务端开启后,我们的客户端就可以输入各种命令测试了。

从图中我们可以看到两点:

①:没有指定config file。

     原来redis建议我们做一个配置文件,那我就搞段配置。

daemonize:  是否以“守护进程”的方式开启,当是守护进程的时候就不受控制台的影响了。

logfile:         log文件位置。

database:    开启数据库的个数。

dbfilename:  数据快照文件名。

save * *:     保存快照的频率,第一个为时间,第二个为写操作。

将这些配置好后,我们再看看:

②:我们看到redis默认的开放端口为6379。

 

二:安装驱动

好了,redis已经搭建完毕了,现在我们就要用C#去操作redis,这也是我最渴望的功能,优先队列~,先下载C#驱动,

就可以看到如下3个dll。

最后我们做下小测试:

 1     class Program 2     { 3         static void Main(string[] args) 4         { 5             var client = new RedisClient("127.0.0.1", 6379); 6  7             //最后一个参数为我们排序的依据 8             var s = client.AddItemToSortedSet("12", "百度", 400); 9 10             client.AddItemToSortedSet("12", "谷歌", 300);11             client.AddItemToSortedSet("12", "阿里", 200);12             client.AddItemToSortedSet("12", "新浪", 100);13             client.AddItemToSortedSet("12", "人人", 500);14 15             //升序获取最一个值:"新浪"16             var list = client.GetRangeFromSortedSet("12", 0, 0);17 18             foreach (var item in list)19             {20                 Console.WriteLine(item);21             }22 23             //降序获取最一个值:"人人"24             list = client.GetRangeFromSortedSetDesc("12", 0, 0);25 26             foreach (var item in list)27             {28                 Console.WriteLine(item);29             }30 31             Console.Read();32         }33     }

AddItemToSortedSet: 第三个参数也就是我们要排序的依据,这也非常适合我们做topK的问题,非常爽~

 

本文链接


    
[3]Tair监控及统计技巧
    来源:    发布时间: 2013-10-18

    Tair是淘宝自主开发的一个分布式 key/value 存储系统。Tair 分为持久化和非持久化两种使用方式. 非持久化的 Tair 可以看成是一个分布式缓存. 持久化的 Tair 将数据存放于磁盘中. 为了解决磁盘损坏导致数据丢失, Tair 可以配置数据的备份数目, Tair 自动将一份数据的不同备份放到不同的主机上, 当有主机发生异常, 无法正常提供服务的时候, 其于的备份会继续提供服务.项目主页参见:淘宝Tair.

    受NoSQLFan上的一遍文章Redis监控技巧   一文的启发,本文系统的总结下我们在生产环境使用Tair时进行的各类监控和统计,希望对开源社区有所回馈。

    Tair最直接的监控和获取统计信息的方法是采用其提供的工具tairclient,按照如下方式使用,可以获取很多状态信息:

./sbin/tairclient -g group_1 -c tair_configserver_ip:port -l stat
  • 配额信息
  • dataserver存活信息
  • 每个area(类似于namespace的信息)的dataSize,evictCount,getCount(per second),hitCount(per second),itemCount,putCount(per second),removeCount(per second),useSize信息
  • 是否正在迁移(isMigrating false)
  • group状态,代表是否有桶丢失(group_name status OK)

     对于上述信息有如下说明:

     1.dataSize和itemCount可能并不精确,参见“统计的itemcount问题”;

     2.dataSize、evictCount等,也可以通过tair_client_api.hpp的get_data_stat接口获取,可以进行更灵活的统计和计算;

     3.由于tair bucket的桶迁移并不常见,所以监控迁移状态作为一种预警非常有必要;

     4.监控group状态,如果不为OK,证明有bucket的所有副本均丢失,此时tair的configserver不会rebuild分配表,需要人工介入处理;

     服务状态监控

     使用客户端模拟客户请求,如果连续5次均失败,证明访问出现问题,需要报警。此处需要注意的是,构造的key必须是随机的。(因为根据tair的hash算法,同样的key会一直落到同一个bucket);

     配置监控

     group.conf是由tair configserver使用,并自动在master slave间同步的配置文件。该文件有许多重要的信息,比如副本数、dataserver地址、area capacity等信息,可能经常需要手工进行修改。因此,为了保证严格一致,我们使用inotify结合rsync对group.conf的一致性进行监控,如果在任何状况下,发现master和slave的group.conf不一致,则报警。

     ldb level 0文件数目监控

     tair的ldb存储引擎使用的是google开源的leveldb,其level0的文件数会影响到读取性能(超过一定值,会减慢请求,甚至是挂起请求)。在tair出现大量bucket迁移时,有可能会出现level 0文件数骤增,因此需要对level 0文件数做监控,超过阈值报警。

     获取level 0文件数的方法非常简单,只需如下一行语句:

tac $log_file | grep -m 1 "compacted to:" | awk '{print $6}'

     $log_file是ldb目录下的LOG文件。

     内存级kv使用空间监控

     tair的内存级存储引擎类似于memcache,由于我们的业务方有部分是将内存级当作准存储在使用,所以有必要对内存级area的area使用的内存空间做监控,如果达到阈值(如设定capacity的80%)则给业务方报警,避免不必要的数据evict。

     thrift层面的监控

    为了方便多种语言的访问,同时为了进行管控,我们提供了thrift形式的访问接口,在thrift层面做了大量的工作。针对thrift,我们统计了不同db的访问量、占用空间、QPS、访问时延等数据,用来在访问质量出现下降时报警,同时每天发出统计报表。这个层面的报警统计可以和tair的统计配合使用。   

     bucket分布表和迁移状态

     Tair的桶分布表记录在configserver/data/目录下,使用cst_monitor工具,可以查看最新的桶分布表,同时在存在数据迁移时,可以查看最终生成的表,以及实时迁移表,使用这份数据,结合tairclient可以预估迁移进度。使用方式如下:

./cst_monitor ../configserverdir/data/group_1_server_table

     注:以上监控项,涉及到趋势的,均使用ganglia做前端,可以使用gmetric或自行编写插件,方便的将数据导入ganglia。ganglia还顺便用于分析cpu\memory\disk等的使用情况。

    

     除以上所述监控外,为了提高服务质量,便于迅速的定位问题,我们还在对ldb存储引擎内部进行剖析和监控,具体参见下图:

    

本文链接


    
最新技术文章:
▪30G 的redis 如何优化 - 沐訫    ▪[教程]MongoDB 从入门到进阶 (User系统) - magicD...    ▪Redis使用总结之与Memcached异同 - ceecy
▪MongoDB学习 (六):查询 - 辞职回家卖烧饼    ▪在.net中使用aquiles访问Cassandra(一) - amwicfai    ▪在.net中使用aquiles访问Cassandra(二) - amwicfai
▪高性能队列Fqueue的设计和使用实践 - 蒋叶湖    ▪MongoDB开发学习 - 喵 喵    ▪MongoDB开发学习 - 喵 喵
▪Spring-MongoDB简单操作 - CN.programmer.Luxh    ▪MongoDB 聚合 - 蒋叶湖    ▪nosql数据库 - 蒋叶湖
▪Spring-MongoDB简单操作    ▪Redis源码研究--字典    ▪Redis源码研究--字典 - feiyunruyue
▪[译]Cassandra 架构简述    ▪[译]Cassandra 架构简述    ▪Spring-MongoDB简单操作
▪MongoDB 聚合    ▪NoSQL生态系统    ▪NoSQL生态系统
▪nosql数据库    ▪mongodb持久化    ▪MongoDB 聚合
▪CentOS 6上的redis搭建实战记录    ▪非关系型数据库的研究与实践    ▪高性能队列Fqueue的设计和使用实践
▪php中使用memcached的性能问题    ▪NoSQL架构实践(二)——以NoSQL为主    ▪NoSQL架构实践(三)——以NoSQL为缓存
▪在MongoDB中一起使用$or和sort()时,查询性能差...    ▪[转]NoSQL生态系统    ▪NoSQL数据库探讨之一 - 为什么要用非关系数...
▪初识Redis及Redis在Windows下的安装和使用    ▪MongoDB 开发学习    ▪Redis.conf
▪关于twemproxy和redis分布式    ▪NoSQL学习之路(四):创建、读取、更新、删除...    ▪NoSQL学习之路 (五):查询操作符(Query Operators).1st...
▪NoSQL学习之路(三):MongoDB Shell的使用    ▪NoSQL学习之路 (二):MongoDB 数据类型和基本...    ▪NoSQL学习之路 (一):MongoDB 环境的搭建
▪NoSQL学习之路 (一):mongoDB 环境的搭建    ▪NoSQL学习之路 (一):mongoDB 环境的搭建和shel...    ▪NoSQL学习之路 (二):mongoDB 数据类型和基本...
▪那点所谓的分布式——redis    ▪mongodb查询嵌入式文档    ▪NoSQL历史简介
▪Mongo服务器集群配置学习三——分片    ▪MongoDB 导出和导入命令的使用    ▪HBase常用的数据库API操作
▪启动HBase后遇到的一个问题    ▪Mongo服务器集群配置学习一——主从复制    ▪Mongo服务器集群配置学习二——副本集
▪完全分布式安装HBase    ▪搞一些好玩的东西——redis    ▪Tair监控及统计技巧
▪MongoDB 之旅(四) 深入学习    ▪MongoDB 问题123    ▪MongoDB——安装部署以及简单的运用
▪MongoDB 之旅(一) 简介    ▪MongoDB 之旅(二) 基本操作(MongoDB Javascript Sh...    ▪MongoDB 之旅(三) 基本管理(MongoDB Javascript Sh...
▪mongoDB之windows下安装mongo数据库服务    ▪mongoDB之数据备份恢复工具    ▪CentOS通过yum安装CouchDB
▪MongoDB从入门到提高【第一集】---------MongdoDB配...    ▪MongoDB从入门到提高【第二集】---------MongdoDB权...    ▪[教程]MongoDB 从入门到进阶 (TextSearch)
▪mongodb数据文件格式    ▪在Window平台安装MongoDB    ▪mongodb journal文件格式
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号