HBase提示已创建表,但是list查询时,却显示表不存在。

https://blog.csdn.net/liu16659/article/details/80216085

zookeeper的api使用

https://www.cnblogs.com/xinde123/p/8406433.html

acl认证

https://blog.csdn.net/weixin_40861707/article/details/80403213

http://archive.apache.org/dist/zookeeper/

这里下载3.4.9版本

启动zookeeper后,要启动

mr-jobhistory-daemon.sh start historyserver

安装地址

https://www.cnblogs.com/biehongli/p/7650570.html

https://blog.csdn.net/zhengshidao/article/details/75128380?tdsourcetag=s_pcqq_aiomsg

步骤即

把压缩包放入Linux环境  /home/hadoop/

解压3.4.9.tar.gz

tar -zxvf zookeeper-3.4.9.tar.gz -C /home/hadoop/hadoop_home

然后配置环境变量

export ZOOKEEPER_HOME=/home/hadoop/hadoop_home zookeeper-3.4.9 

export PATH=$ZOOKEEPER_HOME/bin:$PATH

然后进入文件下面的conf/文件夹下

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

tickTime=2000 心跳间隔
initLimit=10 初始容忍的心跳数
syncLimit=5 等待最大容忍的心跳数
dataDir=/home/hadoop/hadoop_home zookeeper-3.4.9/conf/data 本地保存数据的目录,原来tmp存放的临时数据,修改为自己的目录;
clientPort=2181 客户端默认端口号

如果有需要,我感觉加上日志很有必要,如果出错了,还有地方可以去查找:

dataLogDir=/home/hadoop/hadoop_home zookeeper-3.4.9/conf/log

末尾添加节点的IP和端口信息:

server.1=master:2888:3888
server.2=node1:2888:3888
server.3=node2:2888:3888

server的意思是服务机, 这里一共有三台。后面对应的是机器名(写在/etc/hosts当中了)和端口的名字

上述两个文件位置要自己创建即

mkdir /home/hadoop/hadoop_home zookeeper-3.4.9/conf/data

mkdir /home/hadoop/hadoop_home zookeeper-3.4.9/conf/log

然后在data目录创建一个文件myid,里面写一个1,如下所示:

vi myid

1

在这里进行相应修改即可,位置和自己node,master匹配

同时把~/.profile 文件夹也scp远程传送过去,然后

source  ~/.profile 

然后分别将node1和node2的myid修改为2和3

配置完毕,尝试运行

zkServer.sh start
1
收到回复:

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

三台都要运行

jps可以查看

zkServer.sh status

得到反馈:

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

即可

有时候会遇到坑:

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
节点没有启动成功,查看zookeeper.out

zookeeper知识

2.2 配置参数解读
解读zoo.cfg 文件中参数含义
1)tickTime:通信心跳数,Zookeeper服务器心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,
也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超
时时间是2*tickTime)
2)initLimit:LF初始通信时限
集群中的follower跟随者服务器(F)与leader领导者服务器(L)之间初始连接时能容忍的最
多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
投票选举新leader的初始化时间
Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的
起始状态。
Leader允许F在initLimit时间内完成这个工作。
3)syncLimit:LF 同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,
Leader认为Follwer死掉,从服务器列表中删除Follwer。
在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机
制,来检测机器的存活状态。
如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在
线了。
4)dataDir:数据文件目录+数据持久化路径
保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。
5)clientPort:客户端连接端口
监听客户端连接的端口

3.5 stat 结构体
1)czxid- 引起这个 znode 创建的 zxid,创建节点的事务的 zxid(ZooKeeper Transaction Id)
每次修改 ZooKeeper 状态都会收到一个 zxid 形式的时间戳,也就是 ZooKeeper 事务 ID。
事务 ID 是 ZooKeeper 中所有修改总的次序。每个修改都有唯一的 zxid,如果 zxid1 小
于 zxid2,那么 zxid1 在 zxid2 之前发生。
2)ctime - znode 被创建的毫秒数(从 1970 年开始)
3)mzxid - znode 最后更新的 zxid
4)mtime - znode 最后修改的毫秒数(从 1970 年开始)
5)pZxid-znode 最后更新的子节点 zxid
6)cversion - znode 子节点变化号,znode 子节点修改次数
7)dataversion - znode 数据变化号
8)aclVersion - znode 访问控制列表的变化号
9)ephemeralOwner- 如果是临时节点,这个是 znode 拥有者的 session id。如果不是临时节
点则是 0。
10)dataLength- znode 的数据长度
11)numChildren - znode 子节点数量

查看log4j文档

4.3.2 创建 ZooKeeper 客户端

private static String connectString = "master:2181,node1:2181,node2:2181";
private static int sessionTimeout = 2000;
private ZooKeeper zkClient = null;
@Before
public void init() throws Exception {
zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent event) {
// 收到事件通知后的回调函数(用户的业务逻辑)
System.out.println(event.getType() + "--" + event.getPath());
// 再次启动监听
try {
zkClient.getChildren("/", true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
4.3.3 创建子节点
// 创建子节点
@Test
public void create() throws Exception {
// 数据的增删改查
// 参数 1:要创建的节点的路径; 参数 2:节点数据 ; 参数 3:节点权限 ;
参数 4:节点的类型
String nodeCreated = zkClient.create("/eclipse", "hello
zk".getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
}
4.3.4 获取子节点
// 获取子节点
@Test
public void getChildren() throws Exception {
List<String> children = zkClient.getChildren("/", true);
for (String child : children) {
System.out.println(child);
}
// 延时阻塞
Thread.sleep(Long.MAX_VALUE);
}
4.3.5 判断 znode 是否存在
// 判断 znode 是否存在
@Test
public void exist() throws Exception {
Stat stat = zkClient.exists("/eclipse", false);
System.out.println(stat == null ? "not exist" : "exist");
}

4.3.6 监听服务器节点动态上下线案例
1)需求:某分布式系统中,主节点可以有多台,可以动态上下线,任意一台客户端都能实
时感知到主节点服务器的上下线
2)需求分析

3)具体实现:
(0)现在集群上创建/servers 节点
[zk: localhost:2181(CONNECTED) 10] create /servers "servers"
Created /servers
(1)服务器端代码
package com.yjsj.zkcase;
import java.io.IOException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
public class DistributeServer {
  private static String connectString = "master:2181,node1:2181,node2:2181";
  private static int sessionTimeout = 2000;
  private ZooKeeper zk = null;
  private String parentNode = "/servers";
  // 创建到 zk 的客户端连接
  public void getConnect() throws IOException{
    zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
      @Override
      public void process(WatchedEvent event) {
        // 收到事件通知后的回调函数(用户的业务逻辑)
        System.out.println(event.getType() + "--" + event.getPath());
        // 再次启动监听
        try {
          zk.getChildren("/", true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }
  // 注册服务器
  public void registServer(String hostname) throws Exception{
    String create = zk.create(parentNode + "/server", hostname.getBytes(),  //创建的是带序列号的临时节点
    Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
    System.out.println(hostname +" is noline "+ create);
  }
  // 业务功能
  public void business(String hostname) throws Exception{
    System.out.println(hostname+" is working ...");
    Thread.sleep(Long.MAX_VALUE);
  }
  public static void main(String[] args) throws Exception {
    // 获取 zk 连接
    DistributeServer server = new DistributeServer();
    server.getConnect();
    // 利用 zk 连接注册服务器信息
    server.registServer(args[0]);//server01
    // 启动业务功能
    server.business(args[0]);
  }
}
(2)客户端代码
package com.yjsj.zkcase;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
public class DistributeClient {
  private static String connectString = "master:2181,node1:2181,node2:2181";
  private static int sessionTimeout = 2000;
  private ZooKeeper zk = null;
  private String parentNode = "/servers";
  private volatile ArrayList<String> serversList = new ArrayList<>();
  // 创建到 zk 的客户端连接
  public void getConnect() throws IOException {
    zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
      @Override
      public void process(WatchedEvent event) {
        // 再次启动监听
        try {
          getServerList();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }
//
  public void getServerList() throws Exception {
    // 获取服务器子节点信息,并且对父节点进行监听
    List<String> children = zk.getChildren(parentNode, true);
    ArrayList<String> servers = new ArrayList<>();
    for (String child : children) {
      byte[] data = zk.getData(parentNode + "/" + child, false, null);
      servers.add(new String(data));
    }
    // 把 servers 赋值给成员 serverList,已提供给各业务线程使用
    serversList = servers;
    System.out.println(serversList);
  }
  // 业务功能
  public void business() throws Exception {
    System.out.println("client is working ...");
  }
  public static void main(String[] args) throws Exception {
  // 获取 zk 连接
  DistributeClient client = new DistributeClient();
  client.getConnect();
  // 获取 servers 的子节点信息,从中获取服务器信息列表
  client.getServerList();
  // 业务进程启动
  client.business();
  }
}

一致性协议

https://www.cnblogs.com/stateis0/p/9062133.html

zookeeper学习及安装的更多相关文章

  1. ZooKeeper学习2---ZooKeeper安装配置

    一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式. ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境:■ 伪集群模式:就是在一台物 ...

  2. 【分布式】ZooKeeper学习之一:安装及命令行使用

    ZooKeeper学习之一:安装及命令行使用 一直都想着好好学一学分布式系统,但是这拖延症晚期也是没得治了,所以干脆强迫自己来写一个系列博客,从zk的安装使用.客户端调用.涉及到的分布式原理.选举过程 ...

  3. zookeeper学习(零)_安装与启动

    zookeeper学习(零)_安装与启动 最近换了新的电脑,终于买了梦寐以求的macbook.最近也换了新的公司,公司技术栈用到了zookeeper.当然自己也要安装学习下.省的渣渣的我,被鄙视就麻烦 ...

  4. (转)ZooKeeper 笔记(1) 安装部署及hello world

    ZooKeeper 笔记(1) 安装部署及hello world   先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.or ...

  5. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  6. zookeeper学习(上)

    zookeeper学习(上) 在前面的文章里我多次提到zookeeper对于分布式系统开发的重要性,因此对zookeeper的学习是非常必要的.本篇博文主要是讲解zookeeper的安装和zookee ...

  7. Zookeeper学习文章目录1

    目录:参考文章如下 1.ZooKeeper学习第一期---Zookeeper简单介绍 2. ZooKeeper学习第二期--ZooKeeper安装配置 3. ZooKeeper学习第三期---Zook ...

  8. ZooKeeper学习笔记(二)——内部原理

    zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...

  9. Zookeeper学习笔记(下)

    这是ZK学习笔记的下篇, 主要希望可以分享一些 ZK 的应用以及其应用原理 我本人的学习告一段落, 不过还遗留了一些ZK相关的任务开发和性能测试的任务, 留待以后完成之后再通过其他文章来进行分享了 Z ...

随机推荐

  1. 初学者上传文件到github

    http://blog.csdn.net/steven6977/article/details/10567719 我的github是wzb19960208,怕忘了=.=

  2. 基于ARP的局域网IP劫持——C语言实现

      我站在 烈烈风中   恨不能 荡尽绵绵心痛   望苍天 四方云动   剑在手   问天下谁是英雄 ——<霸王别姬> 阅读这篇文章之前,请确认已经熟悉ARP报文伪造的方法,可参考< ...

  3. 解决git报ssh variant 'simple' does not support setting port

    解决办法 在git bash中输入命令 git config --global ssh.variant ssh

  4. 【转】arm和x86的区别

    来自: https://blog.csdn.net/u012513972/article/details/78349192/ 信不信,随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是 ...

  5. os.path.dirname( __ file __ ) 2018/6/2

    os.path.dirname( __ file __ ) 2018/6/2 该测试脚本所在的位置:D:\第1层\第2层\第3层\第4层\第5层\test11.py import os #该文件所在位 ...

  6. call和callvirt

    call以非虚方式调用虚函数. callvirt以虚方式调用虚函数,调用的时候会判断真正引用的对象,调用该类型的

  7. Android开发实战之ViewPager实现向导界面

    当我们更新应用,或者第一次进入应用时都会有一个向导界面,介绍这个app的内容和使用方式. 如果你细心你会发现其实这就是个viewpager,本篇博文将介绍应用的向导界面是如何制作的.希 望本篇博文对你 ...

  8. Invoke and BeginInvoke(转载:http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html)

    一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己. 1 ...

  9. 10 华电内部文档搜索系统 search04

    上一节我们着重讲解了权限过滤器的使用.这一节讲解一下补充一下Struts 2下面对应的Checkbox的使用.对索引下面的数据进行维护操作,一次可以删除多个.在Struts 2下面使用对应的Check ...

  10. java web框架发展的新趋势--跨界轻型App

    “跨界(cross over)在汽车界已然成风,将轿车.SUV.跑车和MPV等多种不同元素融为一体的混搭跨界车型,正在成为汽车设计领域的新趋势.从个人而言,当包容.多元的审美要求和物质要求越来越强烈时 ...