• [交流分享] 算法软件全流程上云操作步骤
    最近在利用华为云的各项业务做算法软件全流程上云,接下来我将分享全流程上云的操作步骤1. 云服务选择和配置1.1 计算服务弹性云服务器(ECS):适用于各种规模的业务,可根据需求选择不同配置的服务器。容器服务(CCE):适用于微服务架构和容器化应用,提供了弹性、高效的容器环境。1.2 数据存储和管理对象存储服务(OBS):提供海量、安全、可靠的数据存储解决方案。数据库服务:包括关系型数据库(RDS)、NoSQL数据库等,支持数据的高效管理。1.3 AI和大数据服务ModelArts:全场景AI开发平台,支持算法的整个生命周期管理。云数据湖探索(DLS):用于存储、处理和分析大数据。2. 算法上云实践2.1 算法开发开发环境:选择ModelArts提供的Notebook服务,进行算法代码的编写和测试。算法优化:为云环境优化算法,提高效率和准确性。2.2 算法训练资源选择:根据算法复杂度选择GPU或Ascend处理器进行训练。数据处理:使用云数据湖探索进行数据预处理和清洗。2.3 算法部署模型部署:将训练好的模型部署到云服务器或容器服务中。接口开发:开发API接口,供应用调用模型。3. 软件上云实践3.1 应用迁移代码审查:确保代码兼容云环境,进行必要的修改。依赖管理:确保所有依赖项在云环境中可用。3.2 性能优化负载均衡:使用华为云负载均衡服务提高应用可用性。自动扩展:根据流量自动调整资源,优化性能和成本。3.3 持续集成和部署CI/CD流程:利用华为云DevCloud等工具,实现自动化的代码构建、测试和部署。4. 安全和合规4.1 数据安全加密:使用华为云的加密服务保护存储和传输中的数据。身份认证和访问控制:确保只有授权用户可以访问资源。4.2 网络安全虚拟私有云(VPC):建立隔离的网络环境。防火墙和入侵检测:使用华为云安全服务保护应用免受攻击。5. 成本管理5.1 资源监控使用CloudEye:监控资源使用情况和性能指标。5.2 成本优化预算管理:设置预算,监控和调整资源使用,避免超支。6. 监控和运维6.1 应用监控实时监控:使用CloudEye等工具监控应用性能。日志管理:利用Log Service收集和分析日志数据。6.2 自动化运维自动化脚本:编写脚本自动处理常见运维任务。故障恢复:实施灾备和故障转移策略,确保业务连续性。7. 文档和分享7.1 文档编写详细记录:编写详细的实施方案文档,包括技术选择、实施步骤、预期效果。可视化呈现:使用图表、流程图等视觉工具帮助说明和理解。7.2 分享和交流内部分享:在组织内部分享实践经验和教训。外部发布:在专业论坛或会议上分享实践案例,扩大影响。8. 高级算法优化和调试8.1 算法性能分析性能测试:在华为云环境中进行算法性能测试,识别瓶颈。资源调配:根据测试结果调整计算资源配置,例如,增加CPU核数或内存。8.2 算法调试和优化调试工具:利用华为云提供的调试工具进行代码调试。并行计算:对算法进行并行化处理,以充分利用云计算资源。9. 数据处理和分析9.1 大数据处理使用MapReduce框架:处理大规模数据集。数据预处理:清洗、转换和规范化数据以提高算法效率。9.2 数据可视化BI工具:使用BI工具进行数据可视化,帮助理解数据特征和算法输出。10. 应用的云端集成和自动化10.1 服务化架构微服务架构:将软件拆分为多个独立的服务,方便在云环境中部署和扩展。10.2 自动化部署蓝绿部署:减少部署时的中断。容器编排:使用Kubernetes或其他容器编排工具自动化部署和管理。11. 安全性增强和合规性保证11.1 高级安全措施多重认证:实施多重认证机制,增强访问控制。数据安全审计:定期审计数据访问和处理活动。11.2 合规性检查法规遵从性:确保云服务遵守当地法律法规,如GDPR。行业标准遵守:遵循行业特定的数据处理和安全标准。12. 成本效益分析和优化12.1 成本效益评估ROI分析:评估云迁移投资回报率。优化策略:根据分析结果调整策略,如采用预留实例以降低成本。12.2 弹性成本管理弹性扩展:根据实际需求弹性扩展资源,实现成本效益最大化。13. 高级监控和报告13.1 定制监控自定义指标:监控对业务至关重要的特定指标。实时报告:生成实时性能和使用情况报告。13.2 预警系统阈值警报:设置阈值触发警报,及时响应潜在问题。自动化故障处理:在问题发生时自动执行预定的故障恢复流程。14. 持续学习和改进14.1 用户反馈和迭代收集用户反馈:定期收集和分析用户反馈,指导产品迭代。快速迭代:采用敏捷开发方法快速响应市场和用户需求。14.2 技术升级和创新跟踪技术趋势:关注云计算和AI领域的最新发展。技术创新:探索和实施新技术以提升产品竞争力。15. 社区参与和知识共享15.1 社区建设开源贡献:将一些通用组件开源,贡献于社区。社区互动:积极参与技术社区,分享经验,学习最佳实践。15.2 知识共享案例研究:编写并分享详细的案例研究。培训和研讨会:举办或参与相关的培训和研讨会,传播知识。
  • [交流分享] 基于华为云搭建开源Hadoop集群
    第一部分:购买华为弹性云服务器1、购买华为云ECS配置信息:本次ECS购买需遵循以下规格:计费模式:按需计费、可用区:可用区一、CPU架构:鲲鹏计算、规格:kc1.2xlarge.4 8vcpus|32GB、系统:CentOS7.6、系统盘:超高IO、200GB、网络:按流量计费、其他配置:默认。2、购买存储对象3、创建并行文件4、进入创建的OBS桶复制该参数到本地obs.cn-north-4.myhuaweicloud.com5、获取AK/SK点击新增访问秘钥,根据提示进行操作。操作完成后,得到文件“credentials.csv”,打开即可得到AK/SK。点击华为云页面右上角“用户名”,下拉选择“我的凭证”,点击“访问秘钥”。第二部分:搭建Hadoop集群1、使用finalshell登录ECS2、下载安装包:下载hadoop安装包、下载OBSFileSystem相关jar包、下载Openjdk。3、配置/etc/hosts文件查看ECS列表各节点IP4、创建各个节点执行vim /etc/hosts5、配置节点互信各节点执行ssh-keygen -t rsa连续回车生成/root/.ssh/id_rsa.pub文件;6、各节点执行:cat /root/.ssh/id_rsa.pub输出如下内容:复制该命令在各节点的输出内容。7、各节点执行:vim /root/.ssh/authorized_keys输入各节点的复制内容,保存退出。authorized_keys内容参考如下:8、各节点执行:ssh node-0001~node-0004,选择yes后,确保能够无密码跳转到目标节点。如上图,可以无密码跳转到目标节点9、确认是否已安装JDK各节点执行命令:java -version如图四个节点都已经安装JDK10、搭建Hadoop集群创建目录各节点执行:mkdir -p /home/modules/data/bufmkdir -p /home/nm/localdir11、登录node-0001节点,解压hadoop安装包 cd /rootcp hadoop-2.8.3.tar.gz /home/modules/cd /home/modules/tar -zxvf hadoop-2.8.3.tar.gz12、配置hadoop core-site.xml配置文件node-0001节点执行下列命令:vim /home/modules/hadoop-2.8.3/etc/hadoop/core-site.xml标注出的部分是上面保存的AK/SK以及obs的endpoint13、配置hdfs-site.xmlnode-0001节点执行下列命令:vim /home/modules/hadoop-2.8.3/etc/hadoop/hdfs-site.xml配置yarn-site.xmlnode-0001节点执行下列命令:vim /home/modules/hadoop-2.8.3/etc/hadoop/yarn-site.xml配置mapred-site.xmlnode-0001节点执行下列命令:cd /home/modules/hadoop-2.8.3/etc/hadoop/mv mapred-site.xml.template mapred-site.xmlvim /home/modules/hadoop-2.8.3/etc/hadoop/mapred-site.xml配置slavesnode-0001节点执行下列命令:Vim /home/modules/hadoop-2.8.3/etc/hadoop/slaves14、配置hadoop环境变量node-0001节点执行下列命令::vim /home/modules/hadoop-2.8.3/etc/hadoop/hadoop-env.sh添加如下内容:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.aarch64   15、node-0001节点执行下列命令:cd /rootCp hadoop-huaweicloud-2.8.3-hw-39.jar /home/modules/hadoop-2.8.3/share/hadoop/common/lib/cp hadoop-huaweicloud-2.8.3-hw-39.jar /home/modules/hadoop-2.8.3/share/hadoop/tools/libcp hadoop-huaweicloud-2.8.3-hw-39.jar /home/modules/hadoop-2.8.3/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/cp hadoop-huaweicloud-2.8.3-hw-39.jar /home/modules/hadoop-2.8.3/share/hadoop/hdfs/lib/16、分发hadoop包到各节点node-0001下执行下列命令:分发hadoop包到node2scp -r /home/modules/hadoop-2.8.3/ root@node-0002:/home/modules/分发hadoop包到node3scp -r /home/modules/hadoop-2.8.3/ root@node-0003:/home/modules/分发hadoop包到node4scp -r /home/modules/hadoop-2.8.3/ root@node-0004:/home/modules/17、配置环境变量各节点执行:vim /etc/profile在文件尾部添加如下内容:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.aarch64export HADOOP_HOME=/home/modules/hadoop-2.8.3export PATH=$JAVA_HOME/bin:$PATHexport PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATHexport HADOOP_CLASSPATH=/home/modules/hadoop-2.8.3/share/hadoop/tools/lib/*:$HADOOP_CLASSPATH注意“=”两边没有空格。各节点执行:source /etc/profile18、namenode初始化node-0001节点执行namenode初始化执行下列命令:hdfs namenode -format初始化成功后,start-dfs.sh启动hdfs。19、在OBS上传文件进入OBS桶,选择“对象”上传文件OBS文件上传成功20、执行hdfs命令查看OBS文件[root@node-0001 hadoop]# hdfs dfs -ls obs://bigdatapro-e34e/Hadoop集群与OBS互联成功。
  • [技术干货] 华为云分享
    近期项目决定集成使用华为AGC的云存储服务,用来存储用户上传的数据文件,其功能类似于用户的个人云盘,可以将用户数据或者应用内预置贴图等数据,存放在AGC云侧的数据服务器中。按需下载,可以大幅减小应用的包体,并且使用该云存储产品,使用SDK提供的接口使用即可,不用关注后台服务器的运维和部署等操作,大幅减少开发人力。在AGC界面创建分享华为的AGC的云存储服务,提供AGC控制台,可以再AGC控制台,以管理员的身份操作并且管理文件。关于AGC管理的文件分享,官方文档里,写的标题为 创建令牌。这个标题名可能比较难懂,其实就是创建分享链接。对应文档:cid:link_0操作步骤如下:1、登录AGC管理台, 点击 我的项目 ,找到你的云存储项目。在左侧导航栏选择 构建-云存储。2、选择一个文件,选择操作栏的 详情3、在弹出的选框中,可以看到有共享令牌的内容。每个文件默认匹配一个共享令牌。当文件拥有一个令牌时,就可以使用该令牌下载当前文件。 4、点击 复制 ,复制该令牌。复制出来的令牌,就是一个下载链接,可以通过这个下载链接,直接下载这个文件。在应用内创建分享华为AGC云存储服务,还提供了多个平台的SDK,可以直接在Android应用或者IOS应用内集成SDK,通过SDK提供的接口,直接进行文件的相关操作,当然也是可以直接创建文件的分享链接的。
  • [技术干货] 基于华为云鲲鹏服务器开发的多人在线聊天系统
     服务器端示例代码:import java.io.*; import java.net.*;  public class ChatServer {     public static void main(String[] args) {         try {             ServerSocket serverSocket = new ServerSocket(12345);             System.out.println("服务器启动,等待客户端连接...");              while (true) {                 Socket clientSocket = serverSocket.accept();                 System.out.println("客户端连接成功:" + clientSocket);                  // 创建一个新的线程来处理该客户端的通信                 Thread thread = new Thread(new ClientHandler(clientSocket));                 thread.start();             }         } catch (IOException e) {             e.printStackTrace();         }     } }  class ClientHandler implements Runnable {     private Socket clientSocket;     private PrintWriter out;     private BufferedReader in;      public ClientHandler(Socket socket) {         this.clientSocket = socket;         try {             out = new PrintWriter(clientSocket.getOutputStream(), true);             in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));         } catch (IOException e) {             e.printStackTrace();         }     }      @Override     public void run() {         try {             String message;             while ((message = in.readLine()) != null) {                 System.out.println("收到消息:" + message);                 // 广播消息给所有客户端                 broadcast(message);             }         } catch (IOException e) {             e.printStackTrace();         }     }      private void broadcast(String message) {         // 实现广播逻辑,将消息发送给所有客户端     } } 客户端示例代码: import java.io.*; import java.net.*;  public class ChatClient {     public static void main(String[] args) {         try {             Socket socket = new Socket("localhost", 12345);             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));             BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));              String message;             while ((message = userInput.readLine()) != null) {                 out.println(message);             }         } catch (IOException e) {             e.printStackTrace();         }     } }   
  • [技术干货] 基于华为鲲鹏云服务器配置java开发环境教程
    本帖子是基于华为云鲲鹏服务器配置java开发环境全流程的教程
  • [问题求助] 我用的阿里云的域名,为啥用华为云服务器不管用
    我用的阿里云的域名,为啥用华为云服务器不管用
  • [问题求助] OC平台,南向对接,驱动性能注册模型问题咨询
    注册性能模型,如下请求体注册Cpu使用率指标, 调用接口url为 https://{oc地址}:26335/rest/performance/v2/classes/CLOUD_VM{ "namespace": "SYS.ECS", "indicators": [ { "dataType": "float", "dataUnit": "%", "displayName": { "enUs": "CPU Usage", "zhCn": "CPU使用率" }, "name": "cpuUsage" } ], "system": { "systemType": "H3CloudOS-Driver", "enUs": "H3CloudOS", "zhCn": "华三CloudOS" }, "extraCondition": { "name": "originalOwnerType", "value": [ "External Driver#H3CloudOS-Driver" ] } }接口调用成功,返回200,但errorMsg为空串,没任何说明{ "errorMsg": "" }根据文档可知若返回errorMsg,则表示注册失败,页面上也没有对应的性能采集任务。求助各位大佬,帮忙看下问题原因。
  • [分享交流] 诚邀弹性负载均衡ELB用户参加有奖测评活动~~
    活动介绍:为了给用户提供更好的产品体验,华为云现邀请负载均衡管理员有偿参加产品测评活动。测评时长:1.5-2小时测评方式:线上测评,电脑入会报名条件:弹性负载均衡ELB管理人员,从事负载均衡管理工作;负责ELB使用规划,日常运维,购买及使用,熟悉ELB监听配置业务等;访谈日期:2023年10月活动奖励:参与测评后可获得200元京东购物卡报名入口:需要先填写本问卷报名cid:link_0,在问卷结尾留下联系方式本活动最终解释权归华为云UED团队所有。
  • [技术干货] 华为云计算实战——关于 Spark、Hadoop、K8s 和 CCE
    在本文中,我们初识云计算平台,学习华为云提供的弹性云服务器(ECS)。认识 Spark 与 Hadoop运行 Hadoop Word Count 样例运行 Spark Connected Components 样例华为云 ECS 属于 IaaS 还是 PaaS?华为云 ECS 除了操作系统外,提供的环境非常有限,很多环境需要自己配置,属于 IaaS。Hadoop 与 Spark 的区别应用场景Hadoop 包括分布式存储系统 HDFS 和数据分析框架 MapReduce,本身就可以完成对海量数据的存储和分析。Spark 不提供文件系统,专门用来处理分布式存储的大数据,它要借助 HDFS 或其他文件系统存储。处理速度Hadoop 的 MapReduce 分步对处理数据:先读磁盘进行 Map,将结果写到磁盘,然后再读磁盘进行 Reduce,再将结果写到磁盘,多次 I/O 影响速度。Spark 从磁盘中读取数据,接下来中间数据都存储在内存中,最后将结果写回磁盘,所以 Spark 比 Hadoop 更快。容错性Hadoop 将每次处理后的数据都写入到磁盘上,容错性好。Spark 的数据对象存储在 RDD 上,通过 checkpoint 和 Lineage 等机制实现容错。使用 Spark 执行 PageRank 算法PageRank 算法描述算法分为两个阶段。在初始化阶段,首先将图的每个顶点关联到该点的出度上,然后设置每条边的权重为出度的倒数,再初始化每个顶点的权重为 1.0 。var ranks = graph .outerJoinVertices(graph.outDegrees) {(vid, vdata, deg) => deg.getOrElse(0)} .mapTriplets(e => 1.0 / e.srcAttr, TripletFields.Src) .mapVertices{(id, attr) => 1.0}在迭代阶段,每个顶点将自身的权重平均分配到相邻的目标点上,从而更新所有点的权重。迭代数轮之后权重收敛。for (_ <- 1 to 100) { ranks.cache() val updates = ranks.aggregateMessages[Double]( ctx => ctx.sendToDst(ctx.srcAttr * ctx.attr), _ + _, TripletFields.Src ) ranks = ranks.outerJoinVertices(updates) { (id, oldRank, msgSumOpt) => resetProb + (1.0 - resetProb) * msgSumOpt.getOrElse(0.0) } }最后将权重进行降序排序,得到声望前 20 高的候选人名单。ranks.vertices.collect().sortBy(- _._2).slice(0,20)部署假定我们为 root 用户,以下操作均在 master 节点上进行。首先启动 Hadoop 和 Spark 。cd /usr/local/hadoop/ && sbin/start-all.sh cd /usr/local/spark/ && sbin/start-master.sh && sbin/start-slaves.sh假定数据集位于 ~/Wiki-Vote.txt ,将数据集上传到 HDFS。cd ~ hadoop fs -mkdir -p /user/root/data/graphx/ hadoop fs −put Wiki-Vote.txt /user/root/data/graphx/假定 PageRank 应用位于 ~/pagerank ,目录结构为. ├── simple.sbt └── src └── main └── scala └── PageRank.scala将项目编译打包成 jar 文件。cd ~/pagerank && /usr/local/sbt/sbt package运行将生成的 jar 包提交到 Spark 中运行。cd ~/pagerank /usr/local/spark/bin/spark−submit −−class "PageRank" target/scala−2.11/simple−project_2.11−1.0.jar输出得到声望前 20 高的候选人名单。候选人名单认识 Kubernetes 集群初识 minikube本实验用 minikube 代替 Kubernetes,方便在单机上模拟 Kubernetes 集群。Kubernetes 集群是什么?用途Kubernetes 是一个用于管理容器化的工作负载和服务的自动化运维平台。传统的容器化部署中,应用程序在部署、伸缩时需要大量手动操作,低效且容易出错。Kubernetes 则解决了这些痛点,实现了容器集群的自动部署、伸缩、维护等功能。架构Kubernetes 集群主要包括控制平面组件(即 Master)和多个 Node 组件,此外还可以安装插件。用户可以通过 kubectl 等接口访问集群。控制平面组件是 Kubernetes 的控制中心,为集群做出全局决策,如编排调度,检测和响应集群事件。主要包括 kube-apiserver(前端),etcd(数据库),kube-scheduler(调度器),kube-controller-manager(本地控制器管理器),cloud-controller-manager(云平台控制器管理器)。Node 组件维护运行的 Pod 并提供 Kubernetes 运行环境,主要包括 kubelet(节点代理),kube-proxy(网络代理),容器运行时(包括多个 Kubernetes 的最小可部署计算单元 Pod)。常用插件包括 CoreDNS(DNS 服务器),Dashboard(Web 控制台界面),Weave Scope(资源监控)。特性服务发现:用 DNS 名称或 IP 地址暴露服务,使服务消费者能够找到服务提供者。负载均衡:均衡分配负载和进入容器的网络流量,防止过载。存储编排:允许用户自动挂载所选存储系统。自动部署和回滚:以一定速率将状态变更到用户描述的状态,如果出现问题则自动回滚。自动装箱:将容器根据资源需求和限制调度到节点上,提高资源利用率。自我修复:重启失败的容器,替换死亡的容器,杀死不响应健康检查的容器。etcd 的功能etcd 是基于 Raft 协议的强一致性、高可用的分布式键值存储,用作 Kubernetes 的所有集群数据的后台数据库。在 Kubernetes 集群中,etcd 主要用于配置共享和服务发现。配置共享:etcd 通过 watch 机制实时发布公共配置文件的变化,微服务实时订阅更新配置。服务发现:etcd 保存服务的 IP 地址和端口以注册服务,不同的服务通过 etcd 找到对方并建立连接。在 Kubernetes 上搭建博客系统Service、PersistentVolumeClaim 与 DeploymentService(服务)类似代理,将运行在一组 Pod 上的应用程序抽象为网络接口,提供统一的 IP 地址和端口来访问底层 Pod。 外部用户和内部 Pod 都使用 Service 与其他 Pod 通信,这样使一组 Pod 无需跟踪另一组 Pod 的 IP 地址就可以使用其服务,实现了解耦。PersistentVolumeClaim(PVC,持久卷申领)即请求存储。PVC 消耗 PV(PersistentVolume,持久卷)资源,可以指定大小和访问模式,如加载一个读写实例或多个只读实例,而无须感知这些实例背后具体的存储实现。PVC 实现了 Pod 和 PV 之间的解耦。Deployment 是定义管理多副本应用的对象,用于部署无状态应用。Deployment 可以根据用户需求将 Pod 调度到目标机器上,监控容器的运行状态,实现快速扩容,解决了 Pod 的生命周期管理、调度、多副本问题。了解集群状态,创建博客部署 Kubernetes 应用与部署传统应用的不同之处部署速度:传统部署由于是在物理机上运行,速度慢;Kubernetes 部署速度更快,效率更高。资源利用:传统部署无法将剩余的资源分配给其他的应用,Kubernetes 部署灵活分配资源,提高资源利用率。资源隔离:传统部署中,如果某个程序占用大量资源,会导致其他程序性能下降;Kubernetes 部署中资源隔离性高。部署难度:传统部署需要手动配置环境;Kubernetes 部署可以通过命令行工具自动完成。跨平台一致性:传统部署对物理机环境有严格要求,Kubernetes 部署可以跨平台。持续集成/持续交付:Kubernetes 部署更加敏捷。在华为云 CCE 上搭建博客系统CCE 集群的集群信息、工作负载、服务发现创建博客华为云 CCE、华为云 ECS、Kubernetes 三者之间的区别与联系ECS 是一种可随时自助获取、可弹性伸缩的云服务器,由 CPU、内存、操作系统、云硬盘组成。Kubernetes 是一个用于管理容器化的工作负载和服务的自动化运维平台。传统的容器化部署中,应用程序在部署、伸缩时需要大量手动操作,低效且容易出错。Kubernetes 则解决了这些痛点,实现了容器集群的自动部署、伸缩、维护等功能。Kubernetes 集群主要包括控制平面组件和多个 Node 组件,实验中 Kubernetes 集群中的一个 Node 就是一个 ECS。CCE 提供高度可扩展的、高性能的企业级 Kubernetes 集群,支持运行 Docker 容器,用户可以用 CCE 轻松部署、管理和扩展容器化应用程序。因此,ECS 在 Kubernetes 集群中作为 Node 组件存在,CCE 是用于高效管理 Kubernetes 集群的工具。在华为云 CCE 上部署 Kubernetes 应用与手动部署 Kubernetes 应用的不同之处易用性手动部署复杂,用户需要自己安装、操作、扩展集群管理软件。在 CCE 上部署简单高效,用户可以一键创建和升级 Kubernetes 集群,自动化部署运维容器应用。可扩展性手动部署可扩展性差,需要根据流量和健康情况人工确定容器服务的部署。在 CCE 上部署可扩展性好,可以自由组合多种弹性策略,根据资源使用情况自动伸缩集群节点和工作负载。可靠性手动部署可靠性差。手动部署多采用单控制节点,一旦控制节点出现故障,集群和业务将不可使用。在 CCE 上部署可靠性好。可以选择高可用以创建 3 个 Master 节点,单点故障时集群仍然可用。高效性手动部署效率低,需要自行搭建镜像仓库或使用第三方镜像仓库,镜像拉取方式多采用串行传输。在 CCE 上部署效率高,配合 SWR,镜像拉取方式采用并行传输,高并发场景下能获得更快的下载速度。成本手动部署成本高,需要投入资金构建、安装、运维、扩展集群管理基础设施。在 CCE 上部署成本低,用户只需支付用于存储和运行应用程序的资源费用和容器集群控制节点费用。在华为云 CCE 上体验自动扩缩容观察自动扩缩容节点伸缩历史扩容直至节点数量稳定时的节点列表工作负载伸缩与节点伸缩的区别与联系工作负载伸缩位于调度层,负责修改负载(Pod)的调度容量变化。例如通过 HPA 调整应用的副本数,改变当前负载占用的调度容量。节点伸缩位于资源层,当集群的容量规划不能满足需求,会通过弹出资源的方式补充。工作负载伸缩和节点伸缩是 CCE 弹性伸缩的两个维度。两者可以分开使用,也可以结合在一起使用。两者之间可以通过容量状态进行解耦。华为云 AS 与 HPA + CA 之间的区别与联系AS 是根据用户的业务需求,通过设置伸缩规则来自动增减资源(ECS 实例或带宽资源)。HPA + CA 是 CCE 中的弹性伸缩,通过伸缩 Pod 和节点来实现资源的弹性利用。两者都是通过一定的方式实现资源的弹性伸缩,不同点在于 AS 面向 ECS 组,伸缩的是 ECS 实例数和带宽;而 HPA + CA 是 CCE 中的实现,面向 Kubernetes 集群,伸缩的是 Pod 数和节点数。
  • [弹性云服务器ECS] 使用华为云ECS部署Hadoop、Spark并运行样例
    1.购买ECS并登录购买流程省略,注意选择CPU架构X86,镜像为Ubuntu 18.04,网络为默认VPC,安全组Sys-FullAccess。登录ECS创建 ECS 后,可以在控制台->弹性云服务器中看到弹性公网IP。推荐使用 Vscode+ssh 插件登录 ECSSSH:cid:link_3实验环境配置搭建Java开发环境,配置好环境变量 参考:cid:link_1分布式框架的安装与配置:Hadoop 配置:cid:link_4Spark 配置:cid:link_5Sbt(Simple Build Tool)配置:cid:link_62.运行Hadoop wordcount样例通过运行 Hadoop 提供的 wordcount 样例,我们可以直观地感受到批处理应用的一种典型模式:先分散执行,再统一收集结果。启动 Hadoop 集群后,执行 hadoop fs -mkdir /input,在 hdfs 根目录下新建文件夹执行 hadoop fs -put xxx.txt /input 将需要执行 wordcount 的文本放⼊新建的文件夹中。执行hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-x.x.x.jar wordcount/input/output 运行 Hadoop 自带的 wordcount样例(注意自己部署的hadoop 版本)。执行 hadoop fs -cat /output/part-r-00000 打印结果。运行结果如下: 3.运行Spark Connected Component样例在这一部分中,我们将初步认识 Spark 处理框架。Spark 提供了 GraphX API,可以用于处理图数据。我们将参考 wordcount 应用的打包方法,打包运行一个使用 GraphX API 编写的图处理应用。下载样例数据: cid:link_2对样例编译打包成 jar 文件:cid:link_0参考 wordcount 应用的编写方法:cid:link_7将生成的 jar 包通过 spark-submit 提交到 Spark 中运行。运行结果如下: 4.个人总结Hadoop 框架的核心是 HDFS 和 MapReduce,HDFS 为海量的数据提供了存储,则 MapReduce 为海量的数据提供了计算。HDFS 有高容错性,用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。Spark 是一种类 Hadoop MapReduce 的通用并行框架,不同点是Job中间输出结果可以保存在内存中,从而不再需要读写 HDFS。因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。且 Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。
  • [技术干货] 认识 Kubernetes 集群并在其上搭建博客系统
    Kubernetes 常被简写为 K8s,是谷歌基于 Borg 推出的开源容器编排管理系统。K8s 经常用于管理面向用户型应用,具有很高的灵活性、可扩展性和容灾性。在本贴中,我们要在华为云 ECS 上搭建一个简单的单节点 Kubernetes集群,并在这个集群上运行一个简单的 wordpress 博客系统,并在搭建的过程中学习K8s的相关概念,了解云原生时代的应用组织方式。Minikube 是 Kubernetes 的单节点版,用于学习和本地开发。使用 minikube 搭配 docker,我们可以在一台服务器上搭建一个由多个本地容器组成的微型 Kubernetes 集群。Wordpress 是一个用 PHP 语言开发的博客平台。使用 wordpress 搭配 mysql 数据库,我们可以搭建起一个简易的博客网站。通过本实验,我们可以了解到 Kubernetes 的基本组件和基本概念,并动手实操,部署一个典型的面向用户型服务应用。安装与准备购买华为云 ECS,安装 minikube、docker、kubectl,准备镜像地址,预下载 coredns 镜像。认识 Kubernetes 集群一个 kubernetes 集群的基本结构包括一个 control plane 和若干 node。每个 node 都是一个独立的服务器,上面运行 kubelet 和 k-proxy 两个管理组件。其大致结构如下: 启动 minikube 集群,执行如下两个命令,执行结果如下图所示,此时我们已经拥有了一个正常工作的 minikube 集群,并且看到了 kube-system namespace 下的 pod 以及他们的运行状态。执行minikube start –image-mirror-country=’cn’ –registry-mirror=”加速器地址” –force执行kubectl get pod –all-namespaces在 Kubernetes 上搭建博客系统在此部分中,我们在 minikube 上搭建一个由 wordpress 和 mysql 两个组件组成的博客系统,并远程访问博客网站,创建一篇博客。在 K8s 中,我们通过提供 yaml 格式配置文件的方式部署应用。K8s 会按照配置文件的内容拉取镜像,构建应用。我们准备并使用了 wordpress 和 mysql 对应的两个 yaml 文件。然后把 kustomization.yaml 提供给 minikube,就可以将博客系统自动部署。我们还需要进行一些网络配置,才能从远程访问它。我们使用 kubectl 这一工具设置端口代理,把运行 wordpress 容器的 80 端口开放给 ECS 的 8080 端口,即可远程访问。部署博客系统后,集群中运行的所有 service、deployment 和 pod 的状态如下图所示。 我所创建的第一个博客下图所示。 感想与体会搭建一个基于Kubernetes集群的博客系统是一次非常丰富而挑战性的经历。在这个过程中,我深刻认识到了Kubernetes的强大和灵活性。首先,学习和了解Kubernetes是一个深入的过程。理解其核心概念,如Pod、Deployment和Service,对我而言是一个全新的领域。通过阅读官方文档、教程和实践,我逐渐掌握了如何配置和管理Kubernetes集群的技能。搭建博客系统也是一个复杂而有趣的挑战。选择适合的博客平台并不是一蹴而就的事情,需要考虑到系统的要求、稳定性和扩展性。我选择了一个静态网站生成器,这样可以更好地利用Kubernetes的特性来部署和管理我的博客内容。在部署过程中,我遇到了一些问题,比如配置Ingress资源、处理存储和数据库设置。但通过查找文档、社区支持和一些创造性的解决方法,最终成功地将博客系统部署到了Kubernetes集群上。我的创新点在于尝试了一些新的方法来优化系统性能和安全性。例如,我探索了自动化备份策略、使用监控工具来监测系统健康状况,并尝试了一些新的部署模式来提高系统的弹性和可靠性。这个经历让我深刻领悟到技术的不断演进和学习的重要性。探索Kubernetes集群和博客系统的搭建过程不仅让我获得了实际操作经验,也培养了我解决问题和创新的能力。这个经历不仅仅是搭建一个博客系统,更是一个全新且充满挑战的技术探索之旅。
  • 【话题互动】人工智能、大数据、云计算技术的发展有哪些真实改变了我们的生活?
    我们的生活无处不在改变,人工智能让AI博弈使游戏更好玩,AI的语音和图像识别技术提高了办公自动化程度。大数据的搜索引擎技术,自动推荐技术,这些技术让互联网更懂人们的需求,云计算让程序员和小公司免于搭建复杂计算机所需的资金和时间的困扰......【话题互动】人工智能、大数据、云计算技术的发展有哪些真实改变了我们的生活?感兴趣的小伙伴可以回帖讨论交流一下哦~
  • [计算类] 泰山服务器兼容性测试工具支持在虚拟机上运行么? 如果在虚拟机上运行,那是不是测试不了相关的功耗了?
    想问下 这个兼容性测试工具支持在虚拟机上运行么? 如果在虚拟机上运行,那是不是测试不了相关的功耗了?测试不了功率还能往下进行测试么? https://www.hikunpeng.com/document/detail/zh/kunpenggrf/usermanual/kunpengcomtestool_06_0001.html
  • [弹性云服务器ECS] 基于ECS的并行与分布式程序设计|梯形积分法的MPI实现
    一、问题描述实现梯形积分法的MPI编程熟悉并掌握MPI编程方法,探讨不同规模对不同实现方式(MPI,Pthread,openmp)的影响。二、算法设计实现与复杂性分析梯形积分法的计算原理:2.1 MPI实现//单步计算double Trap(double left,double right,int count,double len){ double estimate, x; int i; estimate = (fun(left) + fun(right)) / 2.0; for (i = 1; i < count - 1;i++){ x = left + i * len; estimate += fun(x); } estimate = estimate * len; return estimate;}int main(int argc,char*argv[]){ MPI_Init(&argc, &argv); int my_rank, comm_sz; double h, localA, localB; double localInt, totalInt; int source; MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &comm_sz); clock_t BeginTime = clock(); h = (b - a) / n; double localN = n / comm_sz; localA = a + (my_rank * localN * h); localB = localA + localN * h; if (my_rank == comm_sz - 1) { localN = n - (comm_sz - 1) * localN; localB = b; } localInt = Trap(localA, localB, localN, h); if (my_rank != 0) { MPI_Send(&localInt, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); } else //0号线程负责收集结果加和 { totalInt = localInt; for (source = 1; source < comm_sz; source++) { MPI_Recv(&localInt, 1, MPI_DOUBLE, source, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); totalInt += localInt; } } clock_t EndTime = clock(); if (my_rank == 0) { printf("n = %d\n", n); printf("from %f to %f = %f\n", a, b, totalInt); double costTime = (double)(EndTime - BeginTime) / CLK_TCK; printf("MPI:%fms\n", costTime); } MPI_Finalize(); return 0;}2.2 pthread实现void* Pthreadboot(void *parm){//使用pthread threadParm_t *p = (threadParm_t *) parm; double h, x, my_result ; double local_a , local_b ; int i, local_n ; int my_rank = p->threadId; // printf("rank:%d",my_rank); h = (b-a)/n; local_n = n/thread_count ; local_a = a + my_rank*local_n*h; local_b = local_a + local_n*h; my_result=Trap(local_a,local_b,local_n,h); pthread_mutex_lock(&mutex); global_result += my_result; pthread_mutex_unlock(&mutex); pthread_exit(NULL);}//...//main函数中: //pthread pthread_t thread[thread_count]; threadParm_t threadParm[thread_count]; pthread_mutex_init(&mutex,NULL); clock_t BeginTime1 = clock(); for (int i = 0; i < thread_count; i++) { threadParm[i].threadId = i; pthread_create(&thread[i], NULL, Pthreadboot, (void *)&threadParm[i]); } for (int i = 0; i < thread_count; i++) { pthread_join(thread[i], NULL); } clock_t EndTime1 = clock(); double costTime1 = (double)(EndTime1 - BeginTime1) / CLK_TCK; printf("n = %d,thread_count=%d\n", n,thread_count); printf("from %f to %f = %f\n", a, b, global_result);2.3 openmp实现void OpenMPboot(){ double h, x, my_result ; double local_a , local_b ; int i, local_n ; int my_rank = omp_get_thread_num(); int thread_count = omp_get_num_threads(); h = (b-a)/n; local_n = n/thread_count ; local_a = a + my_rank*local_n*h; local_b = local_a + local_n*h; my_result=Trap(local_a,local_b,local_n,h); # pragma omp critical global_result += my_result ;}//...//main函数中://openmp clock_t BeginTime2 = clock(); # pragma omp parallel num_threads(thread_count) OpenMPboot(); clock_t EndTime2 = clock(); double costTime2 = (double)(EndTime2 - BeginTime2) / CLK_TCK; printf("n = %d,thread_count=%d\n", n,thread_count); printf("from %f to %f = %f\n", a, b, global_result);2.4 串行实现void Serialboot(){ //串行 clock_t BeginTime = clock(); double h = (b - a) / n; double result = Trap(a, b, n, h); printf("n = %d\n", n); printf("from %f to %f = %f\n", a, b, result); clock_t EndTime = clock(); double costTime = (double)(EndTime - BeginTime) / CLK_TCK; // printf("Serial:%fms\n", costTime); printf(":%f\n", costTime);}三、实验结果分析 实验环境:操作系统linux,鲲鹏通用计算增强型 | kc1.large.2 | 2vCPUs | 4GiB实验数据:f(x)=x*x*x线程数: 6;边界:a=2, b=10;计时方法:<time.h>的clock实验设计与结果:运行结果实例: 实验结果:算法/规模100050002500012500062500031250001562500078125000MPI7.4947.517.4747.5257.73115.4320.74687.664串行0.0070.0330.1620.8094.04320.154100.56502.307Pthread0.390.2930.5451.0694.29620.474101.488503.605OpenMP0.2170.1370.3740.9134.11920.297101.455504.682结果分析:在本实验环境、实验数据条件下,可见openmp、串行、Pthread运行时间相差不大;在规模较小时,MPI时间效率比其他三种算法低,运行时间长,随着规模增大,MPI算法能稳定在7ms左右,而其他三种算法运行时间随规模增大而增加;当规模达到百万及以上数量级时,MPI编程运行时间明显比其他三种要少,随着规模增大,运行时间增大,但也明显比其他三种缓慢。单从本实验的表现来看,MPI的执行效率相对来说更高一点,可能是因为多台主机多个进程多个CPU确实会更快一些。备注:1.基础配置:2.网络配置:3.makefileEXECS=trap_mpiMPICC?=mpiccall: ${EXECS}trap_mpi: trap.c sudo ${MPICC} -o trap_mpi trap.c -pthread -fopenmpclean: sudo rm -f ${EXECS}4.configecs-hw-0001:2ecs-hw-0002:2ecs-hw-0003:2
  • [问题求助] 公网和私网负载均衡器_弹性负载均衡 ELB_产品介绍_华为云
    标记内容:共享型负载均衡 公网 既支持公网流量请求又支持私网流量请求。 ELB绑定弹性公网IP,支持公网流量请求的,称为公网负载均衡器。 ELB绑定私网IP,支持私网流量请求的,称为私网负载均衡器。 私网 ELB绑定私网IP,支持私网流量请求的,称为私网负载均衡器。文档反馈:描述重复、冲突。 页面链接:https://support.huaweicloud.com/productdesc-elb/elb_pro_01_0004.html