华为云用户手册

  • 原因分析 查询Core节点有大量文件的目录,发现大部分都是类似“blockmgr-033707b6-fbbb-45b4-8e3a-128c9bcfa4bf”的目录,里面存放了计算过程中产生的shuffle临时文件。 因为JDBCServer启动了Spark的动态资源分配功能,已经将shuffle托管给NodeManager,NodeManager只会按照APP的运行周期来管理这些文件,并不会关注单个executor所在的container是否存在。因此,只有在APP结束的时候才会清理这些临时文件。任务运行时间较长时导致临时文件过多占用了大量磁盘空间。
  • 原因分析 Spark运行的时候会将临时产生的shuffle文件放在executor的临时目录中,方便后面获取。 而当某个executor异常退出时,NodeManager会把这个executor所在的container临时目录删除,随后其他executor再来申请这个executor的shuffle结果就会报文件找不到。 因此,遇到这样的问题需要确认是否executor异常退出,可以根据spark任务页面的executors便签页查看是否有dead状态的executor,查看各个dead状态的executor日志,确认异常退出的原因(其中可能有部分executor退出原因就是因为shuffle文件找不到,需要找到最早异常退出的executor)。 常见的异常退出: executor发生OOM executor运行时出现多个task任务失败 executor所在节点被清理
  • 处理步骤 检查ZooKeeper下面是否有目标目录和注册的信息 以root用户登录任意一个Master节点并初始化环境变量。 source /opt/client/bigdata_env 执行zkCli.sh -server 'ZooKeeper实例IP地址:ZooKeeper连接端口'命令登录ZooKeeper。 ZooKeeper连接端口通常为2181,可通过查看ZooKeeper服务配置参数“clientPort”获取。 执行ls /thriftserver查看是否有“active_thriftserver”目录。 如果有active_thriftserver目录,执行get /thriftserver/active_thriftserver查看该目录下是否有注册的配置信息。 如果有注册的配置信息,联系华为云支持人员处理。 如果没有注册的配置信息,执行4 如果没有active_thriftserver目录,执行4。 登录Manager界面,查看Spark的JDBCServer实例的主备状态是否未知。 是,执行5。 否,联系运维人员处理。 重启两个JDBCServer实例,查看主备实例状态恢复正常且zk下面有了目标目录和数据,作业即可恢复正常。若实例状态没有恢复请联系华为云支持人员处理。
  • 原因分析 问题1:可能原因是MapReduce服务异常。 问题2:可能原因如下: Spark的JobHistory服务异常。 日志太大,NodeManager在做日志汇聚的时候出现超时。 HDFS存放日志目录权限异常(默认/tmp/logs/用户名/logs)。 日志已被清理(spark的JobHistory默认存放7天的eventLog,配置项为spark.history.fs.cleaner.maxAge;MapReduce默认存放15天的任务日志,配置项为mapreduce.jobhistory.max-age-ms)。 如果Yarn页面上也找不到,可能是被Yarn清理了(默认存放10000个历史任务,配置项为yarn.resourcemanager.max-completed-applications)。
  • 处理步骤 问题1:确认MapReduce服务是否正常,如果异常,尝试重启服务。如果还是不能恢复,需要查看后台JobhistoryServer日志。 问题2:依次排查可能的情况: 查看Spark的JobHistory是否运行正常; 通过查看yarn的app详情页面,确认日志文件是否过大,如果日志汇聚失败,页面的“Log Aggregation Status:”应该显示为失败或者超时; 查看对应目录权限是否异常; 查看目录下是否有对应的appid文件(Spark的eventlog存放目录:MRS 3.x及以后版本的目录是hdfs://hacluster/spark2xJobHistory2x,MRS 3.x以前版本的目录是hdfs://hacluster/sparkJobHistory,任务运行日志存放目录是hdfs://hacluster/tmp/logs/用户名/logs); 查看appid和当前作业的id是否超过历史记录最大值。
  • 处理步骤 检查备份目录是否软链接到系统盘。 以root用户登录集群主备Master节点。 执行df -h命令查看磁盘情况,检查系统盘的存储情况。 执行 ll /srv/BigData/LocalBackup命令, 查看备份目录是否软连接到/opt/Bigdata/LocalBackup。 检查备份文件是否软链接到系统盘且系统盘空间是否足够。如果软链接到系统盘且系统盘空间不足,请执行步骤2。如果否,说明不是由于系统盘空间不足导致,请联系技术服务。 将历史备份数据移到数据盘的新目录中。 以root用户登录Master节点。 执行su - omm命令,切换到omm用户。 执行rm -rf /srv/BigData/LocalBackup命令,删除备份目录软连接。 执行mkdir -p /srv/BigData/LocalBackup命令,创建备份目录。 执行mv /opt/Bigdata/LocalBackup/* /srv/BigData/LocalBackup/命令,将历史备份数据移到新目录。 重新执行备份任务。
  • 解决办法 请检查Driver进程所在的IP是否可以ping通。 启动一个Spark PI任务,会有类似如下打印信息。 16/05/11 18:07:20 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@192.168.1.100:23662] 16/05/11 18:07:20 INFO Utils: Successfully started service 'sparkDriver' on port 23662. 在该节点,也就是2中示例的192.168.1.100上执行netstat - anp | grep 23662看下此端口是否打开,如下打印标明,相关端口是打开的。 tcp 0 0 ip:port :::* LISTEN 107274/java tcp 0 0 ip:port ip:port ESTABLISHED 107274/java 在AppMaster启动的节点执行telnet 192.168.1.100 23662看下是否可以联通该端口,请使用root用户和omm用户都执行一遍。 如果出现Escape character is '^]'类似打印则说明可以联通,如果出现connection refused则表示失败,无法连接到相关端口。 如果相关端口打开,但是从别的节点无法联通到该端口,则需要排查下相关网络配置。 23662这个端口每次都是随机的,所以要根据自己启动任务打开的端口来测试。
  • 原因分析 Driver端异常: 16/05/11 18:10:56 INFO Client: client token: N/A diagnostics: Application application_1462441251516_0024 failed 2 times due to AM Container for appattempt_1462441251516_0024_000002 exited with exitCode: 10 For more detailed output, check the application tracking page:https://hdnode5:26001/cluster/app/application_1462441251516_0024 Then click on links to logs of each attempt. Diagnostics: Exception from container-launch. Container id: container_1462441251516_0024_02_000001 在ApplicationMaster日志中,异常如下: 2016-05-12 10:21:23,715 | ERROR | [main] | Failed to connect to driver at 192.168.30.57:23867, retrying ... | org.apache.spark.Logging$class.logError(Logging.scala:75) 2016-05-12 10:21:24,817 | ERROR | [main] | Failed to connect to driver at 192.168.30.57:23867, retrying ... | org.apache.spark.Logging$class.logError(Logging.scala:75) 2016-05-12 10:21:24,918 | ERROR | [main] | Uncaught exception: | org.apache.spark.Logging$class.logError(Logging.scala:96) org.apache.spark.SparkException: Failed to connect to driver! at org.apache.spark.deploy.yarn.ApplicationMaster.waitForSparkDriver(ApplicationMaster.scala:426) at org.apache.spark.deploy.yarn.ApplicationMaster.runExecutorLauncher(ApplicationMaster.scala:292) … 2016-05-12 10:21:24,925 | INFO | [Thread-1] | Unregistering ApplicationMaster with FAILED (diag message: Uncaught exception: org.apache.spark.SparkException: Failed to connect to driver!) | org.apache.spark.Logging$class.logInfo(Logging.scala:59) Spark-client模式任务Driver运行在客户端节点上(通常是集群外的某个节点),启动时先在集群中启动AppMaster进程,进程启动后要向Driver进程注册信息,注册成功后,任务才能继续。从AppMaster日志中可以看出,无法连接至Driver,所以任务失败。
  • 原因分析 在Driver端打印异常如下: Exception Occurs: BadPadding 16/02/22 14:25:38 ERROR Schema: Failed initialising database. Unable to open a test connection to the given database. JDBC url = jdbc:postgresql://ip:port/sparkhivemeta, username = spark. Terminating connection pool (set lazyInit to true if you expect to start your database after your app). SparkSQL任务使用时,需要访问DBService以获取元数据信息,在客户端需要解密密文来访问,在使用过程中,用户没有按照流程操作,没有执行配置环境变量操作,且在其客户端环境变量中存在默认的JDK版本,导致在执行解密过程中调用的解密程序执行解密异常,导致用户被锁。
  • 原因分析 PostgreSQL缓存:除了常见的执行计划缓存、数据缓存,PostgreSQL为了提高生成执行计划的效率,还提供了catalog,relation等缓存机制。长连接场景下这些缓存中的某些缓存是不会主动释放的,因此可能导致长连接占用大量的内存不释放。 PMS是MRS的监控进程,此进程会经常创建表分区或者新表,由于PostgreSQL会缓存当前会话访问过的对象的元数据,且PMS的数据库连接池连接会长时间存在,所以连接占用的内存会逐渐上升。
  • 解决办法 该解决办法以20051端口被占用为例,20050端口被占用的解决办法与该办法类似。 以root用户登录DBService安装报错的节点主机,执行命令:netstat -nap | grep 20051查看占用20051端口的进程。 使用kill命令强制终止使用20051端口的进程。 约2分钟后,再次执行命令:netstat -nap | grep 20051,查看是否还有进程占用该端口。 确认占用该端口进程所属的服务,并修改为其他端口。 分别在“/tmp”和“/var/run/MRS-DBService/”目录下执行find . -name "*20051*"命令,将搜索到的文件全部删除。 登录Manager,重启DBService服务。
  • 操作前提 在进行事件文件完整性校验前,您需先了解云审计摘要文件的签名方式: 云审计摘要文件使用RSA数字签名,对于每个摘要文件,云审计执行以下操作: 创建数字签名字符串(由指定摘要文件字段构成),获取RSA私钥。 将数字签名字符串的哈希值和私钥传递给RSA算法,生成数字签名,将数字签名编码成十六进制格式。 将该数字签名放入摘要文件对象的meta-signature元数据属性中。 数字签名字符串包含以下摘要文件字段: UTC扩展格式的摘要文件结束时间戳(2017-03-28T02-09-17Z)。 当前摘要文件的OBS存储路径。 当前摘要文件(压缩后的)的哈希值(十六进制编码)。 前一摘要文件的十六进制数字签名。
  • 操作场景 由于云审计采用了行业标准、可公开使用的签名算法和哈希函数,因此,您可以自行创建用于校验云审计事件文件完整性的工具。原则上进行完整性校验时必须包含字段time、service_type、resource_type、trace_name、trace_rating、trace_type,其他字段由各服务自己定义。 启用事件文件完整性校验后,云审计将摘要文件提交到您的OBS桶中,您可以使用这些文件实现自己的校验解决方案。有关摘要文件的更多信息,请参阅摘要文件。
  • 创建云服务器实例 { "time": "2016/12/08 11:07:28 GMT+08:00", "user": { "name": "aaa/op_service", "id": "f2fe9fac63414a35a7d03108d5f1ea73", "domain": { "name": "aaa", "id": "1f9b9ba51f6b4061bd5c1736b28469f8" } }, "request": { "server": { "name": "as-config-15f1_XWO68TFC", "imageRef": "b2b2c7dc-bbb0-4d6b-81dd-f0904023d54f", "flavorRef": "m1.tiny", "personality": [], "vpcid": "e4c374b9-3675-482c-9b81-4acd59745c2b", "nics": [ { "subnet_id": "fff89132-88d4-4e5b-9e27-d9001167d24f", "nictype": null, "ip_address": null, "binding:profile": null, "extra_dhcp_opts": null } ], "adminPass": "********", "count": 1, "metadata": { "op_svc_userid": "26e96eda18034ae9a44130bacb967b96" }, "availability_zone": "az1.dc1", "root_volume": { "volumetype": "SATA", "extendparam": { "resourceSpecCode": "SATA" }, "size": 40 }, "data_volumes": [], "security_groups": [ { "id": "dd597fd7-d119-4994-a22c-891fcfc54be1" } ], "key_name": "KeyPair-3e51" } }, "response": { "status": "SUCCESS", "entities": { "server_id": "42d39b4a-19b7-4ee2-b01b-a9f1353b4c54" }, "job_id": "4010b39d58b855980158b8574b270018", "job_type": "createSingleServer", "begin_time": "2016-12-01T03:04:38.437Z", "end_time": "2016-12-01T03:07:26.871Z", "error_code": null, "fail_reason": null }, "service_type": "ECS", "resource_type": "ecs", "resource_name": "as-config-15f1_XWO68TFC", "resource_id": "42d39b4a-19b7-4ee2-b01b-a9f1353b4c54", "source_ip": "", "trace_name": "createSingleServer", "trace_rating": "normal", "trace_type": "SystemAction", "api_version": "1.0", "record_time": "2016/12/08 11:07:28 GMT+08:00", "trace_id": "4abc3a67-b773-11e6-8412-8f0ed3cc97c6" } 在以上信息中,可以重点关注如下字段: "time":记录了事件发生的时间,本例中为12月8日上午11点07分28秒。 "user":记录了操作用户的信息,本例中操作用户为企业账户(domain字段)aaa下的用户(name字段)aaa。 "request":记录了创建ECS服务器的请求,可以抽取该ECS服务器的简单信息,如name为as-config-15f1_XWO68TFC,资源id为e4c374b9-3675-482c-9b81-4acd59745c2b。 "response":记录了创建ECS服务的返回结果,可以抽取其中的关键信息,如创建结果(status字段)为SUCCESS,错误码(error_code字段)和失败原因(fail_reason字段)均为空(null)。
  • 云硬盘实例 { "time": "2016/12/08 11:24:04 GMT+08:00", "user": { "name": "aaa", "id": "26e96eda18034ae9a44130bacb967b96", "domain": { "name": "aaa", "id": "1f9b9ba51f6b4061bd5c1736b28469f8" } }, "request": "", "response": "", "service_type": "EVS", "resource_type": "evs", "resource_name": "volume-39bc", "resource_id": "229142c0-2c2e-4f01-a1b4-2dfdf1c678c7", "source_ip": "10.146.230.124", "trace_name": "deleteVolume", "trace_rating": "normal", "trace_type": "ConsoleAction", "api_version": "1.0", "record_time": "2016/12/08 11:24:04 GMT+08:00", "trace_id": "c529254f-bcf5-11e6-a89a-7fc778a6c92c" } 在以上信息中,可以重点关注如下字段: "time":记录了事件发生的时间,本例中为12月8日上午11点24分04秒。 "user":记录了操作用户的信息,本例中操作用户为企业账户(domain字段)aaa下的用户(name字段)aaa。 "request":非必选字段,此处为空。 "response":非必选字段,此处为空。 "trace_rating":记录了事件的级别,可代替response字段提示用户操作结果,本例中为normal,按事件结构章节中约束,即代表操作成功。
  • IP地址前缀中的掩码匹配规则 IP地址前缀规则中包含“IP地址前缀”,“掩码下限”和“掩码上限”,规则中参数的详细说明请参见表1。 表1 IP地址前缀规则中的参数说明 参数 说明 IP地址前缀 IP地址前缀由IP地址和掩码组成,格式为“IP地址/掩码”,例如10.1.0.0/16。 在IP地址前缀中,通过掩码长度,限定待匹配IP地址的前多少位需要和IP地址前缀严格匹配。 掩码下限 掩码上限 当待过滤的路由已匹配现有的前缀规则时,指定掩码下限和掩码上限,可以在一定掩码长度范围内进行匹配。 掩码下限不能低于IP地址前缀中的掩码长度,比如IP地址前缀的掩码为16,则掩码下限大于等于16,比如18。 掩码上限不能低于掩码下限,比如掩码下限为18,则掩码上限大于等于18,小于等于32,比如20。 您可以根据实际需求灵活配置掩码下限和掩码上限,匹配原则如下: 如果不配置掩码下限和掩码上限,则进行精确匹配,即只匹配掩码长度为IP地址前缀中配置的掩码长度。 如果配置掩码下限,不配置掩码上限,则匹配掩码长度位于[掩码下限,32]范围内的路由。 如果配置掩码上限,不配置掩码下限,则匹配掩码长度位于[掩码长度,掩码上限]范围内的路由。 如果同时配置掩码下限和掩码上限,则匹配的掩码长度位于[掩码下限,掩码上限]范围内的路由。 IP地址前缀规则和IP地址匹配的示例请参见表2。相比示例一的规则未配置掩码下限和掩码上限,其他示例的规则配置了掩码下限或掩码上限,缩小了掩码范围,可以更精确的匹配。 表2 IP地址前缀规则匹配示例 IP地址前缀规则配置情况 匹配原则说明 允许通过的IP地址示例 拒绝通过的IP地址示例 示例一: 匹配原则:允许 IP地址前缀:10.0.0.0/16 掩码下限:未配置 掩码上限:未配置 路由地址必须同时满足以下两个条件,才算匹配成功: IP地址的前16位可以匹配 掩码范围为16 IP的前16位和掩码范围均可匹配上,允许通过:10.0.0.0/16 以下IP地址的前16位可匹配上,但是掩码范围未匹配上,拒绝通过: 10.0.0.0/8 10.0.1.0/24 10.0.253.25/32 IP地址掩码范围可匹配上,但是前16位未匹配上,拒绝通过:10.1.0.0/16 示例二: 匹配原则:允许 IP地址前缀:10.0.0.0/16 掩码下限:18 掩码上限:未配置 路由地址必须同时满足以下两个条件,才算匹配成功: IP地址的前16位可以匹配 掩码范围为[18,32] 以下IP的前16位和掩码范围均可匹配上,允许通过: 10.0.1.0/24 10.0.253.25/32 IP地址的前16位可匹配上,但是掩码范围未匹配上,拒绝通过: 10.0.0.0/8 10.0.0.0/16 IP地址掩码范围可匹配上,但是前16位未匹配上,拒绝通过:10.1.0.0/20 示例三: 匹配原则:允许 IP地址前缀:10.0.0.0/16 掩码下限:未配置 掩码上限:24 路由地址必须同时满足以下两个条件,才算匹配成功: IP地址的前16位可以匹配 掩码范围为[16,24] 以下IP的前16位和掩码范围均可匹配上,允许通过: 10.0.0.0/16 10.0.0.0/20 10.0.1.0/24 IP地址的前16位可匹配上,但是掩码范围未匹配上,拒绝通过: 10.0.0.0/8 10.0.253.25/32 IP地址掩码范围可匹配上,但是前16位未匹配上,拒绝通过:10.1.0.0/20 示例四: 匹配原则:允许 IP地址前缀:10.0.0.0/16 掩码下限:18 掩码上限:24 路由地址必须同时满足以下两个条件,才算匹配成功: IP地址的前16位可以匹配 掩码范围为[18,24] 以下IP的前16位和掩码范围均可匹配上,允许通过: 10.0.0.0/20 10.0.1.0/24 以下IP地址的前16位可匹配上,但是掩码范围未匹配上,拒绝通过: 10.0.0.0/8 10.0.0.0/16 10.0.253.25/32 IP地址掩码范围可匹配上,但是前16位未匹配上,拒绝通过:10.1.0.0/20 全0(0.0.0.0)为通配地址。当IP地址为全0时,可以在其后指定掩码长度或者掩码长度范围: 指定掩码长度,则表示具有该掩码长度的所有路由都被允许通过或拒绝通过。 指定掩码长度范围,即设置掩码下限和掩码上限,则表示该掩码长度范围内的所有路由都被允许通过或拒绝通过。 通配地址匹配路由原则详细说明请参见表3。 表3 通配地址匹配路由原则 掩码下限和掩码上限配置情况 IP地址前缀 匹配原则 掩码下限:未配置 掩码上限:未配置 IP地址前缀:0.0.0.0/0 只可以匹配缺省路由,即0.0.0.0/0 示例:只有0.0.0.0/0路由被允许通过或拒绝通过。 IP地址前缀:0.0.0.0/X,此处掩码长度X不为0 匹配掩码长度为X的所有路由。 示例:掩码长度X为8,则所有掩码长度为8的路由将被允许通过或拒绝通过。 掩码下限:配置 掩码上限:未配置 IP地址前缀:0.0.0.0/0 匹配掩码长度位于[掩码下限,32]范围内的所有路由。 示例:掩码下限为20,则掩码长度范围满足[20,32]的所有路由将被允许通过或拒绝通过。 IP地址前缀:0.0.0.0/X,此处掩码长度X不为0 匹配掩码长度位于[掩码下限,32]范围内的所有路由。 示例:掩码长度X为8,掩码下限为20,则掩码长度范围满足[20,32]的所有路由将被允许通过或拒绝通过。 掩码下限:未配置 掩码上限:配置 IP地址前缀:0.0.0.0/0 匹配掩码长度位于[0,掩码上限]范围内的所有路由。 示例:掩码上限为28,则掩码长度范围满足[0,28]的所有路由将被允许通过或拒绝通过。 IP地址前缀:0.0.0.0/X,此处掩码长度X不为0 匹配掩码长度位于[X,掩码上限]范围内的所有路由。 示例:掩码长度X为8,掩码上限为28,则掩码长度范围满足[8,28]的所有路由将被允许通过或拒绝通过。 掩码下限:配置 掩码上限:配置 IP地址前缀:0.0.0.0/0 匹配掩码长度位于[掩码下限,掩码上限]范围内的所有路由。 示例:掩码下限为20,掩码上限为28,则掩码长度范围满足[20,28]的所有路由将被允许通过或拒绝通过。 IP地址前缀:0.0.0.0/X,此处掩码长度X不为0 匹配掩码长度位于[掩码下限,掩码上限]范围内的所有路由。 示例:掩码长度X为8,掩码下限为20,掩码上限为28,则掩码长度范围满足[20,28]的所有路由将被允许通过或拒绝通过。
  • IP地址前缀列表简介 IP地址前缀列表是一种包含一组路由信息过滤规则的过滤器,用户可以在规则中定义IP地址前缀和掩码长度范围,用于匹配路由信息的目的网段地址或下一跳地址。地址前缀列表可以应用在各种动态路由协议中,对路由协议发布和接收的路由信息进行过滤。IP地址前缀列表进行匹配的依据有两个: 掩码长度:IP地址前缀列表匹配的对象是IP地址前缀,前缀由IP地址和掩码长度共同定义。 例如,10.1.0.0/16这条路由,掩码长度是16,这个地址的有效前缀为16位,即10.1.0.0。 掩码长度范围:对于前缀相同,掩码不同的路由,可以指定待匹配的前缀掩码长度范围来实现精确匹配或者在一定掩码长度范围内匹配。 IP地址前缀列表当前支持IPv4地址。
  • AS_Path匹配规则 BGP路由的AS_Path属性实际上可以看作是一个包含空格的字符串,因此可以通过正则表达式来进行匹配。 如图1所示,ER-A的AS号为100,来自ER-A邻居的BGP路由的经过ER-A,AS_Path会自动在最左边的位置增加ER-A的AS号100。 图1 AS_Path原理图示 正则表达式就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。AS_Path规则主要是定义“AS_Path正则表达式”,然后去匹配BGP路由的AS_Path属性信息,从而实现对BGP路由信息的过滤。 一个AS_Path列表中可以创建多个AS_Path规则,每个AS_Path规则对应一条过滤规则。如图2所示,待过滤路由按照序列号从小到大的顺序进行匹配: 当匹配上某一AS_Path规则时,如果该AS_Path规则的匹配模式是允许,则这条路由被允许通过;如果该AS_Path规则的匹配模式是拒绝,则这条路由被拒绝通过。 当遍历了AS_Path列表中的所有AS_Path规则,均没有匹配上,那么这条路由就被拒绝通过。 图2 AS_Path匹配规则 AS_Path列表过滤路由的原则可以总结为:顺序匹配、唯一匹配、默认拒绝。 顺序匹配:按序列号从小到大按顺序进行匹配。同一个AS_Path列表中的多条AS_Path规则设置不同的序列号,可能会有不同的过滤结果,实际配置时需要注意。 唯一匹配:待过滤路由只要与一个AS_Path规则匹配,就不会再去尝试匹配其他AS_Path规则。 默认拒绝:默认所有未与任何一个AS_Path规则匹配的路由,均为未通过AS_Path列表的过滤。因此在一个AS_Path列表中创建了一个或多个拒绝模式的AS_Path规则后,需要创建一个AS_Path规则来允许所有其他路由通过。
  • AS_Path正则表达式说明 AS_Path规则过滤的核心内容就是正则表达式。关于正则表达式的内容较为复杂,这里仅讨论一些跟AS_Path过滤器相关的内容。 AS_Path规则使用正则表达式来定义匹配规则。正则表达式由元字符和字符两部分组成: 元字符定义了匹配的规则 字符定义了匹配的对象 BGP AS_Path支持的元字符及正则表达式配置示例如表1所示。 表1 AS_Path正则表达式 元字符 含义 示例 . 匹配除“\n”之外任何单个字符,包括空格。 .*表示匹配任意字符串,即AS_Path为任意,可以用来匹配所有路由。 说明: 在一个AS_Path列表中创建了一个或多个拒绝模式的AS_Path规则后,需要创建一个.*规则,来允许所有其他路由通过。 * 之前的字符在目标对象中出现0次或连续多次。 参考上例。 + 之前的字符在目标对象中出现1次或连续多次。 65+表示6在AS_Path的首位,而5在AS_Path中出现一次或多次,那么: 以下字符串都符合这个特征:65,655,6559,65259,65529等。 以下字符串不符合这个特征:56,556,5669,55269,56259等。 | 竖线左边和右边的字符为“或”的关系。 100|65002|65003表示匹配100、65002或65003。 以下字符串均符合这个特征,包含其中任意一个字符即可: 100,655,6559 65,655,65002 65,65003,100 ^ 之后的字符串必须出现在目标对象的开始。 ^65表示匹配以65开头的字符串,那么: 以下字符串都符合这个特征:65,651,6501,65001等。 以下字符串不符合这个特征:165,1650,6650,60065等。 $ 之前的字符串必须出现在目标对象的结束。 65$表示匹配以65结尾的字符串,那么: 以下字符串都符合这个特征:65,165,1065,10065,60065等。 以下字符串不符合这个特征:651,1650,6650,60650,65001等。 说明: ^$表示匹配空字符串,即AS_Path为空,通常用来匹配本地始发路由。 ( ) 一对圆括号内的正则表达式作为一个子正则表达式,匹配子表达式并获取这一匹配。 100(200)+表示100在AS_Path的首位,而200在AS_Path中出现一次或多次,那么 以下字符串都符合这个特征: 100200 100200200 100200200200 [ ] 匹配方括号内的任意字符或指定范围内的任意字符。 [896]表示匹配含有8、9或6中任意一个字符。 [2-4]表示匹配2,3,4的任意字符。 [0-9]表示匹配数字0~9的任意字符。 说明: 方括号内“[ ]”只能填写数字0到9。例如,如果需要匹配735~907,则需要写成(73[5-9]|7[4-9][0-9]|8[0-9][0-9]|90[0-7])。 [^ ] 匹配除了方扩号内列出的字符外的任意字符或不在指定范围内的任意字符。 [^2-4]表示匹配除2,3,4外的其他字符。 [^0-9]表示匹配除数字0~9外的其他字符。 [^896]表示匹配含有8、9或6这几个字符之外的任意一个字符。 _ 匹配一个符号,包括逗号、左大括号、右大括号、左括号、右括号和空格,在表达式的开头或结尾时还可作起始符、结束符(同^ ,$)。 ^65001_表示匹配字符串的开始为65001,字符串的后面为符号,也即AS_Path最左边AS(最后一个AS)为65001,可以用来匹配AS 65001邻居发送的路由, _65001_表示匹配字符串里有65001,即AS_Path中有65001,可以用来匹配经过AS 65001的路由。 _65001$表示匹配字符串的最后为65001,字符串前面是符号,即AS_Path最右边AS(第一个AS)为65001,可以用来匹配AS 65001始发的路由。 \ 转义字符。 AS_Confed_Sequence是用“(” 、“)”表示的,“(” 、“)”在正则表达式中是特殊字符,有特殊用处,所以对于这种特殊字符,可以使用“\”来去除其特殊意义进行匹配。例如: \(65002_表示匹配字符串为(65002,字符串的后面为符号,也即AS_Confed_Sequence最左边AS(最后一个AS)为65002,可以用来匹配AS 65002邻居发送的路由。 \(.*_65003_.*\) 表示AS_Confed_Sequence中间有65003,可以用来匹配经过AS 65003的路由。 _65004\)表示匹配字符串最后为65004),字符串的前面为符号,也即AS_Confed_Sequence最右边AS(第一个AS)为65004,可以用来匹配AS 65004始发的路由,还可以用来匹配AS 65004直接发布的路由。 同理,AS_Confed_Set使用的“[”、“]”,AS_Set使用的“{”、“}”也都可以使用“\”符号来去除这些特殊符号的特殊意义。
  • AS_Path列表简介 AS_Path列表是一组针对BGP路由的AS_Path属性进行过滤的规则。在BGP的路由信息中,包含有AS_Path属性,AS_Path属性按矢量顺序记录了BGP路由从本地到目的地址所要经过的所有AS编号,因此基于AS_Path属性定义一些过滤规则,就可以实现对BGP路由信息的过滤。 AS_Path路径记录AS编号越少,证明该路径越短,当两条AS_Path均能实现通信目的时,优选路径较短的。
  • 配置建议 建议为NAT网关创建独立VPC不用于云服务器等实例网络配置,避免影响后续的访问控制。 在前期网络规划复杂甚至不合理的情况下(例如存在VPC网段重叠、NAT网关已有复杂配置、已通过VPC-Peering配置东西向通信等场景下),请充分评估网络互连、环路、路由冲突等风险。 因涉及组件多,不建议直接将现网业务导入,可先创建测试机,并在业务VPC路由表中配置目的地址路由,利用业务VPC中的测试机验证整个业务流是否走通及配置的规则是否有效,再对现网业务进行切流。 使用云防火墙后,避免第一时间配置拦截规则。建议首先验证流量接入防火墙后业务是否正常,逐步增加规则,并及时验证功能,一旦发现有问题,需及时关闭防护,避免现网业务受损。 对于SNAT EIP,外到内无法主动访问,内到外的访问控制规则使用的是互联网边界防护的能力,建议不在“弹性公网IP管理”页面中对SNAT所绑定的EIP开启防护,避免规则和日志混乱。
  • 配置流程 将VPC1和VPC-NAT接入企业路由器中 配置NAT网关 配置VPC1路由表 (可选)使用业务VPC下的测试机访问外网测试网络连通性,正常访问则证明NAT配置成功。 开启VPC间防火墙防护,请参见开启VPC间防火墙。 (可选)再次使用业务VPC下测试机进行网络连通性测试,查看防火墙流量日志中有响应记录,则证明防火墙引流成功。查询流量日志请参见流量日志。 在防火墙上配置NAT防护规则。 (可选)使用测试机,访问IP或域名,查看访问控制日志是否有命中该条规则的日志,有则证明防护规则生效,查询访问控制日志请参见访问控制日志。 在验证通过后,逐步切换类生产/现网业务到云防火墙。 图1 SNAT防护配置流程
  • SDK列表 表1提供了分布式消息服务RocketMQ版支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导 NodeJs huaweicloud-sdk-nodejs-v3 NodeJs SDK使用指导 .NET huaweicloud-sdk-net-v3 .Net SDK使用指导 PHP huaweicloud-sdk-php-v3 PHP SDK使用指导 表1提供的SDK为管理面API的SDK,并非生产消费消息的SDK。如果需要生产消费消息的SDK,请参考开发指南。
  • SDK列表 表1提供了分布式消息服务RabbitMQ版支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导 NodeJs huaweicloud-sdk-nodejs-v3 NodeJs SDK使用指导 .NET huaweicloud-sdk-net-v3 .Net SDK使用指导 PHP huaweicloud-sdk-php-v3 PHP SDK使用指导 表1提供的SDK为管理面API的SDK,并非生产消费消息的SDK。如果需要生产消费消息的SDK,请参考开发指南。
  • SDK列表 表1提供了分布式消息服务Kafka版支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导 NodeJs huaweicloud-sdk-nodejs-v3 NodeJs SDK使用指导 .NET huaweicloud-sdk-net-v3 .Net SDK使用指导 PHP huaweicloud-sdk-php-v3 PHP SDK使用指导 表1提供的SDK为管理面API的SDK,并非生产消费消息的SDK。如果需要生产消费消息的SDK,请参考开发指南。
  • 挂载的并行文件系统如何让其他用户访问? 一般情况下,只有执行挂载命令的用户有访问挂载目录的权限。 如果要允许其他用户访问挂载目录,可以在obsfs挂载命令中指定allow_other参数,命令示例: ./obsfs filesystem001 /mnt/mount_path/ -o url=obs.cn-north-1.myhuaweicloud.com -o passwd_file=/etc/passwd-obsfs -o big_writes -o max_write=131072 -o allow_other -o use_ino
  • 创建开发环境 镜像注册成功后,即可在ModelArts控制台的Notebook页面,创建开发环境时选择自定义镜像,选中Step4 注册新镜像中注册的的镜像。 Notebook创建成功后,在ModelArts Notebook列表页,单击“打开”,启动该开发环境,启动之后Notebook Launcher界面展示如下:。 图1 打开开发环境 打开一个Terminal,查看conda env环境。conda更多知识可以通过conda官网了解。 开发环境中展示的每个kenrel本质是安装在/home/ma-user/anaconda3/下面的conda env环境。conda env环境可通过命令/home/ma-user/anaconda3/bin/conda env list查看。 图2 查看conda env环境
  • 使用场景和构建流程说明 用户在使用ModelArts开发环境时,经常需要对开发环境进行一些改造,如安装、升级或卸载一些包。但是某些包的安装升级需要root权限,运行中的Notebook实例中无root权限,所以在Notebook实例中安装需要root权限的软件,这一点在预置的开发环境镜像中是无法实现的。 此时,用户可以使用第三方的基础镜像来编写Dockerfile,构建出完全适合自己的镜像。进一步可以调试该镜像,确保改造后的镜像能够在ModelArts服务中正常使用。最终将镜像进行注册,用以创建新的开发环境,满足自己的业务需求。 本案例将基于ubuntu镜像,安装pytorch 1.8, ffmpeg 3和gcc 8,构建一个面向AI开发的新环境,并借助ma_cli(请参考ma-cli介绍)调试和注册,确保可以成功创建新的开发环境。 图1 构建与调测镜像流程 本案例适用于华为云-北京四Region。 父主题: 基于第三方镜像在ECS上构建自定义镜像并在Notebook中使用
  • Step4 注册新镜像 调试完成后,将新镜像注册到ModelArts镜像管理服务中,进而在能够在ModelArts中使用该镜像。 将镜像推到SWR 推送前需要登录SWR,请参考登录SWR。登录后使用docker push命令进行推送,如下: docker push swr.cn-north-4.myhuaweicloud.com/sdk-test/pytorch_1_8:v2 完成后即可在SWR上看到该镜像。 图1 将镜像推到SWR 注册镜像 有两种方式来注册镜像。 方式一:使用命令ma-cli image register --swr-path=[OPTIONS] SWR-PATH命令来注册镜像。注册命令会返回注册好的镜像信息,包括镜像id,name等,如下图所示。该命令的更多信息可参考注册镜像。 ma-cli image register --swr-path=swr.cn-north-4.myhuaweicloud.com/sdk-test/pytorch_1_8:v2 图2 注册镜像 方式二:在ModelArts Console上注册镜像 登录ModelArts控制台,在左侧导航栏选择“镜像管理”,进入镜像管理页面。单击“注册镜像”,镜像源即为1.将镜像推到SWR中推送到SWR中的镜像。请将完整的SWR地址拷贝到这里即可,或单击可直接从SWR选择自有镜像进行注册,如图4所示。 图3 注册镜像 图4 选择自有镜像 父主题: 基于第三方镜像在ECS上构建自定义镜像并在Notebook中使用
  • 配置VM环境 在docker机器中,使用如下命令下载安装脚本。 wget https://notebook-custom-image-build.obs.cn-north-4.myhuaweicloud.com/script/install_on_ubuntu1804.sh 当前仅支持ubuntu系统的脚本。 在docker机器中并执行如下命令,即可完成环境配置。 bash install_on_ubuntu1804.sh source /etc/profile 安装脚本依次执行了如下任务: 安装docker。 如果挂载了GPU,则会安装nvidia-docker2,用以将GPU挂载到docker容器中。 安装ModelArts工具,包括安装modelarts-sdk和安装ma-cli。
共100000条