<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 一、Zookeeper基礎知識、體系結構、數據模型Zookeepr 1. zookeeper是一個類似hdfs的樹形文件結構,zookeeper可以用來保證數據在(zk)集 群之間的數據的事務性一致、 2. zookeeper有watch事件,是一次性觸發的,當watch監視的數據發生變化時,通 知設置了該watch的client,即watcher 3. zookeeper有三個角色:Learner,Follower,Observer 4. zookeeper應用場景: 統一命名服務(Name Service) 配置管理(Configuration Management) 集群管理(Group Membership) 共享鎖(Locks) 隊列管理 ## 二、Zookeeper配置(搭建zookeeper服務器集群) 1. 結構:一共三個節點 (zk服務器集群規模不小于3個節點),要求服務器之間系統時間保持一致。 2.上傳zk 進行解壓: tar zookeeper-3.4.5.tar.gz 重命名: mv zookeeper-3.4.5 zookeeper 修改環境變量: vi /etc/profile 3.ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/... 刷新: source /etc/profile 到zookeeper下修改配置文件 cd /usr/local/zookeeper/conf mv zoo_sample.cfg zoo.cfg 修改conf: vi zoo.cfg 修改兩處 (1)dataDir=/usr/local/zookeeper/data (2)最后面添加 server.0=wuliang:2888:3888 server.1=hadoop1:2888:3888 server.2=hadoop2:2888:3888 服務器標識配置: 創建文件夾:mkdir data 創建文件myid并填寫內容為0:vi myid (內容為服務器標識 : 0) 進行復制zookeeper目錄到hadoop01和hadoop02 還有/etc/profile文件 把hadoop01、hadoop02中的myid文件里的值修改為1和2 路徑(vi /usr/local/zookeeper/data/myid) 啟動zookeeper: 路徑:/usr/local/zookeeper/bin 執行:zkServer.sh start (注意這里3臺機器都要進行啟動) 狀態:zkServer.sh status(在三個節點上檢驗zk的mode,一個leader和倆個follower) 1.3 操作zookeeper (shell) zkCli.sh 進入zookeeper客戶端 根據提示命令進行操作: 查找:ls / ls /zookeeper 創建并賦值:create /wuliang hadoop 獲取:get /wuliang 設值:set /wuliang master 可以看到zookeeper集群的數據一致性 創建節點有倆種類型:短暫(ephemeral) 持久(persistent) ## 三、zoo.cfg詳解: tickTime: 基本事件單元,以毫秒為單位。這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔, 也就是每隔 tickTime時間就會發送一個心跳。 dataDir:存儲內存中數據庫快照的位置,顧名思義就是 Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日志文件也保存在這個目錄里。 clientPort: 這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。 initLimit: 這個配置項是用來配置 Zookeeper接受客戶端初始化連接時最長能忍受多少個心跳時間間隔數, 當已經超過 10 個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是10*2000=20 秒。 syncLimit: 這個配置項標識 Leader 與 Follower之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10 秒 server.A = B:C:D : A表示這個是第幾號服務器, B 是這個服務器的 ip 地址; C 表示的是這個服務器與集群中的 Leader 服務器交換信息的端口; D 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader ## 四、JAVA 怎么操作zookeeper zk的構造器的參數詳解 String connectString 連接服務器列表,已,分割 int sessionTimeout 心跳檢測時間周期 (毫秒) Watcher watcher 事件處理通知 canBeReadOnly 標識當前會話是否支持只讀 long sessionId sessionPasswd 提供連接zookeeper的sessionId 和密碼,通過這兩個確定唯一一臺客戶端, 目前可以提供重復會話 /** zookeeper地址 */ static final String CONNECT_ADDR = "192.168.80.88:2181,192.168.80.87:2181,192.168.80.86:2181"; /** session超時時間 */ static final int SESSION_OUTTIME = 2000;//ms /** 信號量,阻塞程序執行,用于等待zookeeper連接成功,發送成功信號 */ static final CountDownLatch connectedSemaphore = new CountDownLatch(1); public static void main(String[] args) throws Exception{ ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher(){ @Override public void process(WatchedEvent event) { //獲取事件的狀態 KeeperState keeperState = event.getState(); EventType eventType = event.getType(); //如果是建立連 if(KeeperState.SyncConnected == keeperState){ if(EventType.None == eventType){ //如果建立連接成功,則發送信號量,讓后續阻塞程序向下執行 connectedSemaphore.countDown(); System.out.println("zk 建立連接"); } } } }); //進行阻塞 connectedSemaphore.await(); System.out.println(".."); ## 五、創建節點 ### 第一個create的介紹 zk.create("/testRoot", "testRoot".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); 第一個參數: 路徑的問題 第二個參數: 數據 第三個參數: 認證的方式 第四個參數: 創建節點的持久化 關閉連接 zk.close(); 總結 1.不能創建相同的的節點 2.如果在某個父節點下面創建某個子節點 要寫全路徑 3.臨時節點 一次會話 ## 怎么獲取、更新、判斷上面的節點zk上面節點的數據 //獲取節點洗信息 byte[] data = zk.getData("/testRoot", false, null); System.out.println(new String(data)); //獲取該路徑下面的所有子節點(直接子節點) System.out.println(zk.getChildren("/testRoot", false)); byte[] data = zk.getData("/testRoot", false, null); zk.getChildren("/testRoot", false) //修改節點的值 zk.setData("/testRoot", "modify data root".getBytes(), -1); byte[] data = zk.getData("/testRoot", false, null); //判斷節點是否存在 System.out.println(zk.exists("/testRoot/children", false)); ### 第二個delete的方法 //刪除節點 -1 表示全部刪除 zk.delete("/testRoot/children", -1); ## 總結: ### ## zookpeer分布式鎖的呢 第一可以采用zk的臨時節點,先讀取該臨時節點上有沒有數據, 如果有沒有則創建,如果有則更新。 注意: 原生的zk不允許遞歸創建節點,也支持節點遞歸的刪除 ## 六、同步和異步 異步方式:(在同步參數的基礎上添加兩個參數) 參數五:注冊一個異步回調函數,要實現AsyncCallBackStringCallBack接口,重寫 processResult(int rc,String path,Object ctx,String name)方法,當節點創建完畢 后執行此方法。 rc:為服務端響應嗎 0 表示調用成功,-4 表示端口連接,-110表示指定節點存在,-112 表示會話已經過期。 path:接口調用時傳入API的數據節點的路徑參數 ctx:為調用接口傳入API的ctx值 name:實際在服務器端創建節點的名稱 參數六,傳遞給回調的從參數,一般為上下文(context)信息
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看