1. 程式人生 > >ZooKeeper應用場景-配置管理

ZooKeeper應用場景-配置管理

拿董老師的案例:設計一個基於 Zookeeper 的 Hadoop 配置管理服務, 該服務由兩個功能模組組成:
1)  配置檔案更新元件 HadoopConfigUpdater (管理員修改配置檔案後,執行該元件,將資料寫入 Zookeeper) ,可將管理員修改的 Hadoop  conf 目錄打包成 conf.zip,並寫入 Zookeeper 中/conf 節點(znode)中;
2)  客戶端監聽者 HadoopConfigWatcher(執行在各個節點上) ,可監聽/conf 節點,一旦得知節點資料發生變化,則讀取 conf.zip,並解壓後替換所在節點的 hadoop conf 目錄。

下面的程式碼就是一個例子,比較簡單,不作說明了。如果要實現上面的場景需要修改ActiveKeyValueStore的write和read方法,使用ByteArrayOutputStream或ByteBuffer;

如果執行:

1、下載程式碼:https://github.com/sleberknight/zookeeper-samples/tree/master/src/main/java/com/nearinfinity/examples/zookeeper

2、下載zookeeper-3.4.*.tar.gz原始碼包,匯入jar包:log4j,slf4j-api,slf4j-log4j,zooKeeper-四個jar包。

import java.nio.charset.Charset;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.data.Stat;

import com.nearinfinity.examples.zookeeper.util.ConnectionWatcher;

public class ActiveKeyValueStore extends ConnectionWatcher {

    private static final Charset CHARSET = Charset.forName("UTF-8");

    public void write(String path, String value) throws InterruptedException, KeeperException {
        Stat stat = zk.exists(path, false);
        if (stat == null) {
            zk.create(path, value.getBytes(CHARSET), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
        else {
            zk.setData(path, value.getBytes(CHARSET), -1);
        }
    }

    public String read(String path, Watcher watcher) throws InterruptedException, KeeperException {
        byte[] data = zk.getData(path, watcher, null /* stat */);
        return new String(data, CHARSET);
    }
}
package com.nearinfinity.examples.zookeeper.confservice;



import java.io.IOException;

import java.util.Random;

import java.util.concurrent.TimeUnit;



import org.apache.zookeeper.KeeperException;



public class ConfigUpdater {



    public static final String PATH = "/config";



    private ActiveKeyValueStore _store;

    private Random _random = new Random();



    public ConfigUpdater(String hosts) throws IOException, InterruptedException {

        _store = new ActiveKeyValueStore();

        _store.connect(hosts);

    }



    public void run() throws InterruptedException, KeeperException {

        //noinspection InfiniteLoopStatement

        while (true) {

            String value = _random.nextInt(100) + "";

            _store.write(PATH, value);

            System.out.printf("Set %s to %s\n", PATH, value);

            TimeUnit.SECONDS.sleep(_random.nextInt(10));

        }

    }



    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {

        ConfigUpdater updater = new ConfigUpdater("127.0.0.1:2183");

        updater.run();

    }



}
package com.nearinfinity.examples.zookeeper.confservice;

import java.io.IOException;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;

public class ConfigWatcher implements Watcher {

    private ActiveKeyValueStore _store;

    public ConfigWatcher(String hosts) throws InterruptedException, IOException {
        _store = new ActiveKeyValueStore();
        _store.connect(hosts);
    }

    public void displayConfig() throws InterruptedException, KeeperException {
        String value = _store.read(ConfigUpdater.PATH, this);
        System.out.printf("Read %s as %s\n", ConfigUpdater.PATH, value);
    }


    @Override
    public void process(WatchedEvent event) {
        System.out.printf("Process incoming event: %s\n", event.toString());
        if (event.getType() == Event.EventType.NodeDataChanged) {
            try {
                displayConfig();
            }
            catch (InterruptedException e) {
                System.err.println("Interrupted. Exiting");
                Thread.currentThread().interrupt();
            }
            catch (KeeperException e) {
                System.err.printf("KeeperException: %s. Exiting.\n", e);
            }
        }
    }

    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
        ConfigWatcher watcher = new ConfigWatcher(args[0]);
        watcher.displayConfig();

        Thread.sleep(Long.MAX_VALUE);
    }

}


相關推薦

ZooKeeper應用場景-配置管理

拿董老師的案例:設計一個基於 Zookeeper 的 Hadoop 配置管理服務, 該服務由兩個功能模組組成: 1)  配置檔案更新元件 HadoopConfigUpdater (管理員修改配置檔案後,執行該元件,將資料寫入 Zookeeper) ,可將管理員修改的 Had

Zookeeper應用場景之分布式屏障Barrier

pri worker use int 休眠 沒有 分布 eat demo Barrier就是柵欄或者屏障,適用於這樣的業務場景:當有些操作需要並行執行,但後續操作又需要串行執行,此時必須等待所有並行執行的線程全部結束,才開始串行,於是就需要一個屏障,來控制所有線程同時開始,

2.3.ZooKeeper應用場景

主從模式 當前 idt .com 我們 系統 通過 將他 舉例 7、ZooKeeper應用舉例  為了方便大家理解ZooKeeper,在此就給大家舉個例子,看看ZooKeeper是如何實現的他的服務的,我以ZooKeeper提供的基本服務分布式鎖為例。 7.1 分布式鎖應

阿裏雲王牌架構師楊曦:N多環境N多應用個性配置管理如何從混亂到簡單?

存儲系統 世界 出錯 技術分享 acf https 代表性 不同的 發的 阿裏雲高級解決方案架構師 楊旭世界最大混合雲的總架構師,4年前,開始作為雙11阿裏雲技術負責人,負責搭建全球最大的混合雲結構,把 “雙11”的電商業務和技術場景在阿裏雲上實現,並保障這個混合雲在雙11

聊聊Zookeeper應用場景、架構設計、選主機制

Zookeeper作為一個分散式協調系統提供了一項基本服務:分散式鎖服務,分散式鎖是分散式協調技術實現的核心內容。像配置管理、任務分發、組服務、分散式訊息佇列、分散式通知/協調等,這些應用實際上都是基於這項基礎服務由使用者自己摸索出來的。 1.Zookeeper在大資料系統中的常見應用 zookeeper

zookeeper(三)-zookeeper應用場景

 1.分散式配置 要點:配置資訊儲存在db與zk中(保險起見,資料安全性更高),弄一個後臺管理介面,對配置修改後,先儲存到db,然後同步寫入zk的節點中。應用啟動時,先連到zk上讀取節點中的配置,同時監聽節點的資料變化,當配置變化時,得到實時通知。 2.

ZooKeeper應用場景-分散式鎖設計

分散式鎖,這個主要得益於ZooKeeper為我們保證了資料的強一致性。鎖服務可以分為兩類,一個是保持獨佔,另一個是控制時序。 所謂保持獨佔,就是所有試圖來獲取這個鎖的客戶端,最終只有一個可以成功獲得這把鎖。通常的做法是把zk上的一個znode看作是一把鎖,通過create

zookeeper應用場景

cor 標記 熱備份 行數據 消息 目的 數據庫集群 mys img 典型應用場景   1.1 Zookeeper是一個高可用的分布式數據管理和協調框架,並且能夠很好的保證分布式環境中數據的一致性。在越來越多的分布式系統(Hadoop、HBase、Kafka)中,Zoo

Zookeeper C API應用示例(3)——配置管理(非同步API)

場景描述同:https://blog.csdn.net/qq_41688455/article/details/83780854 服務端程式碼如下: #include <stdio.h> #include <unistd.h> #include <std

Zookeeper C API應用示例(1)——配置管理(同步API)

場景描述 服務端監控/configure目錄; 客戶端對/configure目錄讀/寫資料,建立/刪除子節點 服務端: 監控/configure目錄,有資料更新時,輸出/configure中的資料;子節點建立/刪除時,服務程式列出當前的子目錄列表。 程式碼如下: #include &

配置管理 ACM 在高可用服務 AHAS 流控降級元件中的應用場景

開發十年,就只剩下這套架構體系了! >>>   

配置管理 ACM 在高可用服務 AHAS 流控降級組件中的應用場景

信息 清晰 依賴 text 大數 穩定 變更 力達 con 應用配置管理(Application Configuration Management,簡稱 ACM)是一款應用配置中心產品。基於ACM您可以在微服務、DevOps、大數據等場景下極大地減輕配置管理的工作量,同時保

遊戲UI框架設計(五): 配置管理應用

oid per b- 測試 中心 序列化對象 ner stun sage 遊戲UI框架設計(五) --配置管理與應用 在開發企業級遊戲/VR/AR產品時候,我們總是希望可以總結出一些通用的技術體系,框架結構等,為簡化我們的開發起到“四兩撥千金”的作用。所謂“配

遊戲UI框架設計(五): 配置管理應用

unity界面框架 unityui框架 ui框架配置 unity配置管理 遊戲UI框架設計(五)--配置管理與應用 在開發企業級遊戲/VR/AR產品時候,我們總是希望可以總結出一些通用的技術體系,框架結構等,為簡化我們的開發起到“四兩撥千金”的作用。所謂“配置管理”是指一個遊戲項目(軟件項

sed應用 升級場景配置文件更新 指定行追加

pan port rep func res list class strong lin function addLine() { confFile=configuration.xml isExist=`cat ${confFile} | grep "<liste

Dubbo框架應用之(三)--Zookeeper註冊中心、管理控制臺的安裝及解說

root pan rda 查詢 bsp err 封裝 form keep 我是在linux下使用dubbo-2.3.3以上版本號的zookeeper註冊中心客戶端。Zookeeper是Apache Hadoop的子項目,強度相對較好,建議生產環境使用該註冊中

給tomcat配置外部資源路徑(應用場景:web項目訪問圖片視頻等資源)

res apps http pre tomcat配置 div 找到 ces 數據庫服務器 對於一個web項目來說,除了文字之外,圖片,視頻等媒體元素也是其重要的組成部分。我們知道,web項目中如果用到大量的圖片、視屏的資源,我們 通常的做法是只在數據庫中存儲圖片、視頻等資

Bean的不同配置方式比較與應用場景

jdb ext 小寫字母 str 類定義 ati ice control aso 基於XML配置 Bean的定義: 在XML文件中通過<bean>元素定義。 Bean的名稱: 通過<bean>的id或name屬

軟件倉庫的配置應用程序的管理應用軟件安裝/卸載

ftp web yum 軟件倉庫的配置及應用程序的管理和應用軟件安裝/卸載 一、配置軟件倉庫1.yum簡介 基於rpm軟件包的安裝部署機制 自動解決軟件包的依賴關系 需要先配置軟件倉庫 2.配置本

ZooKeeper的典型應用場景

拉取 ons 執行 全局 進行 創建失敗 消息通知 防止 成了 《從Paxos到Zookeeper 分布式一致性原理與實踐》讀書筆記 本文:總結腦圖地址:腦圖 前言 所有的典型應用場景,都是利用了ZK的如下特性: 強一致性:在高並發情況下,能夠保證節點的創建一定是