• [教程指导] 应用MRS引导操作自动化安装livy样例脚本及其使用指导
    操作场景Apache Livy 是一个可以通过 REST 接口与 Spark 集群进行交互的服务,它可以提交 Spark 作业或者 Spark 代码片段,同步或者异步的进行结果检索以及 Spark Context 上下文管理。了解更多请访问livy官网http://livy.incubator.apache.org/。本指导旨在介绍,如何在创建集群时添加引导操作,利用shell脚本自动化地在MRS集群master节点安装livy。使用限制在创建集群时使用只在master节点安装livy创建集群时需要赋予集群默认委托MRS_ECS_DEFAULT_AGENCY,赋予集群节点权限从OBS对象桶中下载livy安装包只适用于MRS普通集群,开启kerberos认证的安全集群暂不适用前提条件对MRS集群引导操作功能有一定了解,具体可以参见链接引导操作简介、通过引导操作安装第三方软件、引导操作脚本样例文后所附引导操作脚本bootstrap-livy.sh已上传到OBS桶某路径下,本指导存放脚本的OBS桶路径以"obs://qianyu-xg/"为例。livy安装包已下载,并上传到OBS桶某路径下,附livy安装包官方下载链接livy-download。本指导存放livy安装包的OBS桶路径以"obs://qianyu-xg/pack/"为例,livy安装包名以"apache-livy-0.7.1-incubating-bin.zip"为例操作步骤1、如下图所示,使用自定义购买方式购买MRS集群:2、如下图,在高级配置阶段,点选引导操作添加按钮:3、如下图所示,填写引导操作相关参数,具体参数内容见如下描述描述:名称:该引导操作名称,默认bootstrap_0,可不做修改脚本路径:bootstrap-livy.sh在OBS对象桶上存放的全路径,obs://qianyu-xg/bootstrap-livy.sh参数:bootstrap-livy.sh的脚本入参,第一个为livy安装包存放路径,obs://qianyu-xg/pack/,第二个为livy安装包全名,apache-livy-0.7.1-incubating-bin.zip 执行节点:只选择master节点,active master可以不开启执行时机:组件首次启动后失败操作:继续4、以上操作结束后,点选确定,完成引导操作添加:5、集群创建完成后,使用EIP访问livy web ui,浏览器中输入 http://${manager_eip}:8998/ 访问附:引导脚本bootstrap-livy.sh#!/bin/bash -exBUCKET_PATH=$1ZIP_FILE=$2LIVY_DIR=`basename $ZIP_FILE .zip`DOWNLOAD_DIR=/tmpAPPLICATION_DIR=/home/ommecho "=====================Set env====================="if [ ! -f /opt/Bigdata/client/bigdata_env ] ; then echo "Skip master3" exit 0fisource /opt/Bigdata/client/bigdata_envecho "=====================Download and unpack install package====================="cd $DOWNLOAD_DIRhdfs dfs -get $BUCKET_PATH/$ZIP_FILE ./$ZIP_FILEif [ ! -f ./$ZIP_FILE ] ; then echo "Failed to download $ZIP_FILE" return 1fi echo "Succeeded to download $ZIP_FILE"cd $APPLICATION_DIRunzip -d $APPLICATION_DIR $DOWNLOAD_DIR/$ZIP_FILE echo "=====================Configure livy====================="cd $APPLICATION_DIR/$LIVY_DIRcp conf/livy.conf.template conf/livy.confecho "livy.spark.master = yarn" >> conf/livy.confecho "livy.spark.deploy-mode = cluster" >> conf/livy.confecho "=====================Start livy====================="bin/livy-server start > /home/omm/livy.out
  • [互动交流] 写spark代码进行二次开发的时候,还需要往SparkConf里set相关的配置项目吗
    我看了官方的demo代码,在hive to hbase项目代码里,只设置了appName,其余的全部没有设置,是可以自动读取hive-site.xml等配置文件吗?huaweicloud-mrs-example/SparkHivetoHbase.java at mrs-3.0.2 · huaweicloud/huaweicloud-mrs-example (github.com)这是我举例的代码连接这个是代码中读取hive表数据的代码片段 SparkConf conf = new SparkConf().setAppName("SparkHivetoHbase"); JavaSparkContext jsc = new JavaSparkContext(conf); HiveContext sqlContext = new org.apache.spark.sql.hive.HiveContext(jsc); Dataset dataFrame = sqlContext.sql("select name, account from person");如果在代码中需要设置的话我有一个问题,hive默认的元数据服务是DBService,那hive.metastore.uris这一项应该怎么配置
  • [互动交流] 三个节点的情况下FusionInsight HD空间占用有多少
    我需要通过虚拟机搭建一个3节点的FI集群,看到简单安装的教程说每个节点需要300G,但是我的硬盘没有这么大,所以我想知道最小安装需要多少空间,每个文件夹存储空间分配。这只是我的测试集群,只用于开发,测试数据可能500M都没有。
  • [互动交流] 【问题求助】HCS810 MapReduce服务扩容DN节点/srv/BigData/hadoop/data2目录后,发现数据不是分布存放到不同目录,而像是同时下发
    HCS810 MapReduce服务扩容DN节点/srv/BigData/hadoop/data2目录后,发现数据不是分布存放到不同目录,而像是同时下发
  • [互动交流] 如何通过FI平台的版本号确定依赖jar包的版本号
    官方的样例代码里依赖的版本是这样的格式2.2.3-hw-ei-302002看不出来jar包版本与平台版本的关系正常来说应该是跟cdh一样要下对应平台版本的jar包吧?那得知平台版本号之后应该怎么确认jar包版本号呢比如说我现在平台的版本号是6.5.1,平台内hbase的版本号是1.3.1,那二次开发时对应依赖jar包的版本应该是什么
  • [互动交流] 华为maven仓库下载相应包的源码失败
    10:12    Cannot download sources             Sources not found for:             org.apache.spark:spark-hive_2.11:2.4.5-hw-ei-302002
  • [问题求助] 通过Yarn提交Yarn任务 报错 Protocol message end-group tag did not match expected tag.
    大佬们好,我们再对接华为大数据平台【FusionInsight Manager】时出现了一下问题问题描述:我们设计的Yarn任务提交设计以下几个步骤:检测 Yarn执行资源是否充足   【成功】QueueInfo queueInfo = yarnClient.getQueueInfo(amClientContext.getQueueName());设置yarn运行相关信息【成功】//部分代码 appContext.setApplicationName(amClientContext.getAppName()); appContext.setAttemptFailuresValidityInterval(20000); Set tags = new HashSet<>(1); tags.add("ddmp"); appContext.setApplicationTags(tags); ApplicationId appId = appContext.getApplicationId();上传待运行的任务至HDFS 【成功】 以下是部分代码,上传资源,包括设置yarn执行相关的环境变量,将AppMaster任务信息设置好/** * 添加一个本地资源到远程 * * @param fs 文件系统 * @param fileSrcPath 要上传的文件 * @param fileName 文件名 * @param appId 应用id * @param localResources 本地文件资源映射 * @param resources 文件资源 ,有时候我们并没有实际的资源信息,只有一个类似于命令操作,如果我们想将该命令生成一个文件并上传,就可以将该命令写在这里 * @throws IOException 异常信息 */ private void addToLocalResources(String appName, FileSystem fs, String fileSrcPath, String fileName, String appId, Map localResources, String resources) throws IOException { //获取要上传的目录路径 String suffix = appName + "/" + appId + "/" + fileName; Path dst = new Path(fs.getHomeDirectory(), suffix); //当要上传的文件不存在的时候 尝试将 resources 文件写入到一个目录中 if (fileSrcPath == null) { FSDataOutputStream ostream = null; try { //赋予 可读,可写,可执行的权限 ostream = FileSystem.create(fs, dst, new FsPermission((short) 456)); ostream.writeUTF(resources); } finally { IOUtils.closeStream(ostream); } } else { //将要上传的文件拷贝到对应的目录中 fs.copyFromLocalFile(new Path(fileSrcPath), dst); } //获取刚刚上传的文件的状态 FileStatus scFileStatus = fs.getFileStatus(dst); //创建一个本地资源映射 hdfs URI uri = dst.toUri(); URL url = URL.fromURI(uri); long len = scFileStatus.getLen(); long modificationTime = scFileStatus.getModificationTime(); LocalResource scRsrc = LocalResource.newInstance(url, LocalResourceType.FILE, LocalResourceVisibility.APPLICATION, len, modificationTime); //放入到资源映射中 localResources.put(fileName, scRsrc); }提交AppMaster任务到Yarn引擎 【失败】// 为应用程序主机设置容器启动上下文 ContainerLaunchContext amContainer = ContainerLaunchContext.newInstance(localResourceMap, env, commands, null, null, null); //权限处理 securityCheck(amContainer, amClientContext); //将容器设置进上下文对象 appContext.setAMContainerSpec(amContainer); //配置任务优先级状态 Priority pri = Priority.newInstance(0); appContext.setPriority(pri); //配置队列名称 appContext.setQueue(amClientContext.getQueueName()); yarnRunCallHook.doMessage("任务准备完成,开始提交任务!"); yarnClient.submitApplication(appContext);程序再运行到 yarnClient.submitApplication(appContext); 时执行卡住,通过日志观察,出现一下日志:48833 [main] INFO org.apache.hadoop.io.retry.RetryInvocationHandler - com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag., while invoking ApplicationClientProtocolPBClientImpl.getApplicationReport over 27. Trying to failover immediately. 48833 [main] INFO org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider - Failing over to 28 49849 [main] INFO org.apache.hadoop.io.retry.RetryInvocationHandler - java.net.ConnectException: Call From DESKTOP-BTSFCSH/10.0.55.152 to 10-0-120-162:26004 failed on connection exception: java.net.ConnectException: Connection refused: no further information; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused, while invoking ApplicationClientProtocolPBClientImpl.getApplicationReport over 28 after 1 failover attempts. Trying to failover after sleeping for 35465ms. 85315 [main] INFO org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider - Failing over to 27 85366 [main] INFO org.apache.hadoop.io.retry.RetryInvocationHandler - com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag., while invoking ApplicationClientProtocolPBClientImpl.getApplicationReport over 27 after 2 failover attempts. Trying to failover after sleeping for 30581ms.请重点关注 Protocol message end-group tag did not match expected tag. 连接主节点的时候,出现协议不一致的问题连接信息如下:fs.defaultFS=hdfs://hacluster yarn.resourcemanager.address.27=10-0-120-161:26004 yarn.resourcemanager.address.28=10-0-120-162:26004 yarn.resourcemanager.ha.rm-ids=27,28 dfs.client.failover.proxy.provider.hacluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider yarn.resourcemanager.scheduler.address.28=10-0-120-162:26002 dfs.nameservices=hacluster yarn.resourcemanager.scheduler.address.27=10-0-120-161:26002 dfs.namenode.rpc-address.hacluster.14=10-0-120-161:25000 dfs.namenode.rpc-address.hacluster.15=10-0-120-162:25000 yarn.resourcemanager.ha.enabled=true yarn.resourcemanager.recovery.enabled=true yarn.log-aggregation-enable=true dfs.ha.namenodes.hacluster=14,15 yarn.http.policy=HTTPS_ONLYFusionInsight Manager 已经开启Kereros,再本次提交中,kerberos认证已经通过 以上配置信息来自于 FusionInsight Manager 配置,确认端口信息等无误!以下是引入的Maven依赖 3.1.1 1.3.1 3.1.0 8 8 org.apache.hadoop hadoop-common ${hadoop.version} org.apache.hadoop hadoop-client ${hadoop.version} org.apache.hadoop hadoop-mapreduce-client-app ${hadoop.version} org.apache.hadoop hadoop-mapreduce-client-common ${hadoop.version} org.apache.hadoop hadoop-mapreduce-client-core ${hadoop.version} org.apache.hbase hbase-client ${hbase.version} org.apache.hbase hbase-common ${hbase.version} org.apache.hbase hbase-protocol ${hbase.version} org.apache.hbase hbase-server ${hbase.version} org.apache.hive hive-jdbc ${hive.version} org.apache.hive hive-service ${hive.version} 上述依赖,模仿华为云大数据平台 客户端案例的依赖!
  • [维护宝典] 华为云FusionInsight MRS运维系列课程
    推荐学习顺序:请知:编号顺序相同的可并行学习;知识图谱:课程链接:组件名称组件介绍链接Manager华为FusionInsight HD是一个分布式数据处理系统,对外提供大容量的数据存储、查询和分析能力基础知识安装教程运维知识HBaseHBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。基础串讲+运维知识最佳实践KafkaKafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。 该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。基础串讲+运维知识最佳实践HiveHive 是一个架构在 Hadoop 之上的数据仓库基础工具,它可以处理结构化和半结构化数据,它使得查询和分析存储在 Hadoop 上的数据变得非常方便基础串讲+运维知识最佳实践SparkApache Spark 是一种用于大数据工作负载的分布式开源处理系统。它使用内存中缓存和优化的查询执行方式,可针对任何规模的数据进行快速分析查询。基础串讲+运维知识最佳实践FlinkApache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。基础串讲+运维知识最佳实践
  • [赋能学习] 为什么我下载文档全是锁,显示我是普通用户,请问怎样才能下载fusionInsight相关软件和文档
    为什么我下载文档全是锁,显示我是普通用户,请问怎样才能下载fusionInsight相关软件和文档
  • [行业动态] FusionInsight 使用费用是怎样的,可以离线部署吗
    FusionInsight 使用费用是怎样的,可以离线部署吗,又相关资费介绍吗
  • [行业动态] 上千节点无中断升级,华为云FusionInsight是如何做到的?
    金融领域的反欺诈、精准营销等大量的业务场景对服务连续性要求高,7*24小时不能中断,为了保持业务的连续性和技术引领,一个超大规模、高效率、可持续发展的数据底座显得尤为重要,而不中断业务的滚动升级能力则成为最硬核的衡量指标,中国最佳零售银行,金融数据湖上千节点滚动升级,2万多个业务正常运行,这背后的奥秘究竟是什么?今天让我们深入了解一下……作为“中国最佳零售银行”,某股份制银行一直将客户体验放在首位。近年来,该行以轻型银行为战略目标,打造以数据作为关键战略资产的未来银行,通过引入华为云FusionInsight建设全行统一的金融数据湖,汇聚各渠道业务数据,实现全行数据资源共享,用于探索新的客户体验和商业模式。当前,该行金融数据湖规模达到千余节点,承载了行内上万应用,支撑反欺诈、智慧营销等重要业务场景,日均处理数万大数据作业。随着该行不断深入使用大数据技术,逐步支撑行内关键金融业务,对于整个数据湖平台的服务连续性要求也越来越高,一方面行内金融数据湖要紧跟技术潮流不断升级革新,一方面要求支撑行内外业务的数据湖能够7*24小时不中断服务。然而传统的方案需要断电重启,显然不能满足行内业务连续性保障的要求;同时在金融数据湖升级过程中,对于数据湖这种复杂系统来讲,传统升级方案如果碰到突发的故障,容易导致整个升级动作中断重来,为平稳升级带来极大地挑战。近期,该行采用FusionInsight MRS云原生数据湖滚动升级能力,实现行内大数据平台的成功滚动升级,升级过程中金融数据湖承载的行内2万+应用正常运行,实现两个“不中断”:业务不中断数据湖承载了成千上万的任务作业,在升级过程中,关键的数据分析服务要能够不间断地支撑上层业务,这就导致升级和使用存在着矛盾冲突;MRS具有循环滚动升级能力,一次升级少量节点,循环滚动,直至整个集群的所有节点升级到新版本;同时,为了降低升级对关键任务SLA的影响,MRS还提供滚动升级暂停能力,在任务高峰时段或关键任务执行时,可以保障关键任务正常平稳运行。分批次升级示意图进度不中断数据湖是一个复杂系统,由服务器、存储、网络、软件等组成,在升级时经常会碰到突发事件,如磁盘故障、网络拥塞问题。在大数据平台升级过程中,部署人员需要应对各种突发事件,如磁盘故障、网络拥塞等多种异常场景,客户要求不中断升级。MRS提供故障节点隔离能力,在故障发生时,可以跳过该节点的升级动作,让故障处理和集群升级有序进行。滚动升级不仅是一个升级动作,更是一个系统工程。该行携手华为云FusionInsight MRS云原生数据湖,从兼容性、可靠性、工具自动化、保障团队等多方面入手,注重细节,实现了行内大数据平台架构的平滑演进,升级过程行内用户无感知,保障上层业务平稳运行。MRS目前已通过中国信通院3万+大集群评测,还可以通过集群联邦扩展到10万+大集群。除此之外,还为大规模集群提供超级调度器Superior,资源调度效率是开源大数据的30倍+,能够让整个集群的资源利用率最高达到90%+。截止目前,华为云FusionInsight已先后帮助国有大行、股份制银行、城商农信行,运营商如广东移动、浙江移动等客户实现平滑升级,顺利完成累计60000多节点的无风险升级,让3000+政企客户技术永新,业务永远在线。在本次升级过程中,某股份制银行成功上线了最新版本的华为云FusionInsight MRS云原生数据湖,并在新集群上提供如HetuEngine、 ClickHouse、Hudi等新组件,为项目管理、反欺诈、BI报表等业务创新提供有力技术支撑。在整个升级期间,行内数万名数据分析师毫无感觉,同事模型平台、先机平台、反欺诈平台等关键业务应用平滑运行无中断,为进一步行内实现湖仓一体目标,深度使用FusionInsight奠定良好基础。 
  • [互动交流] fusioninsight opensource flink sql 作业
    fusioninsight opensource flink 1.12 sql 作业中,怎么把kafka的数据接进来写入postgres中,尝试好多,一直sql校验失败。查资料没有示例
  • [互动交流] FusionInsight 做主备HA检测时,备节点能ha替代主,但是主节点一直无法启动oms.sh也无法启动HA
    已重装
  • [知识分享] HDFS 细粒度锁优化,FusionInsight MRS有妙招
    本文分享自华为云社区《[FusionInsight MRS HDFS 细粒度锁优化实践](https://bbs.huaweicloud.com/blogs/353362?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=ei&utm_content=content)》,作者:pippo。 # 背景 HDFS依赖NameNode作为其元数据服务。NameNode将整个命名空间信息保存在内存中提供服务。读取请求(getBlockLocations、listStatus、getFileInfo)等从内存中获取信息。写请求(mkdir、create、addBlock)更新内存状态,并将日志事务写入到日志服务(QJM)。 HDFS NameNode的性能决定了整个Hadoop集群的可扩展性。命名空间性能的改进对于进一步扩展Hadoop集群至关重要。 - Apache HDFS 整体架构如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615824071691620.png) - Apache HDFS 交互信息如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615845153231628.png) # 痛点 HDFS NameNode的写操作的性能受全局命名空间系统锁的限制。每个写操作都会获取锁并保留锁,直到该操作执行完成。这样可以防止写入操作的并发执行,即使它们是完全独立的,例如命名空间中的对象不相交部分。 # 什么是Fine Grained Locking(FGL) FGL【细粒度锁】的主要目的是通过在独立命名空间分区上用多个并发锁替换全局锁,允许写入操作的并发。 # 当前状态 HDFS设计思路为一次写,多次读。读操作使用共享锁,写操作使用独占锁。由于HDFS NameNode元数据被设计为单个内存空间中的命名空间树,因此树的任何级别的写操作都会阻塞其它写操作,直到当前写操作完成。虽然写是一次,但是当涉及大量并发读/写操作时,这就会影响整体性能。 在HDFS NameNode中,内存中的元数据有三种不同的数据结构: - INodeMap: inodeid -> INode - BlocksMap: blockid -> Blocks - DataNodeMap: datanodeId -> DataNodeInfo INodeMap结构中包含inodeid到INode的映射,在整个Namespace目录树种存在两种不同类型的INode数据结构:INodeDirectory和INodeFile。其中INodeDirectory标识的是目录树中的目录,INodeFile标识的是目录树中的文件。 BlocksMap结构中包含blockid到BlockInfo的映射。每一个INodeFile都会包含数量不同的Block,具体数量由文件大小以及每个Block大小来决定,这些Block按照所在文件的先后顺序组成BlockInfo数组,BlockInfo维护的是Block的元数据;通过blockid可以快速定位Block。 DataNodeMap结果包含datanodeid到DataNodeInfo的映射。当集群启动过程中,通过机架感知逐步建立起整个集群的机架拓扑结构,一般在NameNode的生命周期内不会发生大变化。 通过INodeMap和BlocksMap共同标识存储在HDFS中的每个文件及其块的信息。随着文件数量的增加,此数据结构大小也会随之增加,并对单个全局锁的性能产生很大影响。下面我们采用简单的文件目录树结构来演示现有的单一全局锁在文件系统的缺点。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615920936272267.png) HDFS NameNode 内存目录树结构 如上图所示,/D11/D21/D31/F2 和 /D12/D24/D38/F16是不相交的文件,即有不同的父节点和祖父节点。可以看到F2和F16是两个独立的文件,对其中一个文件的任何操作都不应该影响另一个文件。 # 设计 如前所述,HDFS NameNode将文件信息和元数据结构在内存中保存为一个目录树结构。当修改任意两个独立的文件时,第二次操作需要等到第一次操作完成并释放锁。释放锁以后,只有第二个操作获取锁后才能继续修改文件系统。类似的,后续操作也会阻塞,直到第二次操作释放锁。 在下面的例子中,我们考虑2个文件并发写入(创建、删除、追加。。。)操作。F2和F16是文件系统下的2个独立文件(具有不同的父节点和祖父节点)。在将内容追加到F2时,F16也可以同时进行修改。但是由于整个目录树全局对象锁,对F16的操作必须等对F2的操作完成后才能执行。 代替全局锁,可以将锁分布在一组名为“分区”的文件中,每个分区都可以有自己的锁。现在F2属于分区-1,F16属于分区-2。F2文件操作可以通过获取分区-1的锁来进行修改,F16文件操作可以通过获取分区-2的锁来进行修改。 和以前一样,需要先获取全局锁,然后搜索每个文件属于哪个分区。找到分区后,获取分区锁并释放全局锁。因此全局锁并不会完全被删除。相反,通过减少全局锁时间跨度,一旦释放全局锁,则其它写操作可以获取全局锁并继续获取分区锁来进行文件操作。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615954378433039.png) 分区的数量如何决定?如果有效的定义分区从而获得更高的吞吐量? 默认情况下,分区大小为65K,溢出系数为1.8。一旦分区达到溢出条件,将会创建新分区并加入到分区列表中。理想情况下,可以拥有等于NameNode可用CPU核数的分区数,过多的分区数量将会使得CPU过载,而过少的分区数量无法充分利用CPU。 # 实现 引入新的数据结构-PartitionedGSet,它保存命名空间创建的所有分区信息。PartitionEntry是一个分区的对象结构。LatchLock是新引入的锁,用于控制两级锁--顶层锁和子锁。 # PartitionedGSet PartitionedGSet是一个两级层次结构。第一层RangeMap定义了INode的范围,并将它们映射到相应的分区中。分区构成了层次结构的第二级,每个分区存储属于指定范围的INode信息。为了根据键值查找INode,需要首先在RangeMap中找到对应键值的范围,然后在对应的RangeSet,使用哈希值获取到对应的INode。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653615992450186918.png) HDFS NameNode 两级层次结构 RangeGSet的容量有一定的阈值。当达到阈值后,将创建新的RangeGSet。空的或者未充分利用的RangeGSet由后台RangeMonitor守护程序来进行垃圾回收。 HDFS NameNode启动时,根据镜像中的INode数量计算合理的初始分区数。同时还需要考虑CPU核数,因为将分区数量提高到远超CPU核数并不会增加系统的并行性。 - 动态分区:分区的大小有限,可以像平衡树一样可以进行分裂和合并。 - 单个分区:只有一个分区,且只有一个与之相对应的锁,并且应和全局锁类似。这适用于小型集群或写入负载比较轻的集群。 - 静态分区:有一个固定的RangeMap,不添加或者合并现有分区。这适用于分区均匀增长的文件系统。而且这将消除锁定RangeMap的要求,允许并行使用锁。 # Latch Lock RangeMap与RangeGSet分别有单独的锁。Latch Lock是一种锁模式,其中首先获取RangeMap的锁,以查找与给定INode键对应的范围,然后获取与分区对应的RangeGSet的锁,同时释放RangeMap锁。这样针对任何其它范围的下一个操作都可以开始并发执行。 在RangeMap上持有锁类似于全局锁。目录删除、重命名、递归创建目录等几个操作可能需要锁定多个RangeGSet。这要确保当前HDFS语义所要求的操作的原子性。例如,如果重命名将文件从一个目录移动到另一个目录,则必须锁定包含文件、源和目标目录的RangeMap,以便使重命名成为原子。此锁定模式的一个理想优化是允许某些操作的Latch Lock与其他操作的全局锁结合使用。 # INode Keys HDFS中的每个目录和文件都有一个唯一的INode,即使文件被重命名或者移动到其它位置,该INode会保持不变。INode键是以文件INode本身结尾,前面包含父INode的固定长度序列。 Key Definition: key(f) = selfId是文件的INodeId,pId是父目录的INodeId,ppId是父目录的父目录的INodeId。INode键的这种表达不仅保证了同级,同时也保证了表亲(相同祖父节点)在大多数情况下被分区到相同的范围中。这些键基于INodeId而非文件名,允许简单的文件和目录进行重命名,称为就地重命名,而无需重新进行分区。 # 效果 经过测试验证使用和不使用FGL功能性能,在主要写入操作情况下,吞吐量平均提高了25%左右。 ## 详细性能对比 使用Hadoop NN Benchmarking工具(NNThroughputBenchmark)来验证NameNode的性能。每个写入API验证并观察到平均25%的性能提升。有很少一部分轻微或者没有提升的API,分析并发现这些API均是轻量级API,因此没有太大的提升。 NNThroughputBenchmark是用于NameNode性能基准测试工具。该工具提供了非常基本的API调用,比如创建文件,创建目录、删除。在这个基础上进行了增强,从而能够支持所有写入API,并能够捕获使用和不使用FGL的版本的性能数据。 用于测试的数据集:线程数 1000、文件数 1000000、每个目录文件数 40。 # 写入调用频率高的API ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653616077867487794.png) # 其它内部写API ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653616090511168604.png) # 常用读取API: 通过完整的FGL实现,读取API也有很好的性能提升。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/27/1653616112137858409.png) # 运行基准测试工具的命令: ./hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark -fs file:/// -op create -threads 200 -files 1000000 -filesPerDir 40 –close ./hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark -fs hdfs:x.x.x.x:dddd/hacluster -op create -threads 200 -files 1000000 -filesPerDir 40 -close # 参考 与FGL相关的社区讨论 Hadoop Meetup Jan 2019 — HDFS Scalability and Consistent Reads from Standby Node, which covers Three-Stage Scalability Plan. Slides 21–25 社区中跟踪与NameNode可扩展性相关的其它Jira HDFS-5453. Support fine grain locking in FSNamesystem HDFS-5477. Block manager as a service HDFS-8286. Scaling out the namespace using KV store HDFS-14703. Namenode Fine Grained Locking (design inspired us to implement it fully) # 总结 华为云FusionInsight MRS云原生数据湖为政企客户提供湖仓一体、云原生的数据湖解决方案,构建一个架构可持续演进的离线、实时、逻辑三种数据湖,支撑政企客户全量数据的实时分析、离线分析、交互查询、实时检索、多模分析、数据仓库、数据接入和治理等大数据应用场景。 华为云FusionInsight MRS通过FGL对HDFS NameNode锁机制进行优化,有效提升了NameNode的读写吞吐量,从而能够支持更多数据,更多业务请求访问,从而更好的支撑政企客户高效用数,业务洞见更准,价值兑现更快。
  • [问题求助] FusionInsight 重装DWS 时,preinstall error version is lower than
    【【日志信息】(可选,上传日志内容或者附件)
总条数:202 到第
上滑加载中