新增离线版文档
This commit is contained in:
124
offline-notes/installation/Azkaban_3.x_编译及部署.md
Normal file
124
offline-notes/installation/Azkaban_3.x_编译及部署.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# Azkaban 3.x 编译及部署
|
||||
|
||||
<nav>
|
||||
<a href="#一Azkaban-源码编译">一、Azkaban 源码编译</a><br/>
|
||||
<a href="#二Azkaban-部署模式">二、Azkaban 部署模式</a><br/>
|
||||
<a href="#三-Solo-Server-模式部署">三、Solo Server 模式部署</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
## 一、Azkaban 源码编译
|
||||
|
||||
### 1.1 下载并解压
|
||||
|
||||
Azkaban 在 3.0 版本之后就不提供对应的安装包,需要自己下载源码进行编译。
|
||||
|
||||
下载所需版本的源码,Azkaban 的源码托管在 GitHub 上,地址为 https://github.com/azkaban/azkaban 。可以使用 `git clone` 的方式获取源码,也可以使用 `wget` 直接下载对应 release 版本的 `tar.gz` 文件,这里我采用第二种方式:
|
||||
|
||||
```shell
|
||||
# 下载
|
||||
wget https://github.com/azkaban/azkaban/archive/3.70.0.tar.gz
|
||||
# 解压
|
||||
tar -zxvf azkaban-3.70.0.tar.gz
|
||||
```
|
||||
|
||||
### 1.2 准备编译环境
|
||||
|
||||
#### 1. JDK
|
||||
|
||||
Azkaban 编译依赖 JDK 1.8+ ,JDK 安装方式见本仓库:
|
||||
|
||||
> [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 依赖 Gradle 版本不同,可以在解压后的 `/gradle/wrapper/gradle-wrapper.properties` 文件查看
|
||||
|
||||

|
||||
|
||||
在编译时程序会自动去图中所示的地址进行下载,但是下载速度很慢。为避免影响编译过程,建议先手动下载至 `/gradle/wrapper/` 目录下:
|
||||
|
||||
```shell
|
||||
# wget https://services.gradle.org/distributions/gradle-4.6-all.zip
|
||||
```
|
||||
|
||||
然后修改配置文件 `gradle-wrapper.properties` 中的 `distributionUrl` 属性,指明使用本地的 gradle。
|
||||
|
||||

|
||||
|
||||
#### 3. Git
|
||||
|
||||
Azkaban 的编译过程需要用 Git 下载部分 JAR 包,所以需要预先安装 Git:
|
||||
|
||||
```shell
|
||||
# yum install git
|
||||
```
|
||||
|
||||
### 1.3 项目编译
|
||||
|
||||
在根目录下执行编译命令,编译成功后会有 `BUILD SUCCESSFUL` 的提示:
|
||||
|
||||
```shell
|
||||
# ./gradlew build installDist -x test
|
||||
```
|
||||
|
||||
编译过程中需要注意以下问题:
|
||||
|
||||
+ 因为编译的过程需要下载大量的 Jar 包,下载速度根据网络情况而定,通常都不会很快,如果网络不好,耗费半个小时,一个小时都是很正常的;
|
||||
+ 编译过程中如果出现网络问题而导致 JAR 无法下载,编译可能会被强行终止,这时候重复执行编译命令即可,gradle 会把已经下载的 JAR 缓存到本地,所以不用担心会重复下载 JAR 包。
|
||||
|
||||
|
||||
|
||||
## 二、Azkaban 部署模式
|
||||
|
||||
>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 种运行模式:
|
||||
|
||||
+ **solo server model(单服务模式)** :元数据默认存放在内置的 H2 数据库(可以修改为 MySQL),该模式中 `webServer`(管理服务器) 和 `executorServer`(执行服务器) 运行在同一个进程中,进程名是 `AzkabanSingleServer`。该模式适用于小规模工作流的调度。
|
||||
- **multiple-executor(分布式多服务模式)** :存放元数据的数据库为 MySQL,MySQL 应采用主从模式进行备份和容错。这种模式下 `webServer` 和 `executorServer` 在不同进程中运行,彼此之间互不影响,适合用于生产环境。
|
||||
|
||||
下面主要介绍 `Solo Server` 模式。
|
||||
|
||||
|
||||
|
||||
## 三 、Solo Server 模式部署
|
||||
|
||||
### 2.1 解压
|
||||
|
||||
Solo Server 模式安装包在编译后的 `/azkaban-solo-server/build/distributions` 目录下,找到后进行解压即可:
|
||||
|
||||
```shell
|
||||
# 解压
|
||||
tar -zxvf azkaban-solo-server-3.70.0.tar.gz
|
||||
```
|
||||
|
||||
### 2.2 修改时区
|
||||
|
||||
这一步不是必须的。但是因为 Azkaban 默认采用的时区是 `America/Los_Angeles`,如果你的调度任务中有定时任务的话,就需要进行相应的更改,这里我更改为常用的 `Asia/Shanghai`
|
||||
|
||||

|
||||
|
||||
### 2.3 启动
|
||||
|
||||
执行启动命令,需要注意的是一定要在根目录下执行,不能进入 `bin` 目录下执行,不然会抛出 `Cannot find 'database.properties'` 异常。
|
||||
|
||||
```shell
|
||||
# bin/start-solo.sh
|
||||
```
|
||||
|
||||
### 2.4 验证
|
||||
|
||||
验证方式一:使用 `jps` 命令查看是否有 `AzkabanSingleServer` 进程:
|
||||
|
||||

|
||||
<br/>
|
||||
|
||||
验证方式二:访问 8081 端口,查看 Web UI 界面,默认的登录名密码都是 `azkaban`,如果需要修改或新增用户,可以在 `conf/azkaban-users.xml ` 文件中进行配置:
|
||||
|
||||

|
||||
|
||||
|
270
offline-notes/installation/Flink_Standalone_Cluster.md
Normal file
270
offline-notes/installation/Flink_Standalone_Cluster.md
Normal file
@@ -0,0 +1,270 @@
|
||||
# Flink Standalone Cluster
|
||||
<nav>
|
||||
<a href="#一部署模式">一、部署模式</a><br/>
|
||||
<a href="#二单机模式">二、单机模式</a><br/>
|
||||
<a href="#21-安装部署">2.1 安装部署</a><br/>
|
||||
<a href="#22-作业提交">2.2 作业提交</a><br/>
|
||||
<a href="#23-停止作业">2.3 停止作业</a><br/>
|
||||
<a href="#24-停止-Flink">2.4 停止 Flink </a><br/>
|
||||
<a href="#三Standalone-Cluster">三、Standalone Cluster</a><br/>
|
||||
<a href="#31-前置条件">3.1 前置条件</a><br/>
|
||||
<a href="#32-搭建步骤">3.2 搭建步骤</a><br/>
|
||||
<a href="#33-可选配置">3.3 可选配置</a><br/>
|
||||
<a href="#四Standalone-Cluster-HA">四、Standalone Cluster HA</a><br/>
|
||||
<a href="#41-前置条件">4.1 前置条件</a><br/>
|
||||
<a href="#42-搭建步骤">4.2 搭建步骤</a><br/>
|
||||
<a href="#43-常见异常">4.3 常见异常</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
## 一、部署模式
|
||||
|
||||
Flink 支持使用多种部署模式来满足不同规模应用的需求,常见的有单机模式,Standalone Cluster 模式,同时 Flink 也支持部署在其他第三方平台上,如 YARN,Mesos,Docker,Kubernetes 等。以下主要介绍其单机模式和 Standalone Cluster 模式的部署。
|
||||
|
||||
## 二、单机模式
|
||||
|
||||
单机模式是一种开箱即用的模式,可以在单台服务器上运行,适用于日常的开发和调试。具体操作步骤如下:
|
||||
|
||||
### 2.1 安装部署
|
||||
|
||||
**1. 前置条件**
|
||||
|
||||
Flink 的运行依赖 JAVA 环境,故需要预先安装好 JDK,具体步骤可以参考:[Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md)
|
||||
|
||||
**2. 下载 & 解压 & 运行**
|
||||
|
||||
Flink 所有版本的安装包可以直接从其[官网](https://flink.apache.org/downloads.html)进行下载,这里我下载的 Flink 的版本为 `1.9.1` ,要求的 JDK 版本为 `1.8.x +`。 下载后解压到指定目录:
|
||||
|
||||
```shell
|
||||
tar -zxvf flink-1.9.1-bin-scala_2.12.tgz -C /usr/app
|
||||
```
|
||||
|
||||
不需要进行任何配置,直接使用以下命令就可以启动单机版本的 Flink:
|
||||
|
||||
```shell
|
||||
bin/start-cluster.sh
|
||||
```
|
||||
|
||||
**3. WEB UI 界面**
|
||||
|
||||
Flink 提供了 WEB 界面用于直观的管理 Flink 集群,访问端口为 `8081`:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
Flink 的 WEB UI 界面支持大多数常用功能,如提交作业,取消作业,查看各个节点运行情况,查看作业执行情况等,大家可以在部署完成后,进入该页面进行详细的浏览。
|
||||
|
||||
### 2.2 作业提交
|
||||
|
||||
启动后可以运行安装包中自带的词频统计案例,具体步骤如下:
|
||||
|
||||
**1. 开启端口**
|
||||
|
||||
```shell
|
||||
nc -lk 9999
|
||||
```
|
||||
|
||||
**2. 提交作业**
|
||||
|
||||
```shell
|
||||
bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9999
|
||||
```
|
||||
|
||||
该 JAR 包的源码可以在 Flink 官方的 GitHub 仓库中找到,地址为 :[SocketWindowWordCount](https://github.com/apache/flink/blob/master/flink-examples/flink-examples-streaming/src/main/java/org/apache/flink/streaming/examples/socket/SocketWindowWordCount.java) ,可选传参有 hostname, port,对应的词频数据需要使用空格进行分割。
|
||||
|
||||
**3. 输入测试数据**
|
||||
|
||||
```shell
|
||||
a a b b c c c a e
|
||||
```
|
||||
|
||||
**4. 查看控制台输出**
|
||||
|
||||
可以通过 WEB UI 的控制台查看作业统运行情况:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
也可以通过 WEB 控制台查看到统计结果:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 2.3 停止作业
|
||||
|
||||
可以直接在 WEB 界面上点击对应作业的 `Cancel Job` 按钮进行取消,也可以使用命令行进行取消。使用命令行进行取消时,需要先获取到作业的 JobId,可以使用 `flink list` 命令查看,输出如下:
|
||||
|
||||
```shell
|
||||
[root@hadoop001 flink-1.9.1]# ./bin/flink list
|
||||
Waiting for response...
|
||||
------------------ Running/Restarting Jobs -------------------
|
||||
05.11.2019 08:19:53 : ba2b1cc41a5e241c32d574c93de8a2bc : Socket Window WordCount (RUNNING)
|
||||
--------------------------------------------------------------
|
||||
No scheduled jobs.
|
||||
```
|
||||
|
||||
获取到 JobId 后,就可以使用 `flink cancel` 命令取消作业:
|
||||
|
||||
```shell
|
||||
bin/flink cancel ba2b1cc41a5e241c32d574c93de8a2bc
|
||||
```
|
||||
|
||||
### 2.4 停止 Flink
|
||||
|
||||
命令如下:
|
||||
|
||||
```shell
|
||||
bin/stop-cluster.sh
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 三、Standalone Cluster
|
||||
|
||||
Standalone Cluster 模式是 Flink 自带的一种集群模式,具体配置步骤如下:
|
||||
|
||||
### 3.1 前置条件
|
||||
|
||||
使用该模式前,需要确保所有服务器间都已经配置好 SSH 免密登录服务。这里我以三台服务器为例,主机名分别为 hadoop001,hadoop002,hadoop003 , 其中 hadoop001 为 master 节点,其余两台为 slave 节点,搭建步骤如下:
|
||||
|
||||
### 3.2 搭建步骤
|
||||
|
||||
修改 `conf/flink-conf.yaml` 中 jobmanager 节点的通讯地址为 hadoop001:
|
||||
|
||||
```yaml
|
||||
jobmanager.rpc.address: hadoop001
|
||||
```
|
||||
|
||||
修改 `conf/slaves` 配置文件,将 hadoop002 和 hadoop003 配置为 slave 节点:
|
||||
|
||||
```shell
|
||||
hadoop002
|
||||
hadoop003
|
||||
```
|
||||
|
||||
将配置好的 Flink 安装包分发到其他两台服务器上:
|
||||
|
||||
```shell
|
||||
scp -r /usr/app/flink-1.9.1 hadoop002:/usr/app
|
||||
scp -r /usr/app/flink-1.9.1 hadoop003:/usr/app
|
||||
```
|
||||
|
||||
在 hadoop001 上使用和单机模式相同的命令来启动集群:
|
||||
|
||||
```shell
|
||||
bin/start-cluster.sh
|
||||
```
|
||||
|
||||
此时控制台输出如下:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
启动完成后可以使用 `Jps` 命令或者通过 WEB 界面来查看是否启动成功。
|
||||
|
||||
### 3.3 可选配置
|
||||
|
||||
除了上面介绍的 *jobmanager.rpc.address* 是必选配置外,Flink h还支持使用其他可选参数来优化集群性能,主要如下:
|
||||
|
||||
- **jobmanager.heap.size**:JobManager 的 JVM 堆内存大小,默认为 1024m 。
|
||||
- **taskmanager.heap.size**:Taskmanager 的 JVM 堆内存大小,默认为 1024m 。
|
||||
- **taskmanager.numberOfTaskSlots**:Taskmanager 上 slots 的数量,通常设置为 CPU 核心的数量,或其一半。
|
||||
- **parallelism.default**:任务默认的并行度。
|
||||
- **io.tmp.dirs**:存储临时文件的路径,如果没有配置,则默认采用服务器的临时目录,如 LInux 的 `/tmp` 目录。
|
||||
|
||||
更多配置可以参考 Flink 的官方手册:[Configuration](https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/config.html)
|
||||
|
||||
## 四、Standalone Cluster HA
|
||||
|
||||
上面我们配置的 Standalone 集群实际上只有一个 JobManager,此时是存在单点故障的,所以官方提供了 Standalone Cluster HA 模式来实现集群高可用。
|
||||
|
||||
### 4.1 前置条件
|
||||
|
||||
在 Standalone Cluster HA 模式下,集群可以由多个 JobManager,但只有一个处于 active 状态,其余的则处于备用状态,Flink 使用 ZooKeeper 来选举出 Active JobManager,并依赖其来提供一致性协调服务,所以需要预先安装 ZooKeeper 。
|
||||
|
||||
另外在高可用模式下,还需要使用分布式文件系统来持久化存储 JobManager 的元数据,最常用的就是 HDFS,所以 Hadoop 也需要预先安装。关于 Hadoop 集群和 ZooKeeper 集群的搭建可以参考:
|
||||
|
||||
+ [Hadoop 集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop集群环境搭建.md)
|
||||
+ [Zookeeper 单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md)
|
||||
|
||||
### 4.2 搭建步骤
|
||||
|
||||
修改 `conf/flink-conf.yaml` 文件,增加如下配置:
|
||||
|
||||
```yaml
|
||||
# 配置使用zookeeper来开启高可用模式
|
||||
high-availability: zookeeper
|
||||
# 配置zookeeper的地址,采用zookeeper集群时,可以使用逗号来分隔多个节点地址
|
||||
high-availability.zookeeper.quorum: hadoop003:2181
|
||||
# 在zookeeper上存储flink集群元信息的路径
|
||||
high-availability.zookeeper.path.root: /flink
|
||||
# 集群id
|
||||
high-availability.cluster-id: /standalone_cluster_one
|
||||
# 持久化存储JobManager元数据的地址,zookeeper上存储的只是指向该元数据的指针信息
|
||||
high-availability.storageDir: hdfs://hadoop001:8020/flink/recovery
|
||||
```
|
||||
|
||||
修改 `conf/masters` 文件,将 hadoop001 和 hadoop002 都配置为 master 节点:
|
||||
|
||||
```shell
|
||||
hadoop001:8081
|
||||
hadoop002:8081
|
||||
```
|
||||
|
||||
确保 Hadoop 和 ZooKeeper 已经启动后,使用以下命令来启动集群:
|
||||
|
||||
```shell
|
||||
bin/start-cluster.sh
|
||||
```
|
||||
|
||||
此时输出如下:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
可以看到集群已经以 HA 的模式启动,此时还需要在各个节点上使用 `jps` 命令来查看进程是否启动成功,正常情况如下:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
只有 hadoop001 和 hadoop002 的 JobManager 进程,hadoop002 和 hadoop003 上的 TaskManager 进程都已经完全启动,才表示 Standalone Cluster HA 模式搭建成功。
|
||||
|
||||
### 4.3 常见异常
|
||||
|
||||
如果进程没有启动,可以通过查看 `log` 目录下的日志来定位错误,常见的一个错误如下:
|
||||
|
||||
```shell
|
||||
2019-11-05 09:18:35,877 INFO org.apache.flink.runtime.entrypoint.ClusterEntrypoint
|
||||
- Shutting StandaloneSessionClusterEntrypoint down with application status FAILED. Diagnostics
|
||||
java.io.IOException: Could not create FileSystem for highly available storage (high-availability.storageDir)
|
||||
.......
|
||||
Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Could not find a file
|
||||
system implementation for scheme 'hdfs'. The scheme is not directly supported by Flink and no
|
||||
Hadoop file system to support this scheme could be loaded.
|
||||
.....
|
||||
Caused by: org.apache.flink.core.fs.UnsupportedFileSystemSchemeException: Hadoop is not in
|
||||
the classpath/dependencies.
|
||||
......
|
||||
```
|
||||
|
||||
可以看到是因为在 classpath 目录下找不到 Hadoop 的相关依赖,此时需要检查是否在环境变量中配置了 Hadoop 的安装路径,如果路径已经配置但仍然存在上面的问题,可以从 [Flink 官网](https://flink.apache.org/downloads.html)下载对应版本的 Hadoop 组件包:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
下载完成后,将该 JAR 包上传至**所有** Flink 安装目录的 `lib` 目录即可。
|
||||
|
||||
|
||||
|
||||
## 参考资料
|
||||
|
||||
+ [Standalone Cluster](https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/deployment/cluster_setup.html#standalone-cluster)
|
||||
+ [JobManager High Availability (HA)](https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/jobmanager_high_availability.html)
|
||||
|
227
offline-notes/installation/HBase单机环境搭建.md
Normal file
227
offline-notes/installation/HBase单机环境搭建.md
Normal file
@@ -0,0 +1,227 @@
|
||||
# HBase基本环境搭建
|
||||
|
||||
<nav>
|
||||
<a href="#一安装前置条件说明">一、安装前置条件说明</a><br/>
|
||||
<a href="#二Standalone-模式">二、Standalone 模式</a><br/>
|
||||
<a href="#三伪集群模式安装Pseudo-Distributed">三、伪集群模式安装(Pseudo-Distributed)</a><br/>
|
||||
</nav>
|
||||
|
||||
## 一、安装前置条件说明
|
||||
|
||||
### 1.1 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)
|
||||
|
||||
### 1.2 Standalone模式和伪集群模式的区别
|
||||
|
||||
+ 在 `Standalone` 模式下,所有守护进程都运行在一个 `jvm` 进程/实例中;
|
||||
+ 在伪分布模式下,HBase 仍然在单个主机上运行,但是每个守护进程 (HMaster,HRegionServer 和 ZooKeeper) 则分别作为一个单独的进程运行。
|
||||
|
||||
**说明:两种模式任选其一进行部署即可,对于开发测试来说区别不大。**
|
||||
|
||||
|
||||
|
||||
## 二、Standalone 模式
|
||||
|
||||
### 2.1 下载并解压
|
||||
|
||||
从[官方网站](https://hbase.apache.org/downloads.html) 下载所需要版本的二进制安装包,并进行解压:
|
||||
|
||||
```shell
|
||||
# tar -zxvf hbase-2.1.4-bin.tar.gz
|
||||
```
|
||||
|
||||
### 2.2 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export HBASE_HOME=/usr/app/hbase-2.1.4
|
||||
export PATH=$HBASE_HOME/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 2.3 进行HBase相关配置
|
||||
|
||||
修改安装目录下的 `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`,增加如下配置:
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<name>hbase.rootdir</name>
|
||||
<value>file:///home/hbase/rootdir</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>hbase.zookeeper.property.dataDir</name>
|
||||
<value>/home/zookeeper/dataDir</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>hbase.unsafe.stream.capability.enforce</name>
|
||||
<value>false</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
`hbase.rootdir`: 配置 hbase 数据的存储路径;
|
||||
|
||||
`hbase.zookeeper.property.dataDir`: 配置 zookeeper 数据的存储路径;
|
||||
|
||||
`hbase.unsafe.stream.capability.enforce`: 使用本地文件系统存储,不使用 HDFS 的情况下需要禁用此配置,设置为 false。
|
||||
|
||||
### 2.4 启动HBase
|
||||
|
||||
由于已经将 HBase 的 bin 目录配置到环境变量,直接使用以下命令启动:
|
||||
|
||||
```shell
|
||||
# start-hbase.sh
|
||||
```
|
||||
|
||||
### 2.5 验证启动是否成功
|
||||
|
||||
验证方式一 :使用 `jps` 命令查看 HMaster 进程是否启动。
|
||||
|
||||
```
|
||||
[root@hadoop001 hbase-2.1.4]# jps
|
||||
16336 Jps
|
||||
15500 HMaster
|
||||
```
|
||||
|
||||
验证方式二 :访问 HBaseWeb UI 页面,默认端口为 `16010` 。
|
||||
|
||||

|
||||
|
||||
|
||||
## 三、伪集群模式安装(Pseudo-Distributed)
|
||||
|
||||
### 3.1 Hadoop单机伪集群安装
|
||||
|
||||
这里我们采用 HDFS 作为 HBase 的存储方案,需要预先安装 Hadoop。Hadoop 的安装方式单独整理至:
|
||||
|
||||
> [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` 。所有软件版本如下:
|
||||
|
||||
+ Hadoop 版本: hadoop-2.6.0-cdh5.15.2
|
||||
+ HBase 版本: hbase-1.2.0-cdh5.15.2
|
||||
+ JDK 版本:JDK 1.8
|
||||
|
||||
|
||||
|
||||
### 3.3 软件下载解压
|
||||
|
||||
下载后进行解压,下载地址:http://archive.cloudera.com/cdh5/cdh/5/
|
||||
|
||||
```shell
|
||||
# tar -zxvf hbase-1.2.0-cdh5.15.2.tar.gz
|
||||
```
|
||||
|
||||
### 3.4 配置环境变量
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export HBASE_HOME=/usr/app/hbase-1.2.0-cdh5.15.2
|
||||
export PATH=$HBASE_HOME/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
### 3.5 进行HBase相关配置
|
||||
|
||||
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 为主机名):
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<!--指定 HBase 以分布式模式运行-->
|
||||
<property>
|
||||
<name>hbase.cluster.distributed</name>
|
||||
<value>true</value>
|
||||
</property>
|
||||
<!--指定 HBase 数据存储路径为 HDFS 上的 hbase 目录,hbase 目录不需要预先创建,程序会自动创建-->
|
||||
<property>
|
||||
<name>hbase.rootdir</name>
|
||||
<value>hdfs://hadoop001:8020/hbase</value>
|
||||
</property>
|
||||
<!--指定 zookeeper 数据的存储位置-->
|
||||
<property>
|
||||
<name>hbase.zookeeper.property.dataDir</name>
|
||||
<value>/home/zookeeper/dataDir</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
3.修改安装目录下的 `conf/regionservers`,指定 region servers 的地址,修改后其内容如下:
|
||||
|
||||
```shell
|
||||
hadoop001
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.6 启动
|
||||
|
||||
```shell
|
||||
# bin/start-hbase.sh
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.7 验证启动是否成功
|
||||
|
||||
验证方式一 :使用 `jps` 命令查看进程。其中 `HMaster`,`HRegionServer` 是 HBase 的进程,`HQuorumPeer` 是 HBase 内置的 Zookeeper 的进程,其余的为 HDFS 和 YARN 的进程。
|
||||
|
||||
```shell
|
||||
[root@hadoop001 conf]# jps
|
||||
28688 NodeManager
|
||||
25824 GradleDaemon
|
||||
10177 Jps
|
||||
22083 HRegionServer
|
||||
20534 DataNode
|
||||
20807 SecondaryNameNode
|
||||
18744 Main
|
||||
20411 NameNode
|
||||
21851 HQuorumPeer
|
||||
28573 ResourceManager
|
||||
21933 HMaster
|
||||
```
|
||||
|
||||
验证方式二 :访问 HBase Web UI 界面,需要注意的是 1.2 版本的 HBase 的访问端口为 `60010`
|
||||
|
||||

|
200
offline-notes/installation/HBase集群环境搭建.md
Normal file
200
offline-notes/installation/HBase集群环境搭建.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# HBase集群环境配置
|
||||
|
||||
<nav>
|
||||
<a href="#一集群规划">一、集群规划</a><br/>
|
||||
<a href="#二前置条件">二、前置条件</a><br/>
|
||||
<a href="#三集群搭建">三、集群搭建</a><br/>
|
||||
<a href="#31-下载并解压">3.1 下载并解压</a><br/>
|
||||
<a href="#32-配置环境变量">3.2 配置环境变量</a><br/>
|
||||
<a href="#33-集群配置">3.3 集群配置</a><br/>
|
||||
<a href="#34-HDFS客户端配置">3.4 HDFS客户端配置</a><br/>
|
||||
<a href="#35-安装包分发">3.5 安装包分发</a><br/>
|
||||
<a href="#四启动集群">四、启动集群</a><br/>
|
||||
<a href="#41-启动ZooKeeper集群">4.1 启动ZooKeeper集群</a><br/>
|
||||
<a href="#42-启动Hadoop集群">4.2 启动Hadoop集群</a><br/>
|
||||
<a href="#43-启动HBase集群">4.3 启动HBase集群</a><br/>
|
||||
<a href="#45-查看服务">4.5 查看服务</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
## 一、集群规划
|
||||
|
||||
这里搭建一个 3 节点的 HBase 集群,其中三台主机上均为 `Regin Server`。同时为了保证高可用,除了在 hadoop001 上部署主 `Master` 服务外,还在 hadoop002 上部署备用的 `Master` 服务。Master 服务由 Zookeeper 集群进行协调管理,如果主 `Master` 不可用,则备用 `Master` 会成为新的主 `Master`。
|
||||
|
||||

|
||||
|
||||
## 二、前置条件
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
||||
## 三、集群搭建
|
||||
|
||||
### 3.1 下载并解压
|
||||
|
||||
下载并解压,这里我下载的是 CDH 版本 HBase,下载地址为:http://archive.cloudera.com/cdh5/cdh/5/
|
||||
|
||||
```shell
|
||||
# tar -zxvf hbase-1.2.0-cdh5.15.2.tar.gz
|
||||
```
|
||||
|
||||
### 3.2 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export HBASE_HOME=usr/app/hbase-1.2.0-cdh5.15.2
|
||||
export PATH=$HBASE_HOME/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量立即生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 3.3 集群配置
|
||||
|
||||
进入 `${HBASE_HOME}/conf` 目录下,修改配置:
|
||||
|
||||
#### 1. hbase-env.sh
|
||||
|
||||
```shell
|
||||
# 配置JDK安装位置
|
||||
export JAVA_HOME=/usr/java/jdk1.8.0_201
|
||||
# 不使用内置的zookeeper服务
|
||||
export HBASE_MANAGES_ZK=false
|
||||
```
|
||||
|
||||
#### 2. hbase-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!-- 指定 hbase 以分布式集群的方式运行 -->
|
||||
<name>hbase.cluster.distributed</name>
|
||||
<value>true</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 指定 hbase 在 HDFS 上的存储位置 -->
|
||||
<name>hbase.rootdir</name>
|
||||
<value>hdfs://hadoop001:8020/hbase</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 指定 zookeeper 的地址-->
|
||||
<name>hbase.zookeeper.quorum</name>
|
||||
<value>hadoop001:2181,hadoop002:2181,hadoop003:2181</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 3. regionservers
|
||||
|
||||
```
|
||||
hadoop001
|
||||
hadoop002
|
||||
hadoop003
|
||||
```
|
||||
|
||||
#### 4. backup-masters
|
||||
|
||||
```
|
||||
hadoop002
|
||||
```
|
||||
|
||||
` backup-masters` 这个文件是不存在的,需要新建,主要用来指明备用的 master 节点,可以是多个,这里我们以 1 个为例。
|
||||
|
||||
### 3.4 HDFS客户端配置
|
||||
|
||||
这里有一个可选的配置:如果您在 Hadoop 集群上进行了 HDFS 客户端配置的更改,比如将副本系数 `dfs.replication` 设置成 5,则必须使用以下方法之一来使 HBase 知道,否则 HBase 将依旧使用默认的副本系数 3 来创建文件:
|
||||
|
||||
> 1. Add a pointer to your `HADOOP_CONF_DIR` to the `HBASE_CLASSPATH` environment variable in *hbase-env.sh*.
|
||||
> 2. Add a copy of *hdfs-site.xml* (or *hadoop-site.xml*) or, better, symlinks, under *${HBASE_HOME}/conf*, or
|
||||
> 3. if only a small set of HDFS client configurations, add them to *hbase-site.xml*.
|
||||
|
||||
以上是官方文档的说明,这里解释一下:
|
||||
|
||||
**第一种** :将 Hadoop 配置文件的位置信息添加到 `hbase-env.sh` 的 `HBASE_CLASSPATH` 属性,示例如下:
|
||||
|
||||
```shell
|
||||
export HBASE_CLASSPATH=usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop
|
||||
```
|
||||
|
||||
**第二种** :将 Hadoop 的 ` hdfs-site.xml` 或 `hadoop-site.xml` 拷贝到 `${HBASE_HOME}/conf ` 目录下,或者通过符号链接的方式。如果采用这种方式的话,建议将两者都拷贝或建立符号链接,示例如下:
|
||||
|
||||
```shell
|
||||
# 拷贝
|
||||
cp core-site.xml hdfs-site.xml /usr/app/hbase-1.2.0-cdh5.15.2/conf/
|
||||
# 使用符号链接
|
||||
ln -s /usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop/core-site.xml
|
||||
ln -s /usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop/hdfs-site.xml
|
||||
```
|
||||
|
||||
> 注:`hadoop-site.xml` 这个配置文件现在叫做 `core-site.xml`
|
||||
|
||||
**第三种** :如果你只有少量更改,那么直接配置到 `hbase-site.xml` 中即可。
|
||||
|
||||
|
||||
|
||||
### 3.5 安装包分发
|
||||
|
||||
将 HBase 的安装包分发到其他服务器,分发后建议在这两台服务器上也配置一下 HBase 的环境变量。
|
||||
|
||||
```shell
|
||||
scp -r /usr/app/hbase-1.2.0-cdh5.15.2/ hadoop002:usr/app/
|
||||
scp -r /usr/app/hbase-1.2.0-cdh5.15.2/ hadoop003:usr/app/
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 四、启动集群
|
||||
|
||||
### 4.1 启动ZooKeeper集群
|
||||
|
||||
分别到三台服务器上启动 ZooKeeper 服务:
|
||||
|
||||
```shell
|
||||
zkServer.sh start
|
||||
```
|
||||
|
||||
### 4.2 启动Hadoop集群
|
||||
|
||||
```shell
|
||||
# 启动dfs服务
|
||||
start-dfs.sh
|
||||
# 启动yarn服务
|
||||
start-yarn.sh
|
||||
```
|
||||
|
||||
### 4.3 启动HBase集群
|
||||
|
||||
进入 hadoop001 的 `${HBASE_HOME}/bin`,使用以下命令启动 HBase 集群。执行此命令后,会在 hadoop001 上启动 `Master` 服务,在 hadoop002 上启动备用 `Master` 服务,在 `regionservers` 文件中配置的所有节点启动 `region server` 服务。
|
||||
|
||||
```shell
|
||||
start-hbase.sh
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 4.5 查看服务
|
||||
|
||||
访问 HBase 的 Web-UI 界面,这里我安装的 HBase 版本为 1.2,访问端口为 `60010`,如果你安装的是 2.0 以上的版本,则访问端口号为 `16010`。可以看到 `Master` 在 hadoop001 上,三个 `Regin Servers` 分别在 hadoop001,hadoop002,和 hadoop003 上,并且还有一个 `Backup Matser` 服务在 hadoop002 上。
|
||||
|
||||

|
||||
<br/>
|
||||
|
||||
hadoop002 上的 HBase 出于备用状态:
|
||||
|
||||
<br/>
|
||||
|
||||

|
262
offline-notes/installation/Hadoop单机环境搭建.md
Normal file
262
offline-notes/installation/Hadoop单机环境搭建.md
Normal file
@@ -0,0 +1,262 @@
|
||||
# Hadoop单机版环境搭建
|
||||
|
||||
<nav>
|
||||
<a href="#一前置条件">一、前置条件</a><br/>
|
||||
<a href="#二配置-SSH-免密登录">二、配置 SSH 免密登录</a><br/>
|
||||
<a href="#三HadoopHDFS环境搭建">三、Hadoop(HDFS)环境搭建</a><br/>
|
||||
<a href="#四HadoopYARN环境搭建">四、Hadoop(YARN)环境搭建</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
|
||||
## 一、前置条件
|
||||
|
||||
Hadoop 的运行依赖 JDK,需要预先安装,安装步骤见:
|
||||
|
||||
+ [Linux 下 JDK 的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md)
|
||||
|
||||
|
||||
|
||||
## 二、配置免密登录
|
||||
|
||||
Hadoop 组件之间需要基于 SSH 进行通讯。
|
||||
|
||||
#### 2.1 配置映射
|
||||
|
||||
配置 ip 地址和主机名映射:
|
||||
|
||||
```shell
|
||||
vim /etc/hosts
|
||||
# 文件末尾增加
|
||||
192.168.43.202 hadoop001
|
||||
```
|
||||
|
||||
### 2.2 生成公私钥
|
||||
|
||||
执行下面命令行生成公匙和私匙:
|
||||
|
||||
```
|
||||
ssh-keygen -t rsa
|
||||
```
|
||||
|
||||
### 3.3 授权
|
||||
|
||||
进入 `~/.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
|
||||
```
|
||||
|
||||
```shell
|
||||
# 写入公匙到授权文件
|
||||
[root@hadoop001 .ssh]# cat id_rsa.pub >> authorized_keys
|
||||
[root@hadoop001 .ssh]# chmod 600 authorized_keys
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 三、Hadoop(HDFS)环境搭建
|
||||
|
||||
|
||||
|
||||
### 3.1 下载并解压
|
||||
|
||||
下载 Hadoop 安装包,这里我下载的是 CDH 版本的,下载地址为:http://archive.cloudera.com/cdh5/cdh/5/
|
||||
|
||||
```shell
|
||||
# 解压
|
||||
tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.2 配置环境变量
|
||||
|
||||
```shell
|
||||
# vi /etc/profile
|
||||
```
|
||||
|
||||
配置环境变量:
|
||||
|
||||
```
|
||||
export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
|
||||
export PATH=${HADOOP_HOME}/bin:$PATH
|
||||
```
|
||||
|
||||
执行 `source` 命令,使得配置的环境变量立即生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.3 修改Hadoop配置
|
||||
|
||||
进入 `${HADOOP_HOME}/etc/hadoop/ ` 目录下,修改以下配置:
|
||||
|
||||
#### 1. hadoop-env.sh
|
||||
|
||||
```shell
|
||||
# JDK安装路径
|
||||
export JAVA_HOME=/usr/java/jdk1.8.0_201/
|
||||
```
|
||||
|
||||
#### 2. core-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
|
||||
<name>fs.defaultFS</name>
|
||||
<value>hdfs://hadoop001:8020</value>
|
||||
</property>
|
||||
<property>
|
||||
<!--指定 hadoop 存储临时文件的目录-->
|
||||
<name>hadoop.tmp.dir</name>
|
||||
<value>/home/hadoop/tmp</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 3. hdfs-site.xml
|
||||
|
||||
指定副本系数和临时文件存储位置:
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!--由于我们这里搭建是单机版本,所以指定 dfs 的副本系数为 1-->
|
||||
<name>dfs.replication</name>
|
||||
<value>1</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 4. slaves
|
||||
|
||||
配置所有从属节点的主机名或 IP 地址,由于是单机版本,所以指定本机即可:
|
||||
|
||||
```shell
|
||||
hadoop001
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.4 关闭防火墙
|
||||
|
||||
不关闭防火墙可能导致无法访问 Hadoop 的 Web UI 界面:
|
||||
|
||||
```shell
|
||||
# 查看防火墙状态
|
||||
sudo firewall-cmd --state
|
||||
# 关闭防火墙:
|
||||
sudo systemctl stop firewalld.service
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.5 初始化
|
||||
|
||||
第一次启动 Hadoop 时需要进行初始化,进入 `${HADOOP_HOME}/bin/` 目录下,执行以下命令:
|
||||
|
||||
```shell
|
||||
[root@hadoop001 bin]# ./hdfs namenode -format
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.6 启动HDFS
|
||||
|
||||
进入 `${HADOOP_HOME}/sbin/` 目录下,启动 HDFS:
|
||||
|
||||
```shell
|
||||
[root@hadoop001 sbin]# ./start-dfs.sh
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.7 验证是否启动成功
|
||||
|
||||
方式一:执行 `jps` 查看 `NameNode` 和 `DataNode` 服务是否已经启动:
|
||||
|
||||
```shell
|
||||
[root@hadoop001 hadoop-2.6.0-cdh5.15.2]# jps
|
||||
9137 DataNode
|
||||
9026 NameNode
|
||||
9390 SecondaryNameNode
|
||||
```
|
||||
|
||||
|
||||
|
||||
方式二:查看 Web UI 界面,端口为 `50070`:
|
||||
|
||||

|
||||
|
||||
|
||||
## 四、Hadoop(YARN)环境搭建
|
||||
|
||||
### 4.1 修改配置
|
||||
|
||||
进入 `${HADOOP_HOME}/etc/hadoop/ ` 目录下,修改以下配置:
|
||||
|
||||
#### 1. mapred-site.xml
|
||||
|
||||
```shell
|
||||
# 如果没有mapred-site.xml,则拷贝一份样例文件后再修改
|
||||
cp mapred-site.xml.template mapred-site.xml
|
||||
```
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<name>mapreduce.framework.name</name>
|
||||
<value>yarn</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 2. yarn-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
|
||||
<name>yarn.nodemanager.aux-services</name>
|
||||
<value>mapreduce_shuffle</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 4.2 启动服务
|
||||
|
||||
进入 `${HADOOP_HOME}/sbin/` 目录下,启动 YARN:
|
||||
|
||||
```shell
|
||||
./start-yarn.sh
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 4.3 验证是否启动成功
|
||||
|
||||
方式一:执行 `jps` 命令查看 `NodeManager` 和 `ResourceManager` 服务是否已经启动:
|
||||
|
||||
```shell
|
||||
[root@hadoop001 hadoop-2.6.0-cdh5.15.2]# jps
|
||||
9137 DataNode
|
||||
9026 NameNode
|
||||
12294 NodeManager
|
||||
12185 ResourceManager
|
||||
9390 SecondaryNameNode
|
||||
```
|
||||
|
||||
方式二:查看 Web UI 界面,端口号为 `8088`:
|
||||
|
||||

|
233
offline-notes/installation/Hadoop集群环境搭建.md
Normal file
233
offline-notes/installation/Hadoop集群环境搭建.md
Normal file
@@ -0,0 +1,233 @@
|
||||
# Hadoop集群环境搭建
|
||||
|
||||
<nav>
|
||||
<a href="#一集群规划">一、集群规划</a><br/>
|
||||
<a href="#二前置条件">二、前置条件</a><br/>
|
||||
<a href="#三配置免密登录">三、配置免密登录</a><br/>
|
||||
<a href="#31-生成密匙">3.1 生成密匙</a><br/>
|
||||
<a href="#32-免密登录">3.2 免密登录</a><br/>
|
||||
<a href="#33-验证免密登录">3.3 验证免密登录</a><br/>
|
||||
<a href="#四集群搭建">四、集群搭建</a><br/>
|
||||
<a href="#31-下载并解压">3.1 下载并解压</a><br/>
|
||||
<a href="#32-配置环境变量">3.2 配置环境变量</a><br/>
|
||||
<a href="#33-修改配置">3.3 修改配置</a><br/>
|
||||
<a href="#34-分发程序">3.4 分发程序</a><br/>
|
||||
<a href="#35--初始化">3.5 初始化</a><br/>
|
||||
<a href="#36-启动集群">3.6 启动集群</a><br/>
|
||||
<a href="#37-查看集群">3.7 查看集群</a><br/>
|
||||
<a href="#五提交服务到集群">五、提交服务到集群</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
## 一、集群规划
|
||||
|
||||
这里搭建一个 3 节点的 Hadoop 集群,其中三台主机均部署 `DataNode` 和 `NodeManager` 服务,但只有 hadoop001 上部署 `NameNode` 和 `ResourceManager` 服务。
|
||||
|
||||

|
||||
|
||||
## 二、前置条件
|
||||
|
||||
Hadoop 的运行依赖 JDK,需要预先安装。其安装步骤单独整理至:
|
||||
|
||||
+ [Linux 下 JDK 的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md)
|
||||
|
||||
|
||||
|
||||
## 三、配置免密登录
|
||||
|
||||
### 3.1 生成密匙
|
||||
|
||||
在每台主机上使用 `ssh-keygen` 命令生成公钥私钥对:
|
||||
|
||||
```shell
|
||||
ssh-keygen
|
||||
```
|
||||
|
||||
### 3.2 免密登录
|
||||
|
||||
将 `hadoop001` 的公钥写到本机和远程机器的 ` ~/ .ssh/authorized_key` 文件中:
|
||||
|
||||
```shell
|
||||
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001
|
||||
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002
|
||||
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003
|
||||
```
|
||||
|
||||
### 3.3 验证免密登录
|
||||
|
||||
```she
|
||||
ssh hadoop002
|
||||
ssh hadoop003
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 四、集群搭建
|
||||
|
||||
### 3.1 下载并解压
|
||||
|
||||
下载 Hadoop。这里我下载的是 CDH 版本 Hadoop,下载地址为:http://archive.cloudera.com/cdh5/cdh/5/
|
||||
|
||||
```shell
|
||||
# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz
|
||||
```
|
||||
|
||||
### 3.2 配置环境变量
|
||||
|
||||
编辑 `profile` 文件:
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
增加如下配置:
|
||||
|
||||
```
|
||||
export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
|
||||
export PATH=${HADOOP_HOME}/bin:$PATH
|
||||
```
|
||||
|
||||
执行 `source` 命令,使得配置立即生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 3.3 修改配置
|
||||
|
||||
进入 `${HADOOP_HOME}/etc/hadoop` 目录下,修改配置文件。各个配置文件内容如下:
|
||||
|
||||
#### 1. hadoop-env.sh
|
||||
|
||||
```shell
|
||||
# 指定JDK的安装位置
|
||||
export JAVA_HOME=/usr/java/jdk1.8.0_201/
|
||||
```
|
||||
|
||||
#### 2. core-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
|
||||
<name>fs.defaultFS</name>
|
||||
<value>hdfs://hadoop001:8020</value>
|
||||
</property>
|
||||
<property>
|
||||
<!--指定 hadoop 集群存储临时文件的目录-->
|
||||
<name>hadoop.tmp.dir</name>
|
||||
<value>/home/hadoop/tmp</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 3. hdfs-site.xml
|
||||
|
||||
```xml
|
||||
<property>
|
||||
<!--namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔-->
|
||||
<name>dfs.namenode.name.dir</name>
|
||||
<value>/home/hadoop/namenode/data</value>
|
||||
</property>
|
||||
<property>
|
||||
<!--datanode 节点数据(即数据块)的存放位置-->
|
||||
<name>dfs.datanode.data.dir</name>
|
||||
<value>/home/hadoop/datanode/data</value>
|
||||
</property>
|
||||
```
|
||||
|
||||
#### 4. yarn-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
|
||||
<name>yarn.nodemanager.aux-services</name>
|
||||
<value>mapreduce_shuffle</value>
|
||||
</property>
|
||||
<property>
|
||||
<!--resourcemanager 的主机名-->
|
||||
<name>yarn.resourcemanager.hostname</name>
|
||||
<value>hadoop001</value>
|
||||
</property>
|
||||
</configuration>
|
||||
|
||||
```
|
||||
|
||||
#### 5. mapred-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!--指定 mapreduce 作业运行在 yarn 上-->
|
||||
<name>mapreduce.framework.name</name>
|
||||
<value>yarn</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 5. slaves
|
||||
|
||||
配置所有从属节点的主机名或 IP 地址,每行一个。所有从属节点上的 `DataNode` 服务和 `NodeManager` 服务都会被启动。
|
||||
|
||||
```properties
|
||||
hadoop001
|
||||
hadoop002
|
||||
hadoop003
|
||||
```
|
||||
|
||||
### 3.4 分发程序
|
||||
|
||||
将 Hadoop 安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下 Hadoop 的环境变量。
|
||||
|
||||
```shell
|
||||
# 将安装包分发到hadoop002
|
||||
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop002:/usr/app/
|
||||
# 将安装包分发到hadoop003
|
||||
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/
|
||||
```
|
||||
|
||||
### 3.5 初始化
|
||||
|
||||
在 `Hadoop001` 上执行 namenode 初始化命令:
|
||||
|
||||
```
|
||||
hdfs namenode -format
|
||||
```
|
||||
|
||||
### 3.6 启动集群
|
||||
|
||||
进入到 `Hadoop001` 的 `${HADOOP_HOME}/sbin` 目录下,启动 Hadoop。此时 `hadoop002` 和 `hadoop003` 上的相关服务也会被启动:
|
||||
|
||||
```shell
|
||||
# 启动dfs服务
|
||||
start-dfs.sh
|
||||
# 启动yarn服务
|
||||
start-yarn.sh
|
||||
```
|
||||
|
||||
### 3.7 查看集群
|
||||
|
||||
在每台服务器上使用 `jps` 命令查看服务进程,或直接进入 Web-UI 界面进行查看,端口为 `50070`。可以看到此时有三个可用的 `Datanode`:
|
||||
|
||||

|
||||
<BR/>
|
||||
|
||||
点击 `Live Nodes` 进入,可以看到每个 `DataNode` 的详细情况:
|
||||
|
||||

|
||||
<BR/>
|
||||
|
||||
接着可以查看 Yarn 的情况,端口号为 `8088` :
|
||||
|
||||

|
||||
|
||||
|
||||
## 五、提交服务到集群
|
||||
|
||||
提交作业到集群的方式和单机环境完全一致,这里以提交 Hadoop 内置的计算 Pi 的示例程序为例,在任何一个节点上执行都可以,命令如下:
|
||||
|
||||
```shell
|
||||
hadoop jar /usr/app/hadoop-2.6.0-cdh5.15.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar pi 3 3
|
||||
```
|
||||
|
68
offline-notes/installation/Linux下Flume的安装.md
Normal file
68
offline-notes/installation/Linux下Flume的安装.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# Linux下Flume的安装
|
||||
|
||||
|
||||
## 一、前置条件
|
||||
|
||||
Flume 需要依赖 JDK 1.8+,JDK 安装方式见本仓库:
|
||||
|
||||
> [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md)
|
||||
|
||||
|
||||
|
||||
## 二 、安装步骤
|
||||
|
||||
### 2.1 下载并解压
|
||||
|
||||
下载所需版本的 Flume,这里我下载的是 `CDH` 版本的 Flume。下载地址为:http://archive.cloudera.com/cdh5/cdh/5/
|
||||
|
||||
```shell
|
||||
# 下载后进行解压
|
||||
tar -zxvf flume-ng-1.6.0-cdh5.15.2.tar.gz
|
||||
```
|
||||
|
||||
### 2.2 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export FLUME_HOME=/usr/app/apache-flume-1.6.0-cdh5.15.2-bin
|
||||
export PATH=$FLUME_HOME/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量立即生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 2.3 修改配置
|
||||
|
||||
进入安装目录下的 `conf/` 目录,拷贝 Flume 的环境配置模板 `flume-env.sh.template`:
|
||||
|
||||
```shell
|
||||
# cp flume-env.sh.template flume-env.sh
|
||||
```
|
||||
|
||||
修改 `flume-env.sh`,指定 JDK 的安装路径:
|
||||
|
||||
```shell
|
||||
# Enviroment variables can be set here.
|
||||
export JAVA_HOME=/usr/java/jdk1.8.0_201
|
||||
```
|
||||
|
||||
### 2.4 验证
|
||||
|
||||
由于已经将 Flume 的 bin 目录配置到环境变量,直接使用以下命令验证是否配置成功:
|
||||
|
||||
```shell
|
||||
# flume-ng version
|
||||
```
|
||||
|
||||
出现对应的版本信息则代表配置成功。
|
||||
|
||||

|
||||
|
55
offline-notes/installation/Linux下JDK安装.md
Normal file
55
offline-notes/installation/Linux下JDK安装.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Linux下JDK的安装
|
||||
|
||||
>**系统环境**:centos 7.6
|
||||
>
|
||||
>**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) ,下载后进行解压:
|
||||
|
||||
```shell
|
||||
[root@ java]# tar -zxvf jdk-8u201-linux-x64.tar.gz
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 2. 设置环境变量
|
||||
|
||||
```shell
|
||||
[root@ java]# vi /etc/profile
|
||||
```
|
||||
|
||||
添加如下配置:
|
||||
|
||||
```shell
|
||||
export JAVA_HOME=/usr/java/jdk1.8.0_201
|
||||
export JRE_HOME=${JAVA_HOME}/jre
|
||||
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
|
||||
export PATH=${JAVA_HOME}/bin:$PATH
|
||||
```
|
||||
|
||||
执行 `source` 命令,使得配置立即生效:
|
||||
|
||||
```shell
|
||||
[root@ java]# source /etc/profile
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3. 检查是否安装成功
|
||||
|
||||
```shell
|
||||
[root@ java]# java -version
|
||||
```
|
||||
|
||||
显示出对应的版本信息则代表安装成功。
|
||||
|
||||
```shell
|
||||
java version "1.8.0_201"
|
||||
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
|
||||
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
|
||||
|
||||
```
|
71
offline-notes/installation/Linux下Python安装.md
Normal file
71
offline-notes/installation/Linux下Python安装.md
Normal file
@@ -0,0 +1,71 @@
|
||||
## Linux下Python安装
|
||||
|
||||
>**系统环境**:centos 7.6
|
||||
>
|
||||
>**Python 版本**:Python-3.6.8
|
||||
|
||||
### 1. 环境依赖
|
||||
|
||||
Python3.x 的安装需要依赖这四个组件:gcc, zlib,zlib-devel,openssl-devel;所以需要预先安装,命令如下:
|
||||
|
||||
```shell
|
||||
yum install gcc -y
|
||||
yum install zlib -y
|
||||
yum install zlib-devel -y
|
||||
yum install openssl-devel -y
|
||||
```
|
||||
|
||||
### 2. 下载编译
|
||||
|
||||
Python 源码包下载地址: https://www.python.org/downloads/
|
||||
|
||||
```shell
|
||||
# wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
|
||||
```
|
||||
|
||||
### 3. 解压编译
|
||||
|
||||
```shell
|
||||
# tar -zxvf Python-3.6.8.tgz
|
||||
```
|
||||
|
||||
进入根目录进行编译,可以指定编译安装的路径,这里我们指定为 `/usr/app/python3.6` :
|
||||
|
||||
```shell
|
||||
# cd Python-3.6.8
|
||||
# ./configure --prefix=/usr/app/python3.6
|
||||
# make && make install
|
||||
```
|
||||
|
||||
### 4. 环境变量配置
|
||||
|
||||
```shell
|
||||
vim /etc/profile
|
||||
```
|
||||
|
||||
```shell
|
||||
export PYTHON_HOME=/usr/app/python3.6
|
||||
export PATH=${PYTHON_HOME}/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量立即生效:
|
||||
|
||||
```shell
|
||||
source /etc/profile
|
||||
```
|
||||
|
||||
### 5. 验证安装是否成功
|
||||
|
||||
输入 `python3` 命令,如果能进入 python 交互环境,则代表安装成功:
|
||||
|
||||
```shell
|
||||
[root@hadoop001 app]# python3
|
||||
Python 3.6.8 (default, Mar 29 2019, 10:17:41)
|
||||
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
|
||||
Type "help", "copyright", "credits" or "license" for more information.
|
||||
>>> 1+1
|
||||
2
|
||||
>>> exit()
|
||||
[root@hadoop001 app]#
|
||||
```
|
||||
|
181
offline-notes/installation/Linux环境下Hive的安装部署.md
Normal file
181
offline-notes/installation/Linux环境下Hive的安装部署.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# Linux环境下Hive的安装
|
||||
|
||||
<nav>
|
||||
<a href="#一安装Hive">一、安装Hive</a><br/>
|
||||
<a href="#11-下载并解压">1.1 下载并解压</a><br/>
|
||||
<a href="#12-配置环境变量">1.2 配置环境变量</a><br/>
|
||||
<a href="#13-修改配置">1.3 修改配置</a><br/>
|
||||
<a href="#14-拷贝数据库驱动">1.4 拷贝数据库驱动</a><br/>
|
||||
<a href="#15-初始化元数据库">1.5 初始化元数据库</a><br/>
|
||||
<a href="#16-启动">1.6 启动</a><br/>
|
||||
<a href="#二HiveServer2beeline">二、HiveServer2/beeline</a><br/>
|
||||
<a href="#21-修改Hadoop配置">2.1 修改Hadoop配置</a><br/>
|
||||
<a href="#22-启动hiveserver2">2.2 启动hiveserver2</a><br/>
|
||||
<a href="#23-使用beeline">2.3 使用beeline</a><br/>
|
||||
</nav>
|
||||
|
||||
## 一、安装Hive
|
||||
|
||||
### 1.1 下载并解压
|
||||
|
||||
下载所需版本的 Hive,这里我下载版本为 `cdh5.15.2`。下载地址:http://archive.cloudera.com/cdh5/cdh/5/
|
||||
|
||||
```shell
|
||||
# 下载后进行解压
|
||||
tar -zxvf hive-1.1.0-cdh5.15.2.tar.gz
|
||||
```
|
||||
|
||||
### 1.2 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export HIVE_HOME=/usr/app/hive-1.1.0-cdh5.15.2
|
||||
export PATH=$HIVE_HOME/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量立即生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 1.3 修改配置
|
||||
|
||||
**1. hive-env.sh**
|
||||
|
||||
进入安装目录下的 `conf/` 目录,拷贝 Hive 的环境配置模板 `flume-env.sh.template`
|
||||
|
||||
```shell
|
||||
cp hive-env.sh.template hive-env.sh
|
||||
```
|
||||
|
||||
修改 `hive-env.sh`,指定 Hadoop 的安装路径:
|
||||
|
||||
```shell
|
||||
HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
|
||||
```
|
||||
|
||||
**2. hive-site.xml**
|
||||
|
||||
新建 hive-site.xml 文件,内容如下,主要是配置存放元数据的 MySQL 的地址、驱动、用户名和密码等信息:
|
||||
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
|
||||
|
||||
<configuration>
|
||||
<property>
|
||||
<name>javax.jdo.option.ConnectionURL</name>
|
||||
<value>jdbc:mysql://hadoop001:3306/hadoop_hive?createDatabaseIfNotExist=true</value>
|
||||
</property>
|
||||
|
||||
<property>
|
||||
<name>javax.jdo.option.ConnectionDriverName</name>
|
||||
<value>com.mysql.jdbc.Driver</value>
|
||||
</property>
|
||||
|
||||
<property>
|
||||
<name>javax.jdo.option.ConnectionUserName</name>
|
||||
<value>root</value>
|
||||
</property>
|
||||
|
||||
<property>
|
||||
<name>javax.jdo.option.ConnectionPassword</name>
|
||||
<value>root</value>
|
||||
</property>
|
||||
|
||||
</configuration>
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 1.4 拷贝数据库驱动
|
||||
|
||||
将 MySQL 驱动包拷贝到 Hive 安装目录的 `lib` 目录下, MySQL 驱动的下载地址为:https://dev.mysql.com/downloads/connector/j/ , 在本仓库的[resources](https://github.com/heibaiying/BigData-Notes/tree/master/resources) 目录下我也上传了一份,有需要的可以自行下载。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 1.5 初始化元数据库
|
||||
|
||||
+ 当使用的 hive 是 1.x 版本时,可以不进行初始化操作,Hive 会在第一次启动的时候会自动进行初始化,但不会生成所有的元数据信息表,只会初始化必要的一部分,在之后的使用中用到其余表时会自动创建;
|
||||
|
||||
+ 当使用的 hive 是 2.x 版本时,必须手动初始化元数据库。初始化命令:
|
||||
|
||||
```shell
|
||||
# schematool 命令在安装目录的 bin 目录下,由于上面已经配置过环境变量,在任意位置执行即可
|
||||
schematool -dbType mysql -initSchema
|
||||
```
|
||||
|
||||
这里我使用的是 CDH 的 `hive-1.1.0-cdh5.15.2.tar.gz`,对应 `Hive 1.1.0` 版本,可以跳过这一步。
|
||||
|
||||
### 1.6 启动
|
||||
|
||||
由于已经将 Hive 的 bin 目录配置到环境变量,直接使用以下命令启动,成功进入交互式命令行后执行 `show databases` 命令,无异常则代表搭建成功。
|
||||
|
||||
```shell
|
||||
# hive
|
||||
```
|
||||
|
||||

|
||||
|
||||
在 Mysql 中也能看到 Hive 创建的库和存放元数据信息的表
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 二、HiveServer2/beeline
|
||||
|
||||
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 的配置方式。
|
||||
|
||||
|
||||
|
||||
### 2.1 修改Hadoop配置
|
||||
|
||||
修改 hadoop 集群的 core-site.xml 配置文件,增加如下配置,指定 hadoop 的 root 用户可以代理本机上所有的用户。
|
||||
|
||||
```xml
|
||||
<property>
|
||||
<name>hadoop.proxyuser.root.hosts</name>
|
||||
<value>*</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>hadoop.proxyuser.root.groups</name>
|
||||
<value>*</value>
|
||||
</property>
|
||||
```
|
||||
|
||||
之所以要配置这一步,是因为 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)
|
||||
|
||||
|
||||
|
||||
### 2.2 启动hiveserver2
|
||||
|
||||
由于上面已经配置过环境变量,这里直接启动即可:
|
||||
|
||||
```shell
|
||||
# nohup hiveserver2 &
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 2.3 使用beeline
|
||||
|
||||
可以使用以下命令进入 beeline 交互式命令行,出现 `Connected` 则代表连接成功。
|
||||
|
||||
```shell
|
||||
# beeline -u jdbc:hive2://hadoop001:10000 -n root
|
||||
```
|
||||
|
||||

|
178
offline-notes/installation/Spark开发环境搭建.md
Normal file
178
offline-notes/installation/Spark开发环境搭建.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# Spark开发环境搭建
|
||||
|
||||
<nav>
|
||||
<a href="#一安装Spark">一、安装Spark</a><br/>
|
||||
<a href="#二词频统计案例">二、词频统计案例</a><br/>
|
||||
<a href="#三Scala开发环境配置">三、Scala开发环境配置</a><br/>
|
||||
</nav>
|
||||
|
||||
## 一、安装Spark
|
||||
|
||||
### 1.1 下载并解压
|
||||
|
||||
官方下载地址:http://spark.apache.org/downloads.html ,选择 Spark 版本和对应的 Hadoop 版本后再下载:
|
||||
|
||||

|
||||
|
||||
解压安装包:
|
||||
|
||||
```shell
|
||||
# tar -zxvf spark-2.2.3-bin-hadoop2.6.tgz
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 1.2 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export SPARK_HOME=/usr/app/spark-2.2.3-bin-hadoop2.6
|
||||
export PATH=${SPARK_HOME}/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量立即生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 1.3 Local模式
|
||||
|
||||
Local 模式是最简单的一种运行方式,它采用单节点多线程方式运行,不用部署,开箱即用,适合日常测试开发。
|
||||
|
||||
```shell
|
||||
# 启动spark-shell
|
||||
spark-shell --master local[2]
|
||||
```
|
||||
|
||||
- **local**:只启动一个工作线程;
|
||||
- **local[k]**:启动 k 个工作线程;
|
||||
- **local[*]**:启动跟 cpu 数目相同的工作线程数。
|
||||
|
||||

|
||||
|
||||
<br/>
|
||||
|
||||
进入 spark-shell 后,程序已经自动创建好了上下文 `SparkContext`,等效于执行了下面的 Scala 代码:
|
||||
|
||||
```scala
|
||||
val conf = new SparkConf().setAppName("Spark shell").setMaster("local[2]")
|
||||
val sc = new SparkContext(conf)
|
||||
```
|
||||
|
||||
|
||||
## 二、词频统计案例
|
||||
|
||||
安装完成后可以先做一个简单的词频统计例子,感受 spark 的魅力。准备一个词频统计的文件样本 `wc.txt`,内容如下:
|
||||
|
||||
```txt
|
||||
hadoop,spark,hadoop
|
||||
spark,flink,flink,spark
|
||||
hadoop,hadoop
|
||||
```
|
||||
|
||||
在 scala 交互式命令行中执行如下 Scala 语句:
|
||||
|
||||
```scala
|
||||
val file = spark.sparkContext.textFile("file:///usr/app/wc.txt")
|
||||
val wordCounts = file.flatMap(line => line.split(",")).map((word => (word, 1))).reduceByKey(_ + _)
|
||||
wordCounts.collect
|
||||
```
|
||||
|
||||
执行过程如下,可以看到已经输出了词频统计的结果:
|
||||
|
||||

|
||||
|
||||
同时还可以通过 Web UI 查看作业的执行情况,访问端口为 `4040`:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 三、Scala开发环境配置
|
||||
|
||||
Spark 是基于 Scala 语言进行开发的,分别提供了基于 Scala、Java、Python 语言的 API,如果你想使用 Scala 语言进行开发,则需要搭建 Scala 语言的开发环境。
|
||||
|
||||
### 3.1 前置条件
|
||||
|
||||
Scala 的运行依赖于 JDK,所以需要你本机有安装对应版本的 JDK,最新的 Scala 2.12.x 需要 JDK 1.8+。
|
||||
|
||||
### 3.2 安装Scala插件
|
||||
|
||||
IDEA 默认不支持 Scala 语言的开发,需要通过插件进行扩展。打开 IDEA,依次点击 **File** => **settings**=> **plugins** 选项卡,搜索 Scala 插件 (如下图)。找到插件后进行安装,并重启 IDEA 使得安装生效。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 3.3 创建Scala项目
|
||||
|
||||
在 IDEA 中依次点击 **File** => **New** => **Project** 选项卡,然后选择创建 `Scala—IDEA` 工程:
|
||||
|
||||
<div align="center"> <img width="700px" src="../../pictures/idea-newproject-scala.png"/> </div>
|
||||
|
||||
|
||||
|
||||
### 3.4 下载Scala SDK
|
||||
|
||||
#### 1. 方式一
|
||||
|
||||
此时看到 `Scala SDK` 为空,依次点击 `Create` => `Download` ,选择所需的版本后,点击 `OK` 按钮进行下载,下载完成点击 `Finish` 进入工程。
|
||||
|
||||
<div align="center"> <img width="700px" src="../../pictures/idea-scala-select.png"/> </div>
|
||||
|
||||
|
||||
|
||||
#### 2. 方式二
|
||||
|
||||
方式一是 Scala 官方安装指南里使用的方式,但下载速度通常比较慢,且这种安装下并没有直接提供 Scala 命令行工具。所以个人推荐到官网下载安装包进行安装,下载地址:https://www.scala-lang.org/download/
|
||||
|
||||
这里我的系统是 Windows,下载 msi 版本的安装包后,一直点击下一步进行安装,安装完成后会自动配置好环境变量。
|
||||
|
||||
<div align="center"> <img width="700px" src="../../pictures/scala-other-resources.png"/> </div>
|
||||
|
||||
|
||||
|
||||
由于安装时已经自动配置好环境变量,所以 IDEA 会自动选择对应版本的 SDK。
|
||||
|
||||
<div align="center"> <img width="700px" src="../../pictures/idea-scala-2.1.8.png"/> </div>
|
||||
|
||||
|
||||
|
||||
### 3.5 创建Hello World
|
||||
|
||||
在工程 `src` 目录上右击 **New** => **Scala class** 创建 `Hello.scala`。输入代码如下,完成后点击运行按钮,成功运行则代表搭建成功。
|
||||
|
||||
<div align="center"> <img width="700px" src="../../pictures/scala-hello-world.png"/> </div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 3.6 切换Scala版本
|
||||
|
||||
在日常的开发中,由于对应软件(如 Spark)的版本切换,可能导致需要切换 Scala 的版本,则可以在 `Project Structures` 中的 `Global Libraries` 选项卡中进行切换。
|
||||
|
||||
<div align="center"> <img width="700px" src="../../pictures/idea-scala-change.png"/> </div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 3.7 可能出现的问题
|
||||
|
||||
在 IDEA 中有时候重新打开项目后,右击并不会出现新建 `scala` 文件的选项,或者在编写时没有 Scala 语法提示,此时可以先删除 `Global Libraries` 中配置好的 SDK,之后再重新添加:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
**另外在 IDEA 中以本地模式运行 Spark 项目是不需要在本机搭建 Spark 和 Hadoop 环境的。**
|
||||
|
190
offline-notes/installation/Spark集群环境搭建.md
Normal file
190
offline-notes/installation/Spark集群环境搭建.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# 基于ZooKeeper搭建Spark高可用集群
|
||||
|
||||
<nav>
|
||||
<a href="#一集群规划">一、集群规划</a><br/>
|
||||
<a href="#二前置条件">二、前置条件</a><br/>
|
||||
<a href="#三Spark集群搭建">三、Spark集群搭建</a><br/>
|
||||
<a href="#31-下载解压">3.1 下载解压</a><br/>
|
||||
<a href="#32-配置环境变量">3.2 配置环境变量</a><br/>
|
||||
<a href="#33-集群配置">3.3 集群配置</a><br/>
|
||||
<a href="#34-安装包分发">3.4 安装包分发</a><br/>
|
||||
<a href="#四启动集群">四、启动集群</a><br/>
|
||||
<a href="#41-启动ZooKeeper集群">4.1 启动ZooKeeper集群</a><br/>
|
||||
<a href="#42-启动Hadoop集群">4.2 启动Hadoop集群</a><br/>
|
||||
<a href="#43-启动Spark集群">4.3 启动Spark集群</a><br/>
|
||||
<a href="#44-查看服务">4.4 查看服务</a><br/>
|
||||
<a href="#五验证集群高可用">五、验证集群高可用</a><br/>
|
||||
<a href="#六提交作业">六、提交作业</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
## 一、集群规划
|
||||
|
||||
这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 `Worker` 服务。同时为了保证高可用,除了在 hadoop001 上部署主 `Master` 服务外,还在 hadoop002 和 hadoop003 上分别部署备用的 `Master` 服务,Master 服务由 Zookeeper 集群进行协调管理,如果主 `Master` 不可用,则备用 `Master` 会成为新的主 `Master`。
|
||||
|
||||

|
||||
|
||||
## 二、前置条件
|
||||
|
||||
搭建 Spark 集群前,需要保证 JDK 环境、Zookeeper 集群和 Hadoop 集群已经搭建,相关步骤可以参阅:
|
||||
|
||||
- [Linux 环境下 JDK 安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md)
|
||||
- [Zookeeper 单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md)
|
||||
- [Hadoop 集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Hadoop集群环境搭建.md)
|
||||
|
||||
## 三、Spark集群搭建
|
||||
|
||||
### 3.1 下载解压
|
||||
|
||||
下载所需版本的 Spark,官网下载地址:http://spark.apache.org/downloads.html
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
下载后进行解压:
|
||||
|
||||
```shell
|
||||
# tar -zxvf spark-2.2.3-bin-hadoop2.6.tgz
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 3.2 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export SPARK_HOME=/usr/app/spark-2.2.3-bin-hadoop2.6
|
||||
export PATH=${SPARK_HOME}/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量立即生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 3.3 集群配置
|
||||
|
||||
进入 `${SPARK_HOME}/conf` 目录,拷贝配置样本进行修改:
|
||||
|
||||
#### 1. spark-env.sh
|
||||
|
||||
```she
|
||||
cp spark-env.sh.template spark-env.sh
|
||||
```
|
||||
|
||||
```shell
|
||||
# 配置JDK安装位置
|
||||
JAVA_HOME=/usr/java/jdk1.8.0_201
|
||||
# 配置hadoop配置文件的位置
|
||||
HADOOP_CONF_DIR=/usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop
|
||||
# 配置zookeeper地址
|
||||
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop001:2181,hadoop002:2181,hadoop003:2181 -Dspark.deploy.zookeeper.dir=/spark"
|
||||
```
|
||||
|
||||
#### 2. slaves
|
||||
|
||||
```
|
||||
cp slaves.template slaves
|
||||
```
|
||||
|
||||
配置所有 Woker 节点的位置:
|
||||
|
||||
```properties
|
||||
hadoop001
|
||||
hadoop002
|
||||
hadoop003
|
||||
```
|
||||
|
||||
### 3.4 安装包分发
|
||||
|
||||
将 Spark 的安装包分发到其他服务器,分发后建议在这两台服务器上也配置一下 Spark 的环境变量。
|
||||
|
||||
```shell
|
||||
scp -r /usr/app/spark-2.4.0-bin-hadoop2.6/ hadoop002:usr/app/
|
||||
scp -r /usr/app/spark-2.4.0-bin-hadoop2.6/ hadoop003:usr/app/
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 四、启动集群
|
||||
|
||||
### 4.1 启动ZooKeeper集群
|
||||
|
||||
分别到三台服务器上启动 ZooKeeper 服务:
|
||||
|
||||
```shell
|
||||
zkServer.sh start
|
||||
```
|
||||
|
||||
### 4.2 启动Hadoop集群
|
||||
|
||||
```shell
|
||||
# 启动dfs服务
|
||||
start-dfs.sh
|
||||
# 启动yarn服务
|
||||
start-yarn.sh
|
||||
```
|
||||
|
||||
### 4.3 启动Spark集群
|
||||
|
||||
进入 hadoop001 的 ` ${SPARK_HOME}/sbin` 目录下,执行下面命令启动集群。执行命令后,会在 hadoop001 上启动 `Maser` 服务,会在 `slaves` 配置文件中配置的所有节点上启动 `Worker` 服务。
|
||||
|
||||
```shell
|
||||
start-all.sh
|
||||
```
|
||||
|
||||
分别在 hadoop002 和 hadoop003 上执行下面的命令,启动备用的 `Master` 服务:
|
||||
|
||||
```shell
|
||||
# ${SPARK_HOME}/sbin 下执行
|
||||
start-master.sh
|
||||
```
|
||||
|
||||
### 4.4 查看服务
|
||||
|
||||
查看 Spark 的 Web-UI 页面,端口为 `8080`。此时可以看到 hadoop001 上的 Master 节点处于 `ALIVE` 状态,并有 3 个可用的 `Worker` 节点。
|
||||
|
||||

|
||||
|
||||
而 hadoop002 和 hadoop003 上的 Master 节点均处于 `STANDBY` 状态,没有可用的 `Worker` 节点。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 五、验证集群高可用
|
||||
|
||||
此时可以使用 `kill` 命令杀死 hadoop001 上的 `Master` 进程,此时备用 `Master` 会中会有一个再次成为 ` 主 Master`,我这里是 hadoop002,可以看到 hadoop2 上的 `Master` 经过 `RECOVERING` 后成为了新的主 `Master`,并且获得了全部可以用的 `Workers`。
|
||||
|
||||

|
||||
|
||||
Hadoop002 上的 `Master` 成为主 `Master`,并获得了全部可以用的 `Workers`。
|
||||
|
||||

|
||||
|
||||
此时如果你再在 hadoop001 上使用 `start-master.sh` 启动 Master 服务,那么其会作为备用 `Master` 存在。
|
||||
|
||||
## 六、提交作业
|
||||
|
||||
和单机环境下的提交到 Yarn 上的命令完全一致,这里以 Spark 内置的计算 Pi 的样例程序为例,提交命令如下:
|
||||
|
||||
```shell
|
||||
spark-submit \
|
||||
--class org.apache.spark.examples.SparkPi \
|
||||
--master yarn \
|
||||
--deploy-mode client \
|
||||
--executor-memory 1G \
|
||||
--num-executors 10 \
|
||||
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
|
||||
100
|
||||
```
|
||||
|
81
offline-notes/installation/Storm单机环境搭建.md
Normal file
81
offline-notes/installation/Storm单机环境搭建.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Storm单机版本环境搭建
|
||||
|
||||
### 1. 安装环境要求
|
||||
|
||||
> you need to install Storm's dependencies on Nimbus and the worker machines. These are:
|
||||
>
|
||||
> 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 +,所以需要预先安装这两个软件。由于这两个软件在多个框架中都有依赖,其安装步骤单独整理至 :
|
||||
|
||||
+ [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)
|
||||
|
||||
|
||||
|
||||
### 2. 下载并解压
|
||||
|
||||
下载并解压,官方下载地址:http://storm.apache.org/downloads.html
|
||||
|
||||
```shell
|
||||
# tar -zxvf apache-storm-1.2.2.tar.gz
|
||||
```
|
||||
|
||||
### 3. 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export STORM_HOME=/usr/app/apache-storm-1.2.2
|
||||
export PATH=$STORM_HOME/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 4. 启动相关进程
|
||||
|
||||
因为要启动多个进程,所以统一采用后台进程的方式启动。进入到 `${STORM_HOME}/bin` 目录下,依次执行下面的命令:
|
||||
|
||||
```shell
|
||||
# 启动zookeeper
|
||||
nohup sh storm dev-zookeeper &
|
||||
# 启动主节点 nimbus
|
||||
nohup sh storm nimbus &
|
||||
# 启动从节点 supervisor
|
||||
nohup sh storm supervisor &
|
||||
# 启动UI界面 ui
|
||||
nohup sh storm ui &
|
||||
# 启动日志查看服务 logviewer
|
||||
nohup sh storm logviewer &
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 5. 验证是否启动成功
|
||||
|
||||
验证方式一:jps 查看进程:
|
||||
|
||||
```shell
|
||||
[root@hadoop001 app]# jps
|
||||
1074 nimbus
|
||||
1283 Supervisor
|
||||
620 dev_zookeeper
|
||||
1485 core
|
||||
9630 logviewer
|
||||
```
|
||||
|
||||
验证方式二: 访问 8080 端口,查看 Web-UI 界面:
|
||||
|
||||

|
167
offline-notes/installation/Storm集群环境搭建.md
Normal file
167
offline-notes/installation/Storm集群环境搭建.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# Storm集群环境搭建
|
||||
|
||||
<nav>
|
||||
<a href="#一集群规划">一、集群规划</a><br/>
|
||||
<a href="#二前置条件">二、前置条件</a><br/>
|
||||
<a href="#三集群搭建">三、集群搭建</a><br/>
|
||||
<a href="#1-下载并解压">1. 下载并解压</a><br/>
|
||||
<a href="#2-配置环境变量">2. 配置环境变量</a><br/>
|
||||
<a href="#3-集群配置">3. 集群配置</a><br/>
|
||||
<a href="#4-安装包分发">4. 安装包分发</a><br/>
|
||||
<a href="#四-启动集群">四. 启动集群</a><br/>
|
||||
<a href="#41-启动ZooKeeper集群">4.1 启动ZooKeeper集群</a><br/>
|
||||
<a href="#42-启动Storm集群">4.2 启动Storm集群</a><br/>
|
||||
<a href="#43-查看集群">4.3 查看集群</a><br/>
|
||||
<a href="#五高可用验证">五、高可用验证</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 一、集群规划
|
||||
|
||||
这里搭建一个 3 节点的 Storm 集群:三台主机上均部署 `Supervisor` 和 `LogViewer` 服务。同时为了保证高可用,除了在 hadoop001 上部署主 `Nimbus` 服务外,还在 hadoop002 上部署备用的 `Nimbus` 服务。`Nimbus` 服务由 Zookeeper 集群进行协调管理,如果主 `Nimbus` 不可用,则备用 `Nimbus` 会成为新的主 `Nimbus`。
|
||||
|
||||

|
||||
|
||||
## 二、前置条件
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
||||
## 三、集群搭建
|
||||
|
||||
### 1. 下载并解压
|
||||
|
||||
下载安装包,之后进行解压。官方下载地址:http://storm.apache.org/downloads.html
|
||||
|
||||
```shell
|
||||
# 解压
|
||||
tar -zxvf apache-storm-1.2.2.tar.gz
|
||||
|
||||
```
|
||||
|
||||
### 2. 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export STORM_HOME=/usr/app/apache-storm-1.2.2
|
||||
export PATH=$STORM_HOME/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 3. 集群配置
|
||||
|
||||
修改 `${STORM_HOME}/conf/storm.yaml` 文件,配置如下:
|
||||
|
||||
```yaml
|
||||
# Zookeeper集群的主机列表
|
||||
storm.zookeeper.servers:
|
||||
- "hadoop001"
|
||||
- "hadoop002"
|
||||
- "hadoop003"
|
||||
|
||||
# Nimbus的节点列表
|
||||
nimbus.seeds: ["hadoop001","hadoop002"]
|
||||
|
||||
# Nimbus和Supervisor需要使用本地磁盘上来存储少量状态(如jar包,配置文件等)
|
||||
storm.local.dir: "/home/storm"
|
||||
|
||||
# workers进程的端口,每个worker进程会使用一个端口来接收消息
|
||||
supervisor.slots.ports:
|
||||
- 6700
|
||||
- 6701
|
||||
- 6702
|
||||
- 6703
|
||||
```
|
||||
|
||||
`supervisor.slots.ports` 参数用来配置 workers 进程接收消息的端口,默认每个 supervisor 节点上会启动 4 个 worker,当然你也可以按照自己的需要和服务器性能进行设置,假设只想启动 2 个 worker 的话,此处配置 2 个端口即可。
|
||||
|
||||
### 4. 安装包分发
|
||||
|
||||
将 Storm 的安装包分发到其他服务器,分发后建议在这两台服务器上也配置一下 Storm 的环境变量。
|
||||
|
||||
```shell
|
||||
scp -r /usr/app/apache-storm-1.2.2/ root@hadoop002:/usr/app/
|
||||
scp -r /usr/app/apache-storm-1.2.2/ root@hadoop003:/usr/app/
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 四. 启动集群
|
||||
|
||||
### 4.1 启动ZooKeeper集群
|
||||
|
||||
分别到三台服务器上启动 ZooKeeper 服务:
|
||||
|
||||
```shell
|
||||
zkServer.sh start
|
||||
```
|
||||
|
||||
### 4.2 启动Storm集群
|
||||
|
||||
因为要启动多个进程,所以统一采用后台进程的方式启动。进入到 `${STORM_HOME}/bin` 目录下,执行下面的命令:
|
||||
|
||||
**hadoop001 & hadoop002 :**
|
||||
|
||||
```shell
|
||||
# 启动主节点 nimbus
|
||||
nohup sh storm nimbus &
|
||||
# 启动从节点 supervisor
|
||||
nohup sh storm supervisor &
|
||||
# 启动UI界面 ui
|
||||
nohup sh storm ui &
|
||||
# 启动日志查看服务 logviewer
|
||||
nohup sh storm logviewer &
|
||||
```
|
||||
|
||||
**hadoop003 :**
|
||||
|
||||
hadoop003 上只需要启动 `supervisor` 服务和 `logviewer` 服务:
|
||||
|
||||
```shell
|
||||
# 启动从节点 supervisor
|
||||
nohup sh storm supervisor &
|
||||
# 启动日志查看服务 logviewer
|
||||
nohup sh storm logviewer &
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 4.3 查看集群
|
||||
|
||||
使用 `jps` 查看进程,三台服务器的进程应该分别如下:
|
||||
|
||||

|
||||
|
||||
|
||||
<br/>
|
||||
|
||||
访问 hadoop001 或 hadoop002 的 `8080` 端口,界面如下。可以看到有一主一备 2 个 `Nimbus` 和 3 个 `Supervisor`,并且每个 `Supervisor` 有四个 `slots`,即四个可用的 `worker` 进程,此时代表集群已经搭建成功。
|
||||
|
||||

|
||||
|
||||
|
||||
## 五、高可用验证
|
||||
|
||||
这里手动模拟主 `Nimbus` 异常的情况,在 hadoop001 上使用 `kill` 命令杀死 `Nimbus` 的线程,此时可以看到 hadoop001 上的 `Nimbus` 已经处于 `offline` 状态,而 hadoop002 上的 `Nimbus` 则成为新的 `Leader`。
|
||||
|
||||

|
187
offline-notes/installation/Zookeeper单机环境和集群环境搭建.md
Normal file
187
offline-notes/installation/Zookeeper单机环境和集群环境搭建.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# Zookeeper单机环境和集群环境搭建
|
||||
|
||||
<nav>
|
||||
<a href="#一单机环境搭建">一、单机环境搭建</a><br/>
|
||||
<a href="#11-下载">1.1 下载</a><br/>
|
||||
<a href="#12-解压">1.2 解压</a><br/>
|
||||
<a href="#13-配置环境变量">1.3 配置环境变量</a><br/>
|
||||
<a href="#14-修改配置">1.4 修改配置</a><br/>
|
||||
<a href="#15-启动">1.5 启动</a><br/>
|
||||
<a href="#16-验证">1.6 验证</a><br/>
|
||||
<a href="#二集群环境搭建">二、集群环境搭建</a><br/>
|
||||
<a href="#21-修改配置">2.1 修改配置</a><br/>
|
||||
<a href="#22-标识节点">2.2 标识节点</a><br/>
|
||||
<a href="#23-启动集群">2.3 启动集群</a><br/>
|
||||
<a href="#24-集群验证">2.4 集群验证</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
## 一、单机环境搭建
|
||||
|
||||
### 1.1 下载
|
||||
|
||||
下载对应版本 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
|
||||
```
|
||||
|
||||
### 1.2 解压
|
||||
|
||||
```shell
|
||||
# tar -zxvf zookeeper-3.4.14.tar.gz
|
||||
```
|
||||
|
||||
### 1.3 配置环境变量
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
添加环境变量:
|
||||
|
||||
```shell
|
||||
export ZOOKEEPER_HOME=/usr/app/zookeeper-3.4.14
|
||||
export PATH=$ZOOKEEPER_HOME/bin:$PATH
|
||||
```
|
||||
|
||||
使得配置的环境变量生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 1.4 修改配置
|
||||
|
||||
进入安装目录的 `conf/` 目录下,拷贝配置样本并进行修改:
|
||||
|
||||
```
|
||||
# cp zoo_sample.cfg zoo.cfg
|
||||
```
|
||||
|
||||
指定数据存储目录和日志文件目录(目录不用预先创建,程序会自动创建),修改后完整配置如下:
|
||||
|
||||
```properties
|
||||
# The number of milliseconds of each tick
|
||||
tickTime=2000
|
||||
# The number of ticks that the initial
|
||||
# synchronization phase can take
|
||||
initLimit=10
|
||||
# The number of ticks that can pass between
|
||||
# sending a request and getting an acknowledgement
|
||||
syncLimit=5
|
||||
# the directory where the snapshot is stored.
|
||||
# do not use /tmp for storage, /tmp here is just
|
||||
# example sakes.
|
||||
dataDir=/usr/local/zookeeper/data
|
||||
dataLogDir=/usr/local/zookeeper/log
|
||||
# the port at which the clients will connect
|
||||
clientPort=2181
|
||||
# the maximum number of client connections.
|
||||
# increase this if you need to handle more clients
|
||||
#maxClientCnxns=60
|
||||
#
|
||||
# Be sure to read the maintenance section of the
|
||||
# administrator guide before turning on autopurge.
|
||||
#
|
||||
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
|
||||
#
|
||||
# The number of snapshots to retain in dataDir
|
||||
#autopurge.snapRetainCount=3
|
||||
# Purge task interval in hours
|
||||
# Set to "0" to disable auto purge feature
|
||||
#autopurge.purgeInterval=1
|
||||
```
|
||||
|
||||
>配置参数说明:
|
||||
>
|
||||
>- **tickTime**:用于计算的基础时间单元。比如 session 超时:N*tickTime;
|
||||
>- **initLimit**:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
|
||||
>- **syncLimit**:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
|
||||
>- **dataDir**:数据存储位置;
|
||||
>- **dataLogDir**:日志目录;
|
||||
>- **clientPort**:用于客户端连接的端口,默认 2181
|
||||
|
||||
|
||||
|
||||
### 1.5 启动
|
||||
|
||||
由于已经配置过环境变量,直接使用下面命令启动即可:
|
||||
|
||||
```
|
||||
zkServer.sh start
|
||||
```
|
||||
|
||||
### 1.6 验证
|
||||
|
||||
使用 JPS 验证进程是否已经启动,出现 `QuorumPeerMain` 则代表启动成功。
|
||||
|
||||
```shell
|
||||
[root@hadoop001 bin]# jps
|
||||
3814 QuorumPeerMain
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 二、集群环境搭建
|
||||
|
||||
为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。这里我使用三台主机进行搭建,主机名分别为 hadoop001,hadoop002,hadoop003。
|
||||
|
||||
### 2.1 修改配置
|
||||
|
||||
解压一份 zookeeper 安装包,修改其配置文件 `zoo.cfg`,内容如下。之后使用 scp 命令将安装包分发到三台服务器上:
|
||||
|
||||
```shell
|
||||
tickTime=2000
|
||||
initLimit=10
|
||||
syncLimit=5
|
||||
dataDir=/usr/local/zookeeper-cluster/data/
|
||||
dataLogDir=/usr/local/zookeeper-cluster/log/
|
||||
clientPort=2181
|
||||
|
||||
# server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里
|
||||
# 指名集群间通讯端口和选举端口
|
||||
server.1=hadoop001:2287:3387
|
||||
server.2=hadoop002:2287:3387
|
||||
server.3=hadoop003:2287:3387
|
||||
```
|
||||
|
||||
### 2.2 标识节点
|
||||
|
||||
分别在三台主机的 `dataDir` 目录下新建 `myid` 文件,并写入对应的节点标识。Zookeeper 集群通过 `myid` 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 Leader 节点。
|
||||
|
||||
创建存储目录:
|
||||
|
||||
```shell
|
||||
# 三台主机均执行该命令
|
||||
mkdir -vp /usr/local/zookeeper-cluster/data/
|
||||
```
|
||||
|
||||
创建并写入节点标识到 `myid` 文件:
|
||||
|
||||
```shell
|
||||
# hadoop001主机
|
||||
echo "1" > /usr/local/zookeeper-cluster/data/myid
|
||||
# hadoop002主机
|
||||
echo "2" > /usr/local/zookeeper-cluster/data/myid
|
||||
# hadoop003主机
|
||||
echo "3" > /usr/local/zookeeper-cluster/data/myid
|
||||
```
|
||||
|
||||
### 2.3 启动集群
|
||||
|
||||
分别在三台主机上,执行如下命令启动服务:
|
||||
|
||||
```shell
|
||||
/usr/app/zookeeper-cluster/zookeeper/bin/zkServer.sh start
|
||||
```
|
||||
|
||||
### 2.4 集群验证
|
||||
|
||||
启动后使用 `zkServer.sh status` 查看集群各个节点状态。如图所示:三个节点进程均启动成功,并且 hadoop002 为 leader 节点,hadoop001 和 hadoop003 为 follower 节点。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
514
offline-notes/installation/基于Zookeeper搭建Hadoop高可用集群.md
Normal file
514
offline-notes/installation/基于Zookeeper搭建Hadoop高可用集群.md
Normal file
@@ -0,0 +1,514 @@
|
||||
# 基于ZooKeeper搭建Hadoop高可用集群
|
||||
|
||||
<nav>
|
||||
<a href="#一高可用简介">一、高可用简介</a><br/>
|
||||
<a href="#二集群规划">二、集群规划</a><br/>
|
||||
<a href="#三前置条件">三、前置条件</a><br/>
|
||||
<a href="#四集群配置">四、集群配置</a><br/>
|
||||
<a href="#五启动集群">五、启动集群</a><br/>
|
||||
<a href="#六查看集群">六、查看集群</a><br/>
|
||||
<a href="#七集群的二次启动">七、集群的二次启动</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
## 一、高可用简介
|
||||
|
||||
Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多,所以它的实现也更加复杂,故下面先进行讲解:
|
||||
|
||||
### 1.1 高可用整体架构
|
||||
|
||||
HDFS 高可用架构如下:
|
||||
|
||||

|
||||
|
||||
> *图片引用自:https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/*
|
||||
|
||||
HDFS 高可用架构主要由以下组件所构成:
|
||||
|
||||
+ **Active NameNode 和 Standby NameNode**:两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。
|
||||
|
||||
+ **主备切换控制器 ZKFailoverController**:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换,当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换。
|
||||
|
||||
+ **Zookeeper 集群**:为主备切换控制器提供主备选举支持。
|
||||
|
||||
+ **共享存储系统**:共享存储系统是实现 NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 的元数据。主 NameNode 和 NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。
|
||||
|
||||
+ **DataNode 节点**:除了通过共享存储系统共享 HDFS 的元数据信息之外,主 NameNode 和备 NameNode 还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。
|
||||
|
||||
### 1.2 基于 QJM 的共享存储系统的数据同步机制分析
|
||||
|
||||
目前 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 节点挂掉。
|
||||
|
||||

|
||||
|
||||
### 1.3 NameNode 主备切换
|
||||
|
||||
NameNode 实现主备切换的流程下图所示:
|
||||
|
||||

|
||||
1. HealthMonitor 初始化完成之后会启动内部的线程来定时调用对应 NameNode 的 HAServiceProtocol RPC 接口的方法,对 NameNode 的健康状态进行检测。
|
||||
2. HealthMonitor 如果检测到 NameNode 的健康状态发生变化,会回调 ZKFailoverController 注册的相应方法进行处理。
|
||||
3. 如果 ZKFailoverController 判断需要进行主备切换,会首先使用 ActiveStandbyElector 来进行自动的主备选举。
|
||||
4. ActiveStandbyElector 与 Zookeeper 进行交互完成自动的主备选举。
|
||||
5. ActiveStandbyElector 在主备选举完成后,会回调 ZKFailoverController 的相应方法来通知当前的 NameNode 成为主 NameNode 或备 NameNode。
|
||||
6. ZKFailoverController 调用对应 NameNode 的 HAServiceProtocol RPC 接口的方法将 NameNode 转换为 Active 状态或 Standby 状态。
|
||||
|
||||
|
||||
### 1.4 YARN高可用
|
||||
|
||||
YARN ResourceManager 的高可用与 HDFS NameNode 的高可用类似,但是 ResourceManager 不像 NameNode ,没有那么多的元数据信息需要维护,所以它的状态信息可以直接写到 Zookeeper 上,并依赖 Zookeeper 来进行主备选举。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
## 二、集群规划
|
||||
|
||||
按照高可用的设计目标:需要保证至少有两个 NameNode (一主一备) 和 两个 ResourceManager (一主一备) ,同时为满足“过半写入则成功”的原则,需要至少要有 3 个 JournalNode 节点。这里使用三台主机进行搭建,集群规划如下:
|
||||
|
||||

|
||||
|
||||
|
||||
## 三、前置条件
|
||||
|
||||
+ 所有服务器都安装有 JDK,安装步骤可以参见:[Linux 下 JDK 的安装](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Linux下JDK安装.md);
|
||||
+ 搭建好 ZooKeeper 集群,搭建步骤可以参见:[Zookeeper 单机环境和集群环境搭建](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/Zookeeper单机环境和集群环境搭建.md)
|
||||
+ 所有服务器之间都配置好 SSH 免密登录。
|
||||
|
||||
|
||||
|
||||
## 四、集群配置
|
||||
|
||||
### 4.1 下载并解压
|
||||
|
||||
下载 Hadoop。这里我下载的是 CDH 版本 Hadoop,下载地址为:http://archive.cloudera.com/cdh5/cdh/5/
|
||||
|
||||
```shell
|
||||
# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz
|
||||
```
|
||||
|
||||
### 4.2 配置环境变量
|
||||
|
||||
编辑 `profile` 文件:
|
||||
|
||||
```shell
|
||||
# vim /etc/profile
|
||||
```
|
||||
|
||||
增加如下配置:
|
||||
|
||||
```
|
||||
export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
|
||||
export PATH=${HADOOP_HOME}/bin:$PATH
|
||||
```
|
||||
|
||||
执行 `source` 命令,使得配置立即生效:
|
||||
|
||||
```shell
|
||||
# source /etc/profile
|
||||
```
|
||||
|
||||
### 4.3 修改配置
|
||||
|
||||
进入 `${HADOOP_HOME}/etc/hadoop` 目录下,修改配置文件。各个配置文件内容如下:
|
||||
|
||||
#### 1. hadoop-env.sh
|
||||
|
||||
```shell
|
||||
# 指定JDK的安装位置
|
||||
export JAVA_HOME=/usr/java/jdk1.8.0_201/
|
||||
```
|
||||
|
||||
#### 2. core-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!-- 指定 namenode 的 hdfs 协议文件系统的通信地址 -->
|
||||
<name>fs.defaultFS</name>
|
||||
<value>hdfs://hadoop001:8020</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 指定 hadoop 集群存储临时文件的目录 -->
|
||||
<name>hadoop.tmp.dir</name>
|
||||
<value>/home/hadoop/tmp</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- ZooKeeper 集群的地址 -->
|
||||
<name>ha.zookeeper.quorum</name>
|
||||
<value>hadoop001:2181,hadoop002:2181,hadoop002:2181</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- ZKFC 连接到 ZooKeeper 超时时长 -->
|
||||
<name>ha.zookeeper.session-timeout.ms</name>
|
||||
<value>10000</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 3. hdfs-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!-- 指定 HDFS 副本的数量 -->
|
||||
<name>dfs.replication</name>
|
||||
<value>3</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔 -->
|
||||
<name>dfs.namenode.name.dir</name>
|
||||
<value>/home/hadoop/namenode/data</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- datanode 节点数据(即数据块)的存放位置 -->
|
||||
<name>dfs.datanode.data.dir</name>
|
||||
<value>/home/hadoop/datanode/data</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 集群服务的逻辑名称 -->
|
||||
<name>dfs.nameservices</name>
|
||||
<value>mycluster</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- NameNode ID 列表-->
|
||||
<name>dfs.ha.namenodes.mycluster</name>
|
||||
<value>nn1,nn2</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- nn1 的 RPC 通信地址 -->
|
||||
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
|
||||
<value>hadoop001:8020</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- nn2 的 RPC 通信地址 -->
|
||||
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
|
||||
<value>hadoop002:8020</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- nn1 的 http 通信地址 -->
|
||||
<name>dfs.namenode.http-address.mycluster.nn1</name>
|
||||
<value>hadoop001:50070</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- nn2 的 http 通信地址 -->
|
||||
<name>dfs.namenode.http-address.mycluster.nn2</name>
|
||||
<value>hadoop002:50070</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- NameNode 元数据在 JournalNode 上的共享存储目录 -->
|
||||
<name>dfs.namenode.shared.edits.dir</name>
|
||||
<value>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- Journal Edit Files 的存储目录 -->
|
||||
<name>dfs.journalnode.edits.dir</name>
|
||||
<value>/home/hadoop/journalnode/data</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 配置隔离机制,确保在任何给定时间只有一个 NameNode 处于活动状态 -->
|
||||
<name>dfs.ha.fencing.methods</name>
|
||||
<value>sshfence</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 使用 sshfence 机制时需要 ssh 免密登录 -->
|
||||
<name>dfs.ha.fencing.ssh.private-key-files</name>
|
||||
<value>/root/.ssh/id_rsa</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- SSH 超时时间 -->
|
||||
<name>dfs.ha.fencing.ssh.connect-timeout</name>
|
||||
<value>30000</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 访问代理类,用于确定当前处于 Active 状态的 NameNode -->
|
||||
<name>dfs.client.failover.proxy.provider.mycluster</name>
|
||||
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 开启故障自动转移 -->
|
||||
<name>dfs.ha.automatic-failover.enabled</name>
|
||||
<value>true</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 4. yarn-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!--配置 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 -->
|
||||
<name>yarn.resourcemanager.ha.enabled</name>
|
||||
<value>true</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- RM 集群标识 -->
|
||||
<name>yarn.resourcemanager.cluster-id</name>
|
||||
<value>my-yarn-cluster</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- RM 的逻辑 ID 列表 -->
|
||||
<name>yarn.resourcemanager.ha.rm-ids</name>
|
||||
<value>rm1,rm2</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- RM1 的服务地址 -->
|
||||
<name>yarn.resourcemanager.hostname.rm1</name>
|
||||
<value>hadoop002</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- RM2 的服务地址 -->
|
||||
<name>yarn.resourcemanager.hostname.rm2</name>
|
||||
<value>hadoop003</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- RM1 Web 应用程序的地址 -->
|
||||
<name>yarn.resourcemanager.webapp.address.rm1</name>
|
||||
<value>hadoop002:8088</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- RM2 Web 应用程序的地址 -->
|
||||
<name>yarn.resourcemanager.webapp.address.rm2</name>
|
||||
<value>hadoop003:8088</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- ZooKeeper 集群的地址 -->
|
||||
<name>yarn.resourcemanager.zk-address</name>
|
||||
<value>hadoop001:2181,hadoop002:2181,hadoop003:2181</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 启用自动恢复 -->
|
||||
<name>yarn.resourcemanager.recovery.enabled</name>
|
||||
<value>true</value>
|
||||
</property>
|
||||
<property>
|
||||
<!-- 用于进行持久化存储的类 -->
|
||||
<name>yarn.resourcemanager.store.class</name>
|
||||
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 5. mapred-site.xml
|
||||
|
||||
```xml
|
||||
<configuration>
|
||||
<property>
|
||||
<!--指定 mapreduce 作业运行在 yarn 上-->
|
||||
<name>mapreduce.framework.name</name>
|
||||
<value>yarn</value>
|
||||
</property>
|
||||
</configuration>
|
||||
```
|
||||
|
||||
#### 5. slaves
|
||||
|
||||
配置所有从属节点的主机名或 IP 地址,每行一个。所有从属节点上的 `DataNode` 服务和 `NodeManager` 服务都会被启动。
|
||||
|
||||
```properties
|
||||
hadoop001
|
||||
hadoop002
|
||||
hadoop003
|
||||
```
|
||||
|
||||
### 4.4 分发程序
|
||||
|
||||
将 Hadoop 安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下 Hadoop 的环境变量。
|
||||
|
||||
```shell
|
||||
# 将安装包分发到hadoop002
|
||||
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop002:/usr/app/
|
||||
# 将安装包分发到hadoop003
|
||||
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 五、启动集群
|
||||
|
||||
### 5.1 启动ZooKeeper
|
||||
|
||||
分别到三台服务器上启动 ZooKeeper 服务:
|
||||
|
||||
```ssh
|
||||
zkServer.sh start
|
||||
```
|
||||
|
||||
### 5.2 启动Journalnode
|
||||
|
||||
分别到三台服务器的的 `${HADOOP_HOME}/sbin` 目录下,启动 `journalnode` 进程:
|
||||
|
||||
```shell
|
||||
hadoop-daemon.sh start journalnode
|
||||
```
|
||||
|
||||
### 5.3 初始化NameNode
|
||||
|
||||
在 `hadop001` 上执行 `NameNode` 初始化命令:
|
||||
|
||||
```
|
||||
hdfs namenode -format
|
||||
```
|
||||
|
||||
执行初始化命令后,需要将 `NameNode` 元数据目录的内容,复制到其他未格式化的 `NameNode` 上。元数据存储目录就是我们在 `hdfs-site.xml` 中使用 `dfs.namenode.name.dir` 属性指定的目录。这里我们需要将其复制到 `hadoop002` 上:
|
||||
|
||||
```shell
|
||||
scp -r /home/hadoop/namenode/data hadoop002:/home/hadoop/namenode/
|
||||
```
|
||||
|
||||
### 5.4 初始化HA状态
|
||||
|
||||
在任意一台 `NameNode` 上使用以下命令来初始化 ZooKeeper 中的 HA 状态:
|
||||
|
||||
```shell
|
||||
hdfs zkfc -formatZK
|
||||
```
|
||||
|
||||
### 5.5 启动HDFS
|
||||
|
||||
进入到 `hadoop001` 的 `${HADOOP_HOME}/sbin` 目录下,启动 HDFS。此时 `hadoop001` 和 `hadoop002` 上的 `NameNode` 服务,和三台服务器上的 `DataNode` 服务都会被启动:
|
||||
|
||||
```shell
|
||||
start-dfs.sh
|
||||
```
|
||||
|
||||
### 5.6 启动YARN
|
||||
|
||||
进入到 `hadoop002` 的 `${HADOOP_HOME}/sbin` 目录下,启动 YARN。此时 `hadoop002` 上的 `ResourceManager` 服务,和三台服务器上的 `NodeManager` 服务都会被启动:
|
||||
|
||||
```SHEll
|
||||
start-yarn.sh
|
||||
```
|
||||
|
||||
需要注意的是,这个时候 `hadoop003` 上的 `ResourceManager` 服务通常是没有启动的,需要手动启动:
|
||||
|
||||
```shell
|
||||
yarn-daemon.sh start resourcemanager
|
||||
```
|
||||
|
||||
## 六、查看集群
|
||||
|
||||
### 6.1 查看进程
|
||||
|
||||
成功启动后,每台服务器上的进程应该如下:
|
||||
|
||||
```shell
|
||||
[root@hadoop001 sbin]# jps
|
||||
4512 DFSZKFailoverController
|
||||
3714 JournalNode
|
||||
4114 NameNode
|
||||
3668 QuorumPeerMain
|
||||
5012 DataNode
|
||||
4639 NodeManager
|
||||
|
||||
|
||||
[root@hadoop002 sbin]# jps
|
||||
4499 ResourceManager
|
||||
4595 NodeManager
|
||||
3465 QuorumPeerMain
|
||||
3705 NameNode
|
||||
3915 DFSZKFailoverController
|
||||
5211 DataNode
|
||||
3533 JournalNode
|
||||
|
||||
|
||||
[root@hadoop003 sbin]# jps
|
||||
3491 JournalNode
|
||||
3942 NodeManager
|
||||
4102 ResourceManager
|
||||
4201 DataNode
|
||||
3435 QuorumPeerMain
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 6.2 查看Web UI
|
||||
|
||||
HDFS 和 YARN 的端口号分别为 `50070` 和 `8080`,界面应该如下:
|
||||
|
||||
此时 hadoop001 上的 `NameNode` 处于可用状态:
|
||||
|
||||

|
||||
而 hadoop002 上的 `NameNode` 则处于备用状态:
|
||||
|
||||
<br/>
|
||||
|
||||

|
||||
<br/>
|
||||
|
||||
hadoop002 上的 `ResourceManager` 处于可用状态:
|
||||
|
||||
<br/>
|
||||
|
||||

|
||||
<br/>
|
||||
|
||||
hadoop003 上的 `ResourceManager` 则处于备用状态:
|
||||
|
||||
<br/>
|
||||
|
||||

|
||||
<br/>
|
||||
|
||||
同时界面上也有 `Journal Manager` 的相关信息:
|
||||
|
||||
<br/>
|
||||
|
||||

|
||||
## 七、集群的二次启动
|
||||
|
||||
上面的集群初次启动涉及到一些必要初始化操作,所以过程略显繁琐。但是集群一旦搭建好后,想要再次启用它是比较方便的,步骤如下(首选需要确保 ZooKeeper 集群已经启动):
|
||||
|
||||
在 ` hadoop001` 启动 HDFS,此时会启动所有与 HDFS 高可用相关的服务,包括 NameNode,DataNode 和 JournalNode:
|
||||
|
||||
```shell
|
||||
start-dfs.sh
|
||||
```
|
||||
|
||||
在 `hadoop002` 启动 YARN:
|
||||
|
||||
```SHEll
|
||||
start-yarn.sh
|
||||
```
|
||||
|
||||
这个时候 `hadoop003` 上的 `ResourceManager` 服务通常还是没有启动的,需要手动启动:
|
||||
|
||||
```shell
|
||||
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 NameNode 高可用 (High Availability) 实现解析](https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-name-node/index.html)
|
||||
|
239
offline-notes/installation/基于Zookeeper搭建Kafka高可用集群.md
Normal file
239
offline-notes/installation/基于Zookeeper搭建Kafka高可用集群.md
Normal file
@@ -0,0 +1,239 @@
|
||||
# 基于Zookeeper搭建Kafka高可用集群
|
||||
|
||||
<nav>
|
||||
<a href="#一Zookeeper集群搭建">一、Zookeeper集群搭建</a><br/>
|
||||
<a href="#11-下载--解压">1.1 下载 & 解压</a><br/>
|
||||
<a href="#12-修改配置">1.2 修改配置</a><br/>
|
||||
<a href="#13-标识节点">1.3 标识节点</a><br/>
|
||||
<a href="#14-启动集群">1.4 启动集群</a><br/>
|
||||
<a href="#15-集群验证">1.5 集群验证</a><br/>
|
||||
<a href="#二Kafka集群搭建">二、Kafka集群搭建</a><br/>
|
||||
<a href="#21-下载解压">2.1 下载解压</a><br/>
|
||||
<a href="#22-拷贝配置文件">2.2 拷贝配置文件</a><br/>
|
||||
<a href="#23-修改配置">2.3 修改配置</a><br/>
|
||||
<a href="#24-启动集群">2.4 启动集群</a><br/>
|
||||
<a href="#25-创建测试主题">2.5 创建测试主题</a><br/>
|
||||
</nav>
|
||||
|
||||
## 一、Zookeeper集群搭建
|
||||
|
||||
为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群。
|
||||
|
||||
### 1.1 下载 & 解压
|
||||
|
||||
下载对应版本 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
|
||||
# 解压
|
||||
tar -zxvf zookeeper-3.4.14.tar.gz
|
||||
```
|
||||
|
||||
### 1.2 修改配置
|
||||
|
||||
拷贝三份 zookeeper 安装包。分别进入安装目录的 `conf` 目录,拷贝配置样本 `zoo_sample.cfg ` 为 `zoo.cfg` 并进行修改,修改后三份配置文件内容分别如下:
|
||||
|
||||
zookeeper01 配置:
|
||||
|
||||
```shell
|
||||
tickTime=2000
|
||||
initLimit=10
|
||||
syncLimit=5
|
||||
dataDir=/usr/local/zookeeper-cluster/data/01
|
||||
dataLogDir=/usr/local/zookeeper-cluster/log/01
|
||||
clientPort=2181
|
||||
|
||||
# server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里
|
||||
# 指名集群间通讯端口和选举端口
|
||||
server.1=127.0.0.1:2287:3387
|
||||
server.2=127.0.0.1:2288:3388
|
||||
server.3=127.0.0.1:2289:3389
|
||||
```
|
||||
|
||||
> 如果是多台服务器,则集群中每个节点通讯端口和选举端口可相同,IP 地址修改为每个节点所在主机 IP 即可。
|
||||
|
||||
zookeeper02 配置,与 zookeeper01 相比,只有 `dataLogDir` 和 `dataLogDir` 不同:
|
||||
|
||||
```shell
|
||||
tickTime=2000
|
||||
initLimit=10
|
||||
syncLimit=5
|
||||
dataDir=/usr/local/zookeeper-cluster/data/02
|
||||
dataLogDir=/usr/local/zookeeper-cluster/log/02
|
||||
clientPort=2182
|
||||
|
||||
server.1=127.0.0.1:2287:3387
|
||||
server.2=127.0.0.1:2288:3388
|
||||
server.3=127.0.0.1:2289:3389
|
||||
```
|
||||
|
||||
zookeeper03 配置,与 zookeeper01,02 相比,也只有 `dataLogDir` 和 `dataLogDir` 不同:
|
||||
|
||||
```shell
|
||||
tickTime=2000
|
||||
initLimit=10
|
||||
syncLimit=5
|
||||
dataDir=/usr/local/zookeeper-cluster/data/03
|
||||
dataLogDir=/usr/local/zookeeper-cluster/log/03
|
||||
clientPort=2183
|
||||
|
||||
server.1=127.0.0.1:2287:3387
|
||||
server.2=127.0.0.1:2288:3388
|
||||
server.3=127.0.0.1:2289:3389
|
||||
```
|
||||
|
||||
> 配置参数说明:
|
||||
>
|
||||
> - **tickTime**:用于计算的基础时间单元。比如 session 超时:N*tickTime;
|
||||
> - **initLimit**:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
|
||||
> - **syncLimit**:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
|
||||
> - **dataDir**:数据存储位置;
|
||||
> - **dataLogDir**:日志目录;
|
||||
> - **clientPort**:用于客户端连接的端口,默认 2181
|
||||
|
||||
|
||||
|
||||
### 1.3 标识节点
|
||||
|
||||
分别在三个节点的数据存储目录下新建 `myid` 文件,并写入对应的节点标识。Zookeeper 集群通过 `myid` 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 leader 节点。
|
||||
|
||||
创建存储目录:
|
||||
|
||||
```shell
|
||||
# dataDir
|
||||
mkdir -vp /usr/local/zookeeper-cluster/data/01
|
||||
# dataDir
|
||||
mkdir -vp /usr/local/zookeeper-cluster/data/02
|
||||
# dataDir
|
||||
mkdir -vp /usr/local/zookeeper-cluster/data/03
|
||||
```
|
||||
|
||||
创建并写入节点标识到 `myid` 文件:
|
||||
|
||||
```shell
|
||||
#server1
|
||||
echo "1" > /usr/local/zookeeper-cluster/data/01/myid
|
||||
#server2
|
||||
echo "2" > /usr/local/zookeeper-cluster/data/02/myid
|
||||
#server3
|
||||
echo "3" > /usr/local/zookeeper-cluster/data/03/myid
|
||||
```
|
||||
|
||||
### 1.4 启动集群
|
||||
|
||||
分别启动三个节点:
|
||||
|
||||
```shell
|
||||
# 启动节点1
|
||||
/usr/app/zookeeper-cluster/zookeeper01/bin/zkServer.sh start
|
||||
# 启动节点2
|
||||
/usr/app/zookeeper-cluster/zookeeper02/bin/zkServer.sh start
|
||||
# 启动节点3
|
||||
/usr/app/zookeeper-cluster/zookeeper03/bin/zkServer.sh start
|
||||
```
|
||||
|
||||
### 1.5 集群验证
|
||||
|
||||
使用 jps 查看进程,并且使用 `zkServer.sh status` 查看集群各个节点状态。如图三个节点进程均启动成功,并且两个节点为 follower 节点,一个节点为 leader 节点。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 二、Kafka集群搭建
|
||||
|
||||
### 2.1 下载解压
|
||||
|
||||
Kafka 安装包官方下载地址:http://kafka.apache.org/downloads ,本用例下载的版本为 `2.2.0`,下载命令:
|
||||
|
||||
```shell
|
||||
# 下载
|
||||
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 的版本号。
|
||||
|
||||
### 2.2 拷贝配置文件
|
||||
|
||||
进入解压目录的 ` config` 目录下 ,拷贝三份配置文件:
|
||||
|
||||
```shell
|
||||
# cp server.properties server-1.properties
|
||||
# cp server.properties server-2.properties
|
||||
# cp server.properties server-3.properties
|
||||
```
|
||||
|
||||
### 2.3 修改配置
|
||||
|
||||
分别修改三份配置文件中的部分配置,如下:
|
||||
|
||||
server-1.properties:
|
||||
|
||||
```properties
|
||||
# The id of the broker. 集群中每个节点的唯一标识
|
||||
broker.id=0
|
||||
# 监听地址
|
||||
listeners=PLAINTEXT://hadoop001:9092
|
||||
# 数据的存储位置
|
||||
log.dirs=/usr/local/kafka-logs/00
|
||||
# Zookeeper连接地址
|
||||
zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
|
||||
```
|
||||
|
||||
server-2.properties:
|
||||
|
||||
```properties
|
||||
broker.id=1
|
||||
listeners=PLAINTEXT://hadoop001:9093
|
||||
log.dirs=/usr/local/kafka-logs/01
|
||||
zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
|
||||
```
|
||||
|
||||
server-3.properties:
|
||||
|
||||
```properties
|
||||
broker.id=2
|
||||
listeners=PLAINTEXT://hadoop001:9094
|
||||
log.dirs=/usr/local/kafka-logs/02
|
||||
zookeeper.connect=hadoop001:2181,hadoop001:2182,hadoop001:2183
|
||||
```
|
||||
|
||||
这里需要说明的是 `log.dirs` 指的是数据日志的存储位置,确切的说,就是分区数据的存储位置,而不是程序运行日志的位置。程序运行日志的位置是通过同一目录下的 `log4j.properties` 进行配置的。
|
||||
|
||||
### 2.4 启动集群
|
||||
|
||||
分别指定不同配置文件,启动三个 Kafka 节点。启动后可以使用 jps 查看进程,此时应该有三个 zookeeper 进程和三个 kafka 进程。
|
||||
|
||||
```shell
|
||||
bin/kafka-server-start.sh config/server-1.properties
|
||||
bin/kafka-server-start.sh config/server-2.properties
|
||||
bin/kafka-server-start.sh config/server-3.properties
|
||||
```
|
||||
|
||||
### 2.5 创建测试主题
|
||||
|
||||
创建测试主题:
|
||||
|
||||
```shell
|
||||
bin/kafka-topics.sh --create --bootstrap-server hadoop001:9092 \
|
||||
--replication-factor 3 \
|
||||
--partitions 1 --topic my-replicated-topic
|
||||
```
|
||||
|
||||
创建后可以使用以下命令查看创建的主题信息:
|
||||
|
||||
```shell
|
||||
bin/kafka-topics.sh --describe --bootstrap-server hadoop001:9092 --topic my-replicated-topic
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
可以看到分区 0 的有 0,1,2 三个副本,且三个副本都是可用副本,都在 ISR(in-sync Replica 同步副本) 列表中,其中 1 为首领副本,此时代表集群已经搭建成功。
|
||||
|
||||
|
||||
|
118
offline-notes/installation/虚拟机静态IP及多IP配置.md
Normal file
118
offline-notes/installation/虚拟机静态IP及多IP配置.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# 虚拟机静态IP及多IP配置
|
||||
|
||||
<nav>
|
||||
<a href="#一虚拟机静态IP配置">一、虚拟机静态IP配置</a><br/>
|
||||
<a href="#1-编辑网络配置文件">1. 编辑网络配置文件</a><br/>
|
||||
<a href="#2-重启网络服务">2. 重启网络服务</a><br/>
|
||||
<a href="#二虚拟机多个静态IP配置">二、虚拟机多个静态IP配置</a><br/>
|
||||
<a href="#1-配置多网卡">1. 配置多网卡</a><br/>
|
||||
<a href="#2-查看网卡名称">2. 查看网卡名称</a><br/>
|
||||
<a href="#3-配置第二块网卡">3. 配置第二块网卡</a><br/>
|
||||
<a href="#4-重启网络服务器">4. 重启网络服务器</a><br/>
|
||||
<a href="#5-使用说明">5. 使用说明</a><br/>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
## 一、虚拟机静态IP配置
|
||||
|
||||
### 1. 编辑网络配置文件
|
||||
|
||||
```shell
|
||||
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
|
||||
```
|
||||
|
||||
添加如下网络配置:
|
||||
|
||||
+ IPADDR 需要和宿主机同一个网段;
|
||||
+ GATEWAY 保持和宿主机一致;
|
||||
|
||||
```properties
|
||||
BOOTPROTO=static
|
||||
IPADDR=192.168.0.107
|
||||
NETMASK=255.255.255.0
|
||||
GATEWAY=192.168.0.1
|
||||
DNS1=192.168.0.1
|
||||
ONBOOT=yes
|
||||
```
|
||||
|
||||
我的主机配置:
|
||||
|
||||

|
||||
|
||||
修改后完整配置如下:
|
||||
|
||||
```properties
|
||||
TYPE=Ethernet
|
||||
PROXY_METHOD=none
|
||||
BROWSER_ONLY=no
|
||||
BOOTPROTO=static
|
||||
IPADDR=192.168.0.107
|
||||
NETMASK=255.255.255.0
|
||||
GATEWAY=192.168.0.1
|
||||
BROADCAST=192.168.0.255
|
||||
DNS1=192.168.0.1
|
||||
DEFROUTE=yes
|
||||
IPV4_FAILURE_FATAL=no
|
||||
IPV6INIT=yes
|
||||
IPV6_AUTOCONF=yes
|
||||
IPV6_DEFROUTE=yes
|
||||
IPV6_FAILURE_FATAL=no
|
||||
IPV6_ADDR_GEN_MODE=stable-privacy
|
||||
NAME=enp0s3
|
||||
UUID=03d45df1-8514-4774-9b47-fddd6b9d9fca
|
||||
DEVICE=enp0s3
|
||||
ONBOOT=yes
|
||||
```
|
||||
|
||||
### 2. 重启网络服务
|
||||
|
||||
```shell
|
||||
# systemctl restart network
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 二、虚拟机多个静态IP配置
|
||||
|
||||
如果一台虚拟机需要经常在不同网络环境使用,可以配置多个静态 IP。
|
||||
|
||||
### 1. 配置多网卡
|
||||
|
||||
这里我是用的虚拟机是 virtualBox,开启多网卡配置方式如下:
|
||||
|
||||

|
||||
|
||||
### 2. 查看网卡名称
|
||||
|
||||
使用 `ifconfig`,查看第二块网卡名称,这里我的名称为 `enp0s8`:
|
||||
|
||||

|
||||
|
||||
### 3. 配置第二块网卡
|
||||
|
||||
开启多网卡后并不会自动生成配置文件,需要拷贝 `ifcfg-enp0s3` 进行修改:
|
||||
|
||||
```shell
|
||||
# cp ifcfg-enp0s3 ifcfg-enp0s8
|
||||
```
|
||||
|
||||
静态 IP 配置方法如上,这里不再赘述。除了静态 IP 参数外,以下三个参数还需要修改,UUID 必须与 `ifcfg-enp0s3` 中的不一样:
|
||||
|
||||
```properties
|
||||
NAME=enp0s8
|
||||
UUID=03d45df1-8514-4774-9b47-fddd6b9d9fcb
|
||||
DEVICE=enp0s8
|
||||
```
|
||||
|
||||
### 4. 重启网络服务器
|
||||
|
||||
```shell
|
||||
# systemctl restart network
|
||||
```
|
||||
|
||||
### 5. 使用说明
|
||||
|
||||
使用时只需要根据所处的网络环境,勾选对应的网卡即可,不使用的网卡尽量不要勾选启动。
|
||||
|
||||

|
Reference in New Issue
Block a user