优化阅读格式
This commit is contained in:
@ -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/Linux下JDK安装.md)
|
||||
> [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux 下 JDK 安装.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(分布式多服务模式)** :存放元数据的数据库为MySQL,MySQL应采用主从模式进行备份和容错。这种模式下`webServer`和`executorServer`在不同进程中运行,彼此之间互不影响,适合用于生产环境。
|
||||
+ **solo server model(单服务模式)** :元数据默认存放在内置的 H2 数据库(可以修改为 MySQL),该模式中 `webServer`(管理服务器) 和 `executorServer`(执行服务器) 运行在同一个进程中,进程名是 `AzkabanSingleServer`。该模式适用于小规模工作流的调度。
|
||||
- **multiple-executor(分布式多服务模式)** :存放元数据的数据库为 MySQL,MySQL 应采用主从模式进行备份和容错。这种模式下 `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>
|
||||
|
||||
|
@ -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/Linux下JDK安装.md)
|
||||
> [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux 下 JDK 安装.md)
|
||||
|
||||
### 1.2 Standalone模式和伪集群模式的区别
|
||||
|
||||
+ 在`Standalone`模式下,所有守护进程都运行在一个`jvm`进程/实例中;
|
||||
+ 在伪分布模式下,HBase仍然在单个主机上运行,但是每个守护进程(HMaster,HRegionServer 和 ZooKeeper)则分别作为一个单独的进程运行。
|
||||
+ 在 `Standalone` 模式下,所有守护进程都运行在一个 `jvm` 进程/实例中;
|
||||
+ 在伪分布模式下,HBase 仍然在单个主机上运行,但是每个守护进程 (HMaster,HRegionServer 和 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
|
||||
|
||||
由于已经将HBase的bin目录配置到环境变量,直接使用以下命令启动:
|
||||
由于已经将 HBase 的 bin 目录配置到环境变量,直接使用以下命令启动:
|
||||
|
||||
```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的进程,其余的为HDFS和YARN的进程。
|
||||
验证方式一 :使用 `jps` 命令查看进程。其中 `HMaster`,`HRegionServer` 是 HBase 的进程,`HQuorumPeer` 是 HBase 内置的 Zookeeper 的进程,其余的为 HDFS 和 YARN 的进程。
|
||||
|
||||
```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>
|
||||
|
@ -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的运行需要依赖Hadoop和JDK(`HBase 2.0+`对应`JDK 1.8+`) 。同时为了保证高可用,这里我们不采用HBase内置的Zookeeper服务,而采用外置的Zookeeper集群。相关搭建步骤可以参阅:
|
||||
HBase 的运行需要依赖 Hadoop 和 JDK(`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)
|
||||
- [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)
|
||||
|
||||
|
||||
|
||||
@ -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>
|
||||
<!-- 指定hbase在HDFS上的存储位置 -->
|
||||
<!-- 指定 hbase 在 HDFS 上的存储位置 -->
|
||||
<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 查看服务
|
||||
|
||||
访问HBase的Web-UI界面,这里我安装的HBase版本为1.2,访问端口为`60010`,如果你安装的是2.0以上的版本,则访问端口号为`16010`。可以看到`Master`在hadoop001上,三个`Regin Servers`分别在hadoop001,hadoop002,和hadoop003上,并且还有一个`Backup Matser` 服务在 hadoop002上。
|
||||
访问 HBase 的 Web-UI 界面,这里我安装的 HBase 版本为 1.2,访问端口为 `60010`,如果你安装的是 2.0 以上的版本,则访问端口号为 `16010`。可以看到 `Master` 在 hadoop001 上,三个 `Regin Servers` 分别在 hadoop001,hadoop002,和 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>
|
||||
|
@ -12,19 +12,19 @@
|
||||
|
||||
## 一、前置条件
|
||||
|
||||
Hadoop的运行依赖JDK,需要预先安装,安装步骤见:
|
||||
Hadoop 的运行依赖 JDK,需要预先安装,安装步骤见:
|
||||
|
||||
+ [Linux下JDK的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
|
||||
+ [Linux 下 JDK 的安装](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 3月 15 09:48 id_rsa
|
||||
-rw-r--r--. 1 root root 388 3月 15 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>
|
||||
<!--指定namenode的hdfs协议文件系统的通信地址-->
|
||||
<!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
|
||||
<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 关闭防火墙
|
||||
|
||||
不关闭防火墙可能导致无法访问Hadoop的Web UI界面:
|
||||
不关闭防火墙可能导致无法访问 Hadoop 的 Web 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>
|
||||
|
@ -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,需要预先安装。其安装步骤单独整理至:
|
||||
|
||||
+ [Linux下JDK的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/JDK%E5%AE%89%E8%A3%85.md)
|
||||
+ [Linux 下 JDK 的安装](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>
|
||||
<!--指定namenode的hdfs协议文件系统的通信地址-->
|
||||
<!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
|
||||
<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
|
||||
|
@ -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/Linux下JDK安装.md)
|
||||
> [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux 下 JDK 安装.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 验证
|
||||
|
||||
由于已经将Flume的bin目录配置到环境变量,直接使用以下命令验证是否配置成功:
|
||||
由于已经将 Flume 的 bin 目录配置到环境变量,直接使用以下命令验证是否配置成功:
|
||||
|
||||
```shell
|
||||
# flume-ng version
|
||||
|
@ -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
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
>**系统环境**:centos 7.6
|
||||
>
|
||||
>**Python版本**:Python-3.6.8
|
||||
>**Python 版本**:Python-3.6.8
|
||||
|
||||
### 1. 环境依赖
|
||||
|
||||
Python3.x的安装需要依赖这四个组件:gcc, zlib,zlib-devel,openssl-devel;所以需要预先安装,命令如下:
|
||||
Python3.x 的安装需要依赖这四个组件:gcc, zlib,zlib-devel,openssl-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
|
||||
|
@ -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 启动
|
||||
|
||||
由于已经将Hive的bin目录配置到环境变量,直接使用以下命令启动,成功进入交互式命令行后执行`show databases`命令,无异常则代表搭建成功。
|
||||
由于已经将 Hive 的 bin 目录配置到环境变量,直接使用以下命令启动,成功进入交互式命令行后执行 `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内置了HiveServer和HiveServer2服务,两者都允许客户端使用多种编程语言进行连接,但是HiveServer不能处理多个客户端的并发请求,因此产生了HiveServer2。HiveServer2(HS2)允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果,支持多客户端并发访问和身份验证。HS2是由多个服务组成的单个进程,其包括基于Thrift的Hive服务(TCP或HTTP)和用于Web UI的Jetty Web服务。
|
||||
Hive 内置了 HiveServer 和 HiveServer2 服务,两者都允许客户端使用多种编程语言进行连接,但是 HiveServer 不能处理多个客户端的并发请求,因此产生了 HiveServer2。HiveServer2(HS2)允许远程客户端可以使用各种编程语言向 Hive 提交请求并检索结果,支持多客户端并发访问和身份验证。HS2 是由多个服务组成的单个进程,其包括基于 Thrift 的 Hive 服务(TCP 或 HTTP)和用于 Web UI 的 Jetty Web 服务。
|
||||
|
||||
HiveServer2拥有自己的CLI工具——Beeline。Beeline是一个基于SQLLine的JDBC客户端。由于目前HiveServer2是Hive开发维护的重点,所以官方更加推荐使用Beeline而不是Hive CLI。以下主要讲解Beeline的配置方式。
|
||||
HiveServer2 拥有自己的 CLI 工具——Beeline。Beeline 是一个基于 SQLLine 的 JDBC 客户端。由于目前 HiveServer2 是 Hive 开发维护的重点,所以官方更加推荐使用 Beeline 而不是 Hive CLI。以下主要讲解 Beeline 的配置方式。
|
||||
|
||||
|
||||
|
||||
### 2.1 修改Hadoop配置
|
||||
|
||||
修改 hadoop 集群的 core-site.xml 配置文件,增加如下配置,指定hadoop的root用户可以代理本机上所有的用户。
|
||||
修改 hadoop 集群的 core-site.xml 配置文件,增加如下配置,指定 hadoop 的 root 用户可以代理本机上所有的用户。
|
||||
|
||||
```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
|
||||
|
@ -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项目是不需要在本机搭建Spark和Hadoop环境的。**
|
||||
**另外在 IDEA 中以本地模式运行 Spark 项目是不需要在本机搭建 Spark 和 Hadoop 环境的。**
|
||||
|
||||
|
@ -20,23 +20,23 @@
|
||||
|
||||
## 一、集群规划
|
||||
|
||||
这里搭建一个3节点的Spark集群,其中三台主机上均部署`Worker`服务。同时为了保证高可用,除了在hadoop001上部署主`Master`服务外,还在hadoop002和hadoop003上分别部署备用的`Master`服务,Master服务由Zookeeper集群进行协调管理,如果主`Master`不可用,则备用`Master`会成为新的主`Master`。
|
||||
这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 `Worker` 服务。同时为了保证高可用,除了在 hadoop001 上部署主 `Master` 服务外,还在 hadoop002 和 hadoop003 上分别部署备用的 `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/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)
|
||||
- [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
|
||||
下载所需版本的 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
|
||||
```
|
||||
|
||||
分别在hadoop002和hadoop003上执行下面的命令,启动备用的`Master`服务:
|
||||
分别在 hadoop002 和 hadoop003 上执行下面的命令,启动备用的 `Master` 服务:
|
||||
|
||||
```shell
|
||||
# ${SPARK_HOME}/sbin 下执行
|
||||
@ -149,11 +149,11 @@ start-master.sh
|
||||
|
||||
### 4.4 查看服务
|
||||
|
||||
查看Spark的Web-UI页面,端口为`8080`。此时可以看到hadoop001上的Master节点处于`ALIVE`状态,并有3个可用的`Worker`节点。
|
||||
查看 Spark 的 Web-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>
|
||||
|
||||
而hadoop002和hadoop003上的Master节点均处于`STANDBY`状态,没有可用的`Worker`节点。
|
||||
而 hadoop002 和 hadoop003 上的 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 \
|
||||
|
@ -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/Linux下JDK安装.md)
|
||||
+ [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux 下 JDK 安装.md)
|
||||
|
||||
+ [Linux环境下Python安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下Python安装.md)
|
||||
+ [Linux 环境下 Python 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux 下 Python 安装.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>
|
||||
|
@ -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/Linux下JDK安装.md)
|
||||
- [Linux环境下Python安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下Python安装.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/Linux 下 JDK 安装.md)
|
||||
- [Linux 环境下 Python 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux 下 Python 安装.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/>
|
||||
|
||||
访问hadoop001或hadoop002的`8080`端口,界面如下。可以看到有一主一备2个`Nimbus`和3个`Supervisor`,并且每个`Supervisor`有四个`slots`,即四个可用的`worker`进程,此时代表集群已经搭建成功。
|
||||
访问 hadoop001 或 hadoop002 的 `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>
|
||||
|
@ -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集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。这里我使用三台主机进行搭建,主机名分别为hadoop001,hadoop002,hadoop003。
|
||||
为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。这里我使用三台主机进行搭建,主机名分别为 hadoop001,hadoop002,hadoop003。
|
||||
|
||||
### 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`查看集群各个节点状态。如图所示:三个节点进程均启动成功,并且hadoop002为leader节点,hadoop001和hadoop003为follower节点。
|
||||
启动后使用 `zkServer.sh status` 查看集群各个节点状态。如图所示:三个节点进程均启动成功,并且 hadoop002 为 leader 节点,hadoop001 和 hadoop003 为 follower 节点。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/zookeeper-hadoop001.png"/> </div>
|
||||
|
||||
|
@ -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,安装步骤可以参见:[Linux下JDK的安装](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,安装步骤可以参见:[Linux 下 JDK 的安装](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>
|
||||
<!-- 指定namenode的hdfs协议文件系统的通信地址 -->
|
||||
<!-- 指定 namenode 的 hdfs 协议文件系统的通信地址 -->
|
||||
<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>
|
||||
<!-- nn1的RPC通信地址 -->
|
||||
<!-- nn1 的 RPC 通信地址 -->
|
||||
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
|
||||
<value>hadoop001:8020</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- nn2的RPC通信地址 -->
|
||||
<!-- nn2 的 RPC 通信地址 -->
|
||||
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
|
||||
<value>hadoop002:8020</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- nn1的http通信地址 -->
|
||||
<!-- nn1 的 http 通信地址 -->
|
||||
<name>dfs.namenode.http-address.mycluster.nn1</name>
|
||||
<value>hadoop001:50070</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- nn2的http通信地址 -->
|
||||
<!-- nn2 的 http 通信地址 -->
|
||||
<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
|
||||
|
||||
HDFS和YARN的端口号分别为`50070`和`8080`,界面应该如下:
|
||||
HDFS 和 YARN 的端口号分别为 `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 高可用相关的服务,包括 NameNode,DataNode 和 JournalNode:
|
||||
在 ` hadoop001` 启动 HDFS,此时会启动所有与 HDFS 高可用相关的服务,包括 NameNode,DataNode 和 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)
|
||||
|
||||
|
@ -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配置,与zookeeper01,02相比,也只有`dataLogDir`和`dataLogDir`不同:
|
||||
zookeeper03 配置,与 zookeeper01,02 相比,也只有 `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 为首领副本,此时代表集群已经搭建成功。
|
||||
|
||||
|
||||
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user