복붙노트

[HADOOP] 사육사의 프로토콜을 이용하여 브로드 캐스팅 ZAB

HADOOP

사육사의 프로토콜을 이용하여 브로드 캐스팅 ZAB

좋은 아침,

나는 사육사와 프로토콜에 새로운 오전 나는 브로드 캐스트 프로토콜 ZAB에 관심이 있어요.

당신은 사육사의 ZAB 프로토콜을 사용하는 간단한 자바 코드로 날을 제공 할 수 있을까요? 나는 그것에 대해 검색 한하지만 난 ZAB을 사용하는 방법을 보여줍니다 코드를 찾을 성공하지 못했습니다.

나는 간단 필요한 사실, 나는 맵리 듀스 코드를 가지고 있고 모든 매퍼 변수를 업데이트 할 그들이 X의 더 나은 가치 (즉, 더 큰 값)을 찾기 위해 성공 할 때마다 (의이 X라고하자). 이 경우, 리더는 이전 값과 새 값을 비교하는 다음 모든 매퍼의 실제 최고의 가치를 방송 할 수 있습니다. 어떻게 자바에서 그런 일을 할 수 있습니까?

미리 감사드립니다, 문안 인사

해결법

  1. ==============================

    1.당신은 ZAB 프로토콜을 사용할 필요가 없습니다. 대신 당신은 아래의 단계를 수행 할 수 있습니다 :

    당신은 ZAB 프로토콜을 사용할 필요가 없습니다. 대신 당신은 아래의 단계를 수행 할 수 있습니다 :

    당신은 사육사의 Znode 말 / bigvalue 있습니다. 시작이에 저장된 값을 읽어 모든 매퍼. 그들은 또한 Znode에 데이터 변경에 대한 시계를 넣어. 맵퍼는 더 나은 가치를 얻을 때마다 더 나은 값으로 Znode를 업데이트합니다. 모든 맵퍼는 데이터 변경 이벤트에 대한 알림을 받게됩니다 그리고 그들은 새로운 최고의 가치를 읽고 그들이 다시 데이터 변경에 대한 시계를 다시 설정합니다. 그 방법은 최신 최고의 가치와 동기화하고 더 나은 값이있을 때마다 최신 최고의 가치를 업데이트 할 수 있습니다.

    사실 zkclient 사육사와 함께 작동 할 수있는 아주 좋은 라이브러리입니다 그리고 복잡성의 많은 (https://github.com/sgroschupf/zkclient)를 숨 깁니다. 다음은 데이터 변경에 대한 Znode "/ bigvalue"를 볼 수 있습니다 방법을 보여줍니다 예입니다.

    package geet.org;
    
    import java.io.UnsupportedEncodingException;
    import org.I0Itec.zkclient.IZkDataListener;
    import org.I0Itec.zkclient.ZkClient;
    import org.I0Itec.zkclient.exception.ZkMarshallingError;
    import org.I0Itec.zkclient.exception.ZkNodeExistsException;
    import org.I0Itec.zkclient.serialize.ZkSerializer;
    import org.apache.zookeeper.data.Stat;
    
    public class ZkExample implements IZkDataListener, ZkSerializer {
        public static void main(String[] args) {
            String znode = "/bigvalue";
            ZkExample ins = new ZkExample();
            ZkClient cl = new ZkClient("127.0.0.1", 30000, 30000,
                    ins);
            try {
                cl.createPersistent(znode);
            } catch (ZkNodeExistsException e) {
                System.out.println(e.getMessage());
            }
            // Change the data for fun
            Stat stat = new Stat();
            String data =  cl.readData(znode, stat);
            System.out.println("Current data " + data + "version = " + stat.getVersion());
            cl.writeData(znode, "My new data ", stat.getVersion());
    
            cl.subscribeDataChanges(znode, ins);
            try {
                Thread.sleep(36000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void handleDataChange(String dataPath, Object data) throws Exception {
            System.out.println("Detected data change");
            System.out.println("New data for " + dataPath + " " + (String)data);
        }
    
        @Override
        public void handleDataDeleted(String dataPath) throws Exception {
            System.out.println("Data deleted " + dataPath);
        }
    
        @Override
        public byte[] serialize(Object data) throws ZkMarshallingError {
            if (data instanceof String){
                try {
                    return ((String) data).getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    
        @Override
        public Object deserialize(byte[] bytes) throws ZkMarshallingError {
            try {
                return new String(bytes, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
  2. from https://stackoverflow.com/questions/21907366/broadcasting-using-the-protocol-zab-in-zookeeper by cc-by-sa and MIT license