土豆兄弟
b92c14d995
bd-DevOps 文档更新 |
2 years ago | |
---|---|---|
.. | ||
pic | 2 years ago | |
README.md | 2 years ago |
README.md
大数据运维
0. 前置
0.1 开源镜像
-
jdk国内下载镜像 : https://repo.huaweicloud.com/java/jdk/
-
Zookeeper国内镜像 : https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
-
Flink 国内镜像: http://mirrors.cloud.tencent.com/apache/flink/ | http://archive.apache.org/dist/flink/
-
clickHouse 国内镜像 https://mirrors.tuna.tsinghua.edu.cn/clickhouse/ | 升级 https://blog.csdn.net/htmljsp/article/details/109221378
-
Spark 国内镜像: https://mirrors.tuna.tsinghua.edu.cn/apache/spark/
-
Hadoop 国内镜像 : https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/
-
镜像站:
0.2 最新版本
- Hadoop-3.3.4 - 2022 Aug 8
1. Hadoop 大数据平台的规划与部署
1.1 Hadoop 生态圈
-
对于大数据运维来说,就是要实现 Hadoop 生态圈各种软件的最优组合
-
1- HDFS(Hadoop 分布式文件系统)- Hadoop
- HDFS 是 Hadoop 生态圈中提供分布式存储支持的系统,上层的很多计算框架(Hbase、Spark 等)都依赖于 HDFS 存储。HDFS 可在低成本的通用硬件上运行。它不但解决了海量数据存储问题,还解决了数据安全问题。
- HDFS 分布式文件系统的实现原理图:
-
2- MapReduce(分布式计算模型)离线计算 - Hadoop
-
MapReduce 这种 Map 加 Reduce 的简单计算模型,解决了当时单机计算的缺陷,时至今日还有很多场景仍在使用这种计算模型,但已经慢慢不能满足我们的使用需求了。
-
大数据时代的今天,数据量都在 PB 级甚至 EB 级别,对数据的分析效率有了更高的要求。
-
第二代计算模型产生了,如 Tez 和 Spark,它们通过大量使用内存、灵活的数据交换,更少的磁盘读写来提高分析效率。
-
3- Yarn(分布式资源管理器)- Hadoop
-
在YARN中,支持CPU和内存两种资源管理,资源管理由ResourceManager(RM)、ApplicationMaster(AM)和NodeManager(NM)共同完成。其中,RM负责对各个NM上的资源进行统一管理和调度。 而NodeManager则负责资源的供给和隔离。当用户提交一个应用程序时,会创建一个用以跟踪和管理这个程序的AM,它负责向RM申请资源,并要求NM启动指定资源的任务。这就是YARN的基本运行机制。
-
Yarn 作为一个通用的分布式资源管理器,它可以管理多种计算模型,如 Spark、Storm、MapReduce 、Flink 等都可以放到 Yarn 下进行统一管理。
-
4- Spark(内存计算)
-
A fast and general compute engine for Hadoop data. Spark provides a simple and expressive programming model that supports a wide range of applications, including ETL, machine learning, stream processing, and graph computation. [用于Hadoop数据的快速通用计算引擎。Spark 提供了一个简单且富有表现力的编程模型,支持广泛的应用程序,包括 ETL、机器学习、流处理和图形计算。]
-
以内存换效率
-
说到 Spark,不得不提 MapReduce。传统的 MapReduce 计算过程的每一个操作步骤发生在内存中,但产生的中间结果会储存在磁盘里,下一步操作时又会将这个中间结果调用到内存中,如此循环,直到分析任务最终完成。这就会产生读取成本,造成效率低下。
-
而 Spark 在执行分析任务中,每个步骤也是发生在内存之中,但中间结果会直接进入下一个步骤,直到所有步骤完成之后才会将最终结果写入磁盘。也就是说 Spark 任务在执行过程中,中间结果不会“落地”,这就节省了大量的时间。
-
如果执行步骤不多,可能看不出 MapReduce 和 Spark 执行效率的区别,但是当一个任务有很多执行步骤时,Spark 的执行效率就体现出来了。
-
5- HBase(分布式列存储数据库)
-
A scalable, distributed database that supports structured data storage for large tables.[一个可扩展的分布式数据库,支持大型表的结构化数据存储。]
-
面向行存储和面向列存储
-
面向行存储的数据库主要适合于事务性要求严格的场合,这种传统关系型数据库为了实现强一致性,通过严格的事务来进行同步,这就让系统在可用性和伸缩性方面大大折扣。
-
面向列存储的数据库也叫非关系型数据库(NoSQL),比如Cassandra、HBase等。这种数据库通常将不同数据的同一个属性值存在一起,在查询时只遍历需要的数据,实现了数据即是索引。 的最大优点是查询速度快,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。
-
Hbase继承了列存储的特性,它非常适合需对数据进行随机读、写操作、比如每秒对PB级数据进行几千次读、写访问是非常简单的操作。 其次,Hbase构建在HDFS之上,其内部管理的文件全部存储在HDFS中。 这使它具有高度容错性和可扩展性,并支持Hadoop mapreduce程序设计模型。
-
如果你的应用是交易历史查询系统、查询场景简单,检索条件较少、每天有千万行数据更新、那么Hbase将是一个很好的选择。其实,行存储和列存储只是不同的维度而已,没有天生的优劣,而大数据时代大部分的查询模式决定了列式存储优于行式存储。
-
6- Hive(数据仓库)
-
A data warehouse infrastructure that provides data summarization and ad hoc querying.[提供数据汇总和即席查询的数据仓库基础结构。]
-
Hive 定义了一种类似 SQL 的查询语言(HQL),它可以将 SQL 转化为 MapReduce 任务在 Hadoop 上执行。这样,小李就可以用更简单、更直观的语言去写程序了。
-
你不熟悉 MapReduce 程序,只要会写标准的 SQL 语句,也能对 HDFS 上的海量数据进行分析和计算。
-
7- Oozie(工作流调度器)
-
对于 Oozie 来说,工作流就是一系列的操作(如 Hadoop 的 MR,Pig 的任务、Shell 任务等),通过 Oozie 可以实现多个任务的依赖性。也就是说,一个操作的输入依赖于前一个任务的输出,只有前一个操作完全完成后,才能开始第二个。
-
Oozie 工作流通过 hPDL 定义(hPDL 是一种 XML 的流程定义语言),工作流操作通过远程系统启动任务。当任务完成后,远程系统会进行回调来通知任务已经结束,然后再开始下一个操作。
-
8- Sqoop 与 Pig
-
Pig: A high-level data-flow language and execution framework for parallel computation.[用于并行计算的高级数据流语言和执行框架。]
-
把原来存储在 MySQL 中的数据导入 Hadoop 的 HDFS 上,是否能实现呢?
-
通过 Sqoop(SQL-to-Hadoop)就能实现,它主要用于传统数据库和 Hadoop 之间传输数据。数据的导入和导出本质上是 MapReduce 程序,充分利用了 MR 的并行化和容错性。
-
通过 Hive 可以把脚本和 SQL 语言翻译成 MapReduce 程序,扔给计算引擎去计算。Pig 与 Hive 类似,它定义了一种数据流语言,即 Pig Latin,它是 MapReduce 编程的复杂性的抽象,Pig Latin 可以完成排序、过滤、求和、关联等操作,支持自定义函数。 Pig 自动把 Pig Latin 映射为 MapReduce 作业,上传到集群运行,减少用户编写 Java 程序的苦恼。
-
9- Flume(日志收集工具)
-
现在电商平台的数据是通过 rsync 方式定时从电商服务器上同步到 Hadoop 平台的某台机器,然后通过这台机器 put 到 HDFS 上,每天定时同步一次,由于数据量很大,同步一次数据在一个小时左右,并且同步数据的过程会消耗大量网络带宽。 有没有更合适的数据传输机制,一方面可以保证数据传输的实时性、完整性,另一方面也能节省网络带宽。
-
Flume 是将数据从产生、传输、处理并最终写入目标路径的过程抽象为数据流,在具体的数据流中,数据源支持在 Flume 中定制数据发送方,从而支持收集各种不同协议数据。
-
同时,Flume 数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume 还具有能够将日志写往各种数据目标(文件、HDFS、网络)的能力。在 Hadoop 平台,我们主要使用的是通过 Flume 将数据从源服务器写入 Hadoop 的 HDFS 上。
-
10- Kafka(分布式消息队列)
-
生产者生产(Produce)各种数据、消费者(Consume)消费(分析、处理)这些数据。那么面对这些需求,如何高效、稳定的完成数据的生产和消费呢?这就需要在生产者与消费者之间,建立一个通信的桥梁,这个桥梁就是消息系统。从微观层面来说,这种业务需求也可理解为不同的系统之间如何传递消息。
-
Kafka 是 Apache 组织下的一个开源系统,它的最大特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 Hadoop 平台的数据分析、低时延的实时系统、Storm/Spark 流式处理引擎等。
-
11- ZooKeeper(分布式协作服务)
-
A high-performance coordination service for distributed applications.[用于分布式应用程序的高性能协调服务。]
-
对集群技术应该并不陌生,就拿最简单的双机热备架构来说,双机热备主要用来解决单点故障问题,传统的方式是采用一个备用节点,这个备用节点定期向主节点发送 ping 包,主节点收到 ping 包以后向备用节点发送回复信息,当备用节点收到回复的时候就会认为当前主节点运行正常,让它继续提供服务。 而当主节点故障时,备用节点就无法收到回复信息了,此时,备用节点就认为主节点宕机,然后接替它成为新的主节点继续提供服务。
-
ZooKeeper 相当于一个和事佬的角色,如果两人之间发生了一些矛盾或者冲突,无法自行解决的话,这个时候就需要 ZooKeeper 这个和事佬从中进行调解,而和事佬调解的方式是站在第三方客观的角度,根据一些规则(如道德规则、法律规则),客观的对冲突双方做出合理、合规的判决。
-
12- Ambari(大数据运维工具)
-
A web-based tool for provisioning, managing, and monitoring Apache Hadoop clusters which includes support for Hadoop HDFS, Hadoop MapReduce, Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig and Sqoop. Ambari also provides a dashboard for viewing cluster health such as heatmaps and ability to view MapReduce, Pig and Hive applications visually alongwith features to diagnose their performance characteristics in a user-friendly manner.[一个基于Web的工具,用于配置,管理和监控Apache Hadoop集群,其中包括对Hadoop HDFS,Hadoop MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop的支持。 Ambari还提供了一个用于查看集群运行状况(如热图)的仪表板,以及可视化查看MapReduce,Pig和Hive应用程序以及功能的功能,以用户友好的方式诊断其性能特征。]
-
Ambari 是一个大数据基础运维平台,它实现了 Hadoop 生态圈各种组件的自动化部署、服务管理和监控告警,Ambari 通过 puppet 实现自动化安装和配置,通过 Ganglia 收集监控度量指标,用 Nagios 实现故障报警。
-
目前 Ambari 已支持大多数 Hadoop 组件,包括 HDFS、MapReduce、Oozie、Hive、Pig、 Hbase、ZooKeeper、Sqoop、Kafka、Spark、Druid、Storm 等几十个常用的 Hadoop 组件。
-
作为大数据运维人员,通过 Ambari 可以实现统一部署、统一管理、统一监控,可极大提高运维工作效率。
-
13- Avro
-
A data serialization system.[一种数据序列化系统。]
-
14- Cassandra
-
A scalable multi-master database with no single points of failure.[一个可扩展的多主数据库,没有单点故障。]
-
15- Chukwa
-
: A data collection system for managing large distributed systems.[用于管理大型分布式系统的数据收集系统。]
-
16- Mahout
-
A Scalable machine learning and data mining library.[一个可扩展的机器学习和数据挖掘库。]
-
17- Ozone
-
A scalable, redundant, and distributed object store for Hadoop.[用于 Hadoop 的可扩展、冗余和分布式对象存储。]
-
18- Submarine
-
A unified AI platform which allows engineers and data scientists to run Machine Learning and Deep Learning workload in distributed cluster.[一个统一的AI平台,允许工程师和数据科学家在分布式集群中运行机器学习和深度学习工作负载。]
-
19- Tez
-
A generalized data-flow programming framework, built on Hadoop YARN, which provides a powerful and flexible engine to execute an arbitrary DAG of tasks to process data for both batch and interactive use-cases. Tez is being adopted by Hive™, Pig™ and other frameworks in the Hadoop ecosystem, and also by other commercial software (e.g. ETL tools), to replace Hadoop™ MapReduce as the underlying execution engine.[一个基于Hadoop YARN 构建的通用数据流编程框架,它提供了一个强大而灵活的引擎来执行任意DAG任务,以处理批处理和交互式用例的数据。Tez正在被Hive™,Pig™和Hadoop生态系统中的其他框架以及其他商业软件(例如ETL工具)采用,以取代Hadoop™ MapReduce作为底层执行引擎。]
1.2 Hadoop 发行版选型和伪分布式平台的构建
A. Hadoop 有哪些发行版
- 与 Linux 有众多发行版类似,Hadoop 也有很多发行版本,但基本上分为两类,即开源社区版和商业付费版。
- Cloudera 的 CDH 发行版、Hortonworks 的 HDP 发行版等,所以,目前而言,不收费的 Hadoop 版本主要有三个,即 Apache Hadoop、Cloudera 的 CDH 版本、Hortonworks 的 HDP。
- Cloudera 的 CDH 版本和 Hortonworks 的 HDP 版本在大数据开源社区互为竞争,两分天下,占据了国内、外 90% 以上的大数据市场
- 很多云厂商在云端也提供了 Hadoop 服务,比如亚马逊的 Elastic MapReduce(EMR)、Microsoft Azure Hadoop、阿里云 E-MapReduce(Elastic MapReduce,EMR)等
- 最终,Cloudera 和 Hortonworks 从竞争走到了一起
B. Apache Hadoop 发行版本
- Apache Hadoop 是最原始的 Hadoop 发行版本,目前总共发行了三个大版本,即 Hadoop1.x、Hadoop2.x、Hadoop3.x,每个版本的功能特性如下表所示:
- Apache Hadoop 发行版提供源码包和二进制包两种形式下载,对我们来说,下载二进制包更加方便,点击 https://archive.apache.org/dist/hadoop/common/ 获得下载。
C. Hortonworks Hadoop 发行版
- Hortonworks 的主打产品是 HDP,同样是 100% 开源的产品,它最接近 Apache Hadoop 的版本,除此之外,HDP 还包含了 Ambari,这是一款开源的 Hadoop 管理系统。它可以实现统一部署、自动配置、自动化扩容、实时状态监控等,是个功能完备的大数据运维管理平台。
- 在使用 HDP 发行版时,可以通过 Ambari 管理功能,实现 Hadoop 的快速安装和部署,并且对大数据平台的运维也有很大帮助,可以说 Ambari 实现了与 HDP 的无缝整合。
- HDP 至今也发行了三个版本,即 HDP1.x、HDP2.x 和 HDP3.x,跟 Apache Hadoop 发行的大版本遥相呼应,而 HDP 发行版的安装是基于 Ambari 实现的,通过 HDP 提供的 rpm 文件,可以在 Ambari 平台实现自动化的安装和扩容
D. Cloudera Hadoop 发行版
- Cloudera 是最早将 Hadoop 商用的公司,目前旗下的产品主要有 CDH、Cloudera Manager、Cloudera Data Platform(CDP)等
- CDH 支持 yum/apt 包、RPM 包、tarball 包、Cloudera Manager 四种方式安装,但在最新版本 CDH6 中已经不提供 tarball 方式了,这也是 Cloudera 进行产品整合的一个信号。
- Cloudera 在宣布与 Hortonworks 合并后,他们使用了类似红帽公司的开源战略,提供了订阅机制来收费,同时为开发人员和试用提供了无支援的免费版本,并向商业用户提供订阅付费的版本。至此,Cloudera 成为全球第二大开源公司(红帽第一)。
- Cloudera 承诺 CDH 和 HDP 平台将可以继续使用,直到 2022 年。
E. 如何选择发行版
- 对于初学入门的话,建议选择 Apache Hadoop 版本最好,因为它的社区活跃、文档、资料详实。而如果要在企业生产环境下使用的话,建议需要考虑以下几个因素:
- 是否为开源产品(是否免费),这点很重要;
- 是否有稳定的发行版本,开发版是不能用在生产上的;
- 是否已经接受过实践的检验,看看是否有大公司在用(自己不能当小白鼠);
- 是否有活跃的社区支持、充足的资料,因为遇到问题,我们可以通过社区、搜索等网络资源来解决问题。
- 在国内大型互联网企业中,使用较多的是 CDH 或 HDP 发行版本,个人推荐采用 HDP 发行版本,原因是部署简单、性能稳定。
F. 伪分布式安装 Hadoop 集群
- 安装规划
- 伪分布式安装 Hadoop 只需要一台机器,硬件配置最低为 4 核 CPU、8G 内存即可,我们采用 Hadoop-3.2.1 版本,此版本要求 Java 版本至少是 JDK8,这里以 JDK1.8.0_171、CentOS7.6
- 根据运维经验以及后续的升级、自动化运维需要,将 Hadoop 程序安装到 /opt/hadoop 目录下,Hadoop 配置文件放到 /etc/hadoop 目录下。
- 安装过程
- 下载 Apache Hadoop 发行版本的 hadoop-3.2.1.tar.gz 二进制版本文件
[root@hadoop3server hadoop]# useradd hadoop
[root@hadoop3server ~]# mkdir /opt/hadoop
[root@hadoop3server ~]# cd /opt/hadoop
[root@hadoop3server hadoop]# tar zxvf hadoop-3.2.1.tar.gz
[root@hadoop3server hadoop]# ln -s hadoop-3.2.1 current
[root@hadoop3server hadoop]# chown -R hadoop:hadoop /opt/hadoop
- 注意,将解压开的 hadoop-3.2.1.tar.gz 目录软链接到 current 是为了后续运维方便,因为可能涉及 Hadoop 版本升级、自动化运维等操作,这样设置后,可以大大减轻运维工作量。
- Hadoop 程序安装完成后,还需要拷贝配置文件到 /etc/hadoop 目录下,执行如下操作:
[root@hadoop3server ~]#mkdir /etc/hadoop
[root@hadoop3server hadoop]#cp -r /opt/hadoop/current/etc/hadoop /etc/hadoop/conf
[root@hadoop3server hadoop]# chown -R hadoop:hadoop /etc/hadoop
- 接着,还需要安装一个 JDK,这里使用的是 JDK 1.8.0_171,将其安装到 /usr/java 目录下,操作过程如下:
[root@hadoop3server ~]#mkdir /usr/java
[root@hadoop3server ~]#cd /usr/java
[root@hadoop3server java]#tar zxvf jdk-8u171-linux-x64.tar.gz
[root@hadoop3server java]#ln -s jdk1.8.0_171 default
- 这个操作过程的最后一步,做这个软连接,也是为了后续运维自动化配置、升级方便。
- 最后一步,还需要创建一个 Hadoop 用户,然后设置 Hadoop 用户的环境变量,配置如下:
[root@hadoop3server ~]#useradd hadoop
[root@hadoop3server ~]# more /home/hadoop/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
export JAVA_HOME=/usr/java/default
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/opt/hadoop/current
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export CATALINA_BASE=${HTTPFS_CATALINA_HOME}
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HTTPFS_CONFIG=/etc/hadoop/conf
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-
这里创建的 Hadoop 用户,就是以后管理 Hadoop 平台的管理员用户,所有对 Hadoop 的管理操作都需要通过这个用户来完成,这一点需注意。
- HADOOP_HOME 是指定 Hadoop 安装程序的目录
- HADOOP_CONF_DIR 是指定 Hadoop 配置文件目录
-
配置 Hadoop 参数
-
Hadoop 安装完成后,先来了解一下其安装目录下几个重要的目录和文件,这里将 Hadoop 安装在了 /opt/hadoop/current 目录下,打开这个目录,需要掌握的几个目录如下表所示:
-
Hadoop 的配置相当复杂,不过这些是后面要讲的内容。而在伪分布模式下,仅仅需要修改一个配置文件即可,该文件是 core-site.xml,此文件目前位于 /etc/hadoop/conf 目录下,在此文件 标签下增加如下内容:
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop3server</value>
</property>
- 其中,fs.defaultFS 属性描述的是访问 HDFS 文件系统的 URI 加一个 RPC 端口, 不加端口的话,默认是 8020。另外,hadoop3server 可以是服务器的主机名,也可以是任意字符,但都需要将此标识在服务器的 /etc/hosts 进行解析,也就是添加如下内容:
172.16.213.232 hadoop3server
-
这里的 172.16.213.232 就是安装 Hadoop 软件的服务器 IP 地址。
-
启动 Hadoop 服务
-
配置操作完成后,下面就可以启动 Hadoop 服务了,虽然是伪分布模式,但 Hadoop 所有的服务都必须要启动,需要启动的服务有如下几个。
-
要启动 Hadoop 集群的服务,必须以 Hadoop 用户来执行,并且每个服务的启动是有先后顺序的,下面依次启动每个服务。
-
(1)启动 NameNode 服务
-
首先需要对 NameNode 进行格式化,命令如下:
[root@hadoop3server ~]# su - hadoop
[hadoop@hadoop3server ~]$ cd /opt/hadoop/current/bin
[hadoop@hadoop3server bin]$ hdfs namenode -format
- 然后就可以启动 NameNode 服务了,操作过程如下:
[hadoop@hadoop3server conf]$ hdfs --daemon start namenode
[hadoop@hadoop3server conf]$ jps|grep NameNode
27319 NameNode
- 通过 jps 命令查看 NameNode 进程是否正常启动,如果无法正常启动,可以查看 NameNode 启动日志文件,检查是否有异常信息抛出,这里的日志文件路径是:/opt/hadoop/current/logs/hadoop-hadoop-namenode-hadoop3server.log。
- NameNode 启动完成后,就可以通过 Web 页面查看状态了,默认会启动一个 http 端口 9870,可通过访问地址:http://172.16.213.232:9870 查看 NameNode 服务状态,如下图所示:
-
- 第一个是 Hadoop 中 namenode 的访问地址为 hdfs://hadoop3server:8020这是我们在配置文件中指定过的;
- 运行模式显示“Safe mode is ON”,这表示目前 namenode 处于安全模式下了,为什么呢,其实图中已经说明原因了,Namenode 在启动时,会检查 DataNode 的状态,如果 DataNode 上报的 block 个数达到了元数据记录的 block 个数的 0.999 倍才可以离开安全模式, 否则一直运行在安全模式。安全模式也叫只读模式,此模式下,对 HDFS 上的数据无法进行写操作。因为现在还没启动 DataNode 服务,所以肯定是处于安全模式下。
- HDFS 容量,Configured Capacity 目前显示为 0,这也是因为还没启动 DataNode 服务导致的,等启动后,应该就有容量显示了。
- “Live node”及“Dead node”分别显示目前集群中活跃的 DataNode 节点和故障(死)DataNode 节点,运维经常通过监控这个页面中“Dead node”的值来判断集群是否出现异常。
- (2)启动 secondarynamenode 服务
- 在 NameNode 服务启动完成后,就可以启动 secondarynamenode 服务了,直接执行如下命令:
[hadoop@hadoop3server ~]$ hdfs --daemon start secondarynamenode
[hadoop@hadoop3server ~]$ jps|grep SecondaryNameNode
29705 SecondaryNameNode
- 与 NameNode 类似,如果无法启动 secondarynamenode 进程,可以通过 /opt/hadoop/current/logs/hadoop-hadoop-secondarynamenode-hadoop3server.log 文件检查 secondarynamenode 启动日志中是否存在异常。
- (3)启动 DataNode 服务
- 现在是时候启动 DataNode 服务了,直接执行如下命令:
[hadoop@hadoop3server ~]$ hdfs --daemon start datanode
[hadoop@hadoop3server ~]$ jps|grep DataNode
3876 DataNode
-
如果无法启动,可通过查看 /opt/hadoop/current/logs/hadoop-hadoop-datanode-hadoop3server.log 文件检查 datanode 启动过程是否存在异常。
-
到这里为止,分布式文件系统 HDFS 服务已经启动完成,可以对 HDFS 文件系统进行读、写操作了。现在再次通过 http://172.16.213.232:9870 查看 NameNode 服务状态页面,如图所示:
-
从图中可以看出,HDFS 集群中安全模式已经关闭,并且集群容量和活跃节点已经有数据了,这是因为 datanode 服务已经正常启动了。
-
(4)启动 ResourceManager 服务
-
接下来,还需要启动分布式计算服务,首先启动的是 ResourceManager,启动方式如下:
[hadoop@hadoop3server ~]$ yarn --daemon start resourcemanager
[hadoop@hadoop3server ~]$ jps|grep ResourceManager
4726 ResourceManager
-
注意,启动 resourcemanager 服务的命令变成了 yarn,而不是 hdfs,记住这个细节。
-
同理,如果 ResourceManager 进程无法启动,可以通过检查 /opt/hadoop/current/logs/hadoop-hadoop-resourcemanager-hadoop3server.log 日志文件来排查 ResourceManager 启动问题。
-
ResourceManager 服务启动后,会默认启动一个 http 端口 8088,可通过访问 http://172.16.213.232:8088 查看 ResourceManager 的 Web 状态页面,如下图所示:
-
在上图中,需要重点关注的是 ResourceManager 中可用的内存资源、CPU 资源数及活跃节点数,目前看来,这些数据都是 0,是因为还没有 NodeManager 服务启动。
-
(5)启动 NodeManager 服务
-
在启动完成 ResourceManager 服务后,就可以启动 NodeManager 服务了,操作过程如下:
[hadoop@hadoop3server ~]$ yarn --daemon start nodemanager
[hadoop@hadoop3server ~]$ jps|grep NodeManager
8853 NodeManager
-
如果有异常,可通过检查 /opt/hadoop/current/logs/hadoop-hadoop-nodemanager-hadoop3server.log 文件来排查 NodeManager 问题。
-
(6)启动 Jobhistoryserver 服务
-
等待 ResourceManager 和 NodeManager 服务启动完毕后,最后还需要启动一个 Jobhistoryserver 服务,操作过程如下:
[hadoop@hadoop3server ~]$ mapred --daemon start historyserver
[hadoop@hadoop3server ~]$ jps|grep JobHistoryServer
1027 JobHistoryServer
- 注意,启动 Jobhistoryserver 服务的命令变成了 mapred,而非 yarn。这是因为 Jobhistoryserver 服务是基于 MapReduce 的,Jobhistoryserver 服务启动后, 会运行一个 http 端口,默认端口号是 19888,可以通过访问此端口查看每个任务的历史运行情况,如下图所示:
- 至此,Hadoop 伪分布式已经运行起来了,可通过 jps 命令查看各个进程的启动信息:
[hadoop@hadoop3server ~]$ jps
12288 DataNode
1027 JobHistoryServer
11333 NameNode
1158 Jps
29705 SecondaryNameNode
18634 NodeManager
19357 ResourceManager
-
运用 Hadoop HDFS 命令进行分布式存储
-
Hadoop 的 HDFS 是一个分布式文件系统,要对 HDFS 进行操作,需要执行 HDFS Shell,跟 Linux 命令很类似,因此,只要熟悉 Linux 命令,可以很快掌握 HDFS Shell 的操作。
-
执行 HDFS Shell 建议在 Hadoop 用户或其他普用用户下执行。
-
(1)查看 hdfs 根目录数据,可通过如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -ls /
-
通过这个命令的输出可知,刚刚创建起来的 HDFS 文件系统是没有任何数据的,不过可以自己创建文件或目录。
-
(2)在 hdfs 根目录创建一个 logs 目录,可执行如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -mkdir /logs
- (3)从本地上传一个文件到 hdfs 的 /logs 目录下,可执行如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -put /data/test.txt /logs
[hadoop@hadoop3server ~]$ hadoop fs -put /data/db.gz /logs
[hadoop@hadoop3server ~]$ hadoop fs -ls /logs
Found 2 items
-rw-r--r-- 3 hadoop supergroup 150569 2020-03-19 07:11 /logs/test.txt
-rw-r--r-- 3 hadoop supergroup 95 2020-03-24 05:11 /logs/db.gz
-
注意,这里的 /data/test.txt 及 db.gz 是操作系统下的一个本地文件,通过执行 put 命令,可以看到,文件已经从本地磁盘传到 HDFS 上了。
-
(4)要查看 hdfs 中一个文本文件的内容,可执行如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -cat /logs/test.txt
[hadoop@hadoop3server ~]$ hadoop fs -text /logs/db.gz
-
可以看到,在 HDFS 上的压缩文件通过“-text”参数也能直接查看,因为默认情况下 Hadoop 会自动识别常见的压缩格式。
-
(5)删除 hdfs 上一个文件,可执行如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -rm -r /logs/test.txt
-
注意,HDFS 上面的文件,只能创建和删除,无法更新一个存在的文件,如果要更新 HDFS 上的文件,需要先删除这个文件,然后提交最新的文件即可。
-
在 Hadoop 中运行 MapReduce 程序
- 借用 Hadoop 安装包中附带的一个 mapreduce 的 demo 程序,做个简单的 MR 计算。
- 这个 demo 程序位于 $HADOOP_HOME/share/hadoop/mapreduce 路径下,这个环境下的路径为 /opt/hadoop/current/share/hadoop/mapreduce,在此目录下找到一个名为 hadoop-mapreduce-examples-3.2.1.jar 的 jar 文件
-
单词计数是最简单也是最能体现 MapReduce 思想的程序之一,可以称为 MapReduce 版“Hello World”,hadoop-mapreduce-examples-3.2.1.jar 文件中包含了一个 wordcount 功能,它主要功能是用来统计一系列文本文件中每个单词出现的次数。下面开始执行分析计算。
-
(1)创建一个新文件
-
创建一个测试文件 demo.txt,内容如下:
Linux Unix windows
hadoop Linux spark
hive hadoop Unix
MapReduce hadoop Linux hive
windows hadoop spark
- (2)将创建的文件存入 HDFS
[hadoop@hadoop3server ~]$ hadoop fs -mkdir /demo
[hadoop@hadoop3server ~]$ hadoop fs -put /opt/demo.txt /demo
[hadoop@hadoop3server ~]$ hadoop fs -ls /demo
Found 1 items
-rw-r--r-- 3 hadoop supergroup 105 2020-03-24 06:02 /demo/demo.txt
-
这里在 HDFS 上创建了一个目录 /demo,然后将刚才创建好的本地文件 put 到 HDFS 上,这里举例是一个文件,如果要统计多个文件内容,将多个文件都上传到 HDFS 的 /demo 目录即可。
-
(3)执行分析计算任务
[hadoop@hadoop3server ~]$ hadoop jar /opt/hadoop/current/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /demo /output
[hadoop@hadoop3server ~]$ hadoop fs -ls /output
Found 2 items
-rw-r--r-- 3 hadoop supergroup 0 2020-03-24 06:05 /output/_SUCCESS
-rw-r--r-- 3 hadoop supergroup 61 2020-03-24 06:05 /output/part-r-00000
[hadoop@hadoop3server ~]$ hadoop fs -text /output/part-r-00000
Linux 3
MapReduce 1
Unix 2
hadoop 4
hive 2
spark 2
windows 2
-
最后的两个路径都是 HDFS 上的路径,第一个路径是分析读取文件的目录,必须存在;第二个路径是分析任务输出结果的存放路径,必须不存在,分析任务会自动创建这个目录。
-
任务执行完毕后,可以查看 /output 目录下有两个文件,其中:
- _SUCCESS,任务完成标识,表示执行成功;
- part-r-00000,表示输出文件名,常见的名称有 part-m-00000、part-r-00001,其中,带 m 标识的文件是 mapper 输出,带 r 标识的文件是 reduce 输出的,00000 为 job 任务编号,part-r-00000 整个文件为结果输出文件。
-
通过查看 part-r-00000 文件内容,可以看到 wordcount 的统计结果。左边一列是统计的单词,右边一列是在文件中单词出现的次数。
-
(4)在 ResourceManager 的 Web 页面展示运行任务
-
上面在命令行执行的 wordcount 统计任务虽然最后显示是执行成功了,统计结果也正常,但是在 ResourceManager 的 Web 页面并没有显示出来。
-
究其原因,其实很简单:这是因为那个 mapreduce 任务并没有真正提交到 yarn 上来,因为默认 mapreduce 的运行环境是 local(本地),要让 mapreduce 在 yarn 上运行,需要做几个参数配置就行了。
-
需要修改的配置文件有两个,即 mapred-site.xml 和 yarn-site.xml,在你的配置文件目录,找到它们。
-
mapred-site.xml 文件
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
-
其中,mapreduce.framework.name 选项就是用来指定 mapreduce 的运行时环境,指定为 yarn 即可,下面的三个选项是指定 mapreduce 运行时一些环境信息。
-
最后,修改另一个文件 yarn-site.xml,添加如下内容到 标签中:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- 其中,yarn.nodemanager.aux-services 选项代表可在 NodeManager 上运行的扩展服务,需配置成 mapreduce_shuffle,才可运行 MapReduce 程序。
- 配置修改完成后,需要重启 ResourceManager 与 nodemanager 服务才能使配置生效。
- 现在,我们再次运行刚才的那个 mapreduce 的 wordcount 统计,所有执行的任务都会在 ResourceManager 的 Web 页面展示出来,如下图所示:
- 从图中可以清晰的看出,执行任务的 ID 名、执行任务的用户、程序名、任务类型、队列、优先级、启动时间、完成时间、最终状态等信息。从运维角度来说,这个页面有很多信息都需要引起关注,比如任务最终状态是否有失败的,如果有,可以点击倒数第二列“Tracking UI”下面的 History 链接查看日志进行排查问题。
- Namenode 的 Web 页面和 ResourceManager 的 Web 页面在进行大数据运维工作中,经常会用到,这些 Web 界面主要用来状态监控、故障排查,更多使用细节和技巧
G. 补充
- cdh,离线安装有什么好办法
- 自己搭建个本地yum仓库就行了,后续从本地下载安装或者升级。