优化阅读格式

This commit is contained in:
heibaiying
2019-07-31 17:18:07 +08:00
parent ceb868fe13
commit ca7c99802b
91 changed files with 4059 additions and 4058 deletions

View File

@ -12,9 +12,9 @@
### 1.1 下载并解压
Azkaban 在3.0版本之后就不提供对应的安装包,需要自己下载源码进行编译。
Azkaban 在 3.0 版本之后就不提供对应的安装包,需要自己下载源码进行编译。
下载所需版本的源码Azkaban的源码托管在GitHub上地址为https://github.com/azkaban/azkaban 。可以使用`git clone`的方式获取源码,也可以使用`wget`直接下载对应release版本的`tar.gz`文件,这里我采用第二种方式:
下载所需版本的源码Azkaban 的源码托管在 GitHub 上,地址为 https://github.com/azkaban/azkaban 。可以使用 `git clone` 的方式获取源码,也可以使用 `wget` 直接下载对应 release 版本的 `tar.gz` 文件,这里我采用第二种方式:
```shell
# 下载
@ -27,31 +27,31 @@ tar -zxvf azkaban-3.70.0.tar.gz
#### 1. JDK
Azkaban 编译依赖JDK 1.8+ JDK安装方式见本仓库
Azkaban 编译依赖 JDK 1.8+ JDK 安装方式见本仓库:
> [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK安装.md)
> [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK 安装.md)
#### 2. Gradle
Azkaban 3.70.0编译需要依赖`gradle-4.6-all.zip`。Gradle是一个项目自动化构建开源工具类似于Maven但由于采用Groovy语言进行项目配置所以比Maven更为灵活目前广泛用于Android开发、Spring项目的构建。
Azkaban 3.70.0 编译需要依赖 `gradle-4.6-all.zip`。Gradle 是一个项目自动化构建开源工具,类似于 Maven但由于采用 Groovy 语言进行项目配置,所以比 Maven 更为灵活,目前广泛用于 Android 开发、Spring 项目的构建。
需要注意的是不同版本的Azkaban依赖Gradle版本不同可以在解压后的`/gradle/wrapper/gradle-wrapper.properties`文件查看
需要注意的是不同版本的 Azkaban 依赖 Gradle 版本不同,可以在解压后的 `/gradle/wrapper/gradle-wrapper.properties` 文件查看
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/azkaban-gradle-wrapper.png"/> </div>
在编译时程序会自动去图中所示的地址进行下载,但是下载速度很慢。为避免影响编译过程,建议先手动下载至`/gradle/wrapper/`目录下:
在编译时程序会自动去图中所示的地址进行下载,但是下载速度很慢。为避免影响编译过程,建议先手动下载至 `/gradle/wrapper/` 目录下:
```shell
# wget https://services.gradle.org/distributions/gradle-4.6-all.zip
```
然后修改配置文件`gradle-wrapper.properties`中的`distributionUrl`属性指明使用本地的gradle。
然后修改配置文件 `gradle-wrapper.properties` 中的 `distributionUrl` 属性,指明使用本地的 gradle。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/azkaban-gradle-wrapper-2.png"/> </div>
#### 3. Git
Azkaban 的编译过程需要用Git下载部分JAR包所以需要预先安装Git
Azkaban 的编译过程需要用 Git 下载部分 JAR 包,所以需要预先安装 Git
```shell
# yum install git
@ -59,7 +59,7 @@ Azkaban 的编译过程需要用Git下载部分JAR包所以需要预先安装
### 1.3 项目编译
在根目录下执行编译命令,编译成功后会有`BUILD SUCCESSFUL`的提示:
在根目录下执行编译命令,编译成功后会有 `BUILD SUCCESSFUL` 的提示:
```shell
# ./gradlew build installDist -x test
@ -67,8 +67,8 @@ Azkaban 的编译过程需要用Git下载部分JAR包所以需要预先安装
编译过程中需要注意以下问题:
+ 因为编译的过程需要下载大量的Jar包下载速度根据网络情况而定通常都不会很快如果网络不好耗费半个小时一个小时都是很正常的
+ 编译过程中如果出现网络问题而导致JAR无法下载编译可能会被强行终止这时候重复执行编译命令即可gradle会把已经下载的JAR缓存到本地所以不用担心会重复下载JAR包。
+ 因为编译的过程需要下载大量的 Jar 包,下载速度根据网络情况而定,通常都不会很快,如果网络不好,耗费半个小时,一个小时都是很正常的;
+ 编译过程中如果出现网络问题而导致 JAR 无法下载编译可能会被强行终止这时候重复执行编译命令即可gradle 会把已经下载的 JAR 缓存到本地,所以不用担心会重复下载 JAR 包。
@ -76,12 +76,12 @@ Azkaban 的编译过程需要用Git下载部分JAR包所以需要预先安装
>After version 3.0, we provide two modes: the stand alone “solo-server” mode and distributed multiple-executor mode. The following describes thedifferences between the two modes.
按照官方文档的说明Azkaban 3.x 之后版本提供2种运行模式:
按照官方文档的说明Azkaban 3.x 之后版本提供 2 种运行模式:
+ **solo server model(单服务模式)** 元数据默认存放在内置的H2数据库可以修改为MySQL该模式中`webServer`(管理服务器)和 `executorServer`(执行服务器)运行在同一个进程中,进程名是`AzkabanSingleServer`。该模式适用于小规模工作流的调度。
- **multiple-executor(分布式多服务模式)** 存放元数据的数据库为MySQLMySQL应采用主从模式进行备份和容错。这种模式下`webServer``executorServer`在不同进程中运行,彼此之间互不影响,适合用于生产环境。
+ **solo server model(单服务模式)** :元数据默认存放在内置的 H2 数据库(可以修改为 MySQL该模式中 `webServer`(管理服务器) `executorServer`(执行服务器) 运行在同一个进程中,进程名是 `AzkabanSingleServer`。该模式适用于小规模工作流的调度。
- **multiple-executor(分布式多服务模式)** :存放元数据的数据库为 MySQLMySQL 应采用主从模式进行备份和容错。这种模式下 `webServer``executorServer` 在不同进程中运行,彼此之间互不影响,适合用于生产环境。
下面主要介绍`Solo Server`模式。
下面主要介绍 `Solo Server` 模式。
@ -89,7 +89,7 @@ Azkaban 的编译过程需要用Git下载部分JAR包所以需要预先安装
### 2.1 解压
Solo Server 模式安装包在编译后的`/azkaban-solo-server/build/distributions`目录下,找到后进行解压即可:
Solo Server 模式安装包在编译后的 `/azkaban-solo-server/build/distributions` 目录下,找到后进行解压即可:
```shell
# 解压
@ -98,13 +98,13 @@ tar -zxvf azkaban-solo-server-3.70.0.tar.gz
### 2.2 修改时区
这一步不是必须的。但是因为Azkaban默认采用的时区是`America/Los_Angeles`,如果你的调度任务中有定时任务的话,就需要进行相应的更改,这里我更改为常用的`Asia/Shanghai`
这一步不是必须的。但是因为 Azkaban 默认采用的时区是 `America/Los_Angeles`,如果你的调度任务中有定时任务的话,就需要进行相应的更改,这里我更改为常用的 `Asia/Shanghai`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/azkaban-setting.png"/> </div>
### 2.3 启动
执行启动命令,需要注意的是一定要在根目录下执行,不能进入`bin`目录下执行,不然会抛出`Cannot find 'database.properties'`异常。
执行启动命令,需要注意的是一定要在根目录下执行,不能进入 `bin` 目录下执行,不然会抛出 `Cannot find 'database.properties'` 异常。
```shell
# bin/start-solo.sh
@ -112,13 +112,13 @@ tar -zxvf azkaban-solo-server-3.70.0.tar.gz
### 2.4 验证
验证方式一:使用`jps`命令查看是否有`AzkabanSingleServer`进程:
验证方式一:使用 `jps` 命令查看是否有 `AzkabanSingleServer` 进程:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/akaban-jps.png"/> </div>
<br/>
验证方式二访问8081端口查看Web UI界面默认的登录名密码都是`azkaban`,如果需要修改或新增用户,可以在`conf/azkaban-users.xml `文件中进行配置:
验证方式二:访问 8081 端口,查看 Web UI 界面,默认的登录名密码都是 `azkaban`,如果需要修改或新增用户,可以在 `conf/azkaban-users.xml ` 文件中进行配置:
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/azkaban-web-ui.png"/> </div>

View File

@ -10,14 +10,14 @@
### 1.1 JDK版本说明
HBase 需要依赖JDK环境同时HBase 2.0+ 以上版本不再支持JDK 1.7 需要安装JDK 1.8+ 。JDK 安装方式见本仓库:
HBase 需要依赖 JDK 环境,同时 HBase 2.0+ 以上版本不再支持 JDK 1.7 ,需要安装 JDK 1.8+ 。JDK 安装方式见本仓库:
> [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK安装.md)
> [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK 安装.md)
### 1.2 Standalone模式和伪集群模式的区别
+ 在`Standalone`模式下,所有守护进程都运行在一个`jvm`进程/实例中;
+ 在伪分布模式下HBase仍然在单个主机上运行但是每个守护进程(HMasterHRegionServer 和 ZooKeeper)则分别作为一个单独的进程运行。
+ 在 `Standalone` 模式下,所有守护进程都运行在一个 `jvm` 进程/实例中;
+ 在伪分布模式下HBase 仍然在单个主机上运行,但是每个守护进程 (HMasterHRegionServer 和 ZooKeeper) 则分别作为一个单独的进程运行。
**说明:两种模式任选其一进行部署即可,对于开发测试来说区别不大。**
@ -27,7 +27,7 @@ HBase 需要依赖JDK环境同时HBase 2.0+ 以上版本不再支持JDK 1.7
### 2.1 下载并解压
从[官方网站](https://hbase.apache.org/downloads.html)下载所需要版本的二进制安装包,并进行解压:
从[官方网站](https://hbase.apache.org/downloads.html) 下载所需要版本的二进制安装包,并进行解压:
```shell
# tar -zxvf hbase-2.1.4-bin.tar.gz
@ -54,14 +54,14 @@ export PATH=$HBASE_HOME/bin:$PATH
### 2.3 进行HBase相关配置
修改安装目录下的`conf/hbase-env.sh`,指定JDK的安装路径
修改安装目录下的 `conf/hbase-env.sh`,指定 JDK 的安装路径:
```shell
# The java implementation to use. Java 1.8+ required.
export JAVA_HOME=/usr/java/jdk1.8.0_201
```
修改安装目录下的`conf/hbase-site.xml`,增加如下配置:
修改安装目录下的 `conf/hbase-site.xml`,增加如下配置:
```xml
<configuration>
@ -80,15 +80,15 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201
</configuration>
```
`hbase.rootdir`: 配置hbase数据的存储路径
`hbase.rootdir`: 配置 hbase 数据的存储路径;
`hbase.zookeeper.property.dataDir`: 配置zookeeper数据的存储路径
`hbase.zookeeper.property.dataDir`: 配置 zookeeper 数据的存储路径;
`hbase.unsafe.stream.capability.enforce`: 使用本地文件系统存储不使用HDFS的情况下需要禁用此配置设置为false。
`hbase.unsafe.stream.capability.enforce`: 使用本地文件系统存储,不使用 HDFS 的情况下需要禁用此配置,设置为 false。
### 2.4 启动HBase
由于已经将HBasebin目录配置到环境变量直接使用以下命令启动
由于已经将 HBasebin 目录配置到环境变量,直接使用以下命令启动:
```shell
# start-hbase.sh
@ -96,7 +96,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201
### 2.5 验证启动是否成功
验证方式一 :使用`jps`命令查看HMaster进程是否启动。
验证方式一 :使用 `jps` 命令查看 HMaster 进程是否启动。
```
[root@hadoop001 hbase-2.1.4]# jps
@ -104,7 +104,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201
15500 HMaster
```
验证方式二 访问HBaseWeb UI 页面,默认端口为`16010`
验证方式二 :访问 HBaseWeb UI 页面,默认端口为 `16010`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-web-ui.png"/> </div>
@ -114,13 +114,13 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201
### 3.1 Hadoop单机伪集群安装
这里我们采用HDFS作为HBase的存储方案需要预先安装Hadoop。Hadoop的安装方式单独整理至
这里我们采用 HDFS 作为 HBase 的存储方案,需要预先安装 Hadoop。Hadoop 的安装方式单独整理至:
> [Hadoop单机伪集群搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop单机版本环境搭建.md)
> [Hadoop 单机伪集群搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop 单机版本环境搭建.md)
### 3.2 Hbase版本选择
HBase的版本必须要与Hadoop的版本兼容不然会出现各种Jar包冲突。这里我Hadoop安装的版本为`hadoop-2.6.0-cdh5.15.2`为保持版本一致选择的HBase版本为`hbase-1.2.0-cdh5.15.2` 。所有软件版本如下:
HBase 的版本必须要与 Hadoop 的版本兼容,不然会出现各种 Jar 包冲突。这里我 Hadoop 安装的版本为 `hadoop-2.6.0-cdh5.15.2`,为保持版本一致,选择的 HBase 版本为 `hbase-1.2.0-cdh5.15.2` 。所有软件版本如下:
+ Hadoop 版本: hadoop-2.6.0-cdh5.15.2
+ HBase 版本: hbase-1.2.0-cdh5.15.2
@ -159,14 +159,14 @@ export PATH=$HBASE_HOME/bin:$PATH
### 3.5 进行HBase相关配置
1.修改安装目录下的`conf/hbase-env.sh`,指定JDK的安装路径
1.修改安装目录下的 `conf/hbase-env.sh`,指定 JDK 的安装路径:
```shell
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/usr/java/jdk1.8.0_201
```
2.修改安装目录下的`conf/hbase-site.xml`,增加如下配置(hadoop001为主机名)
2.修改安装目录下的 `conf/hbase-site.xml`,增加如下配置 (hadoop001 为主机名)
```xml
<configuration>
@ -175,7 +175,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--指定 HBase 数据存储路径为HDFS上的hbase目录,hbase目录不需要预先创建程序会自动创建-->
<!--指定 HBase 数据存储路径为 HDFS 上的 hbase 目录,hbase 目录不需要预先创建,程序会自动创建-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop001:8020/hbase</value>
@ -188,7 +188,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201
</configuration>
```
3.修改安装目录下的`conf/regionservers`指定region servers的地址修改后其内容如下
3.修改安装目录下的 `conf/regionservers`,指定 region servers 的地址,修改后其内容如下:
```shell
hadoop001
@ -206,7 +206,7 @@ hadoop001
### 3.7 验证启动是否成功
验证方式一 :使用`jps`命令查看进程。其中`HMaster``HRegionServer`HBase的进程`HQuorumPeer`HBase内置的Zookeeper的进程其余的为HDFSYARN的进程。
验证方式一 :使用 `jps` 命令查看进程。其中 `HMaster``HRegionServer`HBase 的进程,`HQuorumPeer`HBase 内置的 Zookeeper 的进程,其余的为 HDFSYARN 的进程。
```shell
[root@hadoop001 conf]# jps
@ -223,6 +223,6 @@ hadoop001
21933 HMaster
```
验证方式二 访问HBase Web UI 界面需要注意的是1.2 版本的HBase的访问端口为`60010`
验证方式二 :访问 HBase Web UI 界面,需要注意的是 1.2 版本的 HBase 的访问端口为 `60010`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-60010.png"/> </div>

View File

@ -20,17 +20,17 @@
## 一、集群规划
这里搭建一个3节点的HBase集群其中三台主机上均为`Regin Server`。同时为了保证高可用除了在hadoop001上部署主`Master`服务外还在hadoop002上部署备用的`Master`服务。Master服务由Zookeeper集群进行协调管理如果主`Master`不可用,则备用`Master`会成为新的主`Master`
这里搭建一个 3 节点的 HBase 集群,其中三台主机上均为 `Regin Server`。同时为了保证高可用,除了在 hadoop001 上部署主 `Master` 服务外,还在 hadoop002 上部署备用的 `Master` 服务。Master 服务由 Zookeeper 集群进行协调管理,如果主 `Master` 不可用,则备用 `Master` 会成为新的主 `Master`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase集群规划.png"/> </div>
## 二、前置条件
HBase的运行需要依赖HadoopJDK(`HBase 2.0+`对应`JDK 1.8+`) 。同时为了保证高可用这里我们不采用HBase内置的Zookeeper服务而采用外置的Zookeeper集群。相关搭建步骤可以参阅
HBase 的运行需要依赖 HadoopJDK(`HBase 2.0+` 对应 `JDK 1.8+`) 。同时为了保证高可用,这里我们不采用 HBase 内置的 Zookeeper 服务,而采用外置的 Zookeeper 集群。相关搭建步骤可以参阅:
- [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK安装.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)
- [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK 安装.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)
@ -38,7 +38,7 @@ HBase的运行需要依赖Hadoop和JDK(`HBase 2.0+`对应`JDK 1.8+`) 。同时
### 3.1 下载并解压
下载并解压这里我下载的是CDH版本HBase下载地址为http://archive.cloudera.com/cdh5/cdh/5/
下载并解压,这里我下载的是 CDH 版本 HBase下载地址为http://archive.cloudera.com/cdh5/cdh/5/
```shell
# tar -zxvf hbase-1.2.0-cdh5.15.2.tar.gz
@ -65,7 +65,7 @@ export PATH=$HBASE_HOME/bin:$PATH
### 3.3 集群配置
进入`${HBASE_HOME}/conf`目录下,修改配置:
进入 `${HBASE_HOME}/conf` 目录下,修改配置:
#### 1. hbase-env.sh
@ -81,17 +81,17 @@ export HBASE_MANAGES_ZK=false
```xml
<configuration>
<property>
<!-- 指定hbase以分布式集群的方式运行 -->
<!-- 指定 hbase 以分布式集群的方式运行 -->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- 指定hbaseHDFS上的存储位置 -->
<!-- 指定 hbaseHDFS 上的存储位置 -->
<name>hbase.rootdir</name>
<value>hdfs://hadoop001:8020/hbase</value>
</property>
<property>
<!-- 指定zookeeper的地址-->
<!-- 指定 zookeeper 的地址-->
<name>hbase.zookeeper.quorum</name>
<value>hadoop001:2181,hadoop002:2181,hadoop003:2181</value>
</property>
@ -112,11 +112,11 @@ hadoop003
hadoop002
```
` backup-masters`这个文件是不存在的需要新建主要用来指明备用的master节点可以是多个这里我们以1个为例。
` backup-masters` 这个文件是不存在的,需要新建,主要用来指明备用的 master 节点,可以是多个,这里我们以 1 个为例。
### 3.4 HDFS客户端配置
这里有一个可选的配置如果您在Hadoop集群上进行了HDFS客户端配置的更改比如将副本系数`dfs.replication`设置成5则必须使用以下方法之一来使HBase知道否则HBase将依旧使用默认的副本系数3来创建文件:
这里有一个可选的配置:如果您在 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
@ -124,13 +124,13 @@ hadoop002
以上是官方文档的说明,这里解释一下:
**第一种** 将Hadoop配置文件的位置信息添加到`hbase-env.sh``HBASE_CLASSPATH` 属性,示例如下:
**第一种** :将 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 `目录下,或者通过符号链接的方式。如果采用这种方式的话,建议将两者都拷贝或建立符号链接,示例如下:
**第二种** :将 Hadoop` hdfs-site.xml``hadoop-site.xml` 拷贝到 `${HBASE_HOME}/conf ` 目录下,或者通过符号链接的方式。如果采用这种方式的话,建议将两者都拷贝或建立符号链接,示例如下:
```shell
# 拷贝
@ -140,15 +140,15 @@ 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`
> 注:`hadoop-site.xml` 这个配置文件现在叫做 `core-site.xml`
**第三种** :如果你只有少量更改,那么直接配置到`hbase-site.xml`中即可。
**第三种** :如果你只有少量更改,那么直接配置到 `hbase-site.xml` 中即可。
### 3.5 安装包分发
将HBase的安装包分发到其他服务器分发后建议在这两台服务器上也配置一下HBase的环境变量。
HBase 的安装包分发到其他服务器,分发后建议在这两台服务器上也配置一下 HBase 的环境变量。
```shell
scp -r /usr/app/hbase-1.2.0-cdh5.15.2/ hadoop002:usr/app/
@ -161,7 +161,7 @@ scp -r /usr/app/hbase-1.2.0-cdh5.15.2/ hadoop003:usr/app/
### 4.1 启动ZooKeeper集群
分别到三台服务器上启动ZooKeeper服务
分别到三台服务器上启动 ZooKeeper 服务:
```shell
zkServer.sh start
@ -178,7 +178,7 @@ start-yarn.sh
### 4.3 启动HBase集群
进入hadoop001`${HBASE_HOME}/bin`使用以下命令启动HBase集群。执行此命令后会在hadoop001上启动`Master`服务在hadoop002上启动备用`Master`服务,在`regionservers`文件中配置的所有节点启动`region server`服务。
进入 hadoop001`${HBASE_HOME}/bin`,使用以下命令启动 HBase 集群。执行此命令后,会在 hadoop001 上启动 `Master` 服务,在 hadoop002 上启动备用 `Master` 服务,在 `regionservers` 文件中配置的所有节点启动 `region server` 服务。
```shell
start-hbase.sh
@ -188,14 +188,14 @@ start-hbase.sh
### 4.5 查看服务
访问HBaseWeb-UI界面这里我安装的HBase版本为1.2,访问端口为`60010`如果你安装的是2.0以上的版本,则访问端口号为`16010`。可以看到`Master`hadoop001上三个`Regin Servers`分别在hadoop001hadoop002和hadoop003上并且还有一个`Backup Matser` 服务在 hadoop002上。
访问 HBaseWeb-UI 界面,这里我安装的 HBase 版本为 1.2,访问端口为 `60010`,如果你安装的是 2.0 以上的版本,则访问端口号为 `16010`。可以看到 `Master`hadoop001 上,三个 `Regin Servers` 分别在 hadoop001hadoop002 hadoop003 上,并且还有一个 `Backup Matser` 服务在 hadoop002 上。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-集群搭建1.png"/> </div>
<br/>
hadoop002 上的 HBase出于备用状态
hadoop002 上的 HBase 出于备用状态:
<br/>
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-集群搭建2.png"/> </div>
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hbase-集群搭建2.png"/> </div>

View File

@ -12,19 +12,19 @@
## 一、前置条件
Hadoop的运行依赖JDK需要预先安装安装步骤见
Hadoop 的运行依赖 JDK需要预先安装安装步骤见
+ [LinuxJDK的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
+ [LinuxJDK 的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
## 二、配置免密登录
Hadoop组件之间需要基于SSH进行通讯。
Hadoop 组件之间需要基于 SSH 进行通讯。
#### 2.1 配置映射
配置ip地址和主机名映射
配置 ip 地址和主机名映射:
```shell
vim /etc/hosts
@ -42,13 +42,13 @@ ssh-keygen -t rsa
### 3.3 授权
进入`~/.ssh`目录下,查看生成的公匙和私匙,并将公匙写入到授权文件:
进入 `~/.ssh` 目录下,查看生成的公匙和私匙,并将公匙写入到授权文件:
```shell
[root@@hadoop001 sbin]# cd ~/.ssh
[root@@hadoop001 .ssh]# ll
-rw-------. 1 root root 1675 315 09:48 id_rsa
-rw-r--r--. 1 root root 388 315 09:48 id_rsa.pub
-rw-------. 1 root root 1675 3 15 09:48 id_rsa
-rw-r--r--. 1 root root 388 3 15 09:48 id_rsa.pub
```
```shell
@ -65,7 +65,7 @@ ssh-keygen -t rsa
### 3.1 下载并解压
下载Hadoop安装包这里我下载的是CDH版本的下载地址为http://archive.cloudera.com/cdh5/cdh/5/
下载 Hadoop 安装包,这里我下载的是 CDH 版本的下载地址为http://archive.cloudera.com/cdh5/cdh/5/
```shell
# 解压
@ -87,7 +87,7 @@ export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
export PATH=${HADOOP_HOME}/bin:$PATH
```
执行`source`命令,使得配置的环境变量立即生效:
执行 `source` 命令,使得配置的环境变量立即生效:
```shell
# source /etc/profile
@ -97,7 +97,7 @@ export PATH=${HADOOP_HOME}/bin:$PATH
### 3.3 修改Hadoop配置
进入`${HADOOP_HOME}/etc/hadoop/ `目录下,修改以下配置:
进入 `${HADOOP_HOME}/etc/hadoop/ ` 目录下,修改以下配置:
#### 1. hadoop-env.sh
@ -111,12 +111,12 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!--指定namenodehdfs协议文件系统的通信地址-->
<!--指定 namenodehdfs 协议文件系统的通信地址-->
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:8020</value>
</property>
<property>
<!--指定hadoop存储临时文件的目录-->
<!--指定 hadoop 存储临时文件的目录-->
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
@ -130,7 +130,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!--由于我们这里搭建是单机版本所以指定dfs的副本系数为1-->
<!--由于我们这里搭建是单机版本,所以指定 dfs 的副本系数为 1-->
<name>dfs.replication</name>
<value>1</value>
</property>
@ -139,7 +139,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
#### 4. slaves
配置所有从属节点的主机名或IP地址由于是单机版本所以指定本机即可
配置所有从属节点的主机名或 IP 地址,由于是单机版本,所以指定本机即可:
```shell
hadoop001
@ -149,7 +149,7 @@ hadoop001
### 3.4 关闭防火墙
不关闭防火墙可能导致无法访问HadoopWeb UI界面
不关闭防火墙可能导致无法访问 HadoopWeb UI 界面:
```shell
# 查看防火墙状态
@ -162,7 +162,7 @@ sudo systemctl stop firewalld.service
### 3.5 初始化
第一次启动Hadoop时需要进行初始化进入`${HADOOP_HOME}/bin/`目录下,执行以下命令:
第一次启动 Hadoop 时需要进行初始化,进入 `${HADOOP_HOME}/bin/` 目录下,执行以下命令:
```shell
[root@hadoop001 bin]# ./hdfs namenode -format
@ -172,7 +172,7 @@ sudo systemctl stop firewalld.service
### 3.6 启动HDFS
进入`${HADOOP_HOME}/sbin/`目录下启动HDFS
进入 `${HADOOP_HOME}/sbin/` 目录下,启动 HDFS
```shell
[root@hadoop001 sbin]# ./start-dfs.sh
@ -182,7 +182,7 @@ sudo systemctl stop firewalld.service
### 3.7 验证是否启动成功
方式一:执行`jps`查看`NameNode``DataNode`服务是否已经启动:
方式一:执行 `jps` 查看 `NameNode``DataNode` 服务是否已经启动:
```shell
[root@hadoop001 hadoop-2.6.0-cdh5.15.2]# jps
@ -193,7 +193,7 @@ sudo systemctl stop firewalld.service
方式二查看Web UI界面端口为`50070`
方式二:查看 Web UI 界面,端口为 `50070`
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop安装验证.png"/> </div>
@ -203,7 +203,7 @@ sudo systemctl stop firewalld.service
### 4.1 修改配置
进入`${HADOOP_HOME}/etc/hadoop/ `目录下,修改以下配置:
进入 `${HADOOP_HOME}/etc/hadoop/ ` 目录下,修改以下配置:
#### 1. mapred-site.xml
@ -226,7 +226,7 @@ cp mapred-site.xml.template mapred-site.xml
```xml
<configuration>
<property>
<!--配置NodeManager上运行的附属服务。需要配置成mapreduce_shuffle后才可以在Yarn上运行MapReduce程序。-->
<!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
@ -237,7 +237,7 @@ cp mapred-site.xml.template mapred-site.xml
### 4.2 启动服务
进入`${HADOOP_HOME}/sbin/`目录下启动YARN
进入 `${HADOOP_HOME}/sbin/` 目录下,启动 YARN
```shell
./start-yarn.sh
@ -247,7 +247,7 @@ cp mapred-site.xml.template mapred-site.xml
#### 4.3 验证是否启动成功
方式一:执行`jps`命令查看`NodeManager``ResourceManager`服务是否已经启动:
方式一:执行 `jps` 命令查看 `NodeManager``ResourceManager` 服务是否已经启动:
```shell
[root@hadoop001 hadoop-2.6.0-cdh5.15.2]# jps
@ -258,6 +258,6 @@ cp mapred-site.xml.template mapred-site.xml
9390 SecondaryNameNode
```
方式二查看Web UI界面端口号为`8088`
方式二:查看 Web UI 界面,端口号为 `8088`
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop-yarn安装验证.png"/> </div>

View File

@ -21,15 +21,15 @@
## 一、集群规划
这里搭建一个3节点的Hadoop集群其中三台主机均部署`DataNode``NodeManager`服务但只有hadoop001上部署`NameNode``ResourceManager`服务。
这里搭建一个 3 节点的 Hadoop 集群,其中三台主机均部署 `DataNode``NodeManager` 服务,但只有 hadoop001 上部署 `NameNode``ResourceManager` 服务。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop集群规划.png"/> </div>
## 二、前置条件
Hadoop的运行依赖JDK需要预先安装。其安装步骤单独整理至
Hadoop 的运行依赖 JDK需要预先安装。其安装步骤单独整理至
+ [LinuxJDK的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
+ [LinuxJDK 的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
@ -37,7 +37,7 @@ Hadoop的运行依赖JDK需要预先安装。其安装步骤单独整理至
### 3.1 生成密匙
在每台主机上使用`ssh-keygen`命令生成公钥私钥对:
在每台主机上使用 `ssh-keygen` 命令生成公钥私钥对:
```shell
ssh-keygen
@ -45,7 +45,7 @@ ssh-keygen
### 3.2 免密登录
`hadoop001`的公钥写到本机和远程机器的` ~/ .ssh/authorized_key`文件中:
`hadoop001` 的公钥写到本机和远程机器的 ` ~/ .ssh/authorized_key` 文件中:
```shell
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001
@ -66,7 +66,7 @@ ssh hadoop003
### 3.1 下载并解压
下载Hadoop。这里我下载的是CDH版本Hadoop下载地址为http://archive.cloudera.com/cdh5/cdh/5/
下载 Hadoop。这里我下载的是 CDH 版本 Hadoop下载地址为http://archive.cloudera.com/cdh5/cdh/5/
```shell
# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz
@ -74,7 +74,7 @@ ssh hadoop003
### 3.2 配置环境变量
编辑`profile`文件:
编辑 `profile` 文件:
```shell
# vim /etc/profile
@ -87,7 +87,7 @@ export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
export PATH=${HADOOP_HOME}/bin:$PATH
```
执行`source`命令,使得配置立即生效:
执行 `source` 命令,使得配置立即生效:
```shell
# source /etc/profile
@ -95,7 +95,7 @@ export PATH=${HADOOP_HOME}/bin:$PATH
### 3.3 修改配置
进入`${HADOOP_HOME}/etc/hadoop`目录下,修改配置文件。各个配置文件内容如下:
进入 `${HADOOP_HOME}/etc/hadoop` 目录下,修改配置文件。各个配置文件内容如下:
#### 1. hadoop-env.sh
@ -109,12 +109,12 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!--指定namenodehdfs协议文件系统的通信地址-->
<!--指定 namenodehdfs 协议文件系统的通信地址-->
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:8020</value>
</property>
<property>
<!--指定hadoop集群存储临时文件的目录-->
<!--指定 hadoop 集群存储临时文件的目录-->
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
@ -125,12 +125,12 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<property>
<!--namenode节点数据即元数据的存放位置可以指定多个目录实现容错多个目录用逗号分隔-->
<!--namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔-->
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/namenode/data</value>
</property>
<property>
<!--datanode节点数据即数据块的存放位置-->
<!--datanode 节点数据(即数据块)的存放位置-->
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/datanode/data</value>
</property>
@ -141,12 +141,12 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!--配置NodeManager上运行的附属服务。需要配置成mapreduce_shuffle后才可以在Yarn上运行MapReduce程序。-->
<!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!--resourcemanager的主机名-->
<!--resourcemanager 的主机名-->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop001</value>
</property>
@ -159,7 +159,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!--指定mapreduce作业运行在yarn上-->
<!--指定 mapreduce 作业运行在 yarn 上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
@ -168,7 +168,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
#### 5. slaves
配置所有从属节点的主机名或IP地址每行一个。所有从属节点上的`DataNode`服务和`NodeManager`服务都会被启动。
配置所有从属节点的主机名或 IP 地址,每行一个。所有从属节点上的 `DataNode` 服务和 `NodeManager` 服务都会被启动。
```properties
hadoop001
@ -178,7 +178,7 @@ hadoop003
### 3.4 分发程序
将Hadoop安装包分发到其他两台服务器分发后建议在这两台服务器上也配置一下Hadoop的环境变量。
Hadoop 安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下 Hadoop 的环境变量。
```shell
# 将安装包分发到hadoop002
@ -189,7 +189,7 @@ scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/
### 3.5 初始化
`Hadoop001`上执行namenode初始化命令
`Hadoop001` 上执行 namenode 初始化命令:
```
hdfs namenode -format
@ -197,7 +197,7 @@ hdfs namenode -format
### 3.6 启动集群
进入到`Hadoop001``${HADOOP_HOME}/sbin`目录下启动Hadoop。此时`hadoop002``hadoop003`上的相关服务也会被启动:
进入到 `Hadoop001``${HADOOP_HOME}/sbin` 目录下,启动 Hadoop。此时 `hadoop002``hadoop003` 上的相关服务也会被启动:
```shell
# 启动dfs服务
@ -208,19 +208,19 @@ start-yarn.sh
### 3.7 查看集群
在每台服务器上使用`jps`命令查看服务进程或直接进入Web-UI界面进行查看端口为`50070`。可以看到此时有三个可用的`Datanode`
在每台服务器上使用 `jps` 命令查看服务进程,或直接进入 Web-UI 界面进行查看,端口为 `50070`。可以看到此时有三个可用的 `Datanode`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop-集群环境搭建.png"/> </div>
<BR/>
点击`Live Nodes`进入,可以看到每个`DataNode`的详细情况:
点击 `Live Nodes` 进入,可以看到每个 `DataNode` 的详细情况:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop-集群搭建2.png"/> </div>
<BR/>
接着可以查看Yarn的情况端口号为`8088`
接着可以查看 Yarn 的情况,端口号为 `8088`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop-集群搭建3.png"/> </div>
@ -228,7 +228,7 @@ start-yarn.sh
## 五、提交服务到集群
提交作业到集群的方式和单机环境完全一致这里以提交Hadoop内置的计算Pi的示例程序为例在任何一个节点上执行都可以命令如下
提交作业到集群的方式和单机环境完全一致,这里以提交 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

View File

@ -3,9 +3,9 @@
## 一、前置条件
Flume需要依赖JDK 1.8+JDK安装方式见本仓库
Flume 需要依赖 JDK 1.8+JDK 安装方式见本仓库:
> [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK安装.md)
> [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK 安装.md)
@ -13,7 +13,7 @@ Flume需要依赖JDK 1.8+JDK安装方式见本仓库
### 2.1 下载并解压
下载所需版本的Flume这里我下载的是`CDH`版本的Flume。下载地址为http://archive.cloudera.com/cdh5/cdh/5/
下载所需版本的 Flume这里我下载的是 `CDH` 版本的 Flume。下载地址为http://archive.cloudera.com/cdh5/cdh/5/
```shell
# 下载后进行解压
@ -41,13 +41,13 @@ export PATH=$FLUME_HOME/bin:$PATH
### 2.3 修改配置
进入安装目录下的`conf/`目录拷贝Flume的环境配置模板`flume-env.sh.template`
进入安装目录下的 `conf/` 目录,拷贝 Flume 的环境配置模板 `flume-env.sh.template`
```shell
# cp flume-env.sh.template flume-env.sh
```
修改`flume-env.sh`,指定JDK的安装路径
修改 `flume-env.sh`,指定 JDK 的安装路径:
```shell
# Enviroment variables can be set here.
@ -56,7 +56,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201
### 2.4 验证
由于已经将Flumebin目录配置到环境变量直接使用以下命令验证是否配置成功
由于已经将 Flumebin 目录配置到环境变量,直接使用以下命令验证是否配置成功:
```shell
# flume-ng version

View File

@ -2,13 +2,13 @@
>**系统环境**centos 7.6
>
>**JDK版本**jdk 1.8.0_20
>**JDK 版本**jdk 1.8.0_20
### 1. 下载并解压
在[官网](https://www.oracle.com/technetwork/java/javase/downloads/index.html)下载所需版本的JDK这里我下载的版本为[JDK 1.8](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) ,下载后进行解压:
在[官网](https://www.oracle.com/technetwork/java/javase/downloads/index.html) 下载所需版本的 JDK这里我下载的版本为[JDK 1.8](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) ,下载后进行解压:
```shell
[root@ java]# tar -zxvf jdk-8u201-linux-x64.tar.gz
@ -31,7 +31,7 @@ export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
```
执行`source`命令,使得配置立即生效:
执行 `source` 命令,使得配置立即生效:
```shell
[root@ java]# source /etc/profile

View File

@ -2,11 +2,11 @@
>**系统环境**centos 7.6
>
>**Python版本**Python-3.6.8
>**Python 版本**Python-3.6.8
### 1. 环境依赖
Python3.x的安装需要依赖这四个组件gcc zlibzlib-developenssl-devel所以需要预先安装命令如下
Python3.x 的安装需要依赖这四个组件gcc zlibzlib-developenssl-devel所以需要预先安装命令如下
```shell
yum install gcc -y
@ -17,7 +17,7 @@ yum install openssl-devel -y
### 2. 下载编译
Python源码包下载地址 https://www.python.org/downloads/
Python 源码包下载地址: https://www.python.org/downloads/
```shell
# wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
@ -29,7 +29,7 @@ Python源码包下载地址 https://www.python.org/downloads/
# tar -zxvf Python-3.6.8.tgz
```
进入根目录进行编译,可以指定编译安装的路径,这里我们指定为`/usr/app/python3.6`
进入根目录进行编译,可以指定编译安装的路径,这里我们指定为 `/usr/app/python3.6`
```shell
# cd Python-3.6.8
@ -56,7 +56,7 @@ source /etc/profile
### 5. 验证安装是否成功
输入`python3`命令如果能进入python交互环境则代表安装成功
输入 `python3` 命令,如果能进入 python 交互环境,则代表安装成功:
```shell
[root@hadoop001 app]# python3

View File

@ -18,7 +18,7 @@
### 1.1 下载并解压
下载所需版本的Hive这里我下载版本为`cdh5.15.2`。下载地址http://archive.cloudera.com/cdh5/cdh/5/
下载所需版本的 Hive这里我下载版本为 `cdh5.15.2`。下载地址http://archive.cloudera.com/cdh5/cdh/5/
```shell
# 下载后进行解压
@ -48,13 +48,13 @@ export PATH=$HIVE_HOME/bin:$PATH
**1. hive-env.sh**
进入安装目录下的`conf/`目录拷贝Hive的环境配置模板`flume-env.sh.template`
进入安装目录下的 `conf/` 目录,拷贝 Hive 的环境配置模板 `flume-env.sh.template`
```shell
cp hive-env.sh.template hive-env.sh
```
修改`hive-env.sh`指定Hadoop的安装路径
修改 `hive-env.sh`,指定 Hadoop 的安装路径:
```shell
HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
@ -62,7 +62,7 @@ HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
**2. hive-site.xml**
新建hive-site.xml 文件内容如下主要是配置存放元数据的MySQL的地址、驱动、用户名和密码等信息
新建 hive-site.xml 文件,内容如下,主要是配置存放元数据的 MySQL 的地址、驱动、用户名和密码等信息:
```xml
<?xml version="1.0"?>
@ -96,7 +96,7 @@ HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
### 1.4 拷贝数据库驱动
将MySQL驱动包拷贝到Hive安装目录的`lib`目录下, MySQL驱动的下载地址为https://dev.mysql.com/downloads/connector/j/ , 在本仓库的[resources](https://github.com/heibaiying/BigData-Notes/tree/master/resources)目录下我也上传了一份,有需要的可以自行下载。
MySQL 驱动包拷贝到 Hive 安装目录的 `lib` 目录下, MySQL 驱动的下载地址为https://dev.mysql.com/downloads/connector/j/ , 在本仓库的[resources](https://github.com/heibaiying/BigData-Notes/tree/master/resources) 目录下我也上传了一份,有需要的可以自行下载。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hive-mysql.png"/> </div>
@ -104,20 +104,20 @@ HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
### 1.5 初始化元数据库
+ 当使用的 hive 是1.x版本时可以不进行初始化操作Hive会在第一次启动的时候会自动进行初始化但不会生成所有的元数据信息表只会初始化必要的一部分在之后的使用中用到其余表时会自动创建
+ 当使用的 hive 是 1.x 版本时可以不进行初始化操作Hive 会在第一次启动的时候会自动进行初始化,但不会生成所有的元数据信息表,只会初始化必要的一部分,在之后的使用中用到其余表时会自动创建;
+ 当使用的 hive 是2.x版本时必须手动初始化元数据库。初始化命令
+ 当使用的 hive 是 2.x 版本时,必须手动初始化元数据库。初始化命令:
```shell
# schematool 命令在安装目录的bin目录下由于上面已经配置过环境变量在任意位置执行即可
# schematool 命令在安装目录的 bin 目录下,由于上面已经配置过环境变量,在任意位置执行即可
schematool -dbType mysql -initSchema
```
这里我使用的是CDH`hive-1.1.0-cdh5.15.2.tar.gz`,对应`Hive 1.1.0` 版本,可以跳过这一步。
这里我使用的是 CDH`hive-1.1.0-cdh5.15.2.tar.gz`,对应 `Hive 1.1.0` 版本,可以跳过这一步。
### 1.6 启动
由于已经将Hivebin目录配置到环境变量直接使用以下命令启动成功进入交互式命令行后执行`show databases`命令,无异常则代表搭建成功。
由于已经将 Hivebin 目录配置到环境变量,直接使用以下命令启动,成功进入交互式命令行后执行 `show databases` 命令,无异常则代表搭建成功。
```shell
# hive
@ -125,7 +125,7 @@ HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hive-install-2.png"/> </div>
在Mysql中也能看到Hive创建的库和存放元数据信息的表
Mysql 中也能看到 Hive 创建的库和存放元数据信息的表
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hive-mysql-tables.png"/> </div>
@ -133,15 +133,15 @@ HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
## 二、HiveServer2/beeline
Hive内置了HiveServerHiveServer2服务两者都允许客户端使用多种编程语言进行连接但是HiveServer不能处理多个客户端的并发请求因此产生了HiveServer2。HiveServer2HS2允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果支持多客户端并发访问和身份验证。HS2是由多个服务组成的单个进程其包括基于ThriftHive服务TCPHTTP和用于Web UIJetty Web服务。
Hive 内置了 HiveServerHiveServer2 服务,两者都允许客户端使用多种编程语言进行连接,但是 HiveServer 不能处理多个客户端的并发请求,因此产生了 HiveServer2。HiveServer2HS2允许远程客户端可以使用各种编程语言向 Hive 提交请求并检索结果支持多客户端并发访问和身份验证。HS2 是由多个服务组成的单个进程,其包括基于 ThriftHive 服务TCPHTTP和用于 Web UIJetty Web 服务。
HiveServer2拥有自己的CLI工具——Beeline。Beeline是一个基于SQLLineJDBC客户端。由于目前HiveServer2Hive开发维护的重点所以官方更加推荐使用Beeline而不是Hive CLI。以下主要讲解Beeline的配置方式。
HiveServer2 拥有自己的 CLI 工具——Beeline。Beeline 是一个基于 SQLLineJDBC 客户端。由于目前 HiveServer2Hive 开发维护的重点,所以官方更加推荐使用 Beeline 而不是 Hive CLI。以下主要讲解 Beeline 的配置方式。
### 2.1 修改Hadoop配置
修改 hadoop 集群的 core-site.xml 配置文件增加如下配置指定hadooproot用户可以代理本机上所有的用户。
修改 hadoop 集群的 core-site.xml 配置文件,增加如下配置,指定 hadooproot 用户可以代理本机上所有的用户。
```xml
<property>
@ -154,9 +154,9 @@ Hive内置了HiveServer和HiveServer2服务两者都允许客户端使用多
</property>
```
之所以要配置这一步是因为hadoop 2.0以后引入了安全伪装机制使得hadoop不允许上层系统如hive直接将实际用户传递到hadoop层而应该将实际用户传递给一个超级代理由该代理在hadoop上执行操作以避免任意客户端随意操作hadoop。如果不配置这一步在之后的连接中可能会抛出`AuthorizationException`异常。
之所以要配置这一步,是因为 hadoop 2.0 以后引入了安全伪装机制,使得 hadoop 不允许上层系统(如 hive直接将实际用户传递到 hadoop 层,而应该将实际用户传递给一个超级代理,由该代理在 hadoop 上执行操作,以避免任意客户端随意操作 hadoop。如果不配置这一步在之后的连接中可能会抛出 `AuthorizationException` 异常。
>关于Hadoop的用户代理机制可以参考[hadoop的用户代理机制](https://blog.csdn.net/u012948976/article/details/49904675#官方文档解读) 或 [Superusers Acting On Behalf Of Other Users](http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html)
>关于 Hadoop 的用户代理机制,可以参考:[hadoop 的用户代理机制](https://blog.csdn.net/u012948976/article/details/49904675#官方文档解读) 或 [Superusers Acting On Behalf Of Other Users](http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html)
@ -172,7 +172,7 @@ Hive内置了HiveServer和HiveServer2服务两者都允许客户端使用多
### 2.3 使用beeline
可以使用以下命令进入beeline交互式命令行出现`Connected`则代表连接成功。
可以使用以下命令进入 beeline 交互式命令行,出现 `Connected` 则代表连接成功。
```shell
# beeline -u jdbc:hive2://hadoop001:10000 -n root

View File

@ -10,7 +10,7 @@
### 1.1 下载并解压
官方下载地址http://spark.apache.org/downloads.html 选择Spark版本和对应的Hadoop版本后再下载
官方下载地址http://spark.apache.org/downloads.html ,选择 Spark 版本和对应的 Hadoop 版本后再下载:
<div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-download.png"/> </div>
@ -51,14 +51,14 @@ spark-shell --master local[2]
```
- **local**:只启动一个工作线程;
- **local[k]**:启动k个工作线程;
- **local[*]**启动跟cpu数目相同的工作线程数。
- **local[k]**:启动 k 个工作线程;
- **local[*]**:启动跟 cpu 数目相同的工作线程数。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-shell-local.png"/> </div>
<br/>
进入spark-shell后程序已经自动创建好了上下文`SparkContext`等效于执行了下面的Scala代码
进入 spark-shell 后,程序已经自动创建好了上下文 `SparkContext`,等效于执行了下面的 Scala 代码:
```scala
val conf = new SparkConf().setAppName("Spark shell").setMaster("local[2]")
@ -68,7 +68,7 @@ val sc = new SparkContext(conf)
## 二、词频统计案例
安装完成后可以先做一个简单的词频统计例子感受spark的魅力。准备一个词频统计的文件样本`wc.txt`,内容如下:
安装完成后可以先做一个简单的词频统计例子,感受 spark 的魅力。准备一个词频统计的文件样本 `wc.txt`,内容如下:
```txt
hadoop,spark,hadoop
@ -76,7 +76,7 @@ spark,flink,flink,spark
hadoop,hadoop
```
在scala交互式命令行中执行如下Scala语句
scala 交互式命令行中执行如下 Scala 语句:
```scala
val file = spark.sparkContext.textFile("file:///usr/app/wc.txt")
@ -88,7 +88,7 @@ wordCounts.collect
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-shell.png"/> </div>
同时还可以通过Web UI查看作业的执行情况访问端口为`4040`
同时还可以通过 Web UI 查看作业的执行情况,访问端口为 `4040`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-shell-web-ui.png"/> </div>
@ -98,15 +98,15 @@ wordCounts.collect
## 三、Scala开发环境配置
Spark是基于Scala语言进行开发的分别提供了基于Scala、Java、Python语言的API如果你想使用Scala语言进行开发则需要搭建Scala语言的开发环境。
Spark 是基于 Scala 语言进行开发的,分别提供了基于 Scala、Java、Python 语言的 API如果你想使用 Scala 语言进行开发,则需要搭建 Scala 语言的开发环境。
### 3.1 前置条件
Scala的运行依赖于JDK所以需要你本机有安装对应版本的JDK最新的Scala 2.12.x需要JDK 1.8+。
Scala 的运行依赖于 JDK所以需要你本机有安装对应版本的 JDK最新的 Scala 2.12.x 需要 JDK 1.8+。
### 3.2 安装Scala插件
IDEA默认不支持Scala语言的开发需要通过插件进行扩展。打开 IDEA依次点击 **File** => **settings**=> **plugins** 选项卡搜索Scala插件(如下图)。找到插件后进行安装并重启IDEA使得安装生效。
IDEA 默认不支持 Scala 语言的开发,需要通过插件进行扩展。打开 IDEA依次点击 **File** => **settings**=> **plugins** 选项卡,搜索 Scala 插件 (如下图)。找到插件后进行安装,并重启 IDEA 使得安装生效。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-scala-plugin.png"/> </div>
@ -114,7 +114,7 @@ IDEA默认不支持Scala语言的开发需要通过插件进行扩展。打
### 3.3 创建Scala项目
在IDEA中依次点击 **File** => **New** => **Project** 选项卡,然后选择创建`Scala—IDEA`工程:
IDEA 中依次点击 **File** => **New** => **Project** 选项卡,然后选择创建 `Scala—IDEA` 工程:
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-newproject-scala.png"/> </div>
@ -124,7 +124,7 @@ IDEA默认不支持Scala语言的开发需要通过插件进行扩展。打
#### 1. 方式一
此时看到`Scala SDK`为空,依次点击`Create` => `Download` ,选择所需的版本后,点击`OK`按钮进行下载,下载完成点击`Finish`进入工程。
此时看到 `Scala SDK` 为空,依次点击 `Create` => `Download` ,选择所需的版本后,点击 `OK` 按钮进行下载,下载完成点击 `Finish` 进入工程。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-scala-select.png"/> </div>
@ -132,15 +132,15 @@ IDEA默认不支持Scala语言的开发需要通过插件进行扩展。打
#### 2. 方式二
方式一是Scala官方安装指南里使用的方式但下载速度通常比较慢且这种安装下并没有直接提供Scala命令行工具。所以个人推荐到官网下载安装包进行安装下载地址https://www.scala-lang.org/download/
方式一是 Scala 官方安装指南里使用的方式,但下载速度通常比较慢,且这种安装下并没有直接提供 Scala 命令行工具。所以个人推荐到官网下载安装包进行安装下载地址https://www.scala-lang.org/download/
这里我的系统是Windows下载msi版本的安装包后一直点击下一步进行安装安装完成后会自动配置好环境变量。
这里我的系统是 Windows下载 msi 版本的安装包后,一直点击下一步进行安装,安装完成后会自动配置好环境变量。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/scala-other-resources.png"/> </div>
由于安装时已经自动配置好环境变量所以IDEA会自动选择对应版本的SDK。
由于安装时已经自动配置好环境变量,所以 IDEA 会自动选择对应版本的 SDK。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-scala-2.1.8.png"/> </div>
@ -148,7 +148,7 @@ IDEA默认不支持Scala语言的开发需要通过插件进行扩展。打
### 3.5 创建Hello World
在工程 `src`目录上右击 **New** => **Scala class** 创建`Hello.scala`。输入代码如下,完成后点击运行按钮,成功运行则代表搭建成功。
在工程 `src` 目录上右击 **New** => **Scala class** 创建 `Hello.scala`。输入代码如下,完成后点击运行按钮,成功运行则代表搭建成功。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/scala-hello-world.png"/> </div>
@ -158,7 +158,7 @@ IDEA默认不支持Scala语言的开发需要通过插件进行扩展。打
### 3.6 切换Scala版本
在日常的开发中由于对应软件如Spark的版本切换可能导致需要切换Scala的版本则可以在`Project Structures`中的`Global Libraries`选项卡中进行切换。
在日常的开发中,由于对应软件(如 Spark的版本切换可能导致需要切换 Scala 的版本,则可以在 `Project Structures` 中的 `Global Libraries` 选项卡中进行切换。
<div align="center"> <img width="700px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/idea-scala-change.png"/> </div>
@ -168,11 +168,11 @@ IDEA默认不支持Scala语言的开发需要通过插件进行扩展。打
### 3.7 可能出现的问题
在IDEA中有时候重新打开项目后右击并不会出现新建`scala`文件的选项或者在编写时没有Scala语法提示此时可以先删除`Global Libraries`中配置好的SDK之后再重新添加
IDEA 中有时候重新打开项目后,右击并不会出现新建 `scala` 文件的选项,或者在编写时没有 Scala 语法提示,此时可以先删除 `Global Libraries` 中配置好的 SDK之后再重新添加
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/scala-sdk.png"/> </div>
**另外在IDEA中以本地模式运行Spark项目是不需要在本机搭建SparkHadoop环境的。**
**另外在 IDEA 中以本地模式运行 Spark 项目是不需要在本机搭建 SparkHadoop 环境的。**

View File

@ -20,23 +20,23 @@
## 一、集群规划
这里搭建一个3节点的Spark集群其中三台主机上均部署`Worker`服务。同时为了保证高可用除了在hadoop001上部署主`Master`服务外还在hadoop002hadoop003上分别部署备用的`Master`服务Master服务由Zookeeper集群进行协调管理如果主`Master`不可用,则备用`Master`会成为新的主`Master`
这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 `Worker` 服务。同时为了保证高可用,除了在 hadoop001 上部署主 `Master` 服务外,还在 hadoop002hadoop003 上分别部署备用的 `Master` 服务Master 服务由 Zookeeper 集群进行协调管理,如果主 `Master` 不可用,则备用 `Master` 会成为新的主 `Master`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark集群规划.png"/> </div>
## 二、前置条件
搭建Spark集群前需要保证JDK环境、Zookeeper集群和Hadoop集群已经搭建相关步骤可以参阅
搭建 Spark 集群前,需要保证 JDK 环境、Zookeeper 集群和 Hadoop 集群已经搭建,相关步骤可以参阅:
- [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK安装.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)
- [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK 安装.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
下载所需版本的 Spark官网下载地址http://spark.apache.org/downloads.html
<div align="center"> <img width="600px" src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-download.png"/> </div>
@ -71,7 +71,7 @@ export PATH=${SPARK_HOME}/bin:$PATH
### 3.3 集群配置
进入`${SPARK_HOME}/conf`目录,拷贝配置样本进行修改:
进入 `${SPARK_HOME}/conf` 目录,拷贝配置样本进行修改:
#### 1. spark-env.sh
@ -94,7 +94,7 @@ SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zoo
cp slaves.template slaves
```
配置所有Woker节点的位置
配置所有 Woker 节点的位置:
```properties
hadoop001
@ -104,7 +104,7 @@ hadoop003
### 3.4 安装包分发
将Spark的安装包分发到其他服务器分发后建议在这两台服务器上也配置一下Spark的环境变量。
Spark 的安装包分发到其他服务器,分发后建议在这两台服务器上也配置一下 Spark 的环境变量。
```shell
scp -r /usr/app/spark-2.4.0-bin-hadoop2.6/ hadoop002:usr/app/
@ -117,7 +117,7 @@ scp -r /usr/app/spark-2.4.0-bin-hadoop2.6/ hadoop003:usr/app/
### 4.1 启动ZooKeeper集群
分别到三台服务器上启动ZooKeeper服务
分别到三台服务器上启动 ZooKeeper 服务:
```shell
zkServer.sh start
@ -134,13 +134,13 @@ start-yarn.sh
### 4.3 启动Spark集群
进入hadoop001` ${SPARK_HOME}/sbin`目录下执行下面命令启动集群。执行命令后会在hadoop001上启动`Maser`服务,会在`slaves`配置文件中配置的所有节点上启动`Worker`服务。
进入 hadoop001` ${SPARK_HOME}/sbin` 目录下,执行下面命令启动集群。执行命令后,会在 hadoop001 上启动 `Maser` 服务,会在 `slaves` 配置文件中配置的所有节点上启动 `Worker` 服务。
```shell
start-all.sh
```
分别在hadoop002hadoop003上执行下面的命令启动备用的`Master`服务:
分别在 hadoop002hadoop003 上执行下面的命令,启动备用的 `Master` 服务:
```shell
# ${SPARK_HOME}/sbin 下执行
@ -149,11 +149,11 @@ start-master.sh
### 4.4 查看服务
查看SparkWeb-UI页面端口为`8080`。此时可以看到hadoop001上的Master节点处于`ALIVE`状态,并有3个可用的`Worker`节点。
查看 SparkWeb-UI 页面,端口为 `8080`。此时可以看到 hadoop001 上的 Master 节点处于 `ALIVE` 状态,并有 3 个可用的 `Worker` 节点。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-集群搭建1.png"/> </div>
而hadoop002hadoop003上的Master节点均处于`STANDBY`状态,没有可用的`Worker`节点。
hadoop002hadoop003 上的 Master 节点均处于 `STANDBY` 状态,没有可用的 `Worker` 节点。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-集群搭建2.png"/> </div>
@ -163,19 +163,19 @@ start-master.sh
## 五、验证集群高可用
此时可以使用`kill`命令杀死hadoop001上的`Master`进程,此时备用`Master`会中会有一个再次成为`Master`我这里是hadoop002可以看到hadoop2上的`Master`经过`RECOVERING`后成为了新的主`Master`,并且获得了全部可以用的`Workers`
此时可以使用 `kill` 命令杀死 hadoop001 上的 `Master` 进程,此时备用 `Master` 会中会有一个再次成为 `Master`,我这里是 hadoop002可以看到 hadoop2 上的 `Master` 经过 `RECOVERING` 后成为了新的主 `Master`,并且获得了全部可以用的 `Workers`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-集群搭建4.png"/> </div>
Hadoop002上的`Master`成为主`Master`,并获得了全部可以用的`Workers`
Hadoop002 上的 `Master` 成为主 `Master`,并获得了全部可以用的 `Workers`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/spark-集群搭建5.png"/> </div>
此时如果你再在hadoop001上使用`start-master.sh`启动Master服务那么其会作为备用`Master`存在。
此时如果你再在 hadoop001 上使用 `start-master.sh` 启动 Master 服务,那么其会作为备用 `Master` 存在。
## 六、提交作业
和单机环境下的提交到Yarn上的命令完全一致这里以Spark内置的计算Pi的样例程序为例提交命令如下
和单机环境下的提交到 Yarn 上的命令完全一致,这里以 Spark 内置的计算 Pi 的样例程序为例,提交命令如下:
```shell
spark-submit \

View File

@ -7,11 +7,11 @@
> 1. Java 7+ (Apache Storm 1.x is tested through travis ci against both java 7 and java 8 JDKs)
> 2. Python 2.6.6 (Python 3.x should work too, but is not tested as part of our CI enviornment)
按照[官方文档](http://storm.apache.org/releases/1.2.2/Setting-up-a-Storm-cluster.html)的说明storm 运行依赖于Java 7+ 和 Python 2.6.6 +,所以需要预先安装这两个软件。由于这两个软件在多个框架中都有依赖,其安装步骤单独整理至
按照[官方文档](http://storm.apache.org/releases/1.2.2/Setting-up-a-Storm-cluster.html) 的说明storm 运行依赖于 Java 7+ 和 Python 2.6.6 +,所以需要预先安装这两个软件。由于这两个软件在多个框架中都有依赖,其安装步骤单独整理至
+ [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK安装.md)
+ [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK 安装.md)
+ [Linux环境下Python安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxPython安装.md)
+ [Linux 环境下 Python 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxPython 安装.md)
@ -46,7 +46,7 @@ export PATH=$STORM_HOME/bin:$PATH
### 4. 启动相关进程
因为要启动多个进程,所以统一采用后台进程的方式启动。进入到`${STORM_HOME}/bin`目录下,依次执行下面的命令:
因为要启动多个进程,所以统一采用后台进程的方式启动。进入到 `${STORM_HOME}/bin` 目录下,依次执行下面的命令:
```shell
# 启动zookeeper
@ -76,6 +76,6 @@ nohup sh storm logviewer &
9630 logviewer
```
验证方式二: 访问8080端口查看Web-UI界面
验证方式二: 访问 8080 端口,查看 Web-UI 界面:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/storm-web-ui.png"/> </div>
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/storm-web-ui.png"/> </div>

View File

@ -23,17 +23,17 @@
## 一、集群规划
这里搭建一个3节点的Storm集群三台主机上均部署`Supervisor``LogViewer`服务。同时为了保证高可用除了在hadoop001上部署主`Nimbus`服务外还在hadoop002上部署备用的`Nimbus`服务。`Nimbus`服务由Zookeeper集群进行协调管理如果主`Nimbus`不可用,则备用`Nimbus`会成为新的主`Nimbus`
这里搭建一个 3 节点的 Storm 集群:三台主机上均部署 `Supervisor``LogViewer` 服务。同时为了保证高可用,除了在 hadoop001 上部署主 `Nimbus` 服务外,还在 hadoop002 上部署备用的 `Nimbus` 服务。`Nimbus` 服务由 Zookeeper 集群进行协调管理,如果主 `Nimbus` 不可用,则备用 `Nimbus` 会成为新的主 `Nimbus`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/storm-集群规划.png"/> </div>
## 二、前置条件
Storm 运行依赖于Java 7+ 和 Python 2.6.6 +所以需要预先安装这两个软件。同时为了保证高可用这里我们不采用Storm内置的Zookeeper而采用外置的Zookeeper集群。由于这三个软件在多个框架中都有依赖其安装步骤单独整理至
Storm 运行依赖于 Java 7+ 和 Python 2.6.6 +,所以需要预先安装这两个软件。同时为了保证高可用,这里我们不采用 Storm 内置的 Zookeeper而采用外置的 Zookeeper 集群。由于这三个软件在多个框架中都有依赖,其安装步骤单独整理至
- [Linux环境下JDK安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK安装.md)
- [Linux环境下Python安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxPython安装.md)
- [Zookeeper单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md)
- [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxJDK 安装.md)
- [Linux 环境下 Python 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/LinuxPython 安装.md)
- [Zookeeper 单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper 单机环境和集群环境搭建.md)
@ -70,7 +70,7 @@ export PATH=$STORM_HOME/bin:$PATH
### 3. 集群配置
修改`${STORM_HOME}/conf/storm.yaml`文件,配置如下:
修改 `${STORM_HOME}/conf/storm.yaml` 文件,配置如下:
```yaml
# Zookeeper集群的主机列表
@ -93,11 +93,11 @@ supervisor.slots.ports:
- 6703
```
`supervisor.slots.ports`参数用来配置workers进程接收消息的端口默认每个supervisor节点上会启动4个worker当然你也可以按照自己的需要和服务器性能进行设置假设只想启动2个worker的话此处配置2个端口即可。
`supervisor.slots.ports` 参数用来配置 workers 进程接收消息的端口,默认每个 supervisor 节点上会启动 4 个 worker当然你也可以按照自己的需要和服务器性能进行设置假设只想启动 2 个 worker 的话,此处配置 2 个端口即可。
### 4. 安装包分发
将Storm的安装包分发到其他服务器分发后建议在这两台服务器上也配置一下Storm的环境变量。
Storm 的安装包分发到其他服务器,分发后建议在这两台服务器上也配置一下 Storm 的环境变量。
```shell
scp -r /usr/app/apache-storm-1.2.2/ root@hadoop002:/usr/app/
@ -110,7 +110,7 @@ scp -r /usr/app/apache-storm-1.2.2/ root@hadoop003:/usr/app/
### 4.1 启动ZooKeeper集群
分别到三台服务器上启动ZooKeeper服务
分别到三台服务器上启动 ZooKeeper 服务:
```shell
zkServer.sh start
@ -118,7 +118,7 @@ scp -r /usr/app/apache-storm-1.2.2/ root@hadoop003:/usr/app/
### 4.2 启动Storm集群
因为要启动多个进程,所以统一采用后台进程的方式启动。进入到`${STORM_HOME}/bin`目录下,执行下面的命令:
因为要启动多个进程,所以统一采用后台进程的方式启动。进入到 `${STORM_HOME}/bin` 目录下,执行下面的命令:
**hadoop001 & hadoop002 **
@ -135,7 +135,7 @@ nohup sh storm logviewer &
**hadoop003 **
hadoop003上只需要启动`supervisor`服务和`logviewer`服务:
hadoop003 上只需要启动 `supervisor` 服务和 `logviewer` 服务:
```shell
# 启动从节点 supervisor
@ -148,7 +148,7 @@ nohup sh storm logviewer &
### 4.3 查看集群
使用`jps`查看进程,三台服务器的进程应该分别如下:
使用 `jps` 查看进程,三台服务器的进程应该分别如下:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/storm-集群-shell.png"/> </div>
@ -156,7 +156,7 @@ nohup sh storm logviewer &
<br/>
访问hadoop001hadoop002`8080`端口,界面如下。可以看到有一主一备2个`Nimbus`和3个`Supervisor`,并且每个`Supervisor`有四个`slots`,即四个可用的`worker`进程,此时代表集群已经搭建成功。
访问 hadoop001hadoop002`8080` 端口,界面如下。可以看到有一主一备 2 个 `Nimbus` 和 3 个 `Supervisor`,并且每个 `Supervisor` 有四个 `slots`,即四个可用的 `worker` 进程,此时代表集群已经搭建成功。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/storm-集群搭建1.png"/> </div>
@ -164,6 +164,6 @@ nohup sh storm logviewer &
## 五、高可用验证
这里手动模拟主`Nimbus`异常的情况在hadoop001上使用`kill`命令杀死`Nimbus`的线程此时可以看到hadoop001上的`Nimbus`已经处于`offline`状态而hadoop002上的`Nimbus`则成为新的`Leader`
这里手动模拟主 `Nimbus` 异常的情况,在 hadoop001 上使用 `kill` 命令杀死 `Nimbus` 的线程,此时可以看到 hadoop001 上的 `Nimbus` 已经处于 `offline` 状态,而 hadoop002 上的 `Nimbus` 则成为新的 `Leader`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/storm集群搭建2.png"/> </div>

View File

@ -20,7 +20,7 @@
### 1.1 下载
下载对应版本Zookeeper这里我下载的版本`3.4.14`。官方下载地址https://archive.apache.org/dist/zookeeper/
下载对应版本 Zookeeper这里我下载的版本 `3.4.14`。官方下载地址https://archive.apache.org/dist/zookeeper/
```shell
# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
@ -53,7 +53,7 @@ export PATH=$ZOOKEEPER_HOME/bin:$PATH
### 1.4 修改配置
进入安装目录的`conf/`目录下,拷贝配置样本并进行修改:
进入安装目录的 `conf/` 目录下,拷贝配置样本并进行修改:
```
# cp zoo_sample.cfg zoo.cfg
@ -95,12 +95,12 @@ clientPort=2181
>配置参数说明:
>
>- **tickTime**用于计算的基础时间单元。比如session超时N*tickTime
>- **initLimit**:用于集群,允许从节点连接并同步到 master节点的初始化连接时间以tickTime的倍数来表示
>- **syncLimit**:用于集群, master主节点与从节点之间发送消息请求和应答时间长度心跳机制
>- **tickTime**:用于计算的基础时间单元。比如 session 超时N*tickTime
>- **initLimit**:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
>- **syncLimit**:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
>- **dataDir**:数据存储位置;
>- **dataLogDir**:日志目录;
>- **clientPort**用于客户端连接的端口默认2181
>- **clientPort**:用于客户端连接的端口,默认 2181
@ -114,7 +114,7 @@ zkServer.sh start
### 1.6 验证
使用JPS验证进程是否已经启动出现`QuorumPeerMain`则代表启动成功。
使用 JPS 验证进程是否已经启动,出现 `QuorumPeerMain` 则代表启动成功。
```shell
[root@hadoop001 bin]# jps
@ -125,11 +125,11 @@ zkServer.sh start
## 二、集群环境搭建
为保证集群高可用Zookeeper集群的节点数最好是奇数最少有三个节点所以这里演示搭建一个三个节点的集群。这里我使用三台主机进行搭建主机名分别为hadoop001hadoop002hadoop003。
为保证集群高可用Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。这里我使用三台主机进行搭建,主机名分别为 hadoop001hadoop002hadoop003。
### 2.1 修改配置
解压一份zookeeper安装包修改其配置文件`zoo.cfg`内容如下。之后使用scp命令将安装包分发到三台服务器上
解压一份 zookeeper 安装包,修改其配置文件 `zoo.cfg`,内容如下。之后使用 scp 命令将安装包分发到三台服务器上:
```shell
tickTime=2000
@ -148,7 +148,7 @@ server.3=hadoop003:2287:3387
### 2.2 标识节点
分别在三台主机的`dataDir`目录下新建`myid`文件,并写入对应的节点标识。Zookeeper集群通过`myid`文件识别集群节点并通过上文配置的节点通信端口和选举端口来进行节点通信选举出Leader节点。
分别在三台主机的 `dataDir` 目录下新建 `myid` 文件,并写入对应的节点标识。Zookeeper 集群通过 `myid` 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 Leader 节点。
创建存储目录:
@ -157,7 +157,7 @@ server.3=hadoop003:2287:3387
mkdir -vp /usr/local/zookeeper-cluster/data/
```
创建并写入节点标识到`myid`文件:
创建并写入节点标识到 `myid` 文件:
```shell
# hadoop001主机
@ -178,7 +178,7 @@ echo "3" > /usr/local/zookeeper-cluster/data/myid
### 2.4 集群验证
启动后使用`zkServer.sh status`查看集群各个节点状态。如图所示三个节点进程均启动成功并且hadoop002leader节点hadoop001hadoop003follower节点。
启动后使用 `zkServer.sh status` 查看集群各个节点状态。如图所示:三个节点进程均启动成功,并且 hadoop002leader 节点hadoop001hadoop003follower 节点。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/zookeeper-hadoop001.png"/> </div>

View File

@ -40,7 +40,7 @@ HDFS 高可用架构主要由以下组件所构成:
目前 Hadoop 支持使用 Quorum Journal Manager (QJM) 或 Network File System (NFS) 作为共享的存储系统,这里以 QJM 集群为例进行说明Active NameNode 首先把 EditLog 提交到 JournalNode 集群,然后 Standby NameNode 再从 JournalNode 集群定时同步 EditLog当 Active NameNode 宕机后, Standby NameNode 在确认元数据完全同步之后就可以对外提供服务。
需要说明的是向 JournalNode 集群写入 EditLog 是遵循 “过半写入则成功” 的策略,所以你至少要有3个 JournalNode 节点,当然你也可以继续增加节点数量,但是应该保证节点总数是奇数。同时如果有 2N+1 台 JournalNode那么根据过半写的原则最多可以容忍有 N 台 JournalNode 节点挂掉。
需要说明的是向 JournalNode 集群写入 EditLog 是遵循 “过半写入则成功” 的策略,所以你至少要有 3 个 JournalNode 节点,当然你也可以继续增加节点数量,但是应该保证节点总数是奇数。同时如果有 2N+1 台 JournalNode那么根据过半写的原则最多可以容忍有 N 台 JournalNode 节点挂掉。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop-QJM-同步机制.png"/> </div>
@ -70,7 +70,7 @@ YARN ResourceManager 的高可用与 HDFS NameNode 的高可用类似,但是 R
## 二、集群规划
按照高可用的设计目标:需要保证至少有两个 NameNode (一主一备) 和 两个 ResourceManager (一主一备) ,同时为满足“过半写入则成功”的原则,需要至少要有3个 JournalNode 节点。这里使用三台主机进行搭建,集群规划如下:
按照高可用的设计目标:需要保证至少有两个 NameNode (一主一备) 和 两个 ResourceManager (一主一备) ,同时为满足“过半写入则成功”的原则,需要至少要有 3 个 JournalNode 节点。这里使用三台主机进行搭建,集群规划如下:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop高可用集群规划.png"/> </div>
@ -78,9 +78,9 @@ YARN ResourceManager 的高可用与 HDFS NameNode 的高可用类似,但是 R
## 三、前置条件
+ 所有服务器都安装有JDK安装步骤可以参见[LinuxJDK的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
+ 搭建好ZooKeeper集群搭建步骤可以参见[Zookeeper单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md)
+ 所有服务器之间都配置好SSH免密登录。
+ 所有服务器都安装有 JDK安装步骤可以参见[LinuxJDK 的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
+ 搭建好 ZooKeeper 集群,搭建步骤可以参见:[Zookeeper 单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper 单机环境和集群环境搭建.md)
+ 所有服务器之间都配置好 SSH 免密登录。
@ -88,7 +88,7 @@ YARN ResourceManager 的高可用与 HDFS NameNode 的高可用类似,但是 R
### 4.1 下载并解压
下载Hadoop。这里我下载的是CDH版本Hadoop下载地址为http://archive.cloudera.com/cdh5/cdh/5/
下载 Hadoop。这里我下载的是 CDH 版本 Hadoop下载地址为http://archive.cloudera.com/cdh5/cdh/5/
```shell
# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz
@ -96,7 +96,7 @@ YARN ResourceManager 的高可用与 HDFS NameNode 的高可用类似,但是 R
### 4.2 配置环境变量
编辑`profile`文件:
编辑 `profile` 文件:
```shell
# vim /etc/profile
@ -109,7 +109,7 @@ export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
export PATH=${HADOOP_HOME}/bin:$PATH
```
执行`source`命令,使得配置立即生效:
执行 `source` 命令,使得配置立即生效:
```shell
# source /etc/profile
@ -117,7 +117,7 @@ export PATH=${HADOOP_HOME}/bin:$PATH
### 4.3 修改配置
进入`${HADOOP_HOME}/etc/hadoop`目录下,修改配置文件。各个配置文件内容如下:
进入 `${HADOOP_HOME}/etc/hadoop` 目录下,修改配置文件。各个配置文件内容如下:
#### 1. hadoop-env.sh
@ -131,22 +131,22 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!-- 指定namenodehdfs协议文件系统的通信地址 -->
<!-- 指定 namenodehdfs 协议文件系统的通信地址 -->
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:8020</value>
</property>
<property>
<!-- 指定hadoop集群存储临时文件的目录 -->
<!-- 指定 hadoop 集群存储临时文件的目录 -->
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<property>
<!-- ZooKeeper集群的地址 -->
<!-- ZooKeeper 集群的地址 -->
<name>ha.zookeeper.quorum</name>
<value>hadoop001:2181,hadoop002:2181,hadoop002:2181</value>
</property>
<property>
<!-- ZKFC连接到ZooKeeper超时时长 -->
<!-- ZKFC 连接到 ZooKeeper 超时时长 -->
<name>ha.zookeeper.session-timeout.ms</name>
<value>10000</value>
</property>
@ -158,17 +158,17 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!-- 指定HDFS副本的数量 -->
<!-- 指定 HDFS 副本的数量 -->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!-- namenode节点数据即元数据的存放位置可以指定多个目录实现容错多个目录用逗号分隔 -->
<!-- namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔 -->
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/namenode/data</value>
</property>
<property>
<!-- datanode节点数据即数据块的存放位置 -->
<!-- datanode 节点数据(即数据块)的存放位置 -->
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/datanode/data</value>
</property>
@ -178,57 +178,57 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
<value>mycluster</value>
</property>
<property>
<!-- NameNode ID列表-->
<!-- NameNode ID 列表-->
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<!-- nn1RPC通信地址 -->
<!-- nn1RPC 通信地址 -->
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop001:8020</value>
</property>
<property>
<!-- nn2RPC通信地址 -->
<!-- nn2RPC 通信地址 -->
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop002:8020</value>
</property>
<property>
<!-- nn1http通信地址 -->
<!-- nn1http 通信地址 -->
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop001:50070</value>
</property>
<property>
<!-- nn2http通信地址 -->
<!-- nn2http 通信地址 -->
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop002:50070</value>
</property>
<property>
<!-- NameNode元数据在JournalNode上的共享存储目录 -->
<!-- NameNode 元数据在 JournalNode 上的共享存储目录 -->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster</value>
</property>
<property>
<!-- Journal Edit Files的存储目录 -->
<!-- Journal Edit Files 的存储目录 -->
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journalnode/data</value>
</property>
<property>
<!-- 配置隔离机制确保在任何给定时间只有一个NameNode处于活动状态 -->
<!-- 配置隔离机制,确保在任何给定时间只有一个 NameNode 处于活动状态 -->
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<!-- 使用sshfence机制时需要ssh免密登录 -->
<!-- 使用 sshfence 机制时需要 ssh 免密登录 -->
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<!-- SSH超时时间 -->
<!-- SSH 超时时间 -->
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<!-- 访问代理类用于确定当前处于Active状态的NameNode -->
<!-- 访问代理类,用于确定当前处于 Active 状态的 NameNode -->
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
@ -245,57 +245,57 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!--配置NodeManager上运行的附属服务。需要配置成mapreduce_shuffle后才可以在Yarn上运行MapReduce程序。-->
<!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!-- 是否启用日志聚合(可选) -->
<!-- 是否启用日志聚合 (可选) -->
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<!-- 聚合日志的保存时间(可选) -->
<!-- 聚合日志的保存时间 (可选) -->
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property>
<!-- 启用RM HA -->
<!-- 启用 RM HA -->
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<!-- RM集群标识 -->
<!-- RM 集群标识 -->
<name>yarn.resourcemanager.cluster-id</name>
<value>my-yarn-cluster</value>
</property>
<property>
<!-- RM的逻辑ID列表 -->
<!-- RM 的逻辑 ID 列表 -->
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<!-- RM1的服务地址 -->
<!-- RM1 的服务地址 -->
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop002</value>
</property>
<property>
<!-- RM2的服务地址 -->
<!-- RM2 的服务地址 -->
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop003</value>
</property>
<property>
<!-- RM1 Web应用程序的地址 -->
<!-- RM1 Web 应用程序的地址 -->
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>hadoop002:8088</value>
</property>
<property>
<!-- RM2 Web应用程序的地址 -->
<!-- RM2 Web 应用程序的地址 -->
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>hadoop003:8088</value>
</property>
<property>
<!-- ZooKeeper集群的地址 -->
<!-- ZooKeeper 集群的地址 -->
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop001:2181,hadoop002:2181,hadoop003:2181</value>
</property>
@ -317,7 +317,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
```xml
<configuration>
<property>
<!--指定mapreduce作业运行在yarn上-->
<!--指定 mapreduce 作业运行在 yarn 上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
@ -326,7 +326,7 @@ export JAVA_HOME=/usr/java/jdk1.8.0_201/
#### 5. slaves
配置所有从属节点的主机名或IP地址每行一个。所有从属节点上的`DataNode`服务和`NodeManager`服务都会被启动。
配置所有从属节点的主机名或 IP 地址,每行一个。所有从属节点上的 `DataNode` 服务和 `NodeManager` 服务都会被启动。
```properties
hadoop001
@ -336,7 +336,7 @@ hadoop003
### 4.4 分发程序
将Hadoop安装包分发到其他两台服务器分发后建议在这两台服务器上也配置一下Hadoop的环境变量。
Hadoop 安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下 Hadoop 的环境变量。
```shell
# 将安装包分发到hadoop002
@ -351,7 +351,7 @@ scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/
### 5.1 启动ZooKeeper
分别到三台服务器上启动ZooKeeper服务
分别到三台服务器上启动 ZooKeeper 服务:
```ssh
zkServer.sh start
@ -359,7 +359,7 @@ scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/
### 5.2 启动Journalnode
分别到三台服务器的的`${HADOOP_HOME}/sbin`目录下,启动`journalnode`进程:
分别到三台服务器的的 `${HADOOP_HOME}/sbin` 目录下,启动 `journalnode` 进程:
```shell
hadoop-daemon.sh start journalnode
@ -367,13 +367,13 @@ hadoop-daemon.sh start journalnode
### 5.3 初始化NameNode
`hadop001`上执行`NameNode`初始化命令:
`hadop001` 上执行 `NameNode` 初始化命令:
```
hdfs namenode -format
```
执行初始化命令后,需要将`NameNode`元数据目录的内容,复制到其他未格式化的`NameNode`上。元数据存储目录就是我们在`hdfs-site.xml`中使用`dfs.namenode.name.dir`属性指定的目录。这里我们需要将其复制到`hadoop002`上:
执行初始化命令后,需要将 `NameNode` 元数据目录的内容,复制到其他未格式化的 `NameNode` 上。元数据存储目录就是我们在 `hdfs-site.xml` 中使用 `dfs.namenode.name.dir` 属性指定的目录。这里我们需要将其复制到 `hadoop002` 上:
```shell
scp -r /home/hadoop/namenode/data hadoop002:/home/hadoop/namenode/
@ -381,7 +381,7 @@ hdfs namenode -format
### 5.4 初始化HA状态
在任意一台`NameNode`上使用以下命令来初始化ZooKeeper中的HA状态
在任意一台 `NameNode` 上使用以下命令来初始化 ZooKeeper 中的 HA 状态:
```shell
hdfs zkfc -formatZK
@ -389,7 +389,7 @@ hdfs zkfc -formatZK
### 5.5 启动HDFS
进入到`hadoop001``${HADOOP_HOME}/sbin`目录下启动HDFS。此时`hadoop001``hadoop002`上的`NameNode`服务,和三台服务器上的`DataNode`服务都会被启动:
进入到 `hadoop001``${HADOOP_HOME}/sbin` 目录下,启动 HDFS。此时 `hadoop001``hadoop002` 上的 `NameNode` 服务,和三台服务器上的 `DataNode` 服务都会被启动:
```shell
start-dfs.sh
@ -397,13 +397,13 @@ start-dfs.sh
### 5.6 启动YARN
进入到`hadoop002``${HADOOP_HOME}/sbin`目录下启动YARN。此时`hadoop002`上的`ResourceManager`服务,和三台服务器上的`NodeManager`服务都会被启动:
进入到 `hadoop002``${HADOOP_HOME}/sbin` 目录下,启动 YARN。此时 `hadoop002` 上的 `ResourceManager` 服务,和三台服务器上的 `NodeManager` 服务都会被启动:
```SHEll
start-yarn.sh
```
需要注意的是,这个时候`hadoop003`上的`ResourceManager`服务通常是没有启动的,需要手动启动:
需要注意的是,这个时候 `hadoop003` 上的 `ResourceManager` 服务通常是没有启动的,需要手动启动:
```shell
yarn-daemon.sh start resourcemanager
@ -447,13 +447,13 @@ yarn-daemon.sh start resourcemanager
### 6.2 查看Web UI
HDFSYARN的端口号分别为`50070``8080`,界面应该如下:
HDFSYARN 的端口号分别为 `50070``8080`,界面应该如下:
此时hadoop001上的`NameNode`处于可用状态:
此时 hadoop001 上的 `NameNode` 处于可用状态:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/hadoop高可用集群1.png"/> </div>
而hadoop002上的`NameNode`则处于备用状态:
hadoop002 上的 `NameNode` 则处于备用状态:
<br/>
@ -461,7 +461,7 @@ HDFS和YARN的端口号分别为`50070`和`8080`,界面应该如下:
<br/>
hadoop002上的`ResourceManager`处于可用状态:
hadoop002 上的 `ResourceManager` 处于可用状态:
<br/>
@ -469,7 +469,7 @@ hadoop002上的`ResourceManager`处于可用状态:
<br/>
hadoop003上的`ResourceManager`则处于备用状态:
hadoop003 上的 `ResourceManager` 则处于备用状态:
<br/>
@ -477,7 +477,7 @@ hadoop003上的`ResourceManager`则处于备用状态:
<br/>
同时界面上也有`Journal Manager`的相关信息:
同时界面上也有 `Journal Manager` 的相关信息:
<br/>
@ -485,21 +485,21 @@ hadoop003上的`ResourceManager`则处于备用状态:
## 七、集群的二次启动
上面的集群初次启动涉及到一些必要初始化操作所以过程略显繁琐。但是集群一旦搭建好后想要再次启用它是比较方便的步骤如下首选需要确保ZooKeeper集群已经启动
上面的集群初次启动涉及到一些必要初始化操作,所以过程略显繁琐。但是集群一旦搭建好后,想要再次启用它是比较方便的,步骤如下(首选需要确保 ZooKeeper 集群已经启动):
` hadoop001`启动 HDFS此时会启动所有与 HDFS 高可用相关的服务,包括 NameNodeDataNode 和 JournalNode
` hadoop001` 启动 HDFS此时会启动所有与 HDFS 高可用相关的服务,包括 NameNodeDataNode 和 JournalNode
```shell
start-dfs.sh
```
`hadoop002`启动YARN
`hadoop002` 启动 YARN
```SHEll
start-yarn.sh
```
这个时候`hadoop003`上的`ResourceManager`服务通常还是没有启动的,需要手动启动:
这个时候 `hadoop003` 上的 `ResourceManager` 服务通常还是没有启动的,需要手动启动:
```shell
yarn-daemon.sh start resourcemanager
@ -516,7 +516,7 @@ yarn-daemon.sh start resourcemanager
+ [HDFS High Availability Using the Quorum Journal Manager](https://hadoop.apache.org/docs/r3.1.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html)
+ [ResourceManager High Availability](https://hadoop.apache.org/docs/r3.1.2/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html)
关于Hadoop高可用原理的详细分析推荐阅读
关于 Hadoop 高可用原理的详细分析,推荐阅读:
[Hadoop NameNode 高可用 (High Availability) 实现解析](https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-name-node/index.html)

View File

@ -17,11 +17,11 @@
## 一、Zookeeper集群搭建
为保证集群高可用Zookeeper集群的节点数最好是奇数最少有三个节点所以这里搭建一个三个节点的集群。
为保证集群高可用Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群。
### 1.1 下载 & 解压
下载对应版本Zookeeper这里我下载的版本`3.4.14`。官方下载地址https://archive.apache.org/dist/zookeeper/
下载对应版本 Zookeeper这里我下载的版本 `3.4.14`。官方下载地址https://archive.apache.org/dist/zookeeper/
```shell
# 下载
@ -32,9 +32,9 @@ tar -zxvf zookeeper-3.4.14.tar.gz
### 1.2 修改配置
拷贝三份zookeeper安装包。分别进入安装目录的`conf`目录,拷贝配置样本`zoo_sample.cfg ``zoo.cfg`并进行修改,修改后三份配置文件内容分别如下:
拷贝三份 zookeeper 安装包。分别进入安装目录的 `conf` 目录,拷贝配置样本 `zoo_sample.cfg ``zoo.cfg` 并进行修改,修改后三份配置文件内容分别如下:
zookeeper01配置
zookeeper01 配置:
```shell
tickTime=2000
@ -51,9 +51,9 @@ server.2=127.0.0.1:2288:3388
server.3=127.0.0.1:2289:3389
```
> 如果是多台服务器则集群中每个节点通讯端口和选举端口可相同IP地址修改为每个节点所在主机IP即可。
> 如果是多台服务器则集群中每个节点通讯端口和选举端口可相同IP 地址修改为每个节点所在主机 IP 即可。
zookeeper02配置与zookeeper01相比只有`dataLogDir``dataLogDir`不同:
zookeeper02 配置,与 zookeeper01 相比,只有 `dataLogDir``dataLogDir` 不同:
```shell
tickTime=2000
@ -68,7 +68,7 @@ server.2=127.0.0.1:2288:3388
server.3=127.0.0.1:2289:3389
```
zookeeper03配置与zookeeper0102相比也只有`dataLogDir``dataLogDir`不同:
zookeeper03 配置,与 zookeeper0102 相比,也只有 `dataLogDir``dataLogDir` 不同:
```shell
tickTime=2000
@ -85,18 +85,18 @@ server.3=127.0.0.1:2289:3389
> 配置参数说明:
>
> - **tickTime**用于计算的基础时间单元。比如session超时N*tickTime
> - **initLimit**:用于集群,允许从节点连接并同步到 master节点的初始化连接时间以tickTime的倍数来表示
> - **syncLimit**:用于集群, master主节点与从节点之间发送消息请求和应答时间长度心跳机制
> - **tickTime**:用于计算的基础时间单元。比如 session 超时N*tickTime
> - **initLimit**:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
> - **syncLimit**:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
> - **dataDir**:数据存储位置;
> - **dataLogDir**:日志目录;
> - **clientPort**用于客户端连接的端口默认2181
> - **clientPort**:用于客户端连接的端口,默认 2181
### 1.3 标识节点
分别在三个节点的数据存储目录下新建`myid`文件,并写入对应的节点标识。Zookeeper集群通过`myid`文件识别集群节点并通过上文配置的节点通信端口和选举端口来进行节点通信选举出leader节点。
分别在三个节点的数据存储目录下新建 `myid` 文件,并写入对应的节点标识。Zookeeper 集群通过 `myid` 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 leader 节点。
创建存储目录:
@ -109,7 +109,7 @@ mkdir -vp /usr/local/zookeeper-cluster/data/02
mkdir -vp /usr/local/zookeeper-cluster/data/03
```
创建并写入节点标识到`myid`文件:
创建并写入节点标识到 `myid` 文件:
```shell
#server1
@ -135,7 +135,7 @@ echo "3" > /usr/local/zookeeper-cluster/data/03/myid
### 1.5 集群验证
使用jps查看进程并且使用`zkServer.sh status`查看集群各个节点状态。如图三个节点进程均启动成功并且两个节点为follower节点一个节点为leader节点。
使用 jps 查看进程,并且使用 `zkServer.sh status` 查看集群各个节点状态。如图三个节点进程均启动成功,并且两个节点为 follower 节点,一个节点为 leader 节点。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/zookeeper-cluster.png"/> </div>
@ -145,7 +145,7 @@ echo "3" > /usr/local/zookeeper-cluster/data/03/myid
### 2.1 下载解压
Kafka安装包官方下载地址http://kafka.apache.org/downloads ,本用例下载的版本为`2.2.0`,下载命令:
Kafka 安装包官方下载地址http://kafka.apache.org/downloads ,本用例下载的版本为 `2.2.0`,下载命令:
```shell
# 下载
@ -154,11 +154,11 @@ wget https://www-eu.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.0.tgz
tar -xzf kafka_2.12-2.2.0.tgz
```
>这里j解释一下kafka安装包的命名规则`kafka_2.12-2.2.0.tgz`为例前面的2.12代表Scala的版本号Kafka采用Scala语言进行开发后面的2.2.0则代表Kafka的版本号。
>这里 j 解释一下 kafka 安装包的命名规则:以 `kafka_2.12-2.2.0.tgz` 为例,前面的 2.12 代表 Scala 的版本号Kafka 采用 Scala 语言进行开发),后面的 2.2.0 则代表 Kafka 的版本号。
### 2.2 拷贝配置文件
进入解压目录的` config`目录下 ,拷贝三份配置文件:
进入解压目录的 ` config` 目录下 ,拷贝三份配置文件:
```shell
# cp server.properties server-1.properties
@ -201,11 +201,11 @@ log.dirs=/usr/local/kafka-logs/02
zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
```
这里需要说明的是`log.dirs`指的是数据日志的存储位置,确切的说,就是分区数据的存储位置,而不是程序运行日志的位置。程序运行日志的位置是通过同一目录下的`log4j.properties`进行配置的。
这里需要说明的是 `log.dirs` 指的是数据日志的存储位置,确切的说,就是分区数据的存储位置,而不是程序运行日志的位置。程序运行日志的位置是通过同一目录下的 `log4j.properties` 进行配置的。
### 2.4 启动集群
分别指定不同配置文件启动三个Kafka节点。启动后可以使用jps查看进程此时应该有三个zookeeper进程和三个kafka进程。
分别指定不同配置文件,启动三个 Kafka 节点。启动后可以使用 jps 查看进程,此时应该有三个 zookeeper 进程和三个 kafka 进程。
```shell
bin/kafka-server-start.sh config/server-1.properties
@ -233,7 +233,7 @@ bin/kafka-topics.sh --describe --bootstrap-server hadoop001:9092 --topic my-repl
可以看到分区0的有0,1,2三个副本且三个副本都是可用副本都在ISR(in-sync Replica 同步副本)列表中,其中1为首领副本,此时代表集群已经搭建成功。
可以看到分区 0 的有 0,1,2 三个副本,且三个副本都是可用副本,都在 ISR(in-sync Replica 同步副本) 列表中,其中 1 为首领副本,此时代表集群已经搭建成功。

View File

@ -24,8 +24,8 @@
添加如下网络配置:
+ IPADDR需要和宿主机同一个网段
+ GATEWAY保持和宿主机一致
+ IPADDR 需要和宿主机同一个网段;
+ GATEWAY 保持和宿主机一致;
```properties
BOOTPROTO=static
@ -75,29 +75,29 @@ ONBOOT=yes
## 二、虚拟机多个静态IP配置
如果一台虚拟机需要经常在不同网络环境使用可以配置多个静态IP。
如果一台虚拟机需要经常在不同网络环境使用,可以配置多个静态 IP。
### 1. 配置多网卡
这里我是用的虚拟机是virtualBox开启多网卡配置方式如下
这里我是用的虚拟机是 virtualBox开启多网卡配置方式如下
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/virtualbox-multi-network.png"/> </div>
### 2. 查看网卡名称
使用`ifconfig`,查看第二块网卡名称,这里我的名称为`enp0s8`
使用 `ifconfig`,查看第二块网卡名称,这里我的名称为 `enp0s8`
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/mutli-net-ip.png"/> </div>
### 3. 配置第二块网卡
开启多网卡后并不会自动生成配置文件,需要拷贝`ifcfg-enp0s3`进行修改:
开启多网卡后并不会自动生成配置文件,需要拷贝 `ifcfg-enp0s3` 进行修改:
```shell
# cp ifcfg-enp0s3 ifcfg-enp0s8
```
静态IP配置方法如上这里不再赘述。除了静态IP参数外以下三个参数还需要修改UUID必须与`ifcfg-enp0s3`中的不一样:
静态 IP 配置方法如上,这里不再赘述。除了静态 IP 参数外以下三个参数还需要修改UUID 必须与 `ifcfg-enp0s3` 中的不一样:
```properties
NAME=enp0s8
@ -115,4 +115,4 @@ DEVICE=enp0s8
使用时只需要根据所处的网络环境,勾选对应的网卡即可,不使用的网卡尽量不要勾选启动。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/virtualbox启用网络.png"/> </div>
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/virtualbox启用网络.png"/> </div>