From 7a6e1de845f029d07e2cfb4ca9f688a09074d59e Mon Sep 17 00:00:00 2001
From: luoxiang <2806718453@qq.com>
Date: Sat, 1 Jun 2019 19:48:00 +0800
Subject: [PATCH] modify
---
README.md | 25 ++-
notes/installation/HBase集群环境搭建.md | 183 +++++++++++++++
...搭建.md => Hadoop单机环境搭建.md} | 0
.../installation/Hadoop集群环境搭建.md | 212 ++++++++++++++++++
notes/installation/Spark集群环境搭建.md | 172 ++++++++++++++
pictures/hadoop集群规划.png | Bin 0 -> 22060 bytes
pictures/hbase集群规划.png | Bin 0 -> 21851 bytes
pictures/spark集群规划.png | Bin 0 -> 21966 bytes
8 files changed, 581 insertions(+), 11 deletions(-)
create mode 100644 notes/installation/HBase集群环境搭建.md
rename notes/installation/{hadoop单机版本环境搭建.md => Hadoop单机环境搭建.md} (100%)
create mode 100644 notes/installation/Hadoop集群环境搭建.md
create mode 100644 notes/installation/Spark集群环境搭建.md
create mode 100644 pictures/hadoop集群规划.png
create mode 100644 pictures/hbase集群规划.png
create mode 100644 pictures/spark集群规划.png
diff --git a/README.md b/README.md
index d11355b..37dbd20 100644
--- a/README.md
+++ b/README.md
@@ -52,9 +52,10 @@
1. [分布式文件存储系统——HDFS](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hadoop-HDFS.md)
2. [分布式计算框架——MapReduce](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hadoop-MapReduce.md)
3. [集群资源管理器——YARN](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hadoop-YARN.md)
-4. [Hadoop单机伪集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/hadoop单机版本环境搭建.md)
-5. [HDFS常用Shell命令](https://github.com/heibaiying/BigData-Notes/blob/master/notes/HDFS常用Shell命令.md)
-6. [HDFS Java API的使用](https://github.com/heibaiying/BigData-Notes/blob/master/notes/HDFS-Java-API.md)
+4. [Hadoop单机伪集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop单机环境搭建.md)
+5. [Hadoop集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop集群环境搭建.md)
+6. [HDFS常用Shell命令](https://github.com/heibaiying/BigData-Notes/blob/master/notes/HDFS常用Shell命令.md)
+7. [HDFS Java API的使用](https://github.com/heibaiying/BigData-Notes/blob/master/notes/HDFS-Java-API.md)
## 二、Hive
@@ -77,6 +78,7 @@
5. [RDD常用算子详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark_Transformation和Action算子.md)
5. [Spark运行模式与作业提交](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark部署模式与作业提交.md)
6. [Spark累加器与广播变量](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spark累加器与广播变量.md)
+7. [基于Zookeeper搭建Spark高可用集群](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Spark集群环境搭建.md)
**Spark SQL :**
@@ -113,14 +115,15 @@ TODO
1. [Hbase 简介](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase简介.md)
2. [HBase系统架构及数据结构](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase系统架构及数据结构.md)
-3. [HBase基本环境搭建(Standalone /pseudo-distributed mode)](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hbase基本环境搭建.md)
-4. [HBase常用Shell命令](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase_Shell.md)
-5. [HBase Java API](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase_Java_API.md)
-6. [Hbase 过滤器详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase过滤器详解.md)
-7. [HBase 协处理器详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase协处理器详解.md)
-8. [HBase 容灾与备份](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase容灾与备份.md)
-9. [HBase的SQL中间层——Phoenix](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase的SQL中间层_Phoenix.md)
-10. [Spring/Spring Boot 整合 Mybatis + Phoenix](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spring+Mybtais+Phoenix整合.md)
+3. [HBase基本环境搭建(Standalone /pseudo-distributed mode)](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/HBase基本环境搭建.md)
+4. [HBase集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/HBase集群环境搭建.md)
+5. [HBase常用Shell命令](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase_Shell.md)
+6. [HBase Java API](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase_Java_API.md)
+7. [Hbase 过滤器详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase过滤器详解.md)
+8. [HBase 协处理器详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase协处理器详解.md)
+9. [HBase 容灾与备份](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase容灾与备份.md)
+10. [HBase的SQL中间层——Phoenix](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Hbase的SQL中间层_Phoenix.md)
+11. [Spring/Spring Boot 整合 Mybatis + Phoenix](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Spring+Mybtais+Phoenix整合.md)
## 七、Kafka
diff --git a/notes/installation/HBase集群环境搭建.md b/notes/installation/HBase集群环境搭建.md
new file mode 100644
index 0000000..cc76b96
--- /dev/null
+++ b/notes/installation/HBase集群环境搭建.md
@@ -0,0 +1,183 @@
+# HBase集群环境配置
+
+## 一、集群规划
+
+这里搭建一个3节点的HBase集群,其中三台主机上均为`Regin Server`。同时为了保证高可用,除了在hadoop001上部署主`Master`服务外,还在hadoop002上署备用的`Master`服务,Master服务由Zookeeper集群进行协调管理,如果主`Master`不可用,则备用`Master`会成为新的主`Master`。
+
+
+
+## 二、前置条件
+
+HBase的运行需要依赖JDK和Hadoop,HBase 2.0+需要安装JDK 1.8+ 。同时为了保证高可用,这里我们不采用HBase内置的Zookeeper,而采用外置的Zookeeper集群。相关搭建步骤可以参阅:
+
+- [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md)
+- [Zookeeper单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md)
+- [Hadoop集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop集群环境搭建.md)
+
+
+
+## 三、集群搭建
+
+### 3.1 下载并解压
+
+下载并解压,官方下载地址:https://hbase.apache.org/downloads.html
+
+```shell
+# tar -zxvf hbase-2.1.4-bin.tar.gz
+```
+
+### 3.2 配置环境变量
+
+```shell
+# vim /etc/profile
+```
+
+添加环境变量:
+
+```shell
+export HBASE_HOME=/usr/app/hbase-2.1.4
+export PATH=$HBASE_HOME/bin:$PATH
+```
+
+使得配置的环境变量立即生效:
+
+```shell
+# source /etc/profile
+```
+
+### 3.3 集群配置
+
+进入`${HBASE_HOME}/conf`目录下,修改配置:
+
+#### 1. hbase-env.sh
+
+```shell
+# 配置JDK安装位置
+export JAVA_HOME=/usr/java/jdk1.8.0_201
+# 不使用内置的zookeeper服务
+export HBASE_MANAGES_ZK=false
+```
+
+#### 2. hbase-site.xml
+
+```xml
+
+
+
+ hbase.cluster.distributed
+ true
+
+
+
+ hbase.rootdir
+ hdfs://hadoop001:8020/hbase
+
+
+
+ hbase.zookeeper.quorum
+ hadoop001:2181,hadoop002:2181,hadoop003:2181
+
+
+```
+
+#### 3. regionservers
+
+```
+hadoop001
+hadoop002
+hadoop003
+```
+
+#### 4. backup-masters
+
+```
+hadoop002
+```
+
+` backup-masters`这个文件是不存在的,需要新建,主要用来指明备用的master节点,可以是多个,这里我们以1个为例。
+
+### 3.4 HDFS客户端配置
+
+这里有一个可选的配置:如果您在Hadoop集群上进行了HDFS客户端配置的更改,比如将副本系数`dfs.replication`设置成5,则必须使用以下方法之一来使HBase知道,否则HBase将依旧使用默认的副本系数3来创建文件:
+
+> 1. Add a pointer to your `HADOOP_CONF_DIR` to the `HBASE_CLASSPATH` environment variable in *hbase-env.sh*.
+> 2. Add a copy of *hdfs-site.xml* (or *hadoop-site.xml*) or, better, symlinks, under *${HBASE_HOME}/conf*, or
+> 3. if only a small set of HDFS client configurations, add them to *hbase-site.xml*.
+
+以上是官方文档的说明,这里解释一下:
+
+**第一种** :将Hadoop配置文件的位置信息添加到`hbase-env.sh`的`HBASE_CLASSPATH` 属性,示例如下:
+
+```shell
+export HBASE_CLASSPATH=usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop
+```
+
+**第二种** :将Hadoop的` hdfs-site.xml`或`hadoop-site.xml` 拷贝到 `${HBASE_HOME}/conf `目录下,或者通过符号链接的方式。如果采用这种方式的话,建议将两者都拷贝或建立符号链接,示例如下:
+
+```shell
+# 拷贝
+cp core-site.xml hdfs-site.xml /usr/app/hbase-1.2.0-cdh5.15.2/conf/
+# 使用符号链接
+ln -s /usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop/core-site.xml
+ln -s /usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop/hdfs-site.xml
+```
+
+> 注:`hadoop-site.xml`这个配置文件现在叫做`core-site.xml`
+
+**第三种** :如果你只有少量更改,那么直接配置到`hbase-site.xml`中即可。
+
+
+
+### 3.5 安装包分发
+
+将HBase的安装包分发到其他服务器,分发后建议在这两台服务器上也配置一下HBase的环境变量。
+
+```shell
+scp -r /usr/app/hbase-1.2.0-cdh5.15.2/ hadoop002:usr/app/
+scp -r /usr/app/hbase-1.2.0-cdh5.15.2/ hadoop003:usr/app/
+```
+
+
+
+## 四、启动集群
+
+### 4.1 启动ZooKeeper集群
+
+分别到三台服务器上启动ZooKeeper服务:
+
+```shell
+ zkServer.sh start
+```
+
+### 4.2 启动Hadoop集群
+
+```shell
+# 启动dfs服务
+start-dfs.sh
+# 启动yarn服务
+start-yarn.sh
+```
+
+### 4.3 启动HBase集群
+
+进入hadoop001的`${HBASE_HOME}/bin`,使用以下命令启动HBase集群。执行此命令后,会在hadoop001上启动`Master`服务,在hadoop002上启动备用`Master`服务,在`regionservers`文件中配置的所有节点启动`region server`服务。
+
+```shell
+start-hbase.sh
+```
+
+
+
+### 4.5 查看服务
+
+访问HBase的Web-UI界面,这里我安装的HBase版本为1.2,访问端口为`60010`,如果你安装的是2.0以上的版本,则访问端口号为`16010`。可以看到`Master`在hadoop001上,三个`Regin Servers`分别在hadoop001,hadoop002,和hadoop003上,并且还有一个`Backup Matser` 服务在 hadoop002上。
+
+
+
+
+
+hadoop002 上的 HBase出于备用状态:
+
+
+
+
\ No newline at end of file
diff --git a/notes/installation/hadoop单机版本环境搭建.md b/notes/installation/Hadoop单机环境搭建.md
similarity index 100%
rename from notes/installation/hadoop单机版本环境搭建.md
rename to notes/installation/Hadoop单机环境搭建.md
diff --git a/notes/installation/Hadoop集群环境搭建.md b/notes/installation/Hadoop集群环境搭建.md
new file mode 100644
index 0000000..c25c5e5
--- /dev/null
+++ b/notes/installation/Hadoop集群环境搭建.md
@@ -0,0 +1,212 @@
+# Hadoop集群环境搭建
+
+## 一、集群规划
+
+这里搭建一个3节点的Hadoop集群,其中三台主机均部署`DataNode`和`NodeManager`服务,但只有hadoop001上部署`NameNode`和`ResourceManager`服务。
+
+
+
+## 二、前置条件
+
+Hadoop的运行依赖JDK,需要预先安装。其安装步骤单独整理至:
+
++ [Linux下JDK的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
+
+
+
+## 三、配置免密登录
+
+### 3.1 生成密匙
+
+在每台主机上使用ssh-keygen产生公钥私钥对:
+
+```shell
+ssh-keygen
+```
+
+### 3.2 免密登录
+
+将`hadoop001`的公钥写到本机和远程机器的` ~/ .ssh/authorized_key`文件中:
+
+```shell
+ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001
+ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002
+ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003
+```
+
+### 3.3 验证免密登录
+
+```she
+ssh hadoop002
+ssh hadoop003
+```
+
+
+
+## 四、集群搭建
+
+### 3.1 下载并解压
+
+下载Hadoop。这里我下载的是CDH版本Hadoop,下载地址为:http://archive.cloudera.com/cdh5/cdh/5/
+
+```shell
+# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz
+```
+
+### 3.2 配置环境变量
+
+编辑`profile`文件:
+
+```shell
+# vim /etc/profile
+```
+
+增加如下配置:
+
+```
+export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
+export PATH=${HADOOP_HOME}/bin:$PATH
+```
+
+执行`source`命令,使得配置立即生效:
+
+```shell
+# source /etc/profile
+```
+
+### 3.3 修改配置
+
+进入`${HADOOP_HOME}/etc/hadoop`目录下,修改配置文件。各个配置文件内容如下:
+
+#### 1. hadoop-env.sh
+
+```shell
+# 指定JDK的安装位置
+export JAVA_HOME=/usr/java/jdk1.8.0_201/
+```
+
+#### 2. core-site.xml
+
+```xml
+
+
+
+ fs.defaultFS
+ hdfs://hadoop001:8020
+
+
+
+ hadoop.tmp.dir
+ /home/hadoop/tmp
+
+
+```
+
+#### 3. hdfs-site.xml
+
+```xml
+
+
+ dfs.namenode.name.dir
+ /home/hadoop/namenode/data
+
+
+
+ dfs.datanode.data.dir
+ /home/hadoop/datanode/data
+
+```
+
+#### 4. yarn-site.xml
+
+```xml
+
+
+ yarn.nodemanager.aux-services
+ mapreduce_shuffle
+
+
+
+ yarn.resourcemanager.hostname
+ hadoop001
+
+
+
+```
+
+#### 5. mapred-site.xml
+
+```xml
+
+
+
+ mapreduce.framework.name
+ yarn
+
+
+```
+
+#### 5. slaves
+
+配置所有从属节点的主机名或IP地址,每行一个。
+
+```properties
+hadoop001
+hadoop002
+hadoop003
+```
+
+### 3.4 分发程序
+
+将Hadoop安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下Hadoop的环境变量。
+
+```shell
+# 将安装包分发到hadoop002
+scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop002:/usr/app/
+# 将安装包分发到hadoop003
+scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/
+```
+
+### 3.5 初始化
+
+在`Hadoop001`上执行namenode初始化命令:
+
+```
+hadoop namenode -format
+```
+
+### 3.6 启动集群
+
+进入到`Hadoop001`的`${HADOOP_HOME}/sbin`目录下,启动Hadoop。此时`hadoop002`和`hadoop003`上的相关服务也会被启动。
+
+```shell
+# 启动dfs服务
+start-dfs.sh
+# 启动yarn服务
+start-yarn.sh
+```
+
+### 3.7 查看集群
+
+在每台服务器上使用`jps`命令查看服务进程,或直接进入Web-UI界面进行查看,端口为`50070`。可以看到此时有三个可用的`Datanode`:
+
+
+
+点击`Live Nodes`进入,可以看到每个`DataNode`的详细情况:
+
+
+
+接着可以查看Yarn集群的情况,端口号为`8088` :
+
+
+
+
+
+## 五、提交服务到集群
+
+提交作业到集群的方式和单机环境完全一致,这里以提交Hadoop内置的计算Pi的示例程序为例,在任何一个节点上执行都可以,命令如下:
+
+```shell
+hadoop jar /usr/app/hadoop-2.6.0-cdh5.15.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar pi 3 3
+```
+
diff --git a/notes/installation/Spark集群环境搭建.md b/notes/installation/Spark集群环境搭建.md
new file mode 100644
index 0000000..a95758c
--- /dev/null
+++ b/notes/installation/Spark集群环境搭建.md
@@ -0,0 +1,172 @@
+# 基于ZooKeeper搭建Spark高可用集群
+
+## 一、集群规划
+
+这里搭建一个3节点的Spark集群,其中三台主机上均部署`Worker`服务。同时为了保证高可用,除了在hadoop001上部署主`Master`服务外,还在hadoop002和hadoop003上分别部署备用的`Master`服务,Master服务由Zookeeper集群进行协调管理,如果主`Master`不可用,则备用`Master`会成为新的主`Master`。
+
+
+
+## 二、前置条件
+
+搭建Spark集群前,需要保证JDK环境、Zookeeper集群和Hadoop集群已经搭建,相关步骤可以参阅:
+
+- [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md)
+- [Zookeeper单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md)
+- [Hadoop集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop集群环境搭建.md)
+
+## 三、Spark集群搭建
+
+### 3.1 下载解压
+
+下载所需版本的Spark,官网下载地址:http://spark.apache.org/downloads.html
+
+
+
+
+
+下载后进行解压:
+
+```shell
+# tar -zxvf spark-2.2.3-bin-hadoop2.6.tgz
+```
+
+
+
+### 3.2 配置环境变量
+
+```shell
+# vim /etc/profile
+```
+
+添加环境变量:
+
+```shell
+export SPARK_HOME=/usr/app/spark-2.2.3-bin-hadoop2.6
+export PATH=${SPARK_HOME}/bin:$PATH
+```
+
+使得配置的环境变量立即生效:
+
+```shell
+# source /etc/profile
+```
+
+### 3.3 集群配置
+
+进入`${SPARK_HOME}/conf`目录,拷贝配置样本进行修改:
+
+#### 1. spark-env.sh
+
+```she
+ cp spark-env.sh.template spark-env.sh
+```
+
+```shell
+# 配置JDK安装位置
+JAVA_HOME=/usr/java/jdk1.8.0_201
+# 配置hadoop配置文件的位置
+HADOOP_CONF_DIR=/usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop
+# 配置zookeeper地址
+SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop001:2181,hadoop002:2181,hadoop003:2181 -Dspark.deploy.zookeeper.dir=/spark"
+```
+
+#### 2. slaves
+
+```
+cp slaves.template slaves
+```
+
+配置所有Woker节点的位置:
+
+```properties
+hadoop001
+hadoop002
+hadoop003
+```
+
+### 3.4 安装包分发
+
+将Spark的安装包分发到其他服务器,分发后建议在这两台服务器上也配置一下Spark的环境变量。
+
+```shell
+scp -r /usr/app/spark-2.4.0-bin-hadoop2.6/ hadoop002:usr/app/
+scp -r /usr/app/spark-2.4.0-bin-hadoop2.6/ hadoop003:usr/app/
+```
+
+
+
+## 四、启动集群
+
+### 4.1 启动ZooKeeper集群
+
+分别到三台服务器上启动ZooKeeper服务:
+
+```shell
+ zkServer.sh start
+```
+
+### 4.2 启动Hadoop集群
+
+```shell
+# 启动dfs服务
+start-dfs.sh
+# 启动yarn服务
+start-yarn.sh
+```
+
+### 4.3 启动Spark集群
+
+进入hadoop001的` ${SPARK_HOME}/sbin`目录下,执行下面命令启动集群。执行命令后,会在hadoop001上启动`Maser`服务,会在`slaves`配置文件中配置的所有节点上启动`Worker`服务。
+
+```shell
+start-all.sh
+```
+
+分别在hadoop002和hadoop003上执行下面的命令,启动备用的`Master`服务:
+
+```shell
+# ${SPARK_HOME}/sbin 下执行
+start-master.sh
+```
+
+### 4.4 查看服务
+
+查看Spark的Web-UI页面,端口为`8080`。此时可以看到hadoop001上的Master节点处于`ALIVE`状态,并有3个可用的`Worker`节点。
+
+
+
+而hadoop002和hadoop003上的Master节点均处于`STANDBY`状态,没有可用的`Worker`节点。
+
+
+
+
+
+
+
+## 五、验证集群高可用
+
+此时可以使用`kill`命令杀死hadoop001上的`Master`进程,此时`备用Master`会中会有一个再次成为`主Master`,我这里是hadoop002,可以看到hadoop2上的`Master`经过`RECOVERING`后成为了新的`主Master`,并且获得了全部可以用的`Workers`。
+
+此时如果你再在hadoop001上使用`start-master.sh`启动Master,那么其会作为`备用Master`存在。
+
+
+
+Hadoop002上的`Master`成为`主Master`,并获得了全部可以用的`Workers`。
+
+
+
+## 六、提交作业
+
+和单机环境下的提交到Yarn上的命令完全一致,这里以Spark内置的计算Pi的样例程序为例,提交命令如下:
+
+```shell
+spark-submit \
+--class org.apache.spark.examples.SparkPi \
+--master yarn \
+--deploy-mode client \
+--executor-memory 1G \
+--num-executors 10 \
+/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
+100
+```
+
diff --git a/pictures/hadoop集群规划.png b/pictures/hadoop集群规划.png
new file mode 100644
index 0000000000000000000000000000000000000000..aaf33457d5506d187b1f202891b637c6653a95fd
GIT binary patch
literal 22060
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
E4rHG25dZ)H
literal 0
HcmV?d00001
diff --git a/pictures/hbase集群规划.png b/pictures/hbase集群规划.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd16256e27b1b0999e0666e339a1d896aafb1784
GIT binary patch
literal 21851
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
NaU
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
ttwcVePX-3&DfoFJ|LP_9OIoJQCHVE1
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