169it科技资讯
169it -->


当前位置:  数据库>nosql
本页文章导读:
    ▪Mongo服务器集群配置学习三——分片      MongoDB的分片主要是指将集合拆分成小块并分别存在不同服务器上的过程。MongoDB支持自动分片,可摆脱手动分片管理上的困难。在以下情况下需要运用分片:1.服务器的磁盘不够用。2.单个Mongod......
    ▪MongoDB 导出和导入命令的使用      Mongodb提供了简单易用的导出和导入命令。一、导出命令的简介与使用。       MongoDB提供了一个简单的导出工具,这个工具位于{MongoDB_HOME}/bin/mongoexport.exe,如截图(我的mo......
    ▪HBase常用的数据库API操作        需要引入Hadoop和Hbase的jar包,我这里HBase用的是hbase-0.90.5版本,所以我这里引入的HBase的jar包是hbase-0.90.5.jar和zookeeper-3.3.2.jar。  一些常用的API操作:package cn.luxh.app.util;import java.io.IOExcepti......
      最新IT科技资讯推荐: -1

[1]Mongo服务器集群配置学习三——分片
    来源:    发布时间: 2013-10-18

MongoDB的分片主要是指将集合拆分成小块并分别存在不同服务器上的过程。MongoDB支持自动分片,可摆脱手动分片管理上的困难。


在以下情况下需要运用分片:


1.服务器的磁盘不够用。


2.单个Mongod不能满足写数据的性能需求。


3.需要将大数据放入内存中提高性能。


下图为我们要实现的分片结构:



从图中我们看到原本一台Mongod节点被分成了A和B两个分片,由路由D读取配置服务器C的分片策略,然后决定数据存储在哪个分片上,而路由隐藏了决策的细节,用户直接访问路由就可以享受分片带来的优点,而不必关心路由读取分片的细节。


配置步骤:


1.创建配置服务器C


创建配置文件如下,端口为10000,并启动mongod -f config.cnf



dbpath=D:\mongodb\test\sharded\C\Data
bind_ip=127.0.0.1
port=10000


2.创建路由服务器D


路由器的配置文件如下:



bind_ip=127.0.0.1
port=20000
configdb=127.0.0.1:10000


其中configdb=127.0.0.1:10000配置的是路由监听的配置服务器的地址


路由器用mongos启动



mongos -f config.cnf


  注意:配置服务器要先启动,因为路由服务器需要监听配置服务器。


3.新建分片服务器A和B


A的配置,然后启动A



dbpath=D:\mongodb\test\sharded\A\Data
bind_ip=127.0.0.1
port=8001  


B的配置,然后启动B



dbpath=D:\mongodb\test\sharded\B\Data
bind_ip=127.0.0.1
port=8002


4.建立集群中分片服务器与路由器的连接


这个操作需要在路由器中配置,打开路由器的shell,执行数据库命令


db.runCommand({addshard:"127.0.0.1:8001",allowLocal:true})
db.runCommand({addshard:"127.0.0.1:8002",allowLocal:true})



 


 可以看到执行添加分片的操作要在admin库中进行


5.为业务数据库添加分片功能


为person添加分片功能,在路由中执行db.runCommand({"enablesharding":"person"})


6.为集合进行分片


  片键:集合中的一个键作为分拆的依据。


      为person库的集合info进行分片,key字段设置了片键


  执行下列命令db.runCommand({"shardcollection":"person.info","key":{"_id":1}})


7.添加一定的大数据量,测试分片的功能


用脚本插入80万条数据


for(i=1;i<=800001;i++){


  db.info.insert({name:i})


}


在分别在分片服务器A和B上查询数据量,如图:看到这800001条数据已经分别存放在2个分片中了



 


正式环境配置


成功地构建分片需要如下条件:


1.多个配置服务器


2.多个mongos服务器


3.每个片都是副本集


1.多个配置服务器


创建配置服务器如上,现在启动mongos的时候应将其连接到这3个配置服务器。假如3个配置文件的端口号是20001~20003


mongos --configdb localhost:20001,localhost:20002,localhost:20003


配置服务器使用的是两步提交机制,不是普通的MongoDB的异步复制,来维护集群配置的不同副本。这样能保证集群状态的一致性。这意味着某台配置服务器down了后,集群配置信息将是只读的。但是客户端还是能够读写的,只有所有配置服务器备份了以后才能重新均衡数据。


2.多个mongos


Mongos的数量不受限制,建议针对一个应用服务器只运行一个mongos进程。这样每个应用服务器就可以与mongos进行本地会话。


3.每个片都是副本集


生产环境中,每个片都应是副本集。这样单个服务器坏了,就不会导致整个片失效。用addshard命令就可以讲副本集作为片添加,添加时只要指定副本集的名字和种子就好了。


实现即达到数据的分片存储也实现备份和故障自动修复功能,可以副本集和分片混合使用,构建如下图的架构,(为了举例简单仅给shardA做了副本集配置)



1.修改A的配置如下:



dbpath=D:\mongodb\test\sharded\A\Data
bind_ip=127.0.0.1
port=8001
replSet=replicademo/127.0.0.1:8003


 新添加A1和A2两台节点与A组成副本集


A1的配置:



dbpath=D:\mongodb\test\sharded\A1\Data
bind_ip=127.0.0.1
port=8004
replSet=replicademo/127.0.0.1:8003


A2的配置:



dbpath=D:\mongodb\test\sharded\A2\Data
bind_ip=127.0.0.1
port=8003
replSet=replicademo/127.0.0.1:8001


在A的shell中执行副本集的舒适化



db.runCommand({"replSetInitiate":
{
"_id":'replicademo',
"members":[
{
"_id":1,
"host":"127.0.0.1:8001"
},
{
"_id":2,
"host":"127.0.0.1:8003"
},
{
"_id":3,
"host":"127.0.0.1:8004"
}
]
}
})


这样A,A1,A2的副本集就建立完成,查询配置看到A为活跃节点,如下图:



回到路由器上设置分片配置


mongos> db.runCommand({addshard:"replicademo/127.0.0.1:8001"})


这样mongos会知道它所连接的是replicademo副本集,在活跃节点down掉之后就会去寻找新的活跃结点。


执行db.printShardingStatus(),会看到副本集的节点都已经自动的配置进来了,如下图:



 


 


管理分片


分片的信息主要存放在config数据库上,这样就能被任何连接到mongos的进程访问到了。


配置集合


下面的代码

    
[2]MongoDB 导出和导入命令的使用
    来源:    发布时间: 2013-10-18

Mongodb提供了简单易用的导出和导入命令。

一、导出命令的简介与使用。

       MongoDB提供了一个简单的导出工具,这个工具位于{MongoDB_HOME}/bin/mongoexport.exe,如截图(我的mongodb部署在windows操作系统中,在linux中类似):

下面介绍一下如何使用mongoexport导出命令:mongoexport -c gis -d local -o likehua.data

其中-c  表示几何  

-d  表示数据库

-o  输出文件名。

更多参数详见:

Administrator@F523540 d:/Mongodb/bin
$ mongoexport --help
Export MongoDB data to CSV, TSV or JSON files.

options:
  --help                                produce help message
  -v [ --verbose ]                      be more verbose (include multiple times
                                        for more verbosity e.g. -vvvvv)
  --version                             print the program's version and exit
  -h [ --host ] arg                     mongo host to connect to ( <set
                                        name>/s1,s2 for sets)
  --port arg                            server port. Can also use --host
                                        hostname:port
  --ipv6                                enable IPv6 support (disabled by
                                        default)
  -u [ --username ] arg                 username
  -p [ --password ] arg                 password
  --authenticationDatabase arg          user source (defaults to dbname)
  --authenticationMechanism arg (=MONGODB-CR)
                                        authentication mechanism
  --dbpath arg                          directly access mongod database files
                                        in the given path, instead of
                                        connecting to a mongod  server - needs
                                        to lock the data directory, so cannot
                                        be used if a mongod is currently
                                        accessing the same path
  --directoryperdb                      each db is in a separate directly
                                        (relevant only if dbpath specified)
  --journal                             enable journaling (relevant only if
                                        dbpath specified)
  -d [ --db ] arg                       database to use
  -c [ --collection ] arg               collection to use (some commands)
  -f [ --fields ] arg                   comma separated list of field names
                                        e.g. -f name,age
  --fieldFile arg                       file with fields names - 1 per line
  -q [ --query ] arg                    query filter, as a JSON string
  --csv                                 export to csv instead of json
  -o [ --out ] arg                      output file; if not specified, stdout
                                        is used
  --jsonArray                           output to a json array rather than one
                                        object per line
  -k [ --slaveOk ] arg (=1)             use secondaries for export if
                                        available, default true
  --forceTableScan                      force a table scan (do not use
                                        $snapshot)

 

二、导入命令的简介与使用。

       导入命令的位置,如图:

使用:

dministrator@F523540 d:/Mongodb/bin
 mongoimport -d

    
[3]HBase常用的数据库API操作
    来源:    发布时间: 2013-10-18

  需要引入Hadoop和Hbase的jar包,我这里HBase用的是hbase-0.90.5版本,所以我这里引入的HBase的jar包是hbase-0.90.5.jar和zookeeper-3.3.2.jar。


  一些常用的API操作:



package cn.luxh.app.util;

import java.io.IOException;
import java.util.Arrays;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;

public class HBaseUtil {

/**
* 初始化HBase的配置文件
* @return
*/
public static Configuration getConfiguration(){
Configuration conf = HBaseConfiguration.create();
//和hbase-site.xml中配置的一致
conf.set("hbase.zooker.quorum", "h1,h2,h2");
return conf;
}

/**
* 实例化HBaseAdmin,HBaseAdmin用于对表的元素据进行操作
* @return
* @throws MasterNotRunningException
* @throws ZooKeeperConnectionException
*/
public static HBaseAdmin getHBaseAdmin() throws MasterNotRunningException, ZooKeeperConnectionException{
return new HBaseAdmin(getConfiguration());
}

/**
* 创建表
* @param tableName 表名
* @param columnFamilies 列族
* @throws IOException
*/
public static void createTable(String tableName,String...columnFamilies) throws IOException {
HTableDescriptor htd = new HTableDescriptor(tableName.getBytes());//
for(String fc : columnFamilies) {
htd.addFamily(new HColumnDescriptor(fc));
}
getHBaseAdmin().createTable(htd);
}

/**
* 获取HTableDescriptor
* @param tableName
* @return
* @throws IOException
*/
public static HTableDescriptor getHTableDescriptor(byte[] tableName) throws IOException{
return getHBaseAdmin().getTableDescriptor(tableName);
}

/**
* 获取表
* @param tableName 表名
* @return
* @throws IOException
*/
public static HTable getHTable(String tableName) throws IOException{
return new HTable(getConfiguration(),tableName);
}

/**
* 获取Put,Put是插入一行数据的封装格式
* @param tableName
* @param row
* @param columnFamily
* @param qualifier
* @param value
* @return
* @throws IOException
*/
public static Put getPut(String row,String columnFamily,String qualifier,String value) throws IOException{
Put put = new Put(row.getBytes());
if(qualifier==null||"".equals(qualifier)) {
put.add(columnFamily.getBytes(), null, value.getBytes());
}else {
put.add(columnFamily.getBytes(), qualifier.getBytes(), value.getBytes());
}

    
最新技术文章:
▪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-2015,169IT.COM,站长邮箱:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号