1 Istio介绍Istio-proxy是可在客户端和服务器端使用的微服务代理,并形成微服务网格。Proxy引用了微服务代理Envoy的源码,并在此基础上做了扩展,结合istio本身做处理。它支持很多功能。客户端功能:1)发现和负载平衡。代理可以使用几种标准服务发现和负载平衡API来有效地将流量分配给服务。2)凭证注入。代理可以通过连接隧道或特定于协议的机制(例如HTTP请求的JWT令牌)注入客户端身份。3)连接管理。代理管理与服务的连接,处理运行状况检查,重试,故障转移和流控制。4)监视和记录。代理可以报告客户端指标并记录到混合器。服务器端功能:1)速率限制和流量控制。代理可以防止后端系统过载,并提供客户端感知的速率限制。2)协议翻译。代理是gRPC网关,提供JSON-REST和gRPC之间的转换。3)认证和授权。代理支持多种身份验证机制,并且可以使用客户端身份通过混合器执行授权检查。4)监视和记录。代理可以报告服务器端指标并记录到混合器。2 软硬件环境要求类别子项版本硬件CPU鲲鹏920OSCentOS7.6软件GCC7.3.0Go1.13.4Clang9.0.1OpenJDK1.8.0_282Bazel3.3.1Istio-proxy/Istio1.5.0网络需连外网需连外网 3 配置编译环境3.1 安装gcc 7.3通常centos自带的版本是gcc4.8.5,在此基础上进行升级即可。执行以下命令:wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gztar -xvf gcc-7.3.0.tar.gzcd gcc-7.3.0./contrib/download_prerequisitesmkdir gcc-build-7.3.0cd gcc-build-7.3.0../configure --enable-checking=release --enable-language=c,c++ --disable-multilib --prefix=/usrmake -j16make install 确保依赖库存在:cd /usr/lib64ll |grep libstdc++.soll |grep libstdc++.so.6.0.24gcc --version 3.2 源码编译安装llvm+clang安装依赖软件:yum install cmake gcc g++ libffi libffi-dev -y其中cmake需要安装3.8以上版本,如果yum源中没有,执行以下命令安装:wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gztar zxvf cmake-3.9.2.tar.gzcd cmake-3.9.2./bootstrapmake -j32make install如果yum源中没有libffi,可以使用源码安装,执行以下命令即可:wget https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gztar xf libffi-3.3.tar.gz cd libffi-3.3./configure --prefix=/usr/local/libffimake -j12make install 安装llvm+clang,下载源码:cd /optwget https://github.com/llvm/llvm-project/archive/llvmorg-9.0.1.tar.gztar -xf llvmorg-9.0.1.tar.gz执行编译安装命令:cd llvm-project-llvmorg-9.0.1rm -rf buildmkdir build && cd buildcmake -G "Unix Makefiles" ../llvm \ -DCMAKE_INSTALL_PREFIX=/opt/llvm \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_FFI=ON \ -DLLVM_BUILD_LLVM_DYLIB=ON \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DLLVM_TARGETS_TO_BUILD="host;AArch64" \ -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;lld" \ -DLLVM_ENABLE_LIBCXX=OFF \-DLLVM_ENABLE_LLD=OFF \-DFFI_INCLUDE_PATH=/usr/local/libffi/include/ \-DFFI_LIBRARY_PATH=/usr/local/libffi/ \-Wno-devmake -j20make install配置环境变量:export PATH=/opt/llvm/bin:$PATHexport LD_LIBRARY_PATH=/opt/llvm/lib:$LD_LIBRARY_PATHexport LIBRARY_PATH=$LD_LIBRARY_PATHexport C_INCLUDE_PATH=/opt/llvm/include:$C_INCLUDE_PATHexport CXX_INCLUDE_PATH=$C_INCLUDE_PATHclang --version 3.3 源码编译安装bazel确保已经安装了jdk8,推荐使用毕昇jdk。下载毕昇jdk并且安装: wget https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_jdk/bisheng-jdk-8u282-linux-aarch64.tar.gztar -zxf bisheng-jdk-8u282-linux-aarch64.tar.gzvim /etc/profile #在文件末尾添加以下内容export JAVA_HOME=/opt/bisheng-jdk1.8.0_282/export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarsource /etc/profile 确保已经设置好了JAVA_HOME环境变量。下载bazel-3.3.1源码:wget https://github.com/bazelbuild/bazel/releases/download/3.3.1/bazel-3.3.1-dist.zipunzip bazel-3.3.1-dist.zip -d bazel-3.3.1cd bazel-3.3.1执行编译安装命令:env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.shcp output/bazel /usr/bin/bazel --version 3.4 源码编译安装gn安装依赖包:yum install ninja-build -ywget -c https://github.com/ninja-build/ninja/archive/refs/tags/v1.10.1.zip -O ninja-1.10.1.zipunzip ninja-1.10.1.zipcd ninja-1.10.1./configure.py --bootstrapcp ninja /usr/bin/编译安装gn:git clone https://github.com/timniederhausen/gn.git -b 2020.03cd gnpython build/gen.pyninja -C outcp out/gn /usr/bin/gn --version3.5 安装gowget https://dl.google.com/go/go1.13.4.linux-arm64.tar.gztar -xf go1.13.4.linux-arm64.tar.gz -C /opt/配置环境变量:export PATH=/opt/go/bin:$PATHexport GO111MODULE=onexport GOROOT="/opt/go"export GOBIN=$GOROOT/binexport GOHOME="/home/gopath"export GOARCH="arm64"go version 4 软件移植分析4.1 Istio-proxyIstio-proxy是通过bazel工具构建,主要根据WORKSPACE和BUILD文件的规则来编译。从这些文件以及Makefile/Makefile.core.mk中可以发现,istio-proxy的编译主要是build和build_envoy,而实际尝试后,build和build_envoy的区别是,build规则不仅会编译得到envoy可执行文件,还会构建istio-envoy的docker镜像,而build_envoy只会得到envoy文件。由于在istio的编译中只需要envoy文件即可,所以当前只编译build_envoy。4.2 IstioIstio的编译包括生成二进制和构建docker镜像。编译二进制时,由于Istio的编译依赖于envoy,而默认配置下会从网络下载amd64架构的envoy。这不符合要求,所以需要加USE_LOCAL_PROXY=1,指定本地已经编译好的envoy。需要注意的是envoy和istio的源码路径在同级目录。 5 Istio编译5.1 Istio-proxy1.5.0编译依赖组件安装:yum install libtool automake autoconf make virtualenv -y下载源码:git clone https://github.com/istio/proxy.git -b 1.5.0cd proxyGN=/usr/bin/gn \NINJA=/usr/bin/ninja \make build_envoy VERBOSE=1 SHELL="/bin/bash -x" BAZEL_BUILD_ARGS="-s --sandbox_debug --verbose_failures --cpu aarch64" -j20第一次编译会失败,报错如下:该报错显示proxy不支持arm64,但实际上代码已经做了arm64的兼容因为根据WORKSPACE定义的规则,会从github下载envoy-wasm.xxx.tar.gz的源码,而envoy-wasm中有个wee8.genrule_cmd的文件,完整路径是它不支持aarch64,需要打patch,patch的内容包括增加对aarch64架构的支持,以及默认使用本地的gn、ninja文件。新建一个patch文件vi wee.patch添加以下内容:diff --git a/bazel/external/wee8.genrule_cmd b/bazel/external/wee8.genrule_cmdindex 9103dfb4d..39353a02b 100644--- a/bazel/external/wee8.genrule_cmd+++ b/bazel/external/wee8.genrule_cmd@@ -2,9 +2,9 @@ set -e -# This works only on Linux-x86_64 and macOS-x86_64.-if [[ ( `uname` != "Linux" && `uname` != "Darwin" ) || `uname -m` != "x86_64" ]]; then- echo "ERROR: wee8 is currently supported only on Linux-x86_64 and macOS-x86_64."+# This works only on Linux-x86_64, Linux-aarch64 and macOS-x86_64.+if [[ ( `uname` != "Linux" && `uname` != "Darwin" ) || ( `uname -m` != "x86_64" && `uname -m` != "aarch64" ) ]]; then+ echo "ERROR: wee8 is currently supported only on Linux-x86_64, Linux-aarch64 and macOS-x86_64." exit 1 fi @@ -28,6 +28,8 @@ fi export AR=$${AR:-ar} export NM=$${NM:-nm}+export GN=$${GN-buildtools/linux64/gn}+export NINJA=$${NINJA:-third_party/depot_tools/ninja} # Hook sanitizers. if [[ $${ENVOY_ASAN-} == "1" ]]; then@@ -75,9 +77,9 @@ WEE8_BUILD_ARGS+=" v8_enable_shared_ro_heap=false" if [[ `uname` == "Darwin" ]]; then buildtools/mac/gn gen out/wee8 --args="$$WEE8_BUILD_ARGS" else- buildtools/linux64/gn gen out/wee8 --args="$$WEE8_BUILD_ARGS"+ $${GN} gen out/wee8 --args="$$WEE8_BUILD_ARGS" fi-third_party/depot_tools/ninja -C out/wee8 wee8+$${NINJA} -C out/wee8 wee8 # Move compiled library to the expected destinations. popd 执行命令:patch -p /root/.cache/bazel/_bazel_root/9b0ca638054cfa0772ed292a93825682/external/envoy/bazel/external/wee8.genrule_cmd wee.patch其中9b0ca638054cfa0772ed292a93825682需要根据实际情况进行修改:另外envoy.bazelrc文件需要添加-Wno-error:执行以下命令:cd proxyvim envoy.bazelrc在33行后面添加如下内容:build --action_env=GNbuild --action_env=NINJA并将105行修改为build:libc++ --action_env=CXXFLAGS="-stdlib=libc++ -Wno-error"再次编译。如果出现以下错误:这个报错是因为没有生成bytecodes-builtins-list.h文件。先将toolchain.ninja文件复制出来备用,执行命令:cp /root/.cache/bazel/_bazel_root/9b0ca638054cfa0772ed292a93825682/sandbox/linux-sandbox/5088/execroot/io_istio_proxy/external/com_googlesource_chromium_v8/wee8/out/wee8/toolchain.ninja /opt路径中的5088需要根据实际情况进行修改。修改wee8.genrule_cmd文件:vim /root/.cache/bazel/_bazel_root/9b0ca638054cfa0772ed292a93825682/external/envoy/bazel/external/wee8.genrule_cmd添加如下内容,并注释clang编译分支:export BAZEL_COMPILER=gccexport BAZEL_CXXOPTS='-static-libstdc++'export CXXFLAGS='-static-libstdc++ -Wno-error'export LDFLAGS='-static-libstdc++'export CC=gccexport CXX=g++编译之后会出现报错:这是因为编译过程中,后续编译链接过程中没有使用gcc,仍然是使用clang的原因导致,不过前面报错无法生成的文件这个时候已经生成了,先将生成的文件复制出来备用:cp -r /root/.cache/bazel/_bazel_root/9b0ca638054cfa0772ed292a93825682/sandbox/linux-sandbox/5089/execroot/io_istio_proxy/external/com_googlesource_chromium_v8/wee8/out/wee8/gen/ /opt注意这里的5089是编译时自动生成的沙箱编号,需要查看编译信息进行对应修改。将wee8.genrule_cmd修改回去并添加以下两行shell代码:cp /opt/toolchain.ninja out/wee8/cp -r /opt/gen out/wee8/编辑/opt/toolchain.ninja并将51、77、86行修改为command=pwd:因为这几个地方的文件都不能正常生成,所以将这几个shell命令修改成pwd,需要生成的文件wee8.genrule_cmd中配置了使用复制的方式。再次编译,成功。在proxy目录下执行:bazel-bin/src/envoy/envoy -help进行验证。5.2 Istio1.5.0编译如果需要代理访问外网,则编辑docker/Dockerfile.base文件,添加docker代理:env http_proxy " http://
:@172.30.68.94:8080"env https_proxy "http:// :@172.30.68.94:8080"env ftp_proxy "http:// :@172.30.68.94:8080"还需要执行以下命令:mkdir -p /etc/systemd/system/docker.service.d/cat > /etc/systemd/system/docker.service.d/proxy.conf < github.com/istio-private/operator v0.0.0-20200323204721-49487c6ada25需要注意一下第一条编译命令生成的out目录的位置:如果找不到可以尝试使用find命令进行搜索。
【功能模块】华为鲲鹏920处理器所在服务器上编译内核源码问题【操作步骤&问题现象】1、参考步骤https://support.huaweicloud.com/prtg-robox-kunpengcps/kunpengrobox920_02_0009.html2、下载其中的linux_4.15.0.orig.tar.gz、linux_4.15.0-65.74.diff.gz、linux_4.15.0-65.74.dsc三个源码文件,放到“/home/compiler/”目录。3、当前目录下生成源码目录linux-4.15.0。执行命令出错:dpkg-source -x linux_4.15.0-65.74.dsc【截图信息】【日志信息】(可选,上传日志内容或者附件)
鲲鹏加速库 压缩库 使用鲲鹏硬件加速模块或鲲鹏指令对业界主流的开源压缩库(zlib、gzip、zstd、snappy等)进行性能优化,优化后压缩库通过鲲鹏社区发布 加解密库?? 使用鲲鹏硬件加速模块及鲲鹏指令对openssl库进行性能优化,支持硬加速与指令加速的自动协同、应用逻辑无需修改即可使用加解密加速库 image.png 系统库 基于鲲鹏微架构特点,使用鲲鹏指令对系统通用的基础库进行性能优化,以及传统平台的指令函数映射到鲲鹏平台的公共模块 媒体库 基于鲲鹏加速指令提供高性能媒体原语库及视频编解码库 image.png Tuning Kit性能分析 一、简介 Tuning Kit是针对TaiShan服务器的性能分析和优化工具,能收集服务器的处理器硬件、操作系统、进程/线程、函数等各层次的性能数据,分析出系统性能指标,定位到瓶颈点及热点函数。 华为鲲鹏性能优化工具支持的功能特性如下: 支持采集整个系统或指定进程(包括运行中的进程或直接启动的进程)的CPU Cycles性能事件,能够快速定位到热点函数,包括应用程序函数、模块函数与内核函数,甚至能够定位到热点指令。 支持热点函数按照CPU核/线程/模块进行分组,支持查看热点函数调用栈。 支持通过火焰图查看热点函数及其调用栈。 支持代码映射功能,即查看函数内的热点指令及该指令对应的高级语言文件及行号。 支持显示汇编代码的控制流图。 支持分析Java代码的热点函数及热点指令。
鲲鹏原指华为海思在今年1月初发布的一款兼容ARM指令集的服务器芯片鲲鹏920,性能强悍,配备了64个物理核心,单核实力从CPU算力benchmark的角度对比,大约持平于同期X86的主流服务器芯片,整体多核多线程算力较同期的X86芯片更强大。 但是鲲鹏的含义已经有所延伸,鲲鹏不再仅仅局限于鲲鹏系列服务芯片,更是包含了服务器软件在新的计算架构平台上的完整软硬件生态和云服务生态。我们看看这个生态里都有些什么: ### 芯片 **Q:鲲鹏芯片是一个ARM芯片吗?** A:鲲鹏芯片兼容了ARMv8指令集,对于已有的大部分已经支持ARM64的操作系统和软件而言,鲲鹏仍然是一个架构为arm64或者aarch64的芯片。 指令集的兼容是表现,但是鲲鹏系列芯片的内里是有革命性改变的。 面对计算子系统的单核算力问题,自主开发处理器内核,针对每个核进行了优化设计,采用多发射、乱序执行、优化分支预测,采用了3级cache,采用了自研mesh互联Fabric,典型主频2.6GHz。整形计算能力,业界标准benchmark SPECint_rate_base2006@GCC 7.3.0 -O2评分超过930。 面对服务器领域的挑战,集成了64个自研核,将DRAM的通道数从主流的6通道提升至8通道,DRAM的典型主频从2666MHz提升至2933MHz,总带宽达187GB/s;集成PCIe 4.0,CCIX等高速接口;集成2个100G RoCE端口。 从这个角度看,鲲鹏芯片已经重新定义了服务器的算力平台。 ### 服务器 **Q:现在鲲鹏芯片应用于哪些服务器呢?** A:有,泰山2280,泰山5280,泰山X6000等型号。当然,像我这样的个人开发者,直接使用一台泰山服务器用于代码编译也确实奢侈了一些,此时华为云提供的使用鲲鹏芯片的ECS弹性云服务器就会变成一个好的选择。现在已经有若干款RC3实例正在公测,而性能更好的一代产品即将公测,我们一起期待吧。 ### 操作系统 **Q:鲲鹏芯片有什么操作系统可以使用?** **A:**理论上所有可以支持ARMv8指令集的操作系统都可以兼容鲲鹏芯片。截止到2019-7月,经过华为云实际测试并且上线供鲲鹏生态使用的操作系统主要有华为自研的EulerOS 2.8,ubuntu18.04,CentOS7.5。当然,EulerOS 2.8作为华为多年研发投入的产品,自然针对鲲鹏芯片做了相当多的底层优化,可以更有效的发挥鲲鹏920的性能。 ### 软件 **Q:鲲鹏是否具备软件生态?他的发展情况如何。** **A:**理论上所有兼容ARMv8指令集的软件都可以运行在鲲鹏服务器上。 **Q:有哪些软件能兼容鲲鹏呢,我的软件是否能运行?** **A:**现在的软件行业已经不再处于靠自己造轮子的时代,通常一款完整的软件由自编码软件部分、开源软件部分、商用软件部分等三个部分组成。 因此一个完整软件要可以完整运行起来,是需要分别考察这三部分和鲲鹏的兼容性。 - 自编码软件 软件是由所有者采用了一种或多种编程语言,通过编译或解释使其可以运行。 针对这类软件,目前鲲鹏已经支持的语言包含: 编译型:c、c++、golang>=1.5 解释器:jvm>=1.7(java语言),perl,python2/3,shell,node.js - 开源软件 软件是由开源社区运营,社区所有贡献者共同提交代码完成软件实现。这类软件大多是由源码加前面的编译器、解释器一并完成业务功能。理论上,如果开源社区的源代码属于上述若干种语言,那么通过社区分发的源代码包,经过一定量的编译、安装、解释运行等过程就可以在鲲鹏社区上运行起来。 实际上现在有相当多的社区(据我个人统计,有大约9000个社区)已经直接提供aarch64/arm64架构对应的发布版本包,我们可以直接从这些社区获取官方发布包,按照标准的指导就可以运行起来。 - 商用软件 许多企业或者用户其实并没有能力自研或者集成软件,选择采购软件公司的商用软件。这部分商用软件不开放源代码,通常与行业或者解决方案深度嵌合,比如医疗His系统、金融财务软件、ERP、商用数据库等等。这些软件必须通过软件公司提供兼容ARMv8指令集的二进制软件包才能运行在鲲鹏中。 华为云正在大力与重要行业中的ISV进行深度合作,未来可以运行在鲲鹏上的商业软件将会越来越多。 ### 云服务与解决方案 华为云已经在使用鲲鹏构建自己的云服务,未来华为云的全部基础服务和大量的主要服务都会基于鲲鹏来构建。 华为云在鲲鹏生态的角色,既是优质产品和内容的提供者也是内容的消费者。 **Q:华为云已经发布了哪些鲲鹏云服务?分别给客户带来什么额外价值?** **A:**截止到2019-7月,已经发布了5款鲲鹏云服务。 1. 鲲鹏弹性云服务器(ECS)。基础云服务之一,也是用户可以直接感知到鲲鹏的最重要的服务。用户可以用过ECS直接购买鲲鹏云服务器,为云服务器添加磁盘、网络等资源,使其成为开发环境或者生产业务集群的一部分。 2. 鲲鹏裸金属服务器(BMS)。直接从华为云上购买裸金属服务器,用户可以得到一台专属的泰山服务器,并可以为这台泰山服务器添加磁盘、网络等资源。 3. 鲲鹏云手机服务(CloudPhone)。可以直接从华为云上购买一台运行Android操作系统的云主机,由于直接运行与ARMv8指令集,因此无使用模拟器带来的性能损失,能够提供手机应用测试、应用自动运行等能力。 4. 鲲鹏云容器引擎(CCE)。一种云中间件,直接提供基于鲲鹏的云容器,其中包含的基础库均为aarch64版本。 5. 鲲鹏分布式缓存服务(Redis)。一种云中间件,直接提供基于鲲鹏的Redis接口。用户并不能直接感受到它和运行在X86上的Redis的明显区别,但是可以基于鲲鹏的性能和成本优势,感知到明显的性价比差距。 **Q:华为云鲲鹏已经在哪些行业有解决方案了?** **A:**目前主要集中在对安全有特殊要求、对国产自主化有一定要求或者对算力性价比有较高要求的行业,如金融、政府、媒体与娱乐、游戏、生命科学等等。 **Q:华为云可以提供哪些成熟的水平解决方案?** **A:**截止到2019-7月,已经发布了5个水平解决方案。 1. 全栈专属云(HCSO)。全称是Huawei Cloud Stack Online,基于华为成熟的数据中心技术,可以为客户提供近距离的专属华为云。 2. 云手机。云手机既是华为云的一款云服务,也同时是一个解决方案。市场上有多家云手机提供商,使用的是华为云云手机解决方案。 3. 高性能计算(HPC)。主要通过鲲鹏的性能优势和成本优势,将鲲鹏HPC的性价比优势发挥到极致。 4. 大数据。同样也是能发挥性价比的主要场景。 5. 企业核心应用。基于鲲鹏上华为云对企业核心应用的积累,提供一系列完备的场景和解决方案。 转自https://bbs.huaweicloud.com/blogs/113665
华为云鲲鹏论坛3月热门问题汇总 1. 【云市场】【东方通中间件】完成了华为鲲鹏云适配完成并有相应测试报告,请问测试报告可以从哪里看问题链接 问题链接:https://bbs.huaweicloud.com/forum/thread-183750-1-1.html 2. 基于鲲鹏应用使能套件进行NUMA亲和性实践 问题链接:https://bbs.huaweicloud.com/forum/thread-183614-1-1.html 3. 如何实现华为弹性云定时开关机 问题链接:https://bbs.huaweicloud.com/forum/thread-183072-1-1.html 4. 在ECS上安装部署openGauss数据库时,创建openGauss omm用户互信出错 问题链接:https://bbs.huaweicloud.com/forum/thread-182919-1-1.html 5. ECS安装Gauss数据库,无法创建操作系统omm用户 问题链接:https://bbs.huaweicloud.com/forum/thread-182837-1-1.html 6. 如何CentOS 8.0 64bit with ARM服务器上搭建指定版本的mysql数据库 问题链接:https://bbs.huaweicloud.com/forum/thread-182558-1-1.html 7. 【鲲鹏ecs产品】【spark编译】编译集成hadoop3.2.2,hive3.1.2的spark3.0.3的时候 执行报错 问题链接:https://bbs.huaweicloud.com/forum/thread-182384-1-1.html 8. 华为鲲鹏服务器(ARM架构) CentOS8.0 安装Docker失败 问题链接:https://www.google.com.hk/webhp?hl=zh-CN&sourceid=cnhp&gws_rd=ssl 9. openEuler21.03部署ceph14.2.10失败 问题链接:https://bbs.huaweicloud.com/forum/thread-181572-1-1.html 10. RSA-demo源码获取 问题链接:https://bbs.huaweicloud.com/forum/thread-181064-1-1.html 11. 【鲲鹏ECS】【编译适配hudi-0.10.0】编译打包报错问题 问题链接:https://bbs.huaweicloud.com/forum/thread-180933-1-1.html 12. 【PostgreSQL】【绑核功能】PostgreSQL 13.3如何绑核 问题链接:https://bbs.huaweicloud.com/forum/thread-180806-1-1.html 13. speccpu2006的speed模式怎样运行的? 问题链接:https://bbs.huaweicloud.com/forum/thread-180824-1-1.html 14. openEuler的软件所仓库oepkg里面的目录层级是什么样的,最近想用,完全不知道该如何配置,感觉是个大杂烩? 问题链接:https://bbs.huaweicloud.com/forum/thread-182753-1-1.html 15. 【鲲鹏ecs产品】【spark编译】编译集成hadoop3.2.2,hive3.1.2的spark3.0.3的时候 执行报错 问题链接:https://bbs.huaweicloud.com/forum/thread-182384-1-1.html 16. 基于鲲鹏应用使能套件实现Spark算法优化 实验执行报错 问题链接:https://bbs.huaweicloud.com/forum/thread-183625-1-1.html 17. 鲲鹏 银河麒麟系统安装docker 问题链接:https://bbs.huaweicloud.com/forum/thread-183240-1-1.html 18. 【云服务器产品】arm64查看不了具体cpu型号 问题链接:https://bbs.huaweicloud.com/forum/thread-182672-1-1.html 19. 【鲲鹏920麒麟linux】【valgrind】使用不了,有glibc-debuginfo可以安装吗? 问题链接:https://bbs.huaweicloud.com/forum/thread-181503-1-1.html 20. openEuler21.03部署ceph14.2.10失败 问题链接:https://bbs.huaweicloud.com/forum/thread-181572-1-1.html
鲲鹏认证的九云图DocSDK智能文档格式转换系统(九云图DocSDK Server,www.docsdk.com ),是一个服务器软件,提供了开发接口(API),能够解决各类文档格式转换问题。用户通过部署该产品,可以在软件产品中,快速实现涉及文档格式转换的相关功能,提高研发效率。下面是一个“通用文档全文检索系统”产品技术方案架构示意图: 该方案部署了九云图DocSDK Server,用来支持非结构化文档。主要作用如下:1. 格式解析。对所支持的Office/WPS/ODF/CAD/PDF等各类文档进行格式解析,将文档的非结构化信息解析成结构化的 JSON 格式,用于建立索引;2. 版面重建。一些绝对定位的文档中,缺少准确的段落描述,比如有的文档的豆腐块版式,文本PDF,文字是以零散方式描述的位置信息。这种方式预览阅读时没有问题,视觉效果上具有段落区分。但程序在进行全文检索时,就会出现错漏情况。九云图DocSDK通过智能算法,根据文字位置、字体、内容的相关信息,准确划分段落,实现版面重建;3. 表格识别。表格里的信息天然具备结构化特征,很多情况检索时需要利用这类特征。但有些文档表面看起来是表格,实际并没有行列关系的描述,这时就需要通过表格识别算法,将行列关系还原出来;4. 在线展现。检索结果需要在线展现,九云图DocSDK对各类文档提供了三种在线展现形式,图片、传统HTML和HTML5。图片方式通用性好,但缩放时存在不清晰现象。传统HTML可以支持交互,能实现内容标注、编辑等需求。但由于描述能力限制,展现复杂格式存在不完全兼容的情况。HTML5兼容性好,通过嵌入字库子集,在移动端缺少字库的情况下,也能准确展现出各种字体效果。九云图DocSDK系统运行需求是4核32G,最大支持500M文档,每秒钟能处理5~10页内容。采用多线程技术,可同时处理20个文档,超过20个时自动排队。对于高并发场景,可部署集群,集群方案采用MongoDB做中间件,支持负载均衡。
### 环境要求 | 项目 | 说明 | | ------ | :----------------------------------------------------------- | | 服务器 | TaiShan 200服务器(型号2280) | | CPU | 华为鲲鹏920处理器 | | 硬盘 | 进行性能测试时,数据目录需使用单独硬盘,即一个系统盘,一个数据盘(数据盘可选用性能较好的SSD盘,NVMe盘等),至少两块硬盘。非性能测试时,直接在系统盘上建数据目录即可。具体硬盘数量根据实际需求配置。 | | 网络 | 通外网,有在线Yum源,有pip源。 | ### 操作系统 | 项目 | 版本 | 备注 | | ----------------------------------- | ---------------- | ------------------ | | Kylin Linux Advanced Server release | V10 SP1 (Tercel) | cat /etc/*-release | | Kylin Linux Advanced Server release | V10 SP2 (Sword) | cat /etc/*-release | ### 安装依赖 #### Yum可以安装的依赖包 ```shell yum -y install gcc gcc-c++ bzip2-devel openssl-devel \ libcurl-devel readline-devel perl-ExtUtils-Embed \ libxml2-devel openldap-devel pam pam-devel \ perl-devel libyaml libffi-devel bison \ zstd zstd-devel apr-devel libevent-devel \ libyaml-devel libedit-devel flex-devel cmake ``` #### Python依赖 ##### !!使用python2,不要用python3 ```shell yum install -y python-devel python-pip ``` 如果没有外网,需要安装setuptools,python的依赖包只能下源码然后编译安装。 ##### 检查python和pip版本,是不是python2。 ```shell python --version pip --version ``` ##### python依赖包 ```shell pip install psutil==5.9.0 pip install pbr==5.8.1 pip install lockfile==0.12.2 pip install pycparser==2.21 pip install cffi==1.15.0 pip install six==1.16.0 pip install bcrypt==3.2.0 pip install PyNaCl==1.5.0 pip install ipaddress==1.0.23 pip install enum34==1.1.10 pip install cryptography==36.0.2 pip install epydoc==3.0.1 ``` ##### cryptography-36.0.2 这个包安装可能会提示缺少openssl的一些头文件和库文件,需要装一下openssl-devel。 ```shell yum install openssl-devel pip install cryptography==36.0.2 ``` #### 安装Xerces 1. 下载源码包 下载地址:https://github.com/greenplum-db/gp-xerces/tree/v3.1.2-p1 切换版本到v3.1.2-p1,下载zip。 2. 源码包上传服务器并解压 ```shell unzip gp-xerces-3.1.2-p1.zip cd /gp-xerces-3.1.2-p1/ ``` 3. 编译安装`gp-xerces` ```shell ./configure # 48线程并行编译 make -j48 # 安装 make install ``` #### 安装re2c 1. 下载源码包 下载地址:https://github.com/skvadrik/re2c/tree/2.0.3 切换到版本2.0.3,下载zip。 2. 源码包上传服务器并解压 ```shell unzip re2c-2.0.3.zip cd re2c-2.0.3 ``` 3. 编译安装`re2c` ```shell ./autogen.sh ./configure # 48线程并行编译 make -j48 # 安装 make install ``` #### 安装ninja 1. 下载源码包 下载地址:https://github.com/ninja-build/ninja/tree/v1.10.1 切换到版本v1.10.1,下载zip。 2. 源码包上传服务器并解压 ```shell unzip ninja-1.10.1.zip cd ninja-1.10.1 ``` 3. 编译ninja ```shell ./configure.py --bootstrap ``` 4. 将ninja可执行文件拷贝到`/usr/bin`目录下 ```shell cp ninja /usr/bin/ ``` #### 安装gporca 1. 下载源码包 下载地址:https://github.com/greenplum-db/gporca/tree/v3.65.3 切换到版本:v3.65.3,下载zip。 2. 源码包上传服务器并解压 ```shell unzip gporca-3.65.3.zip cd gporca-3.65.3 ``` 3. 编译安装`gporca` ```shell cmake -GNinja -H. -Bbuild ``` 4. 修改源码文件一行代码 ```shell vim libgpos/src/common/CStackDescriptor.cpp ``` 将第167行注释掉。  5. 安装 ```shell ninja install -C build ``` 6. 添加`/usr/local/lib`到`/etc/ld.so.conf`文件 ```shell echo /usr/local/lib >> /etc/ld.so.conf ldconfig ``` ### 配置安装环境 #### 关闭防火墙 1. 停止防火墙 ```shell systemctl stop firewalld.service ``` 2. 关闭防火墙 ```shell systemctl disable firewalld.service ``` 3. 查看防火墙 ```shell systemctl status firewalld.service ``` #### 修改SELinux 1. 修改配置文件 ```shell sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` #### 创建组和用户 1. 创建gpadmin用户 ```shell groupadd gpadmin useradd -g gpadmin gpadmin ``` 2. 设置gpadmin用户密码,请根据提示输入并记录密码 ```shell passwd gpadmin ``` #### 创建数据目录并授权 1. 创建的数据目录“/data”和进程所需的相关目录 ```shell mkdir /data mkdir -p /data/gpdb/segdata mkdir -p /data/gpdb/master ``` 2. 给数据目录授权gpadmin用户和组 ```shell chown -R gpadmin:gpadmin /data/gpdb/segdata chown -R gpadmin:gpadmin /data/gpdb/master ``` ### 编译安装 **注意,先配置好用户和目录再编译安装**。 1. 下载源码包 下载地址:https://github.com/greenplum-db/gpdb/tree/6.0.0 切换版本到6.0.0,下载zip。 2. 源码包上传服务器并解压 ```shell unzip gpdb-6.0.0.zip cd gpdb-6.0.0 ``` 3. configure ```shell # prefix 用于指定软件的安装路径。本次安装路径为:/usr/local/gpdb。 # with-python 构建Python模块(PL/Perl)。 # with-xml 用于支持xml。 ./configure --with-perl --with-python --with-libxml --prefix=/usr/local/gpdb ``` 4. 编译安装`gpdb` ```shell # 48线程并行编译 make -j48 # 安装 make install ``` ### 运行与验证 #### 配置并启动数据库 ##### 配置环境变量 1. 配置环境变量 ```shell vim /home/gpadmin/.bash_profile # 在文件末尾添加如下内容 source /usr/local/gpdb/greenplum_path.sh export PGPORT=5432 export MASTER_DATA_DIRECTORY=/data/gpdb/master/gpseg-1 ``` 其中的`greenplum_path.sh`,设置`GPHOME`和`LD_LIBRARY_PATH`环境变量,`MASTER_DATA_DIRECTORY`为`master`数据目录,本例为`/data/gpdb/master/gpseg-1` 2. 使环境变量配置生效 ```shell source /home/gpadmin/.bash_profile ``` ##### 初始化数据库 1. 修改主机名,这里修改为master 注意:主机名为默认主机名localhost时,执行步骤4会报错,本例中我们将主机名修改为master。具体主机名称以实际规划为准。 ```shell hostname master echo master > /etc/hostname ``` logout退出登录,重新连接后生效。 2. 将主机名的map写入到“/etc/hosts”中,具体IP地址和主机名以实际情况为准。本例中,IP地址为192.168.202.206,主机名为master。 ```shell echo 192.168.202.206 master >>/etc/hosts ``` 3. 切换至gpadmin用户 ```shell su - gpadmin ``` 4. 配置集群节点间互信 交换集群中所有机器的ssh密钥,本例是单机,只有一台。其中master为主机名,以实际情况为准。 ```shell gpssh-exkeys -h 'master' ``` 5. 退出到root用户 ```shell exit ``` 6. 创建集群主机配置文件 创建集群主机配置文件`hostfile`,包括集群所有主机名,本例是单机,只有一台。其中master为主机名,以实际情况为准。 ```shell echo master >> /data/gpdb/hostfile ``` 7. 切换至`gpadmin`用户 ```shell su - gpadmin ``` 8. 创建初始化配置文件`init.config` ```shell vim /home/gpadmin/init.config ``` 添加如下内容: ```shell ARRAY_NAME="Greenplum Cluster" # egment数据库前缀名 SEG_PREFIX=gpseg # egment数据库起始端口号 PORT_BASE=40000 # segments数据目录,有几个DATA_DIRECTORY, 每个节点上便会启动几个segment,本例为2个segment declare -a DATA_DIRECTORY=(/data/gpdb/segdata /data/gpdb/segdata) # master主机名 MASTER_HOSTNAME=master # master数据目录 MASTER_DIRECTORY=/data/gpdb/master # aster端口号,也是对外业务端口号 MASTER_PORT=5432 TRUSTED_SHELL=ssh CHECK_POINT_SEGMENTS=8 ENCODING=UNICODE DATABASE_NAME=gpdb # 群配置文件,hostfile对应上面步骤6创建的文件名 MACHINE_LIST_FILE=/data/gpdb/hostfile ``` 9. 执行初始化命令 ```shell gpinitsystem -c /home/gpadmin/init.config -a ``` #### 测试数据库功能 ##### 登录数据库 ```shell psql -d postgres ``` ##### 测试增删查改 ```sql # 测试创建数据库 create database huawei; # 查看数据库列表 \l # 切换数据库到huawei \c huawei # 建表 create table test( id int primary key not null, name varchar(255) not null, age int not null, address text, salary real ); # 插入数据 insert into test(id, name, age, address, salary) values (1, 'Paul', 32, 'China', 20000.00); # 查询数据 select * from test; select id, name, age from test; # 修改数据 update test salary=18000 where id=1; update test salary=16000 where age>30; # 删除数据 delete from test where id=1; # 删表 drop table test; # 删除数据库 drop database huawei; ``` ##### 测试函数调用 ```sql # 创建函数 CREATE FUNCTION mytest(num int) RETURNS int AS $$ BEGIN RETURN num * 2; END; $$ LANGUAGE plpgsql volatile cost 100; # 调用函数 select mytest(2); ``` ### 安装报错与解决方案 ##### Your ORCA version is expected to be 3.XX.XXX  每一个版本的`gpdb`版本都对应有指定版本的`gporca`。 ```shell cd gpdb-6.0.0/depends # 查看当前gpdb依赖的gpraca版本 cat conanfile_orca.txt ```  可以看到,6.0.0版本的`gpdb`以来的是3.65.0版本的`gporca`,需要将之前装的`gporca`卸载并安装正确版本。 安装完之后一定要在`ld.so.conf`文件追加gporca库文件的安装路径,默认是`/usr/local/lib`。 ```shell echo /usr/local/lib >> /etc/ld.so.conf ldconfig ``` 然后重新编译`gpdb`。 ##### configure: error: Library requirements (curl) not met.  缺少libcurl-devel,yum安装一下,麒麟V10 SP2有这个包。 ```shell yum -y install libcurl-devel ``` ##### 找不到zstd `zstd 1.4.3`可以yum安装。yum找不到那就只能编译安装。 编译安装前要注意,先安装`lz4-1.7.3`。 ##### 找不到libcurl ```shell # 手动编译安装 # libcurl依赖openssl,编译安装前先安装openssl ``` ##### 找不到openssl的头文件 ```shell # 麒麟系统自带openssl,但比较精简,缺少一些头文件库文件 # 如需编译安装,先看系统自带的openssl版本 openssl version # 按对应版本下载安装,安装到自定义路径,如/usr/local/openssl,不要替换系统的openssl # 安装之后添加环境变量 # GCC头文件搜索目录 export C_INCLUDE_PATH=/usr/local/openssl/include:$C_INCLUDE_PATH # G++头文件搜索目录 export CPLUS_INCLUDE_PATH=/usr/local/openssl/include:$CPLUS_INCLUDE_PATH # 动态库搜索目录 export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH # 静态库搜索目录 export LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH ``` ### 数据库管理 ##### 数据库管理 - 以gpadmin用户启动Greenplum数据库,并按提示输入Y,确定启动 ```shell gpstart ``` - 以gpadmin用户关闭Greenplum数据库,并按提示输入Y,确定关闭 ```shell gpstop ``` - 以gpadmin用户登录数据库 ```shell psql -d 数据库> ``` - 以gpadmin用户查看mirror的状态 ``` gpstate -e ``` - 以gpadmin用户查看standby master的状态 ```shell gpstate -f ``` - 以gpadmin用户查看整个GP集群状态 ```shell gpstate -b ``` - 以gpadmin用户查看整个GP的版本 ```shell gpstate -i ``` ##### 修改Segment配置参数 - 以gpadmin用户修改Segment配置参数 - 方法一:在目标segment的postgresql.conf文件中更新参数。 ```shell echo gp_vmem_protect_limit=12888 >> postgresql.conf ``` - 方法二:使用gpconfig工具修改greenplum segment参数。 ```shell gpconfig -c gp_vmem_protect_limit -v 12888 ``` - 以gpadmin用户重启Greenplum数据库,使配置生效,重启过程中,输入Y,确认重启。 ```shell gpstop -r ``` ##### 修改Master配置参数 - 以gpadmin用户修改master配置参数。 ```shell echo gp_vmem_protect_limit=12888 >> postgresql.conf ``` - 以gpadmin用户重启Greenplum数据库,使配置生效,重启过程中,输入Y,确认重启 ```shell gpstop -r ``` ##### 备份数据库 1. 备份 - 以`gpadmin`用户登录数据库。 ```shell su - gpadmin ``` - 执行命令进行备份单个数据库。其中`databasename`为要备份的数据库名称,需存在于数据库中;`databasename.dump`为备份以后的文件名称,默认备份在当前目录下。 ```shell pg_dump -Fc databasename > databasename.dump ``` - 备份整个数据库。其中all.dump为备份以后的文件名称,默认备份在当前目录下。 ```shell pg_dumpall > all.dump ``` 2. 恢复 - 以`gpadmin`用户登录数据库。 ``` su - gpadmin ``` - 执行命令进行恢复单个数据库。其中`databasename`为要恢复的数据库名称,需存在于数据库中;`databasename.dump`为用于恢复的文件,具体路径以实际为准。 ```shell pg_restore -d databasename databasename.dump ``` - 恢复整个数据库。其中`all.dump`为用于恢复的文件,具体路径以实际为准。 ``` psql -f all.dump postgres ``` ### 日志过滤 ##### 过滤PANIC级别的日志 ```shell su - gpadmin # 检查 Master 日志文件 WARNING、 ERROR、 FATAL 或 PANIC 级别的日志信息 gplogfilter -t # 指定时间段 gplogfilter -b '2022-03-29 00:00' -e '2022-03-30 00:00' # 检查PANIC级别的日志 gplogfilter -t -f PANIC # 检查2022-03-29一天内的PANIC日志 gplogfilter -b '2022-03-29 00:00' -e '2022-03-30 00:00' -t -f PANIC ``` ### 参考文档 Greenplum 6.0.0 移植指南 https://www.hikunpeng.com/document/detail/zh/kunpengdbs/prtg/kunpenggreenplum_02_0001.html Greenplum 6.0.0 安装指南 https://support.huaweicloud.com/instg-kunpengdbs/kunpenggreenplum_03_0001.html GreenplumDatebase GitHub README.md https://github.com/greenplum-db/gpdb/tree/5.21.0 官方文档 http://docs-cn.greenplum.org/v6/homenav.html Greenplum常见问题的分析与处理 https://cloud.tencent.com/developer/article/1780168
CQU弟中弟 昇思MindSpore易用性专家
昇思MindSpore技术公开课大模型专题课程即将为大家带来第十一讲——PEFT。我们在深度学习研究中遇到了各种大型预训练模型,如GPT、BERT等,不可否认这些模型在自然语言处理任务中取得了优异表现,但是高昂的训练成本和巨大的数据量一直是它的通病,因此有一项新的技术Parameter-Efficient Fine-Tuning (PEFT)诞生了。本期课程将带大家一起学习PEFT的方法介绍和具体用法,重点讲解常用的PEFT方法,并用示例进行演示说明,昇思MindSpore技术公开课与你一同探究前沿技术。
高若岳 华为云数仓GaussDB(DWS)研发专家
随着智能数据时代的到来,数据量爆发式增长,数据形态呈海量化和多样化发展,不再是单一的结构化数据。从海量和多样化的数据做融合分析,创造更多业务价值的诉求日益强烈。本期直播将为您深度解析GaussDB(DWS)数据仓库如何与大数据生态快速对接?如何高效访问开源数据?GaussDB(DWS)湖仓融合技术为企业带来哪些助力?