Zookeeper工作原理(转)

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。本文简单分析zookeeper的工作原理,对于如何使用zookeeper不是本文讨论的重点。

1 Zookeeper的基本概念

1.1 角色

Zookeeper中的角色主要有以下三类,如下表所示:

kd_tree_kNN分类

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
'''
file: kd_tree_kNN.py
author: xjump.me#at#gmail#dot#com

REF:
  http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.KDTree.html
'''

import numpy as np
import operator
from scipy.spatial import cKDTree as KDTree

import sys
sys.setrecursionlimit(10000)

if __name__=="__main__":
  v0 = np.array([1,2,3,4,5,6])
  train_data_set = np.array([
    [1.2,3,6,7,3,2],
    [2,9,17,7,6,59],
    [1.2,44,6,3,3,23],
    [9,3,51,7,3,100],
    [18,4,39,7,3,21],
    [66,8,28,7,3,88],
    [3,1,2,7,3,33],
    [24,0.5,1,7,3,56],
    [22,99,7,7,3,0.6],
    [70,13,9,7,3,2],
  ])
  tree = KDTree(train_data_set)
  for k in range(1,10):
    print 'k=',k
    #test sample v0, return 3 nearest point, dimesion is k
    print tree.query(v0,k=3,p=k)