华为云用户手册

  • 打包项目 通过IDEA自带的Maven工具,打包项目,生成jar包。具体操作请参考在Linux环境中调测Spark应用。 将打包生成的jar包上传到Spark客户端所在服务器的任意目录(例如“$SPARK_HOME” )下。 将user.keytab、krb5.conf 两个文件上传客户端所在服务器上(文件上传的路径需要和生成的jar包路径一致)。 若运行“Spark on HBase”样例程序,需要在Spark客户端的“spark-defaults.conf”配置文件中将配置项“spark.yarn.security.credentials.hbase.enabled”设置为“true”(该参数值默认为“false”,改为“true”后对已有业务没有影响。如果要卸载HBase服务,卸载前请将此参数值改回“false”),将配置项“spark.inputFormat.cache.enabled”设置为“false”。
  • 常用概念 客户端 客户端直接面向用户,可通过Java API、Thrift API访问服务端进行Hive的相关操作。 HQL语言 Hive Query Language,类SQL语句。 HCatalog HCatalog是建立在Hive元数据之上的一个表信息管理层,吸收了Hive的DDL命令。为MapReduce提供读写接口,提供Hive命令行接口来进行数据定义和元数据查询。基于MRS的HCatalog功能,Hive、MapReduce开发人员能够共享元数据信息,避免中间转换和调整,能够提升数据处理的效率。 WebHCat WebHCat运行用户通过Rest API来执行Hive DDL,提交MapReduce任务,查询MapReduce任务执行结果等操作。
  • Hive介绍 Hive是一个开源的,建立在Hadoop上的数据仓库框架,提供类似SQL的HQL语言操作结构化数据,其基本原理是将HQL语言自动转换成MapReduce任务或Spark任务,从而完成对Hadoop集群中存储的海量数据进行查询和分析。 Hive主要特点如下: 通过HQL语言非常容易的完成数据提取、转换和加载(ETL)。 通过HQL完成海量结构化数据分析。 灵活的数据存储格式,支持JSON、CSV、TEXTFILE、RCFILE、ORCFILE、SEQUENCEFILE等存储格式,并支持自定义扩展。 多种客户端连接方式,支持JDBC接口。 Hive主要应用于海量数据的离线分析(如日志分析,集群状态分析)、大规模的数据挖掘(用户行为分析,兴趣分区,区域展示)等场景下。 为保证Hive服务的高可用性、用户数据的安全及访问服务的可控制,在开源社区的Hive-3.1.0版本基础上,Hive新增如下特性: 数据文件加密机制。 开源社区的Hive特性,请参见https://cwiki.apache.org/confluence/display/hive/designdocs。
  • 功能简介 Spark的REST API以JSON格式展现Web UI的一些指标,提供用户一种更简单的方法去创建新的展示和监控的工具,并且支持查询正在运行的app和已经结束的app的相关信息。开源的Spark REST接口支持对Jobs、Stages、Storage、Environment和Executors的信息进行查询,FusionInsight版本中添加了查询SQL、JDBC Server和Streaming的信息的REST接口。开源REST接口完整和详细的描述请参考官网上的文档以了解其使用方法:https://spark.apache.org/docs/3.1.1/monitoring.html#rest-api。
  • REST API增强 SQL相关的命令:获取所有SQL语句和执行时间最长的SQL语句 SparkUI命令: curl -k -i --negotiate -u: "https://192.168.195.232:8090/proxy/application_1476947670799_0053/api/v1/applications/application_1476947670799_0053/SQL" 其中192.168.195.232为ResourceManager主节点的业务IP,8090为ResourceManager的端口号,application_1476947670799_0053为在YARN中的应用ID。 可以在命令后的url路径增加相应的参数设置,搜索对应的SQL语句。 例如,查看100条sql语句: curl -k -i --negotiate -u: "https://192.168.195.232:8090/proxy/application_1476947670799_0053/api/v1/applications/application_1476947670799_0053/SQL?limit=100" 查看正在运行的参数: curl -k -i --negotiate -u: "https://192.168.195.232:8090/proxy/application_1476947670799_0053/api/v1/applications/application_1476947670799_0053/SQL?completed=false" JobHistory命令: curl -k -i --negotiate -u: "https://192.168.227.16:4040/api/v1/applications/application_1478570725074_0004/SQL" 其中192.168.227.16为JobHistory节点的业务IP,4040为JobHistory的端口号,application_1478570725074_0004为应用ID。 结果: SparkUI命令和JobHistory命令的查询结果均为: { "longestDurationOfCompletedSQL" : [ { "id" : 0, "status" : "COMPLETED", "description" : "getCallSite at SQLExecution.scala:48", "submissionTime" : "2016/11/08 15:39:00", "duration" : "2 s", "runningJobs" : [ ], "successedJobs" : [ 0 ], "failedJobs" : [ ] } ], "sqls" : [ { "id" : 0, "status" : "COMPLETED", "description" : "getCallSite at SQLExecution.scala:48", "submissionTime" : "2016/11/08 15:39:00", "duration" : "2 s", "runningJobs" : [ ], "successedJobs" : [ 0 ], "failedJobs" : [ ] }] } 结果分析: 通过这个命令,可以查询当前应用的所有SQL语句的信息(即结果中“sqls”的部分),执行时间最长的SQL语句的信息(即结果中“longestDurationOfCompletedSQL”的部分)。每个SQL语句的信息如下表3。 表3 SQL的常用信息 参数 描述 id SQL语句的ID status SQL语句的执行状态,有RUNNING、COMPLETED、FAILED三种 runningJobs SQL语句产生的job中,正在执行的job列表 successedJobs SQL语句产生的job中,执行成功的job列表 failedJobs SQL语句产生的job中,执行失败的job列表 JDBC Server相关的命令:获取连接数,正在执行的SQL数,所有session信息,所有SQL的信息 命令: curl -k -i --negotiate -u: "https://192.168.195.232:8090/proxy/application_1476947670799_0053/api/v1/applications/application_1476947670799_0053/sqlserver" 其中192.168.195.232为ResourceManager主节点的业务IP,8090为ResourceManager的端口号,application_1476947670799_0053为在YARN中的应用ID。 结果: { "sessionNum" : 1, "runningSqlNum" : 0, "sessions" : [ { "user" : "spark", "ip" : "192.168.169.84", "sessionId" : "9dfec575-48b4-4187-876a-71711d3d7a97", "startTime" : "2016/10/29 15:21:10", "finishTime" : "", "duration" : "1 minute 50 seconds", "totalExecute" : 1 } ], "sqls" : [ { "user" : "spark", "jobId" : [ ], "groupId" : "e49ff81a-230f-4892-a209-a48abea2d969", "startTime" : "2016/10/29 15:21:13", "finishTime" : "2016/10/29 15:21:14", "duration" : "555 ms", "statement" : "show tables", "state" : "FINISHED", "detail" : "== Parsed Logical Plan ==\nShowTablesCommand None\n\n== Analyzed Logical Plan ==\ntableName: string, isTemporary: boolean\nShowTablesCommand None\n\n== Cached Logical Plan ==\nShowTablesCommand None\n\n== Optimized Logical Plan ==\nShowTablesCommand None\n\n== Physical Plan ==\nExecutedCommand ShowTablesCommand None\n\nCode Generation: true" } ] } 结果分析: 通过这个命令,可以查询当前JDBC应用的session连接数,正在执行的SQL数,所有的session和SQL信息。每个session的信息如下表4,每个SQL的信息如下表5。 表4 session常用信息 参数 描述 user 该session连接的用户 ip session所在的节点IP sessionId session的ID startTime session开始连接的时间 finishTime session结束连接的时间 duration session连接时长 totalExecute 在该session上执行的SQL数 表5 sql常用信息 参数 描述 user SQL执行的用户 jobId SQL语句包含的job id列表 groupId SQL所在的group id startTime SQL开始时间 finishTime SQL结束时间 duration SQL执行时长 statement 对应的语句 detail 对应的逻辑计划,物理计划 JDBC api增强通过beeline里面获取的executionID 取消当前正在执行的SQL 命令: curl -k -i --negotiate -X PUT -u: "https://192.168.195.232:8090/proxy/application_1477722033672_0008/api/v1/applications/application_1477722033672_0008/cancel/execution?executionId=8" 结果: 取消executionId 执行序号为8的job任务。 补充说明: spark-beeline里面执行SQL语句,如果该SQL语句产生spark任务,该SQL的executionId将会被打印在beeline里面,这个时候如果想取消这条sql的执行,可以用上述命令。 Streaming相关的命令:获取平均输入频率,平均调度时延,平均执行时长,总时延平均值 命令: curl -k -i --negotiate -u: "https://192.168.195.232:8090/proxy/application_1477722033672_0008/api/v1/applications/application_1477722033672_0008/streaming/statistics" 其中192.168.195.232为ResourceManager主节点的业务IP,8090为ResourceManager的端口号,application_1477722033672_0008为在YARN中的应用ID。 结果: { "startTime" : "2018-12-25T08:58:10.836GMT", "batchDuration" : 1000, "numReceivers" : 1, "numActiveReceivers" : 1, "numInactiveReceivers" : 0, "numTotalCompletedBatches" : 373, "numRetainedCompletedBatches" : 373, "numActiveBatches" : 0, "numProcessedRecords" : 1, "numReceivedRecords" : 1, "avgInputRate" : 0.002680965147453083, "avgSchedulingDelay" : 14, "avgProcessingTime" : 47, "avgTotalDelay" : 62 } 结果分析: 通过这个命令,可以查询当前Streaming应用的平均输入频率(events/sec),平均调度时延(ms),平均执行时长(ms),总时延平均值(ms)。
  • 准备开发环境 在进行应用开发时,要准备的开发和运行环境如表1所示。 表1 开发环境 准备项 说明 操作系统 开发环境:Windows系统,支持Windows7以上版本。 运行环境:Windows或Linux系统。 如需在本地调测程序,运行环境需要和集群业务平面网络互通。 安装JDK 开发和运行环境的基本配置,版本要求如下: 服务端和客户端仅支持自带的OpenJDK,版本为1.8.0_272,不允许替换。 对于客户应用需引用SDK类的Jar包运行在客户应用进程中的。 X86客户端:Oracle JDK:支持1.8版本;IBM JDK:支持1.8.5.11版本。 TaiShan客户端:OpenJDK:支持1.8.0_272版本。 说明: 基于安全考虑,服务端只支持TLS V1.2及以上的加密协议。 IBM JDK默认只支持TLS V1.0,若使用IBM JDK,请配置启动参数“com.ibm.jsse2.overrideDefaultTLS”为“true”,设置后可以同时支持TLS V1.0/V1.1/V1.2,详情参见https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/jsse2Docs/matchsslcontext_tls.html#matchsslcontext_tls。 安装和配置IntelliJ IDEA 开发环境的基本配置,建议使用2019.1或其他兼容版本。 说明: 若使用IBM JDK,请确保IntelliJ IDEA中的JDK配置为IBM JDK。 若使用Oracle JDK,请确保IntelliJ IDEA中的JDK配置为Oracle JDK。 若使用Open JDK,请确保IntelliJ IDEA中的JDK配置为Open JDK。 不同的IntelliJ IDEA不要使用相同的workspace和相同路径下的示例工程。 安装Maven 开发环境的基本配置。用于项目管理,贯穿软件开发生命周期。 准备开发用户 参考准备MRS应用开发用户进行操作,准备用于应用开发的集群用户并授予相应权限。 7-zip 用于解压“*.zip”和“*.rar”文件,支持7-Zip 16.04版本。
  • 操作步骤 客户端机器必须安装有Python,其版本不低于2.6.6,最高不能超过2.7.13。 在客户端机器的命令行终端输入python可查看Python版本号。如下显示Python版本为2.6.6。 Python 2.6.6 (r266:84292, Oct 12 2012, 14:23:48) [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. 客户端机器必须安装有setuptools,其版本不低于5.0,最高不能超过36.8.0。 具体软件,请到对应的官方网站获取。 https://pypi.org/project/setuptools/#files 将下载的setuptools压缩文件复制到客户端机器上,解压后进入解压目录,在客户端机器的命令行终端执行python setup.py install。 如下内容表示安装setuptools的5.7版本成功。 Finished processing dependencies for setuptools==5.7 安装Python客户端到客户端机器。 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\hive-examples”目录下的样例工程文件夹“python-examples”。 进入“python-examples”文件夹。 在命令行终端执行python setup.py install。 输出以下关键内容表示安装Python客户端成功。 Finished processing dependencies for pyhs2==0.5.0 安装成功后,“python-examples/pyCLI_nosec.py”为Python客户端样例代码,“python-examples/pyhs2/haconnection.py”为Python客户端接口API。“hive_python_client”脚本提供了直接执行SQL的功能,如hive_python_client 'show tables'。该功能只适用于常规简单的SQL,并且需要依赖ZooKeeper的客户端。
  • 常用概念 过滤器 过滤器提供了非常强大的特性来帮助用户提高HBase处理表中数据的效率。用户不仅可以使用HBase中预定义好的过滤器,而且可以实现自定义的过滤器。 协处理器 允许用户执行region级的操作,并且可以使用与RDBMS中触发器类似的功能。 Client 客户端直接面向用户,可通过Java API、HBase Shell或者Web UI访问服务端,对HBase的表进行读写操作。本文中的HBase客户端特指HBase client的安装包,可参考HBase对外接口介绍。
  • 接口类型介绍 由于HBase本身是由java语言开发出来的,且java语言具有简洁通用易懂的特性,推荐用户使用java语言进行HBase应用程序开发。 HBase采用的接口与Apache HBase保持一致。 HBase通过接口调用,可提供的功能如表1所示。 表1 HBase接口提供的功能 功能 说明 CRUD数据读写功能 增查改删 高级特性 过滤器、二级索引,协处理器 管理功能 表管理、集群管理
  • HBase介绍 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。HBase设计目标是用来解决关系型数据库在处理海量数据时的局限性。 HBase使用场景有如下几个特点: 处理海量数据(TB或PB级别以上)。 具有高吞吐量。 在海量数据中实现高效的随机读取。 具有很好的伸缩能力。 能够同时处理结构化和非结构化的数据。 不需要完全拥有传统关系型数据库所具备的ACID特性。ACID特性指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 HBase中的表具有如下特点: 大:一个表可以有上亿行,上百万列。 面向列:面向列(族)的存储和权限控制,列(族)独立检索。 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
  • 删除Doris表 以Java JDBC方式执行SQl语句删除集群中的dbName.tableName表。 String dropSql = "drop table " + dbName + "." + tableName; public static void execDDL(Connection connection, String sql) throws Exception { try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.execute(); } catch (Exception e) { logger.error("Execute sql {} failed.", sql, e); throw new Exception(e); } } 父主题: Doris JDBC接口调用样例程序
  • 使用Python提交Flink SQL作业 获取样例工程“flink-examples/pyflink-example/pyflink-sql”中的“pyflink-sql.py”和“datagen2kafka.sql”。 参考准备本地应用开发环境将准备好的Python虚拟环境打包,获取“venv.zip”文件。 zip -q -r venv.zip venv/ 以root用户登录主管理节点,将1和2获取的“venv.zip”、“pyflink-sql.py”和“datagen2kafka.sql”文件上传至客户端环境。 per-job模式:将上述文件上传到“客户端安装目录/Flink/flink”。 yarn-application模式:将上述文件上传到“客户端安装目录/Flink/flink/yarnship”。 yarn-session模式:将上述文件上传到“客户端安装目录/Flink/flink/conf/ssl”。 修改“pyflink-sql.py”中的“file_path”路径。 per-job模式:修改为sql文件的实际路径。如:客户端安装目录/Flink/flink/datagen2kafka.sql yarn-application模式:修改为os.getcwd() + "/../../../../yarnship/datagen2kafka.sql" yarn-session模式:修改为sql文件的实际路径。如:客户端安装目录/Flink/flink/conf/ssl//datagen2kafka.sql 执行下面命令指定运行环境。 export PYFLINK_CLIENT_EXECUTABLE=venv.zip/venv/bin/python3 执行以下命令运行程序。 per-job模式 ./bin/flink run --detached -t yarn-per-job -Dyarn.application.name=py_sql -pyarch venv.zip -pyexec venv.zip/venv/bin/python3 -py pyflink-sql.py 运行结果: yarn-application模式 ./bin/flink run-application --detached -t yarn-application -Dyarn.application.name=py_sql -Dyarn.ship-files=/opt/client/Flink/flink/yarnship/ -pyarch yarnship/venv.zip -pyexec venv.zip/venv/bin/python3 -pyclientexec venv.zip/venv/bin/python3 -pyfs yarnship -pym pyflink-sql 运行结果: yarn-session模式 在启动yarnsession之前需要参考准备本地应用开发环境章节准备运行环境,使用下面命令启动yarn-session: bin/yarn-session.sh -jm 1024 -tm 4096 -t conf/ssl/ -d 使用下面命令提交任务: ./bin/flink run --detached -t yarn-session -Dyarn.application.name=py_sql -Dyarn.application.id=application_1685505909197_0285 -pyarch conf/ssl/venv.zip -pyexec conf/ssl/venv.zip/venv/bin/python3 -py conf/ssl/pyflink-sql.py 运行结果: 父主题: PyFlink样例程序
  • 代码样例 以下代码片段在com.huawei.bigdata.hbase.examples包的“PhoenixSample”类的testSelect方法中。 /** * Select Data */ public void testSelect() { LOG.info("Entering testSelect."); String URL = "jdbc:phoenix:" + conf.get("hbase.zookeeper.quorum"); // Query String querySQL = "SELECT * FROM TEST WHERE id = ?"; Connection conn = null; PreparedStatement preStat = null; Statement stat = null; ResultSet result = null; try { // Create Connection conn = DriverManager.getConnection(url, props); // Create Statement stat = conn.createStatement(); // Create PrepareStatement preStat = conn.prepareStatement(querySQL); // Execute query preStat.setInt(1, 1); result = preStat.executeQuery(); // Get result while (result.next()) { int id = result.getInt("id"); String name = result.getString(1); System.out.println("id: " + id); System.out.println("name: " + name); } LOG.info("Select successfully."); } catch (Exception e) { LOG.error("Select failed.", e); } finally { if (null != result) { try { result.close(); } catch (Exception e2) { LOG.error("Result close failed.", e2); } } if (null != stat) { try { stat.close(); } catch (Exception e2) { LOG.error("Stat close failed.", e2); } } if (null != conn) { try { conn.close(); } catch (Exception e2) { LOG.error("Connection close failed.", e2); } } } LOG.info("Exiting testSelect."); }
  • 代码样例 以下代码片段是导出用户列表的示例,在“rest”包的“ExportUsers”类的main方法中。 String operationName = "ExportUsers"; String exportOperationUrl = webUrl + EXPORT_URL; HttpManager httpManager = new HttpManager(); //调用导出接口 String responseLineContent = httpManager .sendHttpPostRequestWithString(httpClient, exportOperationUrl, StringUtils.EMPTY, operationName); //调用下载接口 operationName = "DownloadUsers"; JSONObject jsonObj = JSON.parseObject(responseLineContent); String downloadOperationUrl = webUrl + DOWNLOAD_URL + jsonObj.getString("fileName"); httpManager.sendHttpGetRequest(httpClient, downloadOperationUrl, operationName);
  • Oozie简介 Oozie是一个用来管理Hadoop job任务的工作流引擎,Oozie流程基于有向无环图(Directed Acyclical Graph)来定义和描述,支持多种工作流模式及流程定时触发机制。易扩展、易维护、可靠性高,与Hadoop生态系统各组件紧密结合。 Oozie流程的三种类型: Workflow 描述一个完整业务的基本流程。 Coordinator Coordinator流程构建在Workflow流程之上,实现了对Workflow流程的定时触发、按条件触发功能。 Bundle Bundle流程构建在Coordinator流程之上,提供对多个Coordinator流程的统一调度、控制和管理功能。 Oozie主要特点: 支持分发、聚合、选择等工作流程模式。 与Hadoop生态系统各组件紧密结合。 流程变量支持参数化。 支持流程定时触发。 自带一个Web Console,提供了流程查看、流程监控、日志查看等功能。
  • Oozie应用开发常见概念 流程定义文件 描述业务逻辑的XML文件,包括“workflow.xml”、“coordinator.xml”、“bundle.xml”三类,最终由Oozie引擎解析并执行。 流程属性文件 流程运行期间的参数配置文件,对应文件名为“job.properties”,每个流程定义有且仅有一个该属性文件。 keytab文件 存放用户信息的密钥文件。在安全模式下,应用程序采用此密钥文件进行API方式认证。 Client 客户端直接面向用户,可通过Java API、Shell API、 REST API或者Web UI访问Oozie服务端。
  • 数据规划 首先需要把原日志文件放置在HDFS系统里。 本地新建两个文本文件input_data1.txt和input_data2.txt,将log1.txt中的内容复制保存到input_data1.txt,将log2.txt中的内容复制保存到input_data2.txt。 在HDFS客户端路径下建立一个文件夹,“/tmp/input”,并上传input_data1.txt,input_data2.txt到此目录,命令如下: 在Linux系统HDFS客户端使用命令hadoop fs -mkdir /tmp/input(hdfs dfs命令有同样的作用),创建对应目录。 进入到HDFS客户端下的“/tmp/input”目录,在Linux系统HDFS客户端使用命令在Linux系统HDFS客户端使用命令hadoop fs -put input_data1.txt /tmp/input和hadoop fs -put input_data2.txt /tmp/input,上传数据文件。
  • 场景说明 假定用户有某个周末网民网购停留时间的日志文本,基于某些业务要求,要求开发Spark应用程序实现如下功能: 统计日志文件中本周末网购停留总时间超过2个小时的女性网民信息。 周末两天的日志文件第一列为姓名,第二列为性别,第三列为本次停留时间,单位为分钟,分隔符为“,”。 log1.txt:周六网民停留日志 LiuYang,female,20 YuanJing,male,10 GuoYijun,male,5 CaiXuyu,female,50 Liyuan,male,20 FangBo,female,50 LiuYang,female,20 YuanJing,male,10 GuoYijun,male,50 CaiXuyu,female,50 FangBo,female,60 log2.txt:周日网民停留日志 LiuYang,female,20 YuanJing,male,10 CaiXuyu,female,50 FangBo,female,50 GuoYijun,male,5 CaiXuyu,female,50 Liyuan,male,20 CaiXuyu,female,50 FangBo,female,50 LiuYang,female,20 YuanJing,male,10 FangBo,female,50 GuoYijun,male,50 CaiXuyu,female,50 FangBo,female,60
  • 代码样例 hbase.root.logger=INFO,console,RFA //hbase客户端日志输出配置,console:输出到控制台;RFA:输出到日志文件 hbase.security.logger=DEBUG,console,RFAS //hbase客户端安全相关的日志输出配置,console:输出到控制台;RFAS:输出到日志文件 hbase.log.dir=/var/log/Bigdata/hbase/client/ //日志路径,根据实际路径修改,但目录要有写入权限 hbase.log.file=hbase-client.log //日志文件名 hbase.log.level=INFO //日志级别,如果需要更详细的日志定位问题,需要修改为DEBUG,修改完需要重启进程才能生效 hbase.log.maxbackupindex=20 //最多保存的日志文件数目 # Security audit appender hbase.security.log.file=hbase-client-audit.log //审计日志文件命令
  • 参考信息 在添加规则时,可以参考表1配置相应的指标。 混合集群的支持分析集群和流式集群的所有指标。 表1该表中不同数值类型取值精度如下: 整型:整数。 百分比:0.01。 比率:0.01。 表1 弹性伸缩指标列表 集群类型 指标名称 数值类型 说明 流式集群 StormSlotAvailable 整型 Storm组件的可用slot数。 取值范围为[0~2147483646]。 StormSlotAvailablePercentage 百分比 Storm组件可用slot百分比。是可用slot数与总slot数的比值。 取值范围为[0~100]。 StormSlotUsed 整型 Storm组件的已用slot数。 取值范围为[0~2147483646]。 StormSlotUsedPercentage 百分比 Storm组件已用slot百分比。是已用slot数与总slot数的比值。 取值范围为[0~100]。 StormSupervisorMemAverageUsage 整型 Storm组件Supervisor的内存平均使用量。 取值范围为[0~2147483646]。 StormSupervisorMemAverageUsagePercentage 百分比 Storm组件Supervisor进程使用的内存占系统总内存的平均百分比。 取值范围[0 ~ 100]。 StormSupervisorCPUAverageUsagePercentage 百分比 Storm组件Supervisor进程使用的CPU占系统总CPU的平均百分比。 取值范围[0 ~ 6000]。 分析集群 YARNAppPending 整型 YARN组件挂起的任务数。 取值范围为[0~2147483646]。 YARNAppPendingRatio 比率 YARN组件挂起的任务数比例。是YARN挂起的任务数与YARN运行中的任务数比值。 取值范围为[0~2147483646]。 YARNAppRunning 整型 YARN组件运行中的任务数。 取值范围为[0~2147483646]。 YARNContainerAllocated 整型 YARN组件中已分配的container个数。 取值范围为[0~2147483646]。 YARNContainerPending 整型 YARN组件挂起的container个数。 取值范围为[0~2147483646]。 YARNContainerPendingRatio 比率 YARN组件挂起的container比率。是挂起的container数与运行中的container数的比值。 取值范围为[0~2147483646]。 YARNCPUAllocated 整型 YARN组件已分配的虚拟CPU核心数。 取值范围为[0~2147483646]。 YARNCPUAvailable 整型 YARN组件可用的虚拟CPU核心数。 取值范围为[0~2147483646]。 YARNCPUAvailablePercentage 百分比 YARN组件可用虚拟CPU核心数百分比。是可用虚拟CPU核心数与总虚拟CPU核心数比值。 取值范围为[0~100]。 YARNCPUPending 整型 YARN组件挂起的虚拟CPU核心数。 取值范围为[0~2147483646]。 YARNMemoryAllocated 整型 YARN组件已分配内存大小。单位为MB。 取值范围为[0~2147483646]。 YARNMemoryAvailable 整型 YARN组件可用内存大小。单位为MB。 取值范围为[0~2147483646]。 YARNMemoryAvailablePercentage 百分比 YARN组件可用内存百分比。是YARN组件可用内存大小与YARN组件总内存大小的比值。 取值范围为[0~100]。 YARNMemoryPending 整型 YARN组件挂起的内存大小。 取值范围为[0~2147483646]。 在添加资源计划时,可以参考表2配置相应的参数。 表2 资源计划配置项说明 配置项 说明 生效日期 资源计划的生效日期。默认是每日生效,也可以选择周一至周日任意一天或几天生效。 时间范围 资源计划的起始时间和结束时间,精确到分钟,取值范围[00:00, 23:59]。例如资源计划开始于早上8:00,结束于10:00,则配置为8:00-10:00。结束时间必须晚于开始时间至少30分钟。不同资源计划配置的时间段不可交叉。 节点数量范围 资源计划内的节点数量上下限,取值范围[0,500],在资源计划时间内,集群Task节点数量小于最小节点数时,弹性伸缩会将集群Task节点一次性扩容到最小节点数。在资源计划时间内,集群Task节点数量大于最大节点数时,弹性伸缩会将集群Task节点一次性缩容到最大节点数。最小节点数必须小于或等于最大节点数。
  • 弹性伸缩规则与资源计划叠加使用 登录MRS管理控制台。 选择“现有集群”,单击待操作的集群名称,进入集群详情页面。 选择“弹性伸缩”页签,进入配置弹性伸缩界面。 单击“新增弹性伸缩”按钮,并配置“节点数量范围”为“2 - 4”。 图2 配置弹性伸缩 配置资源计划。 单击默认范围下方的“配置指定时间段的节点数量范围”。 配置“时间范围”和“节点数量范围”。 “时间范围”:“07:00-13:00” “节点数量范围”:“5-8” 图3 弹性伸缩 配置弹性伸缩规则。 勾选“扩容”。 单击右侧“添加规则”,进入“添加规则”页面。 图4 添加规则 “规则名称”:default-expand-2 “如果”:在下拉框中选择规则对象及约束要求,例如YARNAppRunning 大于 75 “持续”:1个五分钟 “添加”:1个节点 “冷却时间”:20分钟 单击“确定”。 勾选“我同意授权MRS服务根据以上策略自动进行节点扩容/缩容操作。”。 单击“确定”,等待弹性伸缩集群设置完成。
  • 添加Task节点 MRS集群创建成功之后,如果需要规划Task类型的节点组进行弹性伸缩,可通过手动添加节点组的方式进行配置。 “自定义”类型集群添加Task节点操作步骤: 在集群详情页面,选择“节点管理”页签,单击“新增节点组”,进入“新增节点组”页面。 节点类型选择“Task”,“部署角色”参数默认选择“NM”部署NodeManager角色,则新增节点组为Task节点组,其他参数根据需要配置。 图1 添加Task节点组 非“自定义”类型集群添加Task节点操作步骤: 在集群详情页面,选择“节点管理”页签,单击“配置Task节点”,进入“配置Task节点”页面。 配置“节点类型”、“节点规格”、“节点数量”、“系统盘”,如开启“添加数据盘”后,还需要配置数据盘的存储类型、大小和数量。 单击“确定”。
  • 操作场景 本入门指导以如下业务场景为例,介绍弹性伸缩规则与资源计划均叠加使用的操作: 某项实时处理业务数据量在周一、周二和周六7:00~13:00出现规律性变化,但是数据量变化并非非常平稳。假设在周一、周二和周六7:00~13:00期间,需要Task节点的数量范围是5~8个,其他时间需要Task节点数量是2~4个。 因此可以在资源计划的基础上,设置基于负载的弹性伸缩规则,以实现当数据量超出预期后,Task节点数量可以在资源计划规定的范围内根据负载情况进行浮动,但不会超出该规定范围。资源计划触发时,会以变化最小的方式使节点数量满足计划规定范围,即如果需要扩容则扩容到计划节点数量范围的下限,如果需要缩容则缩容到计划节点数量范围的上限。
  • 监控指标参考 FusionInsight Manager转告警监控指标可分为节点信息指标与集群服务指标。表2表示节点中可配置阈值的指标、表3表示组件可配置阈值的指标。 下表中的“默认阈值”参数值以未开启分级告警开关为例,具体以实际界面显示为准。 表2 节点信息监控指标转告警列表(未开启分级告警开关) 监控指标组名称 监控指标名称 告警ID 告警名称 告警对系统的影响 默认阈值 CPU 主机CPU使用率 12016 CPU使用率超过阈值 业务进程响应缓慢或不可用。 90.0% 磁盘 磁盘使用率 12017 磁盘容量不足 业务进程不可用。 90.0% 磁盘inode使用率 12051 磁盘Inode使用率超过阈值 文件系统无法正常写入。 80.0% 内存 主机内存使用率 12018 内存使用率超过阈值 业务进程响应缓慢或不可用。 90.0% 主机状态 主机文件句柄使用率 12053 主机文件句柄使用率超过阈值 系统应用无法打开文件、网络等IO操作,程序异常。 80.0% 主机PID使用率 12027 主机PID使用率超过阈值 无法分配PID给新的业务进程,业务进程不可用。 90% 网络状态 TCP临时端口使用率 12052 TCP临时端口使用率超过阈值 主机上业务无法发起对外建立连接,业务中断。 80.0% 网络读信息 读包错误率 12047 网络读包错误率超过阈值 通信闪断,业务超时。 0.5% 读包丢包率 12045 网络读包丢包率超过阈值 业务性能下降或者个别业务出现超时问题。 0.5% 读吞吐率 12049 网络读吞吐率超过阈值 业务系统运行不正常或不可用。 80% 网络写信息 写包错误率 12048 网络写包错误率超过阈值 通信闪断,业务超时。 0.5% 写包丢包率 12046 网络写包丢包率超过阈值 业务性能下降或者个别业务出现超时问题。 0.5% 写吞吐率 12050 网络写吞吐率超过阈值 业务系统运行不正常或不可用。 80% 进程 D状态和Z状态进程总数 12028 主机D状态和Z状态进程数超过阈值 占用系统资源,业务进程响应变慢。 0 omm进程使用率 12061 进程使用率超过阈值 无法切换到omm用户。无法创建新的omm线程。 90 表3 集群监控指标转告警列表(未开启分级告警开关) 服务 监控指标名称 告警ID 告警名称 告警对系统的影响 默认阈值 DBService 数据库连接数使用率 27005 数据库连接数使用率超过阈值 可能导致上层服务无法连接DBService的数据库,影响正常业务。 90% 数据目录磁盘空间使用率 27006 数据目录磁盘空间使用率超过阈值 业务进程不可用。 当数据目录磁盘空间使用率超过90%时,数据库进入只读模式并发送告警“数据库进入只读模式”,业务数据丢失。 80% Flume Flume堆内存使用率 24006 Flume Server堆内存使用率超过阈值 堆内存溢出可能导致服务崩溃。 95.0% Flume直接内存使用率 24007 Flume Server直接内存使用率超过阈值 直接内存溢出可能导致服务崩溃。 80.0% Flume非堆内存使用率 24008 Flume Server非堆内存使用率超过阈值 非堆内存溢出可能导致服务崩溃。 80.0% Flume垃圾回收(GC)总时间 24009 Flume Server垃圾回收(GC)时间超过阈值 导致Flume数据传输效率低下。 12000ms HBase GC中回收old区所花时长 19007 HBase GC时间超出阈值 老年代GC时间超出阈值,会影响到HBase数据的读写。 5000ms RegionServer直接内存使用率统计 19009 HBase服务进程直接内存使用率超出阈值 HBase可用的直接内存不足,可能会造成内存溢出导致服务崩溃。 90% RegionServer堆内存使用率统计 19008 HBase服务进程堆内存使用率超出阈值 HBase可用内存不足,可能会造成内存溢出导致服务崩溃。 90% HMaster直接内存使用率统计 19009 HBase服务进程直接内存使用率超出阈值 HBase可用的直接内存不足,可能会造成内存溢出导致服务崩溃。 90% HMaster堆内存使用率统计 19008 HBase服务进程堆内存使用率超出阈值 HBase可用内存不足,可能会造成内存溢出导致服务崩溃。 90% 单个RegionServer的region数目 19011 RegionServer的Region数量超出阈值 RegionServer的Region数超出阈值,会影响HBase的数据读写性能。 2000 处在RIT状态达到阈值时长的region数 19013 region处在RIT状态的时长超过阈值。 表的部分数据丢失或不可用。 1 RegionServer的handler使用 19021 RegionServer活跃handler数超过阈值 RegionServer的handler使用率超出阈值,会影响RegionServer对外提供服务的能力,如果集群的大部分RegionServer的handler使用率超过阈值,可导致HBase无法对外提供服务。 90% 容灾同步失败次数 19006 HBase容灾同步失败 无法同步集群中HBase的数据到备集群,导致主备集群数据不一致。 1 主集群等待同步的日志文件数量 19020 HBase容灾等待同步的wal文件数量超过阈值 RegionServer等待同步的wal文件数量超出阈值,会影响HBase使用的znode超出阈值,影响HBase服务状态。 128 主集群等待同步的HFile文件数量 19019 HBase容灾等待同步的HFile文件数量超过阈值 RegionServer等待同步的HFile文件数量超出阈值,会影响HBase使用的znode超出阈值,影响HBase服务状态。 128 Compaction操作队列大小 19018 HBase合并队列超出阈值 产生该告警表示HBase服务的compaction队列长度已经超过规定的阈值,如果不及时处理,可能会导致集群性能下降,影响数据读写。 100 HDFS HDFS缺失的块数量 14003 丢失的HDFS块数量超过阈值 HDFS存储数据丢失,HDFS可能会进入安全模式,无法提供写服务。丢失的块数据无法恢复。 0 需要复制副本的块总数 14028 待补齐的块数超过阈值 HDFS存储数据丢失,HDFS可能会进入安全模式,无法提供写服务。丢失的块数据无法恢复。 1000 主NameNode RPC处理平均时间 14021 NameNode RPC处理平均时间超过阈值 NameNode无法及时处理来自HDFS客户端、依赖于HDFS的上层服务、DataNode等的RPC请求,表现为访问HDFS服务的业务运行缓慢,严重时会导致HDFS服务不可用。 100ms 主NameNode RPC队列平均时间 14022 NameNode RPC队列平均时间超过阈值 NameNode无法及时处理来自HDFS客户端、依赖于HDFS的上层服务、DataNode等的RPC请求,表现为访问HDFS服务的业务运行缓慢,严重时会导致HDFS服务不可用。 200ms HDFS磁盘空间使用率 14001 HDFS磁盘空间使用率超过阈值 HDFS集群磁盘容量不足,会影响到HDFS的数据写入。 80% DataNode磁盘空间使用率 14002 DataNode磁盘空间使用率超过阈值 DataNode容量不足,会影响到HDFS的数据写入。 80% 总副本预留磁盘空间所占比率 14023 总副本预留磁盘空间所占比率超过阈值 HDFS集群磁盘容量不足,会影响到HDFS的数据写入。如果DataNode的剩余空间都已经给副本预留,则写入HDFS数据失败。 90% 故障的DataNode总数 14009 Dead DataNode数量超过阈值 故障状态的DataNode节点无法提供HDFS服务。 3 NameNode非堆内存使用百分比统计 14018 NameNode非堆内存使用率超过阈值 HDFS NameNode非堆内存使用率过高,会影响HDFS的数据读写性能。 90% NameNode直接内存使用百分比统计 14017 NameNode直接内存使用率超过阈值 NameNode可用直接内存不足,可能会造成内存溢出导致服务崩溃。 90% NameNode堆内存使用百分比统计 14007 NameNode堆内存使用率超过阈值 HDFS NameNode堆内存使用率过高,会影响HDFS的数据读写性能。 95% DataNode直接内存使用百分比统计 14016 DataNode直接内存使用率超过阈值 DataNode可用直接内存不足,可能会造成内存溢出导致服务崩溃。 90% DataNode堆内存使用百分比统计 14008 DataNode堆内存使用率超过阈值 HDFS DataNode堆内存使用率过高,会影响到HDFS的数据读写性能。 95% DataNode非堆内存使用百分比统计 14019 DataNode非堆内存使用率超过阈值 HDFS DataNode非堆内存使用率过高,会影响HDFS的数据读写性能。 90% 垃圾回收时间统计(GC)(NameNode) 14014 NameNode进程垃圾回收(GC)时间超过阈值 NameNode进程的垃圾回收时间过长,可能影响该NameNode进程正常提供服务。 12000ms 垃圾回收时间统计(GC)(DataNode) 14015 DataNode进程垃圾回收(GC)时间超过阈值 DataNode进程的垃圾回收时间过长,可能影响该DataNode进程正常提供服务。 12000ms Hive Hive执行成功的HQL百分比 16002 Hive SQL执行成功率低于阈值 系统执行业务能力过低,无法正常响应客户请求。 90.0% Background线程使用率 16003 Background线程使用率超过阈值 后台Background线程数过多,导致新提交的任务无法及时运行。 90% MetaStore的总GC时间 16007 Hive GC 时间超出阈值 GC时间超出阈值,会影响到Hive数据的读写。 12000ms HiveServer的总GC时间 16007 Hive GC 时间超出阈值 GC时间超出阈值,会影响到Hive数据的读写。 12000ms Hive已经使用的HDFS空间占可使用空间的百分比 16001 Hive数据仓库空间使用率超过阈值 系统可能无法正常写入数据,导致部分数据丢失。 85.0% MetaStore直接内存使用率统计 16006 Hive服务进程直接内存使用超出阈值 Hive直接内存使用率过高,会影响Hive任务运行的性能,甚至造成内存溢出导致Hive服务不可用。 95% MetaStore非堆内存使用率统计 16008 Hive服务进程非堆内存使用超出阈值 Hive非堆内存使用率过高,会影响Hive任务运行的性能,甚至造成内存溢出导致Hive服务不可用。 95% MetaStore堆内存使用率统计 16005 Hive服务进程堆内存使用超出阈值 Hive堆内存使用率过高,会影响Hive任务运行的性能,甚至造成内存溢出导致Hive服务不可用。 95% HiveServer直接内存使用率统计 16006 Hive服务进程直接内存使用超出阈值 Hive直接内存使用率过高,会影响Hive任务运行的性能,甚至造成内存溢出导致Hive服务不可用。 95% HiveServer非堆内存使用率统计 16008 Hive服务进程非堆内存使用超出阈值 Hive非堆内存使用率过高,会影响Hive任务运行的性能,甚至造成内存溢出导致Hive服务不可用。 95% HiveServer堆内存使用率统计 16005 Hive服务进程堆内存使用超出阈值 Hive堆内存使用率过高,会影响Hive任务运行的性能,甚至造成内存溢出导致Hive服务不可用。 95% 连接到HiveServer的session数占最大允许session数的百分比 16000 连接到HiveServer的session数占最大允许数的百分比超过阈值 发生连接数告警时,表示连接到HiveServer的session数过多,将会导致无法建立新的连接。 90.0% Kafka 未完全同步的Partition百分比 38006 Kafka未完全同步的Partition百分比超过阈值 Kafka服务未完全同步的Partition数过多,会影响服务的可靠性,一旦发生leader切换,可能会导致丢数据。 50% broker上用户连接数使用率 38011 Broker上用户连接数使用率超过设定阈值 当同一个用户连接数太多时,产生告警的用户将无法与Broker建立新的连接。 80% Broker磁盘使用率 38001 Kafka磁盘容量不足 磁盘容量不足会导致Kafka写入数据失败。 80.0% Broker磁盘IO使用率 38009 Broker磁盘IO繁忙 Partition所在的磁盘分区IO过于繁忙,产生告警的Kafka Topic上可能无法写入数据。 80% Broker每分钟的垃圾回收时间统计(GC) 38005 Broker进程垃圾回收(GC)时间超过阈值 Broker进程的垃圾回收时间过长,可能影响该Broker进程正常提供服务。 12000ms Kafka堆内存使用率 38002 Kafka堆内存使用率超过阈值 Kafka可用内存不足,可能会造成内存溢出导致服务崩溃。 95% Kafka直接内存使用率 38004 Kafka直接内存使用率超过阈值 Kafka可用直接内存不足,可能会造成内存溢出导致服务崩溃。 95% Loader Loader堆内存使用率 23004 Loader堆内存使用率超过阈值 堆内存溢出可能导致服务崩溃。 95% Loader直接内存使用率统计 23006 Loader直接内存使用率超过阈值 直接内存溢出可能导致服务崩溃。 80.0% Loader非堆内存使用率 23005 Loader非堆内存使用率超过阈值 非堆内存溢出可能导致服务崩溃。 80% Loader的总GC时间 23007 Loader进程垃圾回收(GC)时间超过阈值 导致Loader服务响应缓慢。 12000ms Mapreduce 垃圾回收时间统计(GC) 18012 JobHistoryServer进程垃圾回收(GC)时间超过阈值 JobHistoryServer进程的垃圾回收时间过长,可能影响该JobHistoryServer进程正常提供服务。 12000ms JobHistoryServer直接内存使用百分比统计 18015 JobHistoryServer直接内存使用率超过阈值 MapReduce可用直接内存不足,可能会造成内存溢出导致服务崩溃。 90% JobHistoryServer非堆内存使用百分比统计 18019 JobHistoryServer非堆内存使用率超过阈值 MapReduce JobHistoryServer非堆内存使用率过高,会影响MapReduce任务提交和运行的性能,甚至造成内存溢出导致MapReduce服务不可用。 90% JobHistoryServer堆内存使用百分比统计 18009 JobHistoryServer堆内存使用率超过阈值 Mapreduce JobHistoryServer堆内存使用率过高,会影响Mapreduce 服务日志归档的性能,甚至造成内存溢出导致Mapreduce服务不可用。 95% Oozie Oozie堆内存使用率 17004 Oozie堆内存使用率超过阈值 堆内存溢出可能导致服务崩溃。 95.0% Oozie直接内存使用率 17006 Oozie直接内存使用率超过阈值 直接内存溢出可能导致服务崩溃。 80.0% Oozie非堆内存使用率 17005 Oozie非堆内存使用率超过阈值 非堆内存溢出可能导致服务崩溃。 80% Oozie垃圾回收(GC)总时间 17007 Oozie垃圾回收(GC)时间超过阈值 导致Oozie提交任务响应变慢。 12000ms Spark2x JDBCServer2x堆内存使用率统计 43010 JDBCServer2x进程堆内存使用超出阈值 JDBCServer2x进程堆内存使用率过高,会影响JDBCServer2x进程运行的性能,甚至造成内存溢出导致JDBCServer2x进程不可用。 95% JDBCServer2x直接内存使用率统计 43012 JDBCServer2x进程直接内存使用超出阈值 JDBCServer2x进程直接内存使用率过高,会影响JDBCServer2x进程运行的性能,甚至造成内存溢出导致JDBCServer2x进程不可用。 95% JDBCServer2x非堆内存使用率统计 43011 JDBCServer2x进程非堆内存使用超出阈值 JDBCServer2x进程非堆内存使用率过高,会影响JDBCServer2x进程运行的性能,甚至造成内存溢出导致JDBCServer2x进程不可用。 95% JobHistory2x直接内存使用率统计 43008 JobHistory2x进程直接内存使用超出阈值 JobHistory2x进程直接内存使用率过高,会影响JobHistory2x进程运行的性能,甚至造成内存溢出导致JobHistory2x进程不可用。 95% JobHistory2x非堆内存使用率统计 43007 JobHistory2x进程非堆内存使用超出阈值 JobHistory2x进程非堆内存使用率过高,会影响JobHistory2x进程运行的性能,甚至造成内存溢出导致JobHistory2x进程不可用。 95% JobHistory2x堆内存使用率统计 43006 JobHistory2x进程堆内存使用超出阈值 JobHistory2x进程堆内存使用率过高,会影响JobHistory2x进程运行的性能,甚至造成内存溢出导致JobHistory2x进程不可用。 95% IndexServer2x直接内存使用率统计 43021 IndexServer2x进程直接内存使用超出阈值 IndexServer2x进程直接内存使用率过高,会影响IndexServer2x进程运行的性能,甚至造成内存溢出导致IndexServer2x进程不可用。 95% IndexServer2x堆内存使用率统计 43019 IndexServer2x进程堆内存使用超出阈值 IndexServer2x进程堆内存使用率过高,会影响IndexServer2x进程运行的性能,甚至造成内存溢出导致IndexServer2x进程不可用。 95% IndexServer2x非堆内存使用率统计 43020 IndexServer2x进程非堆内存使用超出阈值 IndexServer2x进程非堆内存使用率过高,会影响IndexServer2x进程运行的性能,甚至造成内存溢出导致IndexServer2x进程不可用。 95% JDBCServer2x的Full GC次数 43017 JDBCServer2x进程Full GC次数超出阈值 GC次数超出阈值,会影响JDBCServer2x进程运行的性能,甚至造成JDBCServer2x进程不可用。 12 JobHistory2x的Full GC次数 43018 JobHistory2x进程Full GC次数超出阈值 GC次数超出阈值,会影响JobHistory2x进程运行的性能,甚至造成JobHistory2x进程不可用。 12 IndexServer2x的Full GC次数 43023 IndexServer2x进程Full GC次数超出阈值 GC次数超出阈值,会影响IndexServer2x进程运行的性能,甚至造成IndexServer2x进程不可用。 12 JDBCServer2x的总GC时间 43013 JDBCServer2x进程GC时间超出阈值 GC时间超出阈值,会影响JDBCServer2x进程运行的性能,甚至造成JDBCServer2x进程不可用。 12000ms JobHistory2x的总GC时间 43009 JobHistory2x进程GC时间超出阈值 GC时间超出阈值,会影响JobHistory2x进程运行的性能,甚至造成JobHistory2x进程不可用。 12000ms IndexServer2x的总GC时间 43022 IndexServer2x进程GC时间超出阈值 GC时间超出阈值,会影响IndexServer2x进程运行的性能,甚至造成IndexServer2x进程不可用。 12000ms Storm Supervisor数 26052 Storm服务可用Supervisor数量小于阈值 集群已经存在的任务无法运行;集群可接收新的Storm任务,但是无法运行。 1 已用Slot比率 26053 Storm Slot使用率超过阈值 用户无法执行新的Storm任务。 80.0% Nimbus堆内存使用率 26054 Nimbus堆内存使用率超过阈值 Storm Nimbus堆内存使用率过高时可能造成频繁GC,甚至造成内存溢出,进而影响Storm任务提交。 80% Yarn NodeManager直接内存使用百分比统计 18014 NodeManager直接内存使用率超过阈值 NodeManager可用直接内存不足,可能会造成内存溢出导致服务崩溃。 90% NodeManager堆内存使用百分比统计 18018 NodeManager堆内存使用率超过阈值 NodeManager堆内存使用率过高,会影响Yarn任务提交和运行的性能,甚至可能会造成内存溢出导致Yarn服务崩溃。 95% NodeManager非堆内存使用百分比统计 18017 NodeManager非堆内存使用率超过阈值 Yarn NodeManager非堆内存使用率过高,会影响Yarn任务提交和运行的性能,甚至造成内存溢出导致Yarn服务不可用。 90% ResourceManager直接内存使用百分比统计 18013 ResourceManager直接内存使用率超过阈值 ResourceManager可用直接内存不足,可能会造成内存溢出导致服务崩溃。 90% ResourceManager堆内存使用百分比统计 18008 ResourceManager堆内存使用率超过阈值 Yarn ResourceManager堆内存使用率过高,会影响Yarn任务提交和运行的性能,甚至造成内存溢出导致Yarn服务不可用。 95% ResourceManager非堆内存使用百分比统计 18016 ResourceManager非堆内存使用率超过阈值 Yarn ResourceManager非堆内存使用率过高,会影响Yarn任务提交和运行的性能,甚至造成内存溢出导致Yarn服务不可用。 90% 垃圾回收时间统计(GC) (NodeManager) 18011 NodeManager进程垃圾回收(GC)时间超过阈值 NodeManager进程的垃圾回收时间过长,可能影响该NodeManager进程正常提供服务。 12000ms 垃圾回收时间统计(GC)(ResourceManager) 18010 ResourceManager进程垃圾回收(GC)时间超过阈值 ResourceManager进程的垃圾回收时间过长,可能影响该ResourceManager进程正常提供服务。 12000ms root队列下失败的任务数 18026 Yarn上运行失败的任务数超过阈值 大量应用任务运行失败。 运行失败的任务需要重新提交。 50 root队列下被杀死的任务数 18025 Yarn被终止的任务数超过阈值 大量应用任务被强制终止。 50 挂起的内存量 18024 Yarn任务挂起内存超过阈值 应用任务结束时间变长。 新应用提交后长时间无法运行。 83886080MB 正在挂起的任务 18023 Yarn任务挂起数超过阈值 应用任务结束时间变长。 新应用提交后长时间无法运行。 60 ZooKeeper ZooKeeper连接数使用率 13001 ZooKeeper可用连接数不足 ZooKeeper可用连接数不足,当连接率超过100%时无法处理外部连接。 80% ZooKeeper堆内存使用率 13004 ZooKeeper堆内存使用率超过阈值 ZooKeeper可用内存不足,可能会造成内存溢出导致服务崩溃。 95% ZooKeeper直接内存使用率 13002 ZooKeeper直接内存使用率超过阈值 ZooKeeper可用内存不足,可能会造成内存溢出导致服务崩溃。 80% ZooKeeper每分钟的垃圾回收时间统计(GC) 13003 ZooKeeper进程垃圾回收(GC)时间超过阈值 ZooKeeper进程的垃圾回收时间过长,可能影响该ZooKeeper进程正常提供服务。 12000ms Ranger UserSync垃圾回收(GC)时间 45284 UserSync垃圾回收(GC)时间超过阈值 导致UserSync响应缓慢。 12000ms PolicySync垃圾回收(GC)时间 45292 PolicySync垃圾回收(GC)时间超过阈值 导致PolicySync响应缓慢。 12000ms RangerAdmin垃圾回收(GC)时间 45280 RangerAdmin垃圾回收(GC)时间超过阈值 导致RangerAdmin响应缓慢。 12000ms TagSync垃圾回收(GC)时间 45288 TagSync垃圾回收(GC)时间超过阈值 导致TagSync响应缓慢。 12000ms UserSync非堆内存使用率 45283 UserSync非堆内存使用率超过阈值 非堆内存溢出可能导致服务崩溃。 80.0% UserSync直接内存使用率 45282 UserSync直接内存使用率超过阈值 直接内存溢出可能导致服务崩溃。 80.0% UserSync堆内存使用率 45281 UserSync堆内存使用率超过阈值 堆内存溢出可能导致服务崩溃。 95.0% PolicySync直接内存使用率 45290 PolicySync直接内存使用率超过阈值 直接内存溢出可能导致服务崩溃。 80.0% PolicySync堆内存使用率 45289 PolicySync堆内存使用率超过阈值 堆内存溢出可能导致服务崩溃。 95.0% PolicySync非堆内存使用率 45291 PolicySync非堆内存使用率超过阈值 非堆内存溢出可能导致服务崩溃。 80.0% RangerAdmin非堆内存使用率 45279 RangerAdmin非堆内存使用率超过阈值 非堆内存溢出可能导致服务崩溃。 80.0% RangerAdmin堆内存使用率 45277 RangerAdmin堆内存使用率超过阈值 堆内存溢出可能导致服务崩溃。 95.0% RangerAdmin直接内存使用率 45278 RangerAdmin直接内存使用率超过阈值 直接内存溢出可能导致服务崩溃。 80.0% TagSync直接内存使用率 45286 TagSync直接内存使用率超过阈值 直接内存溢出可能导致服务崩溃。 80.0% TagSync非堆内存使用率 45287 TagSync非堆内存使用率超过阈值 非堆内存溢出可能导致服务崩溃。 80.0% TagSync堆内存使用率 45285 TagSync堆内存使用率超过阈值 堆内存溢出可能导致服务崩溃。 95.0% ClickHouse Clickhouse服务在ZooKeeper的数量配额使用率 45426 ClickHouse服务在ZooKeeper的数量配额使用率超过阈值 ClickHouse在ZooKeeper的数量配额超过阈值后,无法通过FusionInsight Manager对ClickHouse进行集群操作,无法使用ClickHouse服务功能。 90% Clickhouse服务在ZooKeeper的容量配额使用率 45427 ClickHouse服务在ZooKeeper的容量配额使用率超过阈值 ClickHouse在ZooKeeper的容量配额超过阈值后,无法通过FusionInsight Manager对ClickHouse进行集群操作,无法使用ClickHouse服务功能。 90% IoTDB 合并任务 (空间内合并) 的最大时延 45594 IoTDBServer空间内合并执行时长超过阈值 空间内合并任务超时,会阻塞写数据,影响写操作的性能。 300000ms 合并任务 (Flush) 的最大时延 45593 IoTDBServer Flush执行时长超过阈值 Flush任务超时,会阻塞写数据,影响写操作的性能。 300000ms 合并任务 (跨空间合并) 的最大时延 45595 IoTDBServer跨空间合并执行时长超过阈值 跨空间合并任务超时,会阻塞写数据,影响写操作的性能。 300000ms RPC (executeStatement) 的最大时延 45592 IoTDBServer RPC执行时长超过阈值 IoTDBServer进程RPC过高,会影响IoTDBServer进程运行的性能。 10000s IoTDBServer垃圾回收(GC)总时间 45587 IoTDBServer垃圾回收(GC)时间超过阈值 IoTDBServer进程的垃圾回收(GC)时间过长,可能影响该IoTDBServer进程正常提供服务。 12000ms ConfigNode垃圾回收(GC)总时间 45590 ConfigNode垃圾回收(GC)时间超过阈值 ConfigNode进程的垃圾回收(GC)时间过长,可能影响该ConfigNode进程正常提供服务。 12000ms IoTDBServer堆内存使用率 45586 IoTDBServer堆内存使用率超过阈值 IoTDBServer进程堆内存使用率过高,会影响IoTDBServer进程运行的性能,甚至造成内存溢出导致IoTDBServer进程不可用。 90% IoTDBServer直接内存使用率 45588 IoTDBServer直接内存使用率超过阈值 直接内存溢出可能导致服务崩溃。 90% ConfigNode堆内存使用率 45589 ConfigNode堆内存使用率超过阈值 ConfigNode进程堆内存使用率过高,会影响ConfigNode进程运行的性能,甚至造成内存溢出导致ConfigNode进程不可用。 90% ConfigNode直接内存使用率 45591 ConfigNode直接内存使用率超过阈值 直接内存溢出可能导致IoTDB实例不可用。 90%
  • 步骤4:验证Jupyter Notebook访问MRS 在客户端节点执行如下命令,启动Jupyter Notebook。 PYSPARK_PYTHON=./Python/bin/python3 PYSPARK_DRIVER_PYTHON=jupyter-notebook PYSPARK_DRIVER_PYTHON_OPTS="--allow-root" pyspark --master yarn --executor-memory 2G --driver-memory 1G 在浏览器中输入“弹性IP地址:9999”地址,登录到Jupyter WebUI(保证ECS的安全组对外放通本地公网IP和9999端口),登录密码为2设置的密码。 图2 登录Jupyter WebUI 创建代码。 创建一个新的python3任务,使用Spark读取文件。 图3 创建Python任务 登录到集群Manager界面,在Yarn的WebUI页面上查看提交的pyspark应用。 图4 查看任务运行情况 验证pandas库调用。 图5 验证pandas
  • 对接Jupyter常见问题 pandas本地import使用时,报错如下: 参考以下步骤进行处理: 执行命令python -m pip install backports.lzma安装lzma模块,如下图所示: 进入“/usr/local/python3/lib/python3.6”目录(机器不同,目录也有所不同,可以通过which命令来查找当前运行python是使用的那个目录的),然后编辑lzma.py文件。 将: from _lzma import * from _lzma import _encode_filter_properties, _decode_filter_properties 更改为: try: from _lzma import * from _lzma import _encode_filter_properties, _decode_filter_properties except ImportError: from backports.lzma import * from backports.lzma import _encode_filter_properties, _decode_filter_properties 修改前: 修改后: 保存退出,然后再次执行import。
  • 步骤3:安装Jupyter Notebook 使用root用户登录客户端节点,执行如下命令安装Jupyter Notebook。 pip3 install jupyter notebook 显示结果如下,表示安装成功: 为保障系统安全,需要生成一个密文密码用于登录Jupyter,放到Jupyter Notebook的配置文件中。 执行如下命令,需要输入两次密码:(进行到Out[3]退出) ipython [root@ecs-notebook python36]# ipython Python 3.6.6 (default, Dec 20 2021, 09:32:25) Type 'copyright', 'credits' or 'license' for more information IPython 7.16.2 -- An enhanced Interactive Python. Type '?' for help. In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password: Out[2]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$g14BqLddl927n/unsyPlLQ$YmoKJzbUfNG7LcxylJzm90bgbKWUIiHy6ZV+ObTzdcA 执行如下命令生成Jupyter配置文件。 jupyter notebook --generate-config 修改配置文件。 vi ~/.jupyter/jupyter_notebook_config.py 添加如下配置: # -*- coding: utf-8 -*- c.NotebookApp.ip='*' #此处填写ecs对应的内网IP c.NotebookApp.password = u'argon2:$argon2id$v=19$m=10240,t=10,p=8$NmoAVwd8F6vFP2rX5ZbV7w$SyueJoC0a5TbCuHYzqfSx1vQcFvOTTryR+0uk2MNNZA' # 填写步骤2,Out[2]密码生成的密文 c.NotebookApp.open_browser = False # 禁止自动打开浏览器 c.NotebookApp.port = 9999 # 指定端口号 c.NotebookApp.allow_remote_access = True
  • Jupyter对接方案概述 在MRS服务中可以配合Jupyter Notebook使用PySpark,能够提高机器学习、数据探索和ETL应用开发效率。 本实践指导用户如何在MRS集群中配置Jupyter Notebook来使用Pyspark。 具体流程如下: 步骤1:在MRS集群外节点安装客户端 步骤2:安装Python3 步骤3:安装Jupyter Notebook 步骤4:验证Jupyter Notebook访问MRS 本实践仅适用于MRS 3.x及之后版本,且在集群外客户端节点中安装Python3。
  • 步骤2:安装Python3 使用root用户,登录集群外客户端节点,执行如下命令,检查是否安装了Python3。 python3 --version 是,执行8。 否,执行2。 本案例仅适用于集群外客户端节点安装Python3。 安装Python,此处以Python 3.6.6为例。 执行如下命令,安装相关依赖: yum install zlib zlib-devel zip -y yum install gcc-c++ yum install openssl-devel yum install sqlite-devel -y 如果pandas库需要额外安装如下依赖: yum install -y xz-devel yum install bzip2-devel 下载对应Python版本源码。 wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz 执行如下命令,解压python源码压缩包,例如下载在“opt”目录下。 cd /opt tar -xvf Python-3.6.6.tgz 创建Python的安装目录,此处以“/opt/python36”为例。 mkdir /opt/python36 编译Python。 cd /opt/python-3.6.6 ./configure --prefix=/opt/python36 执行成功,显示结果如下: 执行make -j8命令,执行成功,显示结果如下: 执行make install命令,执行成功,显示结果如下: 执行如下命令,配置Python环境变量。 export PYTHON_HOME=/opt/python36 export PATH=$PYTHON_HOME/bin:$PATH 执行python3 --version命令,显示结果如下,表示Python已经安装完成。 Python 3.6.6 验证Python3。 pip3 install helloword python3 import helloworld helloworld.say_hello("test") 测试安装第三方Python库(如pandas、sklearn)。 pip3 install pandas pip3 install backports.lzma pip3 install sklearn 执行命令python3 -m pip list,查看安装结果。 打包Python.zip cd /opt/python36/ zip -r python36.zip ./* 上传到HDFS指定目录。 hdfs dfs -mkdir /user/python hdfs dfs -put python36.zip /user/python 配置MRS客户端。 进入Spark客户端安装目录“/opt/client/Spark2x/spark/conf”,在“spark-defaults.conf”配置文件如下参数。 spark.pyspark.driver.python=/usr/bin/python3 spark.yarn.dist.archives=hdfs://hacluster/user/python/python36.zip#Python
  • 使用spark-submit提交任务 使用root用户登录客户端节点,执行如下命令: cd 客户端安装目录 source bigdata_env source Spark2x/component_env 安全集群(开启kerberos认证)执行命令kinit spark_test,普通模式(关闭kerberos认证)无需执行。 输入密码,完成认证(第一次登录需要修改密码)。 cd Spark2x/spark/bin sh spark-submit --queue tenant_spark --class org.apache.spark.examples.SparkPi --master yarn-client ../examples/jars/spark-examples_*.jar
共100000条