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集群规划](D:\BigData-Notes\pictures\hbase集群规划.png) + +## 二、前置条件 + +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上。 + +![hbase-集群搭建1](D:\BigData-Notes\pictures\hbase-集群搭建1.png) + +
+ +hadoop002 上的 HBase出于备用状态: + +
+ +![hbase-集群搭建2](D:\BigData-Notes\pictures\hbase-集群搭建2.png) \ 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`服务。 + +![hbase集群规划](D:\BigData-Notes\pictures\hadoop集群规划.png) + +## 二、前置条件 + +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`: + +![hadoop-集群环境搭建](D:\BigData-Notes\pictures\hadoop-集群环境搭建.png) + +点击`Live Nodes`进入,可以看到每个`DataNode`的详细情况: + +![hadoop-集群搭建2](D:\BigData-Notes\pictures\hadoop-集群搭建2.png) + +接着可以查看Yarn集群的情况,端口号为`8088` : + +![hadoop-集群搭建3](D:\BigData-Notes\pictures\hadoop-集群搭建3.png) + + + +## 五、提交服务到集群 + +提交作业到集群的方式和单机环境完全一致,这里以提交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-集群规划](D:\BigData-Notes\pictures\spark集群规划.png) + +## 二、前置条件 + +搭建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`节点。 + +![spark-集群搭建1](D:\BigData-Notes\pictures\spark-集群搭建1.png) + +而hadoop002和hadoop003上的Master节点均处于`STANDBY`状态,没有可用的`Worker`节点。 + +![spark-集群搭建2](D:\BigData-Notes\pictures\spark-集群搭建2.png) + +![spark-集群搭建3](D:\BigData-Notes\pictures\spark-集群搭建3.png) + + + +## 五、验证集群高可用 + +此时可以使用`kill`命令杀死hadoop001上的`Master`进程,此时`备用Master`会中会有一个再次成为`主Master`,我这里是hadoop002,可以看到hadoop2上的`Master`经过`RECOVERING`后成为了新的`主Master`,并且获得了全部可以用的`Workers`。 + +此时如果你再在hadoop001上使用`start-master.sh`启动Master,那么其会作为`备用Master`存在。 + +![spark-集群搭建4](D:\BigData-Notes\pictures\spark-集群搭建4.png) + +Hadoop002上的`Master`成为`主Master`,并获得了全部可以用的`Workers`。 + +![spark-集群搭建5](D:\BigData-Notes\pictures\spark-集群搭建5.png) + +## 六、提交作业 + +和单机环境下的提交到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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 ttwcVePX-3&DfoFJ|LP_9OIoJQCHVE1 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 sPkuwA#`pa@nEW3=|94)0BiKD4Q&>LnK#0=@~ literal 0 HcmV?d00001