华为云用户手册

  • 建议 事实表采用日期分区表,维度表采用非分区或者大颗粒度的日期分区 是否采用分区表要根据表的总数据量、增量和使用方式来决定。从表的使用属性看事实表和维度表具有的特点: 事实表:数据总量大,增量大,数据读取多以日期做切分,读取一定时间段的数据。 维度表:总量相对小,增量小,多以更新操作为主,数据读取会是全表读取,或者按照对应业务ID过滤。 基于以上考虑,维度表采用天分区会导致文件数过多,而且是全表读取,会导致所需要的文件读取Task过多,采用大颗粒度的日期分区,例如年分区,可以有效降低分区个数和文件数量;对于增量不是很大的维度表,也可以采用非分区表。如果维度表的总数据量很大或者增量也很大,可以考虑采用某个业务ID进行分区,在大部分数据处理逻辑中针对大维度表,会有一定的业务条件进行过滤来提升处理性能,这类表要结合一定的业务场景来进行优化,无法从单纯的日期分区进行优化。事实表读取方式都会按照时间段切分,近一年、近一个月或者近一天,读取的文件数相对稳定可控,所以事实表优先考虑日期分区表。 分区采用日期字段,分区表粒度,要基于数据更新范围确定,不要过大也不要过小。 分区粒度可以采用年、月、日,分区粒度的目标是减少同时写入的文件桶数,尤其是在有数据量更新,且更新数据有一定时间范围规律的,比如:近一个月的数据更新占比最大,可以按照月份创建分区;近一天内的数据更新占比大,可以按照天进行分区。 采用Bucket索引,写入是通过主键Hash打散的,数据会均匀的写入到分区下每个桶。因为各个分区的数据量是会有波动的,分区下桶的个数设计一般会按照最大分区数据量计算,这样会出现越细粒度的分区,桶的个数会冗余越多。例如: 采用天级分区,平均的日增数据量是3GB,最多一天的日志是8GB,这个会采用Bucket桶数= 8GB/2GB = 4 来创建表;每天的更新数据占比较高,且主要分散到近一个月。这样会导致结果是,每天的数据会写入到全月的Bucket桶中,那就是4*30 = 120个桶。如果采用月分区,分区桶的个数= 3GB * 30 /2GB = 45个桶 ,这样写入的数据桶数减少到了45个桶。在有限的计算资源下,写入的桶数越少,性能越高。
  • 修改OU标签 添加OU标签 以组织管理员或管理账号的身份登录华为云,进入华为云Organizations控制台,进入组织管理页面。 选中要修改的OU,在右侧的组织单元信息页,选择“标签”页签,单击“添加”。 图2 添加组织单元标签 在弹窗中,填写标签键和标签值,单击“添加”。可重复本步骤添加多个标签,已添加的标签总数不能超过20个。 单击“确定”,完成标签添加。 删除OU标签 以组织管理员或管理账号的身份登录华为云,进入华为云Organizations控制台,进入组织管理页面。 选中要修改的OU,在右侧的组织单元信息页,选择“标签”页签。 单击标签操作列的“删除”,在弹窗中单击“确定”,完成标签删除。 图3 删除标签 修改OU标签键值 以组织管理员或管理账号的身份登录华为云,进入华为云Organizations控制台,进入组织管理页面。 选中要修改的OU,在右侧的组织单元信息页,选择“标签”页签。 单击标签操作列的“编辑”,在弹窗中填写新的标签值,单击“确定”完成标签的修改。 图4 修改标签
  • 修改OU策略 绑定策略 以组织管理员或管理账号的身份登录华为云,进入华为云Organizations控制台,进入组织管理页面。 选中要修改的OU,在右侧的组织单元信息页,选择“策略”页签。 选择要修改的策略类型,此处以“服务控制策略”为例,单击服务控制策略前方的,展开策略列表,单击“绑定”。 图5 绑定策略 在弹窗中选择要添加的策略,单击“绑定”,完成策略绑定。 图6 完成绑定 解绑策略 以组织管理员或管理账号的身份登录华为云,进入华为云Organizations控制台,进入组织管理页面。 选中要修改的OU,在右侧的组织单元信息页,选择“策略”页签。 选择要修改的策略类型,此处以“服务控制策略”为例,单击服务控制策略前方的,展开策略列表。 单击要解绑策略操作列的“解绑”,在弹窗中单击“确定”,完成策略解绑。 图7 解绑策略
  • 条件(Condition) 条件(Condition)是SCP生效的特定条件,包括条件键和运算符。 条件键表示SCP语句的Condition元素中的键值。根据适用范围,分为全局级条件键和服务级条件键。 全局级条件键(前缀为g:)适用于所有操作,在鉴权过程中,云服务不需要提供用户身份信息,系统将自动获取并鉴权。详情请参见:全局条件键。 服务级条件键(前缀通常为服务缩写,如bms:)仅适用于对应服务的操作,详情请参见表4。 单值/多值表示API调用时请求中与条件关联的值数。单值条件键在API调用时的请求中最多包含一个值,多值条件键在API调用时请求可以包含多个值。例如:g:SourceVpce是单值条件键,表示仅允许通过某个 VPC终端节点 发起请求访问某资源,一个请求最多包含一个VPC终端节点ID值。g:TagKeys是多值条件键,表示请求中携带的所有标签的key组成的列表,当用户在调用API请求时传入标签可以传入多个值。 运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,SCP才能生效。支持的运算符请参见:运算符。 BMS定义了以下可以在SCP的Condition元素中使用的条件键,您可以使用这些条件键进一步细化SCP语句应用的条件。 表4 BMS支持的服务级条件键 服务级条件键 类型 单值/多值 说明 bms:KmsKeyId string 多值 根据请求参数中指定的加密密钥ID过滤访问。 bms:Flavorld string 多值 根据请求参数中指定的规格ID过滤访问。 bms:VpcId string 多值 根据请求参数中指定的网络ID过滤访问。 bms:VpcSubnetId string 多值 根据请求参数中指定的子网ID过滤访问。
  • 示例7:创建表并设置多字符的分割符 示例说明:创建了一个名为table5的Hive表。表指定序列化和反序列化类ROW FORMAT SERDE,字段之间的分隔符被设置为/#,并且数据以文本文件格式存储。 只有指定ROW FORMAT SERDE为org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe时,字段分隔符才支持设置为多字符。 本例指定字段分割符 field.delim'为“/#”。 ROW FORMAT功能只支持textfile类型的表。 1 2 3 4 5 6 7 8 9 CREATE TABLE IF NOT EXISTs table5 ( col_1 STRING, col_2 INT ) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' WITH SERDEPROPERTIES ( 'field.delim' = '/#' ) STORED AS textfile;
  • 示例7:创建表并设置多字符的分割符 示例说明:创建了一个名为table5的Hive表。表指定序列化和反序列化类ROW FORMAT SERDE,字段之间的分隔符被设置为/#,并且数据以文本文件格式存储。 只有指定ROW FORMAT SERDE为org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe时,字段分隔符才支持设置为多字符。 本例指定字段分割符 field.delim'为“/#”。 ROW FORMAT功能只支持textfile类型的表。 1 2 3 4 5 6 7 8 9 CREATE TABLE IF NOT EXISTs table5 ( col_1 STRING, col_2 INT ) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' WITH SERDEPROPERTIES ( 'field.delim' = '/#' ) STORED AS textfile;
  • 调用API获取项目ID 项目ID还可通过调用查询指定条件下的项目信息API获取。 获取项目ID的接口为“GET https://{Endpoint}/v3/projects/”,其中{Endpoint}为 IAM 的终端节点,可以从地区与终端节点获取。接口的认证鉴权请参见认证鉴权。 响应示例如下,其中projects下的“id”即为项目ID。 { "projects": [ { "domain_id": "65382450e8f64ac0870cd180d14e684b", "is_domain": false, "parent_id": "65382450e8f64ac0870cd180d14e684b", "name": "xx-north-4", "description": "", "links": { "next": null, "previous": null, "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99" }, "id": "a4a5d4098fb4474fa22cd05f897d6b99", "enabled": true } ], "links": { "next": null, "previous": null, "self": "https://www.example.com/v3/projects" } }
  • MRS 各组件样例工程汇总 样例工程获取地址参见获取MRS应用开发样例工程,切换分支为与MRS集群相匹配的版本分支,然后下载压缩包到本地后解压,即可获取各组件对应的样例代码工程。 MRS样例代码库提供了各组件的基本功能样例工程供用户使用,当前版本各组件提供的样例工程汇总参见表1。 表1 各组件样例工程汇总 组件 样例工程位置 描述 ClickHouse clickhouse-examples 指导用户基于Java语言,实现MRS集群中的ClickHouse的数据表创建、删除以及数据的插入、查询等操作。 本工程中包含了建立服务端连接、创建数据库、创建数据表、插入数据、查询数据及删除数据表等操作示例。 Flink 开启Kerberos认证集群的样例工程目录“flink-examples/flink-examples-security”。 未开启Kerberos认证集群的样例工程目录为“flink-examples/flink-examples-normal”。 FlinkCheckpointJavaExample Flink异步Checkpoint机制的Java/Scala示例程序。 本工程中,程序使用自定义算子持续产生数据,产生的数据为一个四元组(Long,String,String,Integer)。数据经统计后,将统计结果打印到终端输出。每隔6秒钟触发一次checkpoint,然后将checkpoint的结果保存到HDFS中。 FlinkCheckpointScalaExample FlinkKafkaJavaExample Flink向Kafka生产并消费数据的Java/Sacla示例程序。 在本工程中,假定某个Flink业务每秒就会收到1个消息记录,启动Producer应用向Kafka发送数据,然后启动Consumer应用从Kafka接收数据,对数据内容进行处理后并打印输出。 FlinkKafkaScalaExample FlinkPipelineJavaExample Flink Job Pipeline的Java/Sacla示例程序。 本样例中一个发布者Job自己每秒钟产生10000条数据,另外两个Job作为订阅者,分别订阅一份数据。订阅者收到数据之后将其转化格式,并抽样打印输出。 FlinkPipelineScalaExample FlinkSqlJavaExample 使用客户端通过jar作业提交SQL作业的应用开发示例。 FlinkStreamJavaExample Flink构造DataStream的Java/Sacla示例程序。 本工程示例为基于业务要求分析用户日志数据,读取文本数据后生成相应的DataStream,然后筛选指定条件的数据,并获取结果。 FlinkStreamScalaExample FlinkStreamSqlJoinExample Flink SQL Join示例程序。 本工程示例调用flink-connector-kafka模块的接口,生产并消费数据。生成Table1和Table2,并使用Flink SQL对Table1和Table2进行联合查询,打印输出结果。 HBase hbase-examples hbase-example HBase数据读写操作的应用开发示例。 通过调用HBase接口可实现创建用户表、导入用户数据、增加用户信息、查询用户信息及为用户表创建二级索引等功能。 hbase-rest-example HBase Rest接口应用开发示例。 使用Rest接口实现查询HBase集群信息、获取表、操作NameSpace、操作表等功能。 hbase-thrift-example 访问HBase ThriftServer应用开发示例。 访问ThriftServer操作表、向表中写数据、从表中读数据。 hbase-zk-example HBase访问ZooKeeper应用开发示例。 在同一个客户端进程内同时访问MRS ZooKeeper和第三方的ZooKeeper,其中HBase客户端访问MRS ZooKeeper,客户应用访问第三方ZooKeeper。 HDFS 开启Kerberos认证集群的样例工程目录“hdfs-example-security”。 未开启Kerberos认证集群的样例工程目录为“hdfs-example-normal”。 HDFS文件操作的Java示例程序。 本工程主要给出了创建HDFS文件夹、写文件、追加文件内容、读文件和删除文件/文件夹等相关接口操作示例。 hdfs-c-example HDFS C语言开发代码样例。 本示例提供了基于C语言的HDFS文件系统连接、文件操作如创建文件、读写文件、追加文件、删除文件等。 Hive hive-jdbc-example Hive JDBC处理数据Java示例程序。 本工程使用JDBC接口连接Hive,在Hive中执行相关数据操作。使用JDBC接口实现创建表、加载数据、查询数据等功能,还可实现在同一个客户端进程内同时访问 FusionInsight ZooKeeper和第三方的ZooKeeper。 hive-jdbc-example-multizk hcatalog-example Hive HCatalog处理数据Java示例程序。 使用HCatalog接口实现通过Hive命令行方式对MRS Hive元数据进行数据定义和查询操作。 python3-examples 使用Python3连接Hive执行SQL样例。 可实现使用Python3对接Hive并提交数据分析任务。 Kafka kafka-examples Kafka流式数据的处理Java示例程序。 本工程基于Kafka Streams完成单词统计功能,通过读取输入Topic中的消息,统计每条消息中的单词个数,从输出Topic消费数据,然后将统计结果以Key-Value的形式输出。 Manager manager-examples FusionInsight Manager API接口调用示例。 本工程调用Manager API接口实现集群用户的创建、修改及删除等操作。 MapReduce 开启Kerberos认证集群的样例工程目录“mapreduce-example-security”。 未开启Kerberos认证集群的样例工程目录为“mapreduce-example-normal”。 MapReduce任务提交Java示例程序。 本工程提供了一个MapReduce统计数据的应用开发示例,实现数据分析、处理,并输出满足用户需要的数据信息。 另外以MapReduce访问HDFS、HBase、Hive为例,介绍如何编写MapReduce作业访问多个服务组件。帮助用户理解认证、配置加载等关键使用方式。 Oozie 开启Kerberos认证集群的样例工程目录“oozie-examples/ooziesecurity-examples”。 未开启Kerberos认证集群的样例工程目录为“oozie-examples/oozienormal-examples”。 OozieMapReduceExample Oozie提交MapReduce任务示例程序。 本示例演示了如何通过Java API提交MapReduce作业和查询作业状态,对网站的日志文件进行离线分析。 OozieSparkHBaseExample 使用Oozie调度Spark访问HBase的示例程序。 OozieSparkHiveExample 使用Oozie调度Spark访问Hive的示例程序。 Spark 开启Kerberos认证集群的样例工程目录“spark-examples/sparksecurity-examples”。 未开启Kerberos认证集群的样例工程目录为“spark-examples/sparknormal-examples”。 SparkHbasetoCarbonJavaExample Spark同步HBase数据到CarbonData的Java示例程序。 本示例工程中,应用将数据实时写入HBase,用于点查业务。数据每隔一段时间批量同步到CarbonData表中,用于分析型查询业务。 SparkHbasetoHbaseJavaExample Spark从HBase读取数据再写入HBase的Java/Scala/Python示例程序。 本示例工程中,Spark应用程序实现两个HBase表数据的分析汇总。 SparkHbasetoHbasePythonExample SparkHbasetoHbaseScalaExample SparkHivetoHbaseJavaExample Spark从Hive读取数据再写入到HBase的Java/Scala/Python示例程序。 本示例工程中,Spark应用程序实现分析处理Hive表中的数据,并将结果写入HBase表。 SparkHivetoHbasePythonExample SparkHivetoHbaseScalaExample SparkJavaExample Spark Core任务的Java/Python/Scala/R示例程序。 本工程应用程序实现从HDFS上读取文本数据并计算分析。 SparkRExample示例不支持未开启Kerberos认证的集群。 SparkPythonExample SparkScalaExample SparkRExample SparkLauncherJavaExample 使用Spark Launcher提交作业的Java/Scala示例程序。 本工程应用程序通过org.apache.spark.launcher.SparkLauncher类采用Java/Scala命令方式提交Spark应用。 SparkLauncherScalaExample SparkOnHbaseJavaExample Spark on HBase场景的Java/Scala/Python示例程序。 本工程应用程序以数据源的方式去使用HBase,将数据以Avro格式存储在HBase中,并从中读取数据以及对读取的数据进行过滤等操作。 SparkOnHbasePythonExample SparkOnHbaseScalaExample SparkOnHudiJavaExample Spark on Hudi场景的Java/Scala/Python示例程序。 本工程应用程序使用Spark操作Hudi执行插入数据、查询数据、更新数据、增量查询、特定时间点查询、删除数据等操作。 SparkOnHudiPythonExample SparkOnHudiScalaExample SparkOnMultiHbaseScalaExample Spark同时访问两个集群中的HBase的Scala示例程序。 本示例不支持未开启Kerberos认证的集群。 SparkSQLJavaExample Spark SQL任务的Java/Python/Scala示例程序。 本工程应用程序实现从HDFS上读取文本数据并计算分析。 SparkSQLPythonExample SparkSQLScalaExample SparkStreamingKafka010JavaExample Spark Streaming从Kafka接收数据并进行统计分析的Java/Scala示例程序。 本工程应用程序实时累加计算Kafka中的流数据,统计每个单词的记录总数。 SparkStreamingKafka010ScalaExample SparkStreamingtoHbaseJavaExample010 Spark Streaming读取Kafka数据并写入HBase的Java/Scala/Python示例程序。 本工程应用程序每5秒启动一次任务,读取Kafka中的数据并更新到指定的HBase表中。 SparkStreamingtoHbasePythonExample010 SparkStreamingtoHbaseScalaExample010 SparkStructuredStreamingJavaExample 在Spark应用中,通过使用StructuredStreaming调用Kafka接口来获取单词记录,然后把单词记录分类统计,得到每个单词记录数。 SparkStructuredStreamingPythonExample SparkStructuredStreamingScalaExample SparkThriftServerJavaExample 通过JDBC访问Spark SQL的Java/Scala示例程序。 本示例中,用户自定义JD BCS erver的客户端,使用JDBC连接来进行表的创建、数据加载、查询和删除。 SparkThriftServerScalaExample StructuredStreamingADScalaExample 使用Structured Streaming,从kafka中读取广告请求数据、广告展示数据、广告点击数据,实时获取广告有效展示统计数据和广告有效点击统计数据,将统计结果写入kafka中。 StructuredStreamingStateScalaExample 在Spark结构流应用中,跨批次统计每个session期间发生了多少次event以及本session的开始和结束timestamp;同时输出本批次被更新状态的session。
  • MRS组件应用开发快速入门 MRS对外提供了基于组件的应用开发样例工程,以下相关快速入门可指导您创建MRS集群后,获取并导入样例工程,并在本地进行编译调测即可实现相应组件的应用开发: HBase应用开发快速入门可实现HBase表创建、数据插入、索引创建、表删除等操作。 HDFS应用开发快速入门可实现HDFS文件目录创建、文件写入、读取、删除等操作。 Hive JDBC应用开发快速入门可实现使用JDBC连接Hive后,在Hive中执行创建表、插入数据、读取数据等操作。 Hive HCatalog应用开发快速入门可实现使用HCatalog连接Hive后,在Hive中创建表、插入数据、读取数据等操作。 Kafka应用开发快速入门可实现流式数据的处理。 Flink应用开发快速入门可实现Flink DataStream程序处理数据操作。 ClickHouse应用开发快速入门可实现ClickHouse表创建、删除以及数据的插入、查询等操作。 Spark应用开发快速入门可实现从Hive表中读取数据并重新写入HBase表操作。
  • MRS 1.8.x 表7 MRS 1.8.x版本集群jar版本 组件 组件版本 jar版本 Zookeeper 3.5.1 3.5.1-mrs-1.8.0 Hadoop 2.8.3 2.8.3-mrs-1.8.0 HBase 1.3.1 1.3.1-mrs-1.8.0 OpenTSDB 2.3.0 - Hive 1.3.0 1.3.0-mrs-1.8.0 Hive_Spark 1.2.1 1.2.1.spark_2.2.1-mrs-1.8.0 Spark 2.2.1 2.2.1-mrs-1.8.0 Carbon 1.6.1 - Presto 0.215 0.215-mrs-1.8.0 Kafka 1.1.0 1.1.0-mrs-1.8.0 KafkaManager 1.3.3.18 - Flink 1.7.0 1.7.0-mrs-1.8.0 Storm 1.2.1 1.2.1-mrs-1.8.0 Flume 1.6.0 1.6.0-mrs-1.8.0 Hue 3.11.0 - Loader(Sqoop) 1.99.7 1.99.7-mrs-1.8.0 scala 2.11 -
  • MRS 1.9.x 表6 MRS 1.9.x版本集群jar版本 组件 组件版本 jar版本 Zookeeper 3.5.1 3.5.1-mrs-1.9.0 Hadoop 2.8.3 2.8.3-mrs-1.9.0 HBase 1.3.1 1.3.1-mrs-1.9.0 OpenTSDB 2.3.0 - Tez 0.9.1 0.9.1.0101-hw-ei-12 Hive 2.3.3 2.3.3-mrs-1.9.0 Hive_Spark 1.2.1 1.2.1.spark_2.2.1-mrs-1.9.0 Spark 2.2.2 2.2.2-mrs-1.9.0 Carbon 1.6.1 - Presto 0.216 0.216-mrs-1.9 Kafka 1.1.0 1.1.0-mrs-1.9.0 KafkaManager 1.3.3.1 - Flink 1.7.0 1.7.0-mrs-1.9.0 Storm 1.2.1 1.2.1-mrs-1.9.0 Flume 1.6.0 1.6.0-mrs-1.9.0 Hue 3.11.0 - Loader(Sqoop) 1.99.7 1.99.7-mrs-1.9.0 scala 2.11 -
  • MRS 3.0.x 表3 MRS 3.0.x版本集群jar版本 组件 组件版本 jar版本 Flink 1.10.0 1.10.0-hw-ei-302002 Hive 3.1.0 3.1.0-hw-ei-302002 Tez 0.9.2 0.9.1.0101-hw-ei-12 Spark 2.4.5 2.4.5-hw-ei-302002 CarbonData 2.0.0 - Hadoop 3.1.1 3.1.1-hw-ei-302002 HBase 2.2.3 2.2.3-hw-ei-302002 ZooKeeper 3.5.6 3.5.6-hw-ei-302002 Hue 4.7.0 - Oozie 5.1.0 5.1.0-hw-ei-302002 Flume 1.9.0 - Kafka 2.4.0 2.4.0-hw-ei-302002 Ranger 2.0.0 - Storm 1.2.0 1.2.1-hw-ei-302002 Phoenix 5.0.0 5.0.0-HBase-2.0-hw-ei-302002 Presto 316 316-hw-ei-302002 scala 2.11 -
  • MRS 2.1.x 表4 MRS 2.1.x版本集群jar版本 组件 组件版本 jar版本 Zookeeper 3.5.1 3.5.1-mrs-2.1 Hadoop 3.1.1 3.1.1-mrs-2.1 HBase 2.1.1 2.1.1-mrs-2.1 Tez 0.9.1 0.9.1.0101-hw-ei-12 Hive 3.1.0 3.1.0-mrs-2.1 Hive_Spark 1.2.1 1.2.1.spark_2.3.2-mrs-2.1 Spark 2.3.2 2.3.2-mrs-2.1 Carbon 1.5.1 - Presto 308 - Kafka 1.1.0 1.1.0-mrs-2.1 KafkaManager 1.3.3.18 - Flink 1.7.0 1.7.0-mrs-2.1 Storm 1.2.1 1.2.1-mrs-2.1 Flume 1.6.0 1.6.0-mrs-2.1 Hue 3.11.0 - Loader(Sqoop) 1.99.7 1.99.7-mrs-2.1 scala 2.11 NA
  • MRS 2.0.x 表5 2.0.x版本集群jar版本 组件 组件版本 jar版本 Zookeeper 3.5.1 3.5.1-mrs-2.0 Hadoop 3.1.1 3.1.1-mrs-2.0 HBase 2.1.1 2.1.1-mrs-2.0 Tez 0.9.1 0.9.1.0101-hw-ei-12 Hive 3.1.0 3.1.0-mrs-2.0 Hive_Spark 1.2.1 1.2.1.spark_2.3.2-mrs-2.0 Spark 2.3.2 2.3.2-mrs-2.0 Carbon 1.5.1 - Presto 308 - Kafka 1.1.0 1.1.0-mrs-2.0 KafkaManager 1.3.3.18 - Storm 1.2.1 1.2.1-mrs-2.0 Flume 1.6.0 1.6.0-mrs-2.0 Hue 3.11.0 - Loader(Sqoop) 1.99.7 1.99.7-mrs-2.0 scala 2.11 -
  • MRS 3.1.0 表2 MRS 3.1.0版本集群jar版本 组件 组件版本 jar版本 Flink 1.12.0 1.12.0-hw-ei-310003 Hive 3.1.0 3.1.0-hw-ei-310003 Tez 0.9.2 0.9.1.0101-hw-ei-12 Spark2x 2.4.5 2.4.5-hw-ei-310003 CarbonData 2.0.1 - Hadoop 3.1.1 3.1.1-hw-ei-310003 HBase 2.2.3 2.2.3-hw-ei-310003 ZooKeeper 3.5.6 3.5.6-hw-ei-310003 Hue 4.7.0 - Oozie 5.1.0 5.1.0-hw-ei-310003 Flume 1.9.0 - Kafka 2.4.0 2.4.0-hw-ei-310003 Ranger 2.0.0 - Phoenix 5.0.0 5.0.0-HBase-2.0-hw-ei-310003 ClickHouse 21.3.4.25 0.3.0 Presto 316 316-hw-ei-310003 scala 2.11 -
  • MRS 3.1.5 表1 MRS 3.1.5版本集群jar版本 组件 组件版本 jar版本 Flink 1.12.2 1.12.2-hw-ei-315008 Hive 3.1.0 3.1.0-hw-ei- 315008 Tez 0.9.2 0.9.1.0101-hw-ei-315008 Spark2x 3.1.1 3.1.1-hw-ei-315008 CarbonData 2.2.0 - Hadoop 3.1.1 3.1.1-hw-ei- 315008 HBase 2.2.3 2.2.3-hw-ei- 315008 ZooKeeper 3.6.3 3.6.3-hw-ei- 315008 Hue 4.7.0 - Oozie 5.1.0 5.1.0-hw-ei-315008 Flume 1.9.0 - Kafka 2.4.0 2.4.0-hw-ei- 315008 Ranger 2.0.0 2.0.0-hw-ei-315008 Phoenix 5.0.0 5.0.0-HBase-2.0-hw-ei-315008 ClickHouse 21.3.4.25 0.3.1-hw-ei-315008 Presto 333 333-hw-ei-315008 scala 2.11 -
  • 处理流程 出现认证失败的原因很多,在不同场景中建议参考以下步骤来排查: 确认本应用所运行设备和集群网络上是否通畅,Kerberos认证所需的各类端口(TCP/UDP)是否可正常访问。 确认各个配置文件是否被正确读取到,路径是否保存正确。 确认用户名和keytab文件是按操作指导得到的。 确认各类配置信息是否已经先设置好了,再发起认证。 确认没有在同一个进程中发起多次认证,即重复调用login()方法。 若还有问题,需联系技术支持人员做进一步分析。
  • 认证失败样例 解决认证出现如下关键字:clock skew too great的问题 检查集群时间。 检查开发环境所在机器的时间,与集群时间的偏差应小于5分钟。 解决认证出现如下关键字:(Receive time out) can not connect to kdc server的问题 要检查“krb5.conf”文件内容是否正确,即是否与集群中的KerberoServer的业务IP配置相同。 检查Kerberos服务是否正常。 检查防火墙是否关闭。 解决客户端应用提交任务到hadoop集群报错,提示Failed to find any Kerberos tgt或者No valid credentials provided的问题 检查是否执行了kinit,若未执行,则先执行kinit认证操作,再提交任务。 多线程场景下,需要在进程的开始处调用hadoop提供的loginfromkeytab函数登录KDC,得到TGT,后续提交任务之前,调用reloginFromKeytab函数刷新该TGT。 //进程入口首次登录,登录成功设置userGroupInformation UserGroupInformation.loginUserFromKeytab(this.userPrincipal,this.keytabFile); //线程提交任务之前: UserGroupInformation.getLoginUser().reloginFromKeytab(); 多个脚本同时使用kinit命令认证同一个用户的场景下,需要在各个脚本中执行kinit命令之前,先执行export KRB5CCNAME=keytab_path命令,确保每个脚本进程中KRB5CCNAME指向的路径不一致。
  • MRS应用开发流程说明 通常MRS应用开发流程如下图所示,各组件应用的开发编译操作可参考组件开发指南对应章节。 图1 MRS应用开发流程 表1 MRS应用开发流程说明 阶段 说明 准备开发环境 在进行应用开发前,需首先准备开发环境,推荐使用IntelliJ IDEA工具,同时本地需完成JDK、Maven等初始配置。 准备连接集群配置文件 应用程序开发或运行过程中,需通过集群相关配置文件信息连接MRS集群,配置文件通常包括用于安全认证的用户文件,可从已创建好的MRS集群中获取相关内容。 用于程序调测或运行的节点,需要与MRS集群内节点网络互通。 配置并导入样例工程 MRS提供了不同组件场景下的多种样例程序,用户可获取样例工程并导入本地开发环境中进行程序学习。 配置安全认证 连接开启了Kerberos认证的MRS集群时,应用程序中需配置具有相关资源访问权限的用户进行安全认证。 根据业务场景开发程序 根据实际业务场景开发程序,调用组件接口实现对应功能。 编译并运行程序 将开发好的程序编译运行,用户可在本地Windows开发环境中进行程序调测运行,也可以将程序编译为Jar包后,提交到Linux节点上运行。
  • 修订记录 发布日期 修改说明 2020-04-20 第16次正式发布: 新增MRS 1.9版本样例代码,详见样例工程获取地址。 新增Alluxio应用开发章节,详见应用开发简介。 2019-11-28 第15次正式发布: 新增Impala应用开发章节,详见应用开发简介。 2019-08-14 第14次正式发布: 新增OpenTSDB应用开发章节,详见应用开发简介。 新增Flink应用开发章节,详见应用开发简介。 2019-04-02 第13次正式发布: 新增如下章节: HBase Phoenix样例代码调测 HBase python样例代码调测 应用开发简介 常用概念 开发流程 开发环境简介 准备环境 准备开发用户 准备JDBC客户端开发环境 准备HCatalog开发环境 典型场景说明 样例代码说明 调测程序 Presto接口 2019-02-01 第12次正式发布: 修改如下章节: 创建表 修改表 使用过滤器Filter 添加二级索引 使用二级索引读取数据 配置HBase文件存储 HFS的JAVA API 2019-01-25 第11次正式发布: 新增如下章节: 编译并运行程序 查看调测结果 JDBC客户端运行及结果查询 2019-01-10 第10次正式发布: 修改如下章节: Phoenix 2018-12-18 第九次正式发布: 修改如下章节: 场景说明 场景说明 场景说明 2018-12-03 第八次正式发布: 修改如下章节: 准备Linux客户端运行环境 2018-10-19 第七次正式发布: 修改如下章节: 使用Scan读取数据 运行SparkStreamingKafka样例工程时报“类不存在”问题 Storm-HDFS开发指引 Storm-OBS开发指引 2018-09-19 第六次正式发布: 新增如下章节: Spark on Yarn的client模式下spark-submit提交任务出现FileNotFoundException异常 2018-06-15 第五次正式发布: 修改如下章节: 获取MRS应用开发样例工程 2018-06-04 第四次正式发布: 翻译答疑过程中发现问题,优化描述。 2018-05-04 第三次正式发布: 修改帮助中心引入的命令换行问题。 2018-04-08 第二次正式发布。 修改如下章节: 获取MRS应用开发样例工程 2018-02-02 第一次正式发布。 父主题: 附录
  • MRS各组件样例工程汇总 样例工程获取地址参见获取MRS应用开发样例工程,切换分支为与MRS集群相匹配的版本分支,然后下载压缩包到本地后解压,即可获取各组件对应的样例代码工程。 MRS样例代码库提供了各组件的基本功能样例工程供用户使用,当前版本各组件提供的样例工程汇总参见表1。 表1 各组件样例工程汇总 组件 样例工程位置 描述 ClickHouse clickhouse-examples 指导用户基于Java语言,实现MRS集群中的ClickHouse的数据表创建、删除以及数据的插入、查询等操作。 本工程中包含了建立服务端连接、创建数据库、创建数据表、插入数据、查询数据及删除数据表等操作示例。 ClickHouseJDBC-Transaction-JavaExample ClickHouse事务开发代码样例,仅MRS 3.3.0及之后版本支持。 Doris doris-examples/doris-jdbc-example Doris数据读写操作的应用开发示例,仅MRS 3.3.0及之后版本支持。 通过调用Doris接口可实现创建用户表、向表中插入数据、查询表数据、删除表等功能 Flink 开启Kerberos认证集群的样例工程目录“flink-examples/flink-examples-security”。 未开启Kerberos认证集群的样例工程目录为“flink-examples/flink-examples-normal”。 FlinkCheckpointJavaExample Flink异步Checkpoint机制的Java/Scala示例程序。 本工程中,程序使用自定义算子持续产生数据,产生的数据为一个四元组(Long,String,String,Integer)。数据经统计后,将统计结果打印到终端输出。每隔6秒钟触发一次checkpoint,然后将checkpoint的结果保存到HDFS中。 FlinkCheckpointScalaExample FlinkHBaseJavaExample Flink API作业读写HBase数据的Java示例程序。 MRS 3.2.0及之后版本支持。 FlinkKafkaJavaExample Flink向Kafka生产并消费数据的Java/Scala示例程序。 在本工程中,假定某个Flink业务每秒就会收到1个消息记录,启动Producer应用向Kafka发送数据,然后启动Consumer应用从Kafka接收数据,对数据内容进行处理后并打印输出。 FlinkKafkaScalaExample FlinkPipelineJavaExample Flink Job Pipeline的Java/Scala示例程序。 本样例中一个发布者Job自己每秒钟产生10000条数据,另外两个Job作为订阅者,分别订阅一份数据。订阅者收到数据之后将其转化格式,并抽样打印输出。 FlinkPipelineScalaExample FlinkSqlJavaExample 使用客户端通过jar作业提交SQL作业的应用开发示例。 FlinkStreamJavaExample Flink构造DataStream的Java/Scala示例程序。 本工程示例为基于业务要求分析用户日志数据,读取文本数据后生成相应的DataStream,然后筛选指定条件的数据,并获取结果。 FlinkStreamScalaExample FlinkStreamSqlJoinExample Flink SQL Join示例程序。 本工程示例调用flink-connector-kafka模块的接口,生产并消费数据。生成Table1和Table2,并使用Flink SQL对Table1和Table2进行联合查询,打印输出结果。 FlinkRESTAPIJavaExample 本工程示例调用FlinkServer的RestAPI创建租户。 flink-examples/flink-sql 本工程示例使用Flink Jar提交SQL作业。 flink-examples/pyflink-example pyflink-kafka 本工程示例使用Python提交普通作业,提供Python读写Kafka作业的样例。 pyflink-sql 本工程示例使用Python提交SQL作业,提供Python提交SQL作业的样例。 HBase hbase-examples hbase-example HBase数据读写操作及全局二级索引的应用开发示例。通过调用HBase接口可实现以下功能: 创建用户表、导入用户数据、增加用户信息、查询用户信息及为用户表创建二级索引等功能。 MRS 3.3.0及之后版本,可实现创建/删除全局二级索引、修改全局二级索引状态、以及基于全局二级索引查询等功能。 hbase-rest-example HBase Rest接口应用开发示例。 使用Rest接口实现查询HBase集群信息、获取表、操作NameSpace、操作表等功能。 hbase-thrift-example 访问HBase ThriftServer应用开发示例。 访问ThriftServer操作表、向表中写数据、从表中读数据。 hbase-zk-example HBase访问ZooKeeper应用开发示例。 在同一个客户端进程内同时访问MRS ZooKeeper和第三方的ZooKeeper,其中HBase客户端访问MRS ZooKeeper,客户应用访问第三方ZooKeeper。 HDFS 开启Kerberos认证集群的样例工程目录“hdfs-example-security”。 未开启Kerberos认证集群的样例工程目录为“hdfs-example-normal”。 HDFS文件操作的Java示例程序。 本工程主要给出了创建HDFS文件夹、写文件、追加文件内容、读文件和删除文件/文件夹等相关接口操作示例。 hdfs-c-example HDFS C语言开发代码样例。 本示例提供了基于C语言的HDFS文件系统连接、文件操作如创建文件、读写文件、追加文件、删除文件等。 HetuEngine 开启Kerberos认证集群的样例工程目录为“hetu-examples/hetu-examples-security”。 未开启Kerberos认证集群的样例工程目录为“hetu-examples/hetu-examples-normal”。 通过不同方式连接HetuEngine的Java、Python示例程序。 通过HSFabric、HSBroker等连接方式,使用用户名和密码连接到HetuEngine,或通过KeyTab文件认证方式连接HetuEngine,组装对应的SQL发送到HetuEngine执行,完成对Hive数据源的增删改查操作。 Hive hive-examples hive-jdbc-example Hive JDBC处理数据Java示例程序。 本工程使用JDBC接口连接Hive,在Hive中执行相关数据操作。使用JDBC接口实现创建表、加载数据、查询数据等功能,还可实现在同一个客户端进程内同时访问FusionInsight ZooKeeper和第三方的ZooKeeper。 hive-jdbc-example-multizk hcatalog-example Hive HCatalog处理数据Java示例程序。 使用HCatalog接口实现通过Hive命令行方式对MRS Hive元数据进行数据定义和查询操作。 python-examples 使用Python连接Hive执行SQL样例。 可实现使用Python对接Hive并提交数据分析任务。 python3-examples 使用Python3连接Hive执行SQL样例。 可实现使用Python3对接Hive并提交数据分析任务。 IoTDB iotdb-examples iotdb-flink-example 通过Flink访问IoTDB数据的示例程序,包括FlinkIoTDBSink和FlinkIoTDBSource。 FlinkIoTDBSink可实现通过Flink job将时序数据写入到IoTDB中。FlinkIoTDBSource则通过Flink job将时序数据从IoTDB读取出来并且打印。 iotdb-jdbc-example IoTDB JDBC处理数据Java示例程序。 本示例演示了如何使用JDBC接口连接IoTDB,并执行IoTDB SQL语句。 iotdb-kafka-example 通过Kafka访问IoTDB数据的示例程序。 本示例演示了如何先将时序数据发送到Kafka,再使用多线程将数据写入到IoTDB中。 iotdb-session-example IoTDB Session处理数据Java示例程序。 本示例演示了如何使用Session方式连接IoTDB,并执行IoTDB SQL语句。 iotdb-udf-exmaple 该样例程序介绍了如何实现一个简单的IoTDB自定义函数(UDF)。 Kafka kafka-examples Kafka流式数据的处理Java示例程序。 本工程基于Kafka Streams完成单词统计功能,通过读取输入Topic中的消息,统计每条消息中的单词个数,从输出Topic消费数据,然后将统计结果以Key-Value的形式输出。 Manager manager-examples FusionInsight Manager API接口调用示例。 本工程调用Manager API接口实现集群用户的创建、修改及删除等操作。 MapReduce 开启Kerberos认证集群的样例工程目录“mapreduce-example-security”。 未开启Kerberos认证集群的样例工程目录为“mapreduce-example-normal”。 MapReduce任务提交Java示例程序。 本工程提供了一个MapReduce统计数据的应用开发示例,实现数据分析、处理,并输出满足用户需要的数据信息。 另外以MapReduce访问HDFS、HBase、Hive为例,介绍如何编写MapReduce作业访问多个服务组件。帮助用户理解认证、配置加载等关键使用方式。 Oozie 开启Kerberos认证集群的样例工程目录“oozie-examples/ooziesecurity-examples”。 未开启Kerberos认证集群的样例工程目录为“oozie-examples/oozienormal-examples”。 OozieMapReduceExample Oozie提交MapReduce任务示例程序。 本示例演示了如何通过Java API提交MapReduce作业和查询作业状态,对网站的日志文件进行离线分析。 OozieSparkHBaseExample 使用Oozie调度Spark访问HBase的示例程序。 OozieSparkHiveExample 使用Oozie调度Spark访问Hive的示例程序。 Spark 开启Kerberos认证集群的样例工程目录“spark-examples/sparksecurity-examples”。 未开启Kerberos认证集群的样例工程目录为“spark-examples/sparknormal-examples”。 SparkHbasetoCarbonJavaExample Spark同步HBase数据到CarbonData的Java示例程序。 本示例工程中,应用将数据实时写入HBase,用于点查业务。数据每隔一段时间批量同步到CarbonData表中,用于分析型查询业务。 SparkHbasetoHbaseJavaExample Spark从HBase读取数据再写入HBase的Java/Scala/Python示例程序。 本示例工程中,Spark应用程序实现两个HBase表数据的分析汇总。 SparkHbasetoHbasePythonExample SparkHbasetoHbaseScalaExample SparkHivetoHbaseJavaExample Spark从Hive读取数据再写入到HBase的Java/Scala/Python示例程序。 本示例工程中,Spark应用程序实现分析处理Hive表中的数据,并将结果写入HBase表。 SparkHivetoHbasePythonExample SparkHivetoHbaseScalaExample SparkJavaExample Spark Core任务的Java/Python/Scala/R示例程序。 本工程应用程序实现从HDFS上读取文本数据并计算分析。 SparkRExample示例不支持未开启Kerberos认证的集群。 SparkPythonExample SparkScalaExample SparkRExample SparkLauncherJavaExample 使用Spark Launcher提交作业的Java/Scala示例程序。 本工程应用程序通过org.apache.spark.launcher.SparkLauncher类采用Java/Scala命令方式提交Spark应用。 SparkLauncherScalaExample SparkOnHbaseJavaExample Spark on HBase场景的Java/Scala/Python示例程序。 本工程应用程序以数据源的方式去使用HBase,将数据以Avro格式存储在HBase中,并从中读取数据以及对读取的数据进行过滤等操作。 SparkOnHbasePythonExample SparkOnHbaseScalaExample SparkOnHudiJavaExample Spark on Hudi场景的Java/Scala/Python示例程序。 本工程应用程序使用Spark操作Hudi执行插入数据、查询数据、更新数据、增量查询、特定时间点查询、删除数据等操作。 SparkOnHudiPythonExample SparkOnHudiScalaExample SparkOnMultiHbaseScalaExample Spark同时访问两个集群中的HBase的Scala示例程序。 本示例不支持未开启Kerberos认证的集群。 SparkSQLJavaExample Spark SQL任务的Java/Python/Scala示例程序。 本工程应用程序实现从HDFS上读取文本数据并计算分析。 SparkSQLPythonExample SparkSQLScalaExample SparkStreamingKafka010JavaExample Spark Streaming从Kafka接收数据并进行统计分析的Java/Scala示例程序。 本工程应用程序实时累加计算Kafka中的流数据,统计每个单词的记录总数。 SparkStreamingKafka010ScalaExample SparkStreamingtoHbaseJavaExample010 Spark Streaming读取Kafka数据并写入HBase的Java/Scala/Python示例程序。 本工程应用程序每5秒启动一次任务,读取Kafka中的数据并更新到指定的HBase表中。 SparkStreamingtoHbasePythonExample010 SparkStreamingtoHbaseScalaExample010 SparkStructuredStreamingJavaExample 在Spark应用中,通过使用StructuredStreaming调用Kafka接口来获取单词记录,然后把单词记录分类统计,得到每个单词记录数。 SparkStructuredStreamingPythonExample SparkStructuredStreamingScalaExample SparkThriftServerJavaExample 通过JDBC访问Spark SQL的Java/Scala示例程序。 本示例中,用户自定义JDB CS erver的客户端,使用JDBC连接来进行表的创建、数据加载、查询和删除。 SparkThriftServerScalaExample StructuredStreamingADScalaExample 使用Structured Streaming,从kafka中读取广告请求数据、广告展示数据、广告点击数据,实时获取广告有效展示统计数据和广告有效点击统计数据,将统计结果写入kafka中。 StructuredStreamingStateScalaExample 在Spark结构流应用中,跨批次统计每个session期间发生了多少次event以及本session的开始和结束timestamp;同时输出本批次被更新状态的session。 SpringBoot(MRS 3.3.0及之后版本支持) clickhouse-examples clickhouse-rest-client-example SpringBoot连接ClickHouse服务应用开发示例。 本示例中,包含了建立服务端连接、创建数据库、创建数据表、插入数据、查询数据等操作示例。 doris-examples doris-rest-client-example Doris数据读写操作的SpringBoot应用开发示例。 提供SpringBoot连接Doris的样例程序。 flink-examples flink-dws-read-example GaussDB (DWS) SpringBoot方式连接Flink服务的应用开发示例。 flink-dws-sink-example hbase-examples SpringBoot连接Phoenix应用开发示例。 提供SpringBoot连接HBase与Phoenix的样例程序。 hive-examples hive-rest-client-example SpringBoot连接Hive应用开发示例。 本工程使用SpringBoot方式连接Hive,在Hive中执行创建表、加载数据、查询数据、删除表等操作。 kafka-examples SpringBoot连接Kafka实现Topic生产消费的应用开发示例。
  • 通过HSFabric实现KeyTab文件认证 KeyTab文件认证,需要“jaas-zk.conf”、“krb5.conf”和“user.keytab”文件。 “krb5.conf”和“user.keytab”文件参考MRS应用开发安全认证说明章节获得。 “jaas-zk.conf”文件如下定义,“principal”为MRS应用开发安全认证说明中添加的认证用户名称+@+ 域名 (域名为“krb5.conf”文件中的“default_realm”字段值,例如“HADOOP.COM”),“keyTab”为“user.keytab”文件的路径。 Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/opt/client/user.keytab" principal="hivetest@系统域名" useTicketCache=false storeKey=true debug=true; }; “jaas-zk.conf”配置文件中“keyTab”的路径需根据实际的路径修改。 例如: Windows路径:“D:\\hetu-examples\\hetu-examples-security\\src\\main\\resources\\user.keytab”。 Linux路径:“/opt/client/user.keytab”。 父主题: 准备安全认证
  • MRS组件应用开发快速入门 MRS对外提供了基于组件的应用开发样例工程,以下相关快速入门可指导您创建MRS集群后,获取并导入样例工程,并在本地进行编译调测即可实现相应组件的应用开发: HBase应用开发快速入门可实现HBase表创建、数据插入、索引创建、表删除等操作。 HDFS应用开发快速入门可实现HDFS文件目录创建、文件写入、读取、删除等操作。 Hive JDBC应用开发快速入门可实现使用JDBC连接Hive后,在Hive中执行创建表、插入数据、读取数据等操作。 Hive HCatalog应用开发快速入门可实现使用HCatalog连接Hive后,在Hive中创建表、插入数据、读取数据等操作。 Kafka应用开发快速入门可实现流式数据的处理。 Flink应用开发快速入门可实现Flink DataStream程序处理数据操作。 ClickHouse应用开发快速入门可实现ClickHouse表创建、删除以及数据的插入、查询等操作。 Spark应用开发快速入门可实现从Hive表中读取数据并重新写入HBase表操作。
  • 认证代码实例讲解 package com.huawei.bigdata.hdfs.examples; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.security.UserGroupInformation; public class KerberosTest { private static String PATH_TO_HDFS_SITE_XML = KerberosTest.class.getClassLoader().getResource("hdfs-site.xml") .getPath(); private static String PATH_TO_CORE_SITE_XML = KerberosTest.class.getClassLoader().getResource("core-site.xml") .getPath(); private static String PATH_TO_KEYTAB = KerberosTest.class.getClassLoader().getResource("user.keytab").getPath(); private static String PATH_TO_KRB5_CONF = KerberosTest.class.getClassLoader().getResource("krb5.conf").getPath(); private static String PRNCIPAL_NAME = "develop"; private FileSystem fs; private Configuration conf; /** * initialize Configuration */ private void initConf() { conf = new Configuration(); // add configuration files conf.addResource(new Path(PATH_TO_HDFS_SITE_XML)); conf.addResource(new Path(PATH_TO_CORE_SITE_XML)); } /** * login Kerberos to get TGT, if the cluster is in security mode * @throws IOException if login is failed */ private void login() throws IOException { // not security mode, just return if (! "kerberos".equalsIgnoreCase(conf.get("hadoop.security.authentication"))) { return; } //security mode System.setProperty("java.security.krb5.conf", PATH_TO_KRB5_CONF); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab(PRNCIPAL_NAME, PATH_TO_KEYTAB); } /** * initialize FileSystem, and get ST from Kerberos * @throws IOException */ private void initFileSystem() throws IOException { fs = FileSystem.get(conf); } /** * An example to access the HDFS * @throws IOException */ private void doSth() throws IOException { Path path = new Path("/tmp"); FileStatus fStatus = fs.getFileStatus(path); System.out.println("Status of " + path + " is " + fStatus); //other thing } public static void main(String[] args) throws Exception { KerberosTest test = new KerberosTest(); test.initConf(); test.login(); test.initFileSystem(); test.doSth(); } } Kerberos认证时需要配置Kerberos认证所需要的文件参数,主要包含keytab路径,Kerberos认证的用户名称,Kerberos认证所需要的客户端配置krb5.conf文件。 方法login()为调用hadoop的接口执行Kerberos认证,生成TGT票据。 方法doSth()调用hadoop的接口访问文件系统,此时底层RPC会自动携带TGT去Kerberos认证,生成ST票据。 以上代码可在安全模式下的HDFS二次开发样例工程中创建KerberosTest.java,运行并查看调测结果,具体操作过程请参考HDFS开发指南(安全模式)。
  • 认证失败样例 解决认证出现如下关键字:clock skew too great的问题 检查集群时间。 检查开发环境所在机器的时间,与集群时间的偏差应小于5分钟。 解决认证出现如下关键字:(Receive time out) can not connect to kdc server的问题 要检查“krb5.conf”文件内容是否正确,即是否与集群中的KerberoServer的业务IP配置相同。 检查Kerberos服务是否正常。 检查防火墙是否关闭。 解决客户端应用提交任务到hadoop集群抛异常,提示Failed to find any Kerberos tgt或者No valid credentials provided的问题 检查是否执行了kinit,若未执行,则先执行kinit认证操作,再提交任务。 多线程场景下,需要在进程的开始处调用hadoop提供的loginfromkeytab函数登录KDC,得到TGT,后续提交任务之前,调用reloginFromKeytab函数刷新该TGT。 //进程入口首次登录,登录成功设置userGroupInformation UserGroupInformation.loginUserFromKeytab(this.userPrincipal,this.keytabFile); //线程提交任务之前: UserGroupInformation.getLoginUser().reloginFromKeytab(); 多个脚本同时使用kinit命令认证同一个用户的场景下,需要在各个脚本中执行kinit命令之前,先执行export KRB5CCNAME=keytab_path命令,确保每个脚本进程中KRB5CCNAME指向的路径不一致。
  • 处理流程 出现认证失败的原因很多,在不同场景中建议参考以下步骤来排查: 确认本应用所运行设备和集群网络上是否通畅,Kerberos认证所需的各类端口(TCP/UDP)是否可正常访问。 确认各个配置文件是否被正确读取到,路径是否保存正确。 确认用户名和keytab文件是按操作指导得到的。 确认各类配置信息是否已经先设置好了,再发起认证。 确认没有在同一个进程中发起多次认证,即重复调用login()方法。 若还有问题,需联系技术支持人员做进一步分析。
  • Hive SQL Hive SQL支持Hive-3.1.0版本中的所有特性,详情请参见https://cwiki.apache.org/confluence/display/hive/languagemanual。 FusionInsight系统提供的扩展Hive语句如表1所示。 表1 扩展Hive语句 扩展语法 语法说明 语法示例 示例说明 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...) ] ...... [TBLPROPERTIES ("groupId"=" group1 ","locatorId"="locator1")] ...; 创建一个hive表,并指定表数据文件分布的locator信息。详细说明请参见使用HDFS Colocation存储Hive表。 CREATE TABLE tab1 (id INT, name STRING) row format delimited fields terminated by '\t' stored as RCFILE TBLPROPERTIES("groupId"=" group1 ","locatorId"="locator1"); 创建表tab1,并指定tab1的表数据分布在locator1节点上。 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...) ] ... [TBLPROPERTIES ('column.encode.columns'='col_name1,col_name2'| 'column.encode.indices'='col_id1,col_id2', 'column.encode.classname'='encode_classname')]...; 创建一个hive表,并指定表的加密列和加密算法。详细说明请参见使用Hive列加密功能。 create table encode_test(id INT, name STRING, phone STRING, address STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('column.encode.indices'='2,3', 'column.encode.classname'='org.apache.hadoop.hive.serde2. SMS 4Rewriter') STORED AS TEXTFILE; 创建表encode_test,并指定插入数据时对第2、3列加密,加密算法类为org.apache.hadoop.hive.serde2.SMS4Rewriter。 REMOVE TABLE hbase_tablename [WHERE where_condition]; 删除hive on hbase表中符合条件的数据。详细说明请参见删除Hive on HBase表中的单行记录。 remove table hbase_table1 where id = 1; 删除表中符合条件“id =1”的数据。 CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ...) [ROW FORMAT row_format] STORED AS inputformat 'org.apache.hadoop.hive.contrib.fileformat.SpecifiedDelimiterInputFormat' outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'; 创建hive表,并设定表可以指定自定义行分隔符。详细说明请参见自定义行分隔符。 create table blu(time string, num string, msg string) row format delimited fields terminated by ',' stored as inputformat 'org.apache.hadoop.hive.contrib.fileformat.SpecifiedDelimiterInputFormat' outputformat 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'; 创建表blu,指定inputformat为SpecifiedDelimiterInputFormat,以便查询时可以指定表的查询行分隔符。 父主题: 对外接口
  • 产品优势 表1 产品优势 开箱即用 一键安装部署即可监控Kubernetes以及各类云产品。 一键接入各种应用组件及告警工具。 低成本 多种指标免费用,覆盖Kubernetes标准组件。 提供全托管式服务,无需另购资源,可降低监控成本,且维护成本几乎为零。 与CCE集成并提供监控服务,容器监控体系创建时间从2天降低至10分钟。一个Prometheus For CCE实例可以上报多个CCE集群数据。 开源兼容 支持自定义多维数据模型、HTTP API模块、PromQL查询。 静态文件配置和动态发现机制发现监控对象,实现轻松迁移及接入。 数据规模无上限 凭借 云存储 能力,数据存储无上限,不再受限于本地容量。云端分布式存储保障数据可靠性。 通过Prometheus实例 for 多账号聚合实例将多个资源账号的指标数据汇聚到一个Prometheus实例,实现统一监控。 高性能 相较开源版本结构更轻量,资源消耗更低。通过单进程一体化Agent监控Kubernetes集群,采集性能提升20倍。 Agent部署在用户侧,保留原生采集能力同时能够最大程度的减少资源的使用。 通过采集存储分离架构,全面提升整体性能。 采集组件优化,提升单副本采集能力,降低资源消耗。 通过多副本横向扩展均衡分解采集任务,实现动态扩缩,解决开源水平扩展问题。 高可用性 双副本:数据采集、处理和存储组件支持多副本横向扩展,核心数据链路高可用。 水平扩展:基于集群规模可直接进行弹性扩容。 父主题: Prometheus监控简介
  • 基础指标:node-exporter指标 介绍通过中间件Exporter上报到 AOM 的node-exporter指标的类别、名称、含义等信息。 表1 CCE/自建K8s集群容器指标 Job名称 指标 指标含义 node-exporter node_filesystem_size_bytes 挂载的文件系统占用空间 node_filesystem_readonly 只读挂载的文件系统 node_filesystem_free_bytes 挂载的文件系统剩余空间 node_filesystem_avail_bytes 挂载的文件系统可用空间 node_cpu_seconds_total 节点CPU时间 node_network_receive_bytes_total 累积接收数据总量 node_network_receive_errs_total 接收时遇到的错误累积计数 node_network_transmit_bytes_total 累积传输数据总量 node_network_receive_packets_total 接收数据包的累积计数 node_network_transmit_drop_total 传输时丢弃的累积计数 node_network_transmit_errs_total 传输时遇到的错误累积计数 node_network_up 网卡的状态 node_network_transmit_packets_total 传输数据包的累积计数 node_network_receive_drop_total 接收时丢弃的累积计数 go_gc_duration_seconds 数据来自调用debug.ReadGCStats(),调用该函数时,会将传入参数GCStats结构体的PauseQuantile字段设置为5,这样函数将会返回最小、25%、50%、75% 和最大,这5个GC暂停时间百分位数。然后prometheus Go客户端根据返回的GC暂停时间百分位数、以及NumGC和PauseTotal变量创建摘要类型指标。 node_load5 节点5分钟CPU负载 node_filefd_allocated 已分配的文件描述符 node_exporter_build_info NodeExporter构建信息 node_disk_written_bytes_total 写入成功的字节总数 node_disk_writes_completed_total 写入完成的次数 node_disk_write_time_seconds_total 写入花费的总时长 node_nf_conntrack_entries 链接状态跟踪表分配的数量 node_nf_conntrack_entries_limit 链接状态跟踪表总量 node_processes_max_processes PID限制值 node_processes_pids PID个数 node_sockstat_TCP_alloc 已分配的TCP套接字数量 node_sockstat_TCP_inuse 正在使用的TCP套接字数量 node_sockstat_TCP_tw 等待关闭的TCP连接数 node_timex_offset_seconds 时钟时间偏移 node_timex_sync_status 节点时钟同步状态 node_uname_info 节点uname信息 node_vmstat_pgfault /proc/vmstat中的pgfault node_vmstat_pgmajfault /proc/vmstat中的pgmajfault node_vmstat_pgpgin /proc/vmstat中的pgpgin node_vmstat_pgpgout /proc/vmstat中的pgpgout node_disk_reads_completed_total 读取完成的次数 node_disk_read_time_seconds_total 读取花费的总时长 process_cpu_seconds_total 该指标计算使用到utime(Go进程执行在用户态模式下的滴答数)和stime(Go进程执行在内核态时候的滴答数,例如系统调用时),参数的单位为jiffies,jiffy描述了两次系统定时器中断之间的滴答时间。process_cpu_seconds_total等于utime和stime之和除以USER_HZ。即将程序滴答总数除以 Hz(每秒滴答数)得到就是操作系统运行该进程的总时间(以秒为单位)。 node_disk_read_bytes_total 读取成功的字节总数 node_disk_io_time_weighted_seconds_total 执行I/O所花费的加权秒数 node_disk_io_time_seconds_total I/O总耗时 node_disk_io_now 当前运行的I/O数量 node_context_switches_total 上下文切换次数 node_boot_time_seconds 节点开机时间 process_resident_memory_bytes 即RSS(Resident Set Size),指的是常驻内存集,是进程实际使用的内存,他不包括分配但未使用的内存,也不包括换出的内存页面,但包含共享内存。 node_intr_total 节点中断总数 node_load1 节点1分钟CPU负载 go_goroutines 通过runtime.NumGoroutine()调用获取,基于调度器结构sched和全局allglen变量计算得来。由于sched结构体的所有字段可能并发的更改,因此最后会检查计算的值是否小于1,如果小于1,那么返回1。 scrape_duration_seconds 采集scrape target花费的时间 node_load15 节点15分钟CPU负载 scrape_samples_post_metric_relabeling metric被重设标签后,剩余sample数量 node_netstat_Tcp_PassiveOpens 从LISTEN 状态直接转换到SYN-RCVD 状态的TCP连接数 scrape_samples_scraped scrape target暴露的sample数量 node_netstat_Tcp_CurrEstab 当前状态为ESTABLISHED 或CLOSE-WAIT 的TCP 连接数 scrape_series_added scrape target新增加的系列数 node_netstat_Tcp_ActiveOpens 从CLOSED 状态直接转换到SYN-SENT 状态的TCP连接数 node_memory_MemTotal_bytes 节点内存总量 node_memory_MemFree_bytes 节点空闲内存 node_memory_MemAvailable_bytes 节点可用内存 node_memory_Cached_bytes 节点页面缓存中的内存 up scrape target的状态 node_memory_Buffers_bytes 节点缓冲区的内存 父主题: 指标总览
  • 套餐包说明 您可以通过包年包月(套餐包)的方式,提前购买使用额度和时长,获取更多的优惠。超出套餐包的部分自动转按需计费。如何购买套餐包? 套餐包到期后,不会影响您在消息&短信服务上的使用和数据安全。您只要保证云服务账号上有足够的余额,系统会自动以按需计费的模式进行结算。 套餐包与账号绑定,不支持跨账号使用。 套餐包不支持退订,建议您在购买套餐包前提前规划资源的使用额度和时长。 套餐包购买后即时生效,到期后自动失效,不支持延期,套餐包使用后剩余资源不支持退订。 套餐包仅支持抵扣套餐包购买后产生的费用,不支持抵扣套餐包购买前产生的费用。 套餐包用量即将耗尽时,若需要继续发送短信,请重新购买新的套餐包。
共100000条