文章目录

  • 一、入门
    • 1.1 基本理解
    • 1.2 应用场景
  • 二、单节点安装
  • 三、内部原理
    • 3.1 选举机制
    • 3.2 节点类型
    • 3.3 结构体
    • 3.4 监听器
    • 3.5 写数据流程
    • 3.6 权限控制
  • 四、开发实战
    • 4.1 分布式部署
    • 4.2 客户端常用命令
    • 4.3 Maven程序

一、入门

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。

1.1 基本理解

  • 工作机制
  1. Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架
  2. 它负责存储和管理大家都关心的数据,然后接受观察者的注册
  3. 一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。

  • 特点
  1. 一个领导者(Leader),多个跟随者(Follower)组成的集群;
  2. 集群中只要半数以上的节点存活,Zookeeper集群就能正常服务;
  3. 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的;
  4. 更新请求顺序进行,来自同一个Client的请求按其发送顺序依次执行;
  5. 数据更新原子性,一次数据更新要么成功,要么失败;
  6. 实时性,在一定时间范围内,Client能读到最新的数据。

  • 数据结构

ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。

每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。

1.2 应用场景

  • 统一命名服务

在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。例如:IP不容易记住,而域名容易记住。

  • 统一配置管理
  1. 分布式环境下,配置文件同步非常常见。
  2. 一般要求一个集群中,所有节点的配置信息是一致的,比如 Kafka 集群。
  3. 对配置文件修改后,希望能够快速同步到各个节点上。
  4. 配置管理可交由ZooKeeper实现。
  5. 可将配置信息写入ZooKeeper上的一个Znode。
  6. 各个客户端服务器监听这个Znode。
  7. 一旦Znode中的数据被修改,ZooKeeper将通知各个客户端服务器。

  • 统一集群管理
  1. 分布式环境中,实时掌握每个节点的状态是必要的。
  2. 可根据节点实时状态做出一些调整。
  3. ZooKeeper可以实现实时监控节点状态变化
  4. 可将节点信息写入ZooKeeper上的一个ZNode。
  5. 监听这个ZNode可获取它的实时状态变化。

  • 服务器动态上下线

  • 软负载均衡

在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求

二、单节点安装

  • 安装
[root@bigdata01 ~]# java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
[root@bigdata01 ~]# ll -d /opt/module/*zoo*
drwxr-xr-x 6 root root 133 Feb  4 22:30 /opt/module/apache-zookeeper-3.6.2-bin
lrwxrwxrwx 1 root root  27 Feb  4 22:30 /opt/module/zookeeper -> apache-zookeeper-3.6.2-bin/
[root@bigdata01 ~]# 
[root@bigdata01 ~]# cd /opt/module/zookeeper/conf/
[root@bigdata01 conf]# grep -Ev '^$|^#' zoo_sample.cfg > zoo.cfg
[root@bigdata01 conf]# vi zoo.cfg
[root@bigdata01 conf]# cat zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/module/zookeeper/zkData
clientPort=2181
[root@bigdata01 conf]#
  • 完整的配置文件
[root@bigdata01 conf]# cat zoo_sample.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true[root@bigdata01 conf]#
  • 配置参数解读
参数 说明
tickTime =2000 服务器与客户端心跳时间,单位毫秒
initLimit =10 Follower与Leader之间初始连接时能容忍的最多心跳数(tickTime的数量)
syncLimit =5 集群中Leader与Follower之间的最大响应时间单位(tickTime的数量)
dataDir 数据文件目录+数据持久化路径
clientPort =2181 客户端连接端口
  • 简单命令
[root@bigdata01 bin]# pwd
/opt/module/zookeeper/bin
[root@bigdata01 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@bigdata01 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
[root@bigdata01 bin]#
[root@bigdata01 bin]# ./zkCli.sh
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 2] quit
[root@bigdata01 bin]#
[root@bigdata01 bin]# ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
[root@bigdata01 bin]#

三、内部原理

3.1 选举机制

  1. 半数机制:集群中半数以上机器存活,集群可用;
  2. Leader是通过内部的选举机制临时产生的,Zookeeper适合安装奇数台服务器;

  1. 服务器1启动,此时只有它一台服务器启动了,它发出去的报文没有任何响应,所以它的选举状态一直是LOOKING状态;
  2. 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1、2还是继续保持LOOKING状态;
  3. 服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的Leader;
  4. 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了;
  5. 服务器5启动,同4一样当小弟。

3.2 节点类型

持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除

短暂(Ephemeral):客户端和服务器端断开连接后,创建的节点自己删除

创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护;

注意:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序。

  1. 持久化目录节点:客户端与Zookeeper断开连接后,该节点依旧存在;
  2. 持久化顺序编号目录节点:客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号;
  3. 临时目录节点:客户端与Zookeeper断开连接后,该节点被删除;
  4. 临时顺序编号目录节点:客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。

3.3 结构体

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

3.4 监听器

  • 监听原理详解
  1. 首先要有一个main()线程
  2. 在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)。
  3. 通过connect线程将注册的监听事件发送给Zookeeper。
  4. 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
  5. Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
  6. listener线程内部调用了process()方法。
  • 常见的监听
  1. 监听节点数据的变化:get -w path
  2. 监听子节点增减的变化:ls -w path

3.5 写数据流程

3.6 权限控制

  • 控制模式 scheme:id:perm
  1. 权限模式(scheme):授权的策略
  2. 授权对象(id):授权的对象
  3. 权限(permission):授予的权限
  • 控制特性
  1. ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
  2. 每个znode支持设置多种权限控制方案和多个权限
  3. 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点
  • scheme 采用何种方式授权
策略 说明
world 默认方式,相当于全部都能访问
auth 代表已经认证通过的用户(cli添加授权addauth digest user:pwd )
digest 用 username:password 字符串来产生一个MD5串,然后该串被用来作为ACL ID。认证是通过明文发送username:password 来进行的,当用在ACL时,表达式为 username:BASE64(SHA-1(username:password))
ip 使用客户端的主机IP作为ACL ID,这个ACL表达式的格式为ip/mask
  • ID 给谁授予权限

授权对象ID是指,权限赋予的用户或者一个实体,例如:IP 地址或者机器。

权限模式 授权对象
IP 通常是一个IP地址或是IP段,例如 192.168.1.92192.168.0.1/24
Digest 自定义,通常是 username:BASE64(SHA-1(username:password))
World 只有一个ID:anyone
Super 与Digest模式一致
  • permission 授予什么权限
权限 说明
CREATE c 可以创建子节点
DELETE d 可以删除子节点(仅下一级节点)
READ r 可以读取节点数据及显示子节点列表
WRITE w 可以设置节点数据
ADMIN a 可以设置节点访问控制列表权限
  • 授权实例
  1. word
[zk: localhost:2181(CONNECTED) 7] create /acl "test-acl"
Created /acl
[zk: localhost:2181(CONNECTED) 10] getAcl /acl
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 11] setAcl /acl world:anyone:r
[zk: localhost:2181(CONNECTED) 12] getAcl /acl
'world,'anyone
: r
[zk: localhost:2181(CONNECTED) 13]
  1. IP
[zk: localhost:2181(CONNECTED) 14] create /test test
Created /test
[zk: localhost:2181(CONNECTED) 15] setAcl /test ip:127.0.0.1:r
[zk: localhost:2181(CONNECTED) 16] getAcl /test
'ip,'127.0.0.1
: r
[zk: localhost:2181(CONNECTED) 17]
  1. Auth
[zk: localhost:2181(CONNECTED) 22] create /auth
Created /auth
[zk: localhost:2181(CONNECTED) 23] addauth digest rayslee:abcd1234
[zk: localhost:2181(CONNECTED) 24] setAcl /auth auth:rayslee:cdwra[zk: localhost:2181(CONNECTED) 0] getAcl /auth
Authentication is not valid : /auth
[zk: localhost:2181(CONNECTED) 1] addauth digest rayslee:abcd1234
[zk: localhost:2181(CONNECTED) 2] getAcl /auth
'digest,'rayslee:9cN/Mfg8f75sAEv10v3hiIsEzbA=
: cdrwa
[zk: localhost:2181(CONNECTED) 3]

四、开发实战

4.1 分布式部署

  1. 同步数据文件
[omm@bigdata01 module]$ cat xsync
#!/bin/bashhosts="bigdata02 bigdata03"
stand=`pwd`
p_dir=`cd .. && pwd`
cd $standfor host in $hosts
dorsync -avz --delete $stand $host:$p_dir
done[omm@bigdata01 module]$ xsync
...
sent 15,559,042 bytes  received 33,858 bytes  6,237,160.00 bytes/sec
total size is 1,319,008,659  speedup is 84.59
[omm@bigdata01 module]$
  1. myid
[omm@bigdata01 zkData]$ pwd
/opt/module/zookeeper/zkData
[omm@bigdata01 zkData]$ echo 1 > myid
[omm@bigdata01 zkData]$
[omm@bigdata02 zkData]$ echo 2 > myid
[omm@bigdata02 zkData]$
[omm@bigdata03 zkData]$ echo 3 > myid
[omm@bigdata03 zkData]$
  1. 配置文件

2888 是这个服务器与集群中的Leader服务器交换信息的端口;

3888 是用来执行选举时服务器相互通信的端口。

[omm@bigdata01 conf]$ pwd
/opt/module/zookeeper/conf
[omm@bigdata01 conf]$ cat << EOF >> zoo.cfg
> server.1=bigdata01:2888:3888
> server.2=bigdata02:2888:3888
> server.3=bigdata03:2888:3888
> EOF
[omm@bigdata01 conf]$ xsync
  1. 启动
[omm@bigdata01 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[omm@bigdata01 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[omm@bigdata01 bin]$

4.2 客户端常用命令

命令基本语法 功能描述
help 显示所有操作命令
ls path 使用 ls 命令来查看当前znode中所包含的内容
ls [-s] path 查看当前节点数据并能看到更新次数等数据
ls [-w] path 监听路径变化
create 普通创建,-s 含有序列,-e 临时(重启或者超时消失)
get path 获得节点的值
get [-w] path 监听节点值的变化
set 设置节点的具体值
stat 查看节点状态
delete 删除节点
deleteall 递归删除节点
  1. 启动客户端查看帮助
[root@bigdata03 bin]# pwd
/opt/module/zookeeper/bin
[root@bigdata03 bin]# ./zkCli.sh
[zk: localhost:2181(CONNECTED) 1] help
ZooKeeper -server host:port -client-configuration properties-file cmd argsaddWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVEaddauth scheme authclose config [-c] [-w] [-s]connect host:portcreate [-s] [-e] [-c] [-t ttl] path [data] [acl]delete [-v version] pathdeleteall path [-b batch size]delquota [-n|-b] pathget [-s] [-w] pathgetAcl [-s] pathgetAllChildrenNumber pathgetEphemerals pathhistory listquota pathls [-s] [-w] [-R] pathprintwatches on|offquit reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]redo cmdnoremovewatches path [-c|-d|-a] [-l]set [-s] [-v version] path datasetAcl [-s] [-v version] [-R] path aclsetquota -n|-b val pathstat [-w] pathsync pathversion
Command not found: Command not found help
[zk: localhost:2181(CONNECTED) 2]
  1. 查看
[zk: localhost:2181(CONNECTED) 7] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 8] ls -s /
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 9]
  1. 创建
[zk: localhost:2181(CONNECTED) 10] create /simwor "beginner"
Created /simwor
[zk: localhost:2181(CONNECTED) 11] create /simwor/bigdata "zookeeper"
Created /simwor/bigdata
[zk: localhost:2181(CONNECTED) 12] create -e /simwor/frontend "javascript"
Created /simwor/frontend
[zk: localhost:2181(CONNECTED) 13] quit
[root@bigdata03 bin]# ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /simwor
[bigdata]
[zk: localhost:2181(CONNECTED) 1]
[zk: localhost:2181(CONNECTED) 1] create -s /simwor/sequential "001"
Created /simwor/sequential0000000002
[zk: localhost:2181(CONNECTED) 2] create -s /simwor/sequential "002"
Created /simwor/sequential0000000003
[zk: localhost:2181(CONNECTED) 3] create -s /simwor/sequential "003"
Created /simwor/sequential0000000004
[zk: localhost:2181(CONNECTED) 4] ls /simwor
[bigdata, sequential0000000002, sequential0000000003, sequential0000000004]
[zk: localhost:2181(CONNECTED) 5]
[zk: localhost:2181(CONNECTED) 5] create -e -s /simwor/temp-sequential "001"
Created /simwor/temp-sequential0000000005
[zk: localhost:2181(CONNECTED) 6] create -e -s /simwor/temp-sequential "002"
Created /simwor/temp-sequential0000000006
[zk: localhost:2181(CONNECTED) 7] create -e -s /simwor/temp-sequential "003"
Created /simwor/temp-sequential0000000007
[zk: localhost:2181(CONNECTED) 8] quit
[root@bigdata03 bin]# ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /simwor
[bigdata, sequential0000000002, sequential0000000003, sequential0000000004]
[zk: localhost:2181(CONNECTED) 1]
  1. 查询修改
[zk: localhost:2181(CONNECTED) 1] get /simwor
beginner
[zk: localhost:2181(CONNECTED) 2] set /simwor "master"
[zk: localhost:2181(CONNECTED) 3] get /simwor
master
[zk: localhost:2181(CONNECTED) 4] get -s /simwor
master
cZxid = 0x200000017
ctime = Sat Feb 06 20:55:36 CST 2021
mZxid = 0x200000024
mtime = Sat Feb 06 21:01:15 CST 2021
pZxid = 0x200000022
cversion = 12
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 4
[zk: localhost:2181(CONNECTED) 5]
  1. 监听节点变化
[zk: localhost:2181(CONNECTED) 16] set /simwor "beginner"
[zk: localhost:2181(CONNECTED) 17]
[zk: localhost:2181(CONNECTED) 7] get -w /simwor
master
[zk: localhost:2181(CONNECTED) 8]
WATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/simwor[zk: localhost:2181(CONNECTED) 8]
  1. 监听路径变化
[zk: localhost:2181(CONNECTED) 8] ls -w /simwor
[bigdata, sequential0000000002, sequential0000000003, sequential0000000004]
[zk: localhost:2181(CONNECTED) 9]
WATCHER::WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/simwor[zk: localhost:2181(CONNECTED) 9]
[zk: localhost:2181(CONNECTED) 17] create /simwor/change "hallo"
Created /simwor/change
[zk: localhost:2181(CONNECTED) 18]
  1. 删除节点
[zk: localhost:2181(CONNECTED) 9] ls /simwor
[bigdata, change, sequential0000000002, sequential0000000003, sequential0000000004]
[zk: localhost:2181(CONNECTED) 10] delete /simwor/bigdata
[zk: localhost:2181(CONNECTED) 11] delete /simwor
Node not empty: /simwor
[zk: localhost:2181(CONNECTED) 12] deleteall /simwor
[zk: localhost:2181(CONNECTED) 13]
  1. 查看节点状态
[zk: localhost:2181(CONNECTED) 15] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
[zk: localhost:2181(CONNECTED) 16]

4.3 Maven程序

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.simwor.zookeeper</groupId><artifactId>ZookeeperDemo</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.1</version></parent><properties><maven.compiler.source>15</maven.compiler.source><maven.compiler.target>15</maven.compiler.target><spring-cloud.version>2020.0.0</spring-cloud.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><!-- pom说明该依赖(spring-cloud-dependencies)是专门作管理版本 --><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
package com.simwor.zookeeper;import org.apache.zookeeper.*;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;import java.io.IOException;// Watcher 即 ZooKeeper 发生变化后应该如何处理(process方法)
public class ZooKeeperTest implements Watcher {private static ZooKeeper zk;public static void main(String[] args) throws IOException, InterruptedException {// ZooKeeper 实例,包含集群地址和 Watcher 实例。zk = new ZooKeeper("192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181", 5000, new ZooKeeperTest());Thread.sleep(Integer.MAX_VALUE);}@Overridepublic void process(WatchedEvent event) {// 连接成功后调用 doSomething 方法if (event.getState() == KeeperState.SyncConnected) {doSomething();}}private void doSomething() {try {// 创建String path = zk.create("/test", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);System.out.println("return path:" + path);} catch (KeeperException | InterruptedException  e) {e.printStackTrace();}}
}

大数据组件笔记 -- ZooKeeper相关推荐

  1. 大数据组件笔记 -- Hive

    文章目录 一.基本概念 1.1 Hive和数据库比较 1.2 Hive 安装 1.3 Hive 启动 1.4 Hive 使用 1.4.1 shell beeline 1.4.2 DBeaver 二.数 ...

  2. 【大数据入门笔记系列】第一节 大数据常用组件

    [大数据入门笔记系列]第一节 大数据常用组件 大数据释义 大数据组件 跳转 大数据释义 近些年来,坊间一直流传着这样的言论:"大数据时代,人人都在裸奔".对于外行人来说,对于&qu ...

  3. 大数据开发笔记(五):Zookeeper

      ✨大数据开发笔记推荐: 大数据开发面试知识点总结_GoAI的博客-CSDN博客_大数据开发面试​本文详细介绍大数据hadoop生态圈各部分知识,包括不限于hdfs.yarn.mapreduce.h ...

  4. 大数据学习笔记:Hadoop生态系统

    文章目录 一.Hadoop是什么 二.Hadoop生态系统图 三.Hadoop生态圈常用组件 (一)Hadoop (二)HDFS (三)MapReduce (四)Hive (五)Hbase (六)Zo ...

  5. 【大数据入门笔记系列】第六节 分布式计算框架MapReduce的工作流程

    [大数据入门笔记系列]第六节 分布式计算框架MapReduce的工作流程 前言 MapReduce分布式运算 MapReduceApplication MapTask ReduceTask split ...

  6. 大数据学习过程笔记——第一阶段

    大数据学习过程笔记 大数据学习视频网址推荐博客 Hadoop安装配置说明页 Hadoop架构介绍 -> CentOS可能会用到的依赖: yum -y install gcc gcc-c++ au ...

  7. hive 取消打印日志信息_Hive及其相关大数据组件

    HDFS架构 Hadoop 分布式文件系统(HDFS)是 Hive 存储数据的地方,简单了解HDFS的基本机制和读写工作机制,对于排查HiveSQL 程序是否由于数据存储引发的性能问题有较大的帮助. ...

  8. 假如大数据组件中的动物都变成神奇宝贝,那会变成什么样?(大数据的组件动漫化)

    文章目录 假如大数据组件中的动物都变成神奇宝贝,那会变成什么样? 第一个神奇宝贝 Hadoop 第二个神奇宝贝 Hive 第三个神奇宝贝 Hbase 第四个神奇宝贝的管理员 Zookeeper 第五个 ...

  9. 企鹅够牛,大事不断:腾讯音乐遭“投资者律师代表团”调查、大数据组件TubeMQ宣布开源、1千万美元领投英国AI企业SenSat...

    整理: 数据猿 Toby 数据猿官网 | www.datayuan.cn 今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区 据 ...

最新文章

  1. php pdo 时间,php – 使用PDO执行时间记录查询 – 自动完成功能无效
  2. SQL Server-聚焦使用视图若干限制/建议、视图查询性能问题,你懵逼了?(二十五)...
  3. 线程:suspend与resume方法
  4. iOS 获取appstore 版本号
  5. VTK:PolyData之GetPoint
  6. java掉单_【Java】抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题...
  7. docker --- 镜像、容器
  8. 写博客和生产api的工具
  9. C学习杂记(二)笔试题:不使用任何中间变量如何将a、b的值进行交换
  10. leetcode 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
  11. OpenCV中绘制外围矩形框和圆框
  12. UVA10474 Where is the Marble?【排序】
  13. MTK eCos系统的有线驱动收包流程
  14. householder变换解线性方程组matlab实现
  15. 再谈软件研发管理体系建设
  16. coin3d碰撞检测的实现
  17. 最新的windows xp sp3序列号(绝对可通过正版验证)
  18. 苹果x和xs买哪个好_苹果12哪个颜色销量销售好 iPhone12哪个颜色好看
  19. W10系统下 获取 TrustedInstaller 高级权限.
  20. Linux教程(第5版)习题部分习题及答案

热门文章

  1. 51单片机教程:二相四线步进电机驱动
  2. 烟沙浮生 | 曾几何时,还是游吟长安的醉客
  3. CSS新招式,临时记一下
  4. ***无人驾驶***apollo 3.0 硬件系统
  5. 婚姻:中国女研究生结婚率下降明显 对方学历低看不上
  6. 95后开始考虑结婚?北京剩女80万-全国十大单身男女盛产地都在哪?
  7. EagleEye简介:户外视频监控分析和面部识别软件
  8. HDU 5234 Happy birthday 01背包
  9. zabbix拓扑图添加标签信息(流量)
  10. Sphinx 自动化文档