新增离线版文档
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