• [技术干货] flink-shaded-netty-4.1.39.Final-9.0移植指南
    1 介绍简要介绍大数据组件flink-shaded-netty module。2 环境要求硬件要求仅在线下的物理服务器时涉及,需要写作此章节。没有内容时请删除。硬件要求如表2-1所示。表2-1 硬件要求项目说明服务器Taishan服务器CPU鲲鹏920处理器 或 鲲鹏916处理器磁盘分区对磁盘分区无要求网络可访问外网 软件要求表2-2 软件要求项目说明CentOS7.6OS Kernel4.14.0GCC4.8.5Openjdk1.8.0_252Maven3.5.4Protobuf2.5.0netty-all4.1.39.Final 3 配置编译环境提供编译安装该软件所需的环境的安装方法,例如编译器、第三方库、JDK、OS的yum源、防火墙、用户帐号(如要安装前需要单独创建用户或用户组)、环境变量等。多个任务时原则上建议采用Section进行区分,任务操作步骤较多时可以灵活处理为子章节。任务之间的依赖关系需要在各自的任务中明确。写作注意点:l   执行的操作和命令必须用正文,不能用带灰色底纹的回显。l   命令执行后的回显,必须用文本(带灰色底纹的回显样式),不要用截图。示例:3.1 安装基础库                                步骤 1      安装gcc等相关软件。确保有外网环境后,执行yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64XXXX                                 步骤 2      解决-fsigned-char问题(修改gcc)a、寻找gcc所在路径(一般位于“/usr/bin/gcc”)。command -v gcc b、更改gcc的名字(例如改成gcc-impl)。mv /usr/bin/gcc /usr/bin/gcc-impl c、新建gcc文件。vi /usr/bin/gcc d、填入如下内容保存。#! /bin/sh/usr/bin/gcc-impl -fsigned-char "$@" e、给脚本添加执行权限。chmod +x /usr/bin/gcc f、确认命令是否可用。gcc --version                                 步骤 3      解决-fsigned-char问题(修改g++)a、寻找gcc所在路径(一般位于“/usr/bin/g++”)。command -v g++ b、更改g++的名字(例如改成g++-impl)。mv /usr/bin/gcc /usr/bin/g++-impl c、新建g++文件。vi /usr/bin/g++ d、填入如下内容保存。#! /bin/sh/usr/bin/g++-impl -fsigned-char "$@" e、给脚本添加执行权限。chmod +x /usr/bin/g++ f、确认命令是否可用。g++ --version                                 步骤 4      安装依赖 yum安装依赖的相关软件。yum install -y wget vim openssl-devel zlib-devel automake libtool make  libstdc++-static glibc-static git snappy snappy-devel fuse fuse-devel ----结束  3.2 安装OpenJDK                                 步骤 1      下载并解压安装到指定目录(此处以指定“/opt/tools/installed”目录为例)wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gztar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gzmkdir -p /opt/tools/installed/mv jdk8u252-b09 /opt/tools/installed/                                 步骤 2      配置Java环境变量vim /etc/profile在文件末尾添加如下代码。export JAVA_HOME=/opt/tools/installed/jdk8u252-b09export PATH=$JAVA_HOME/bin:$PATH                                 步骤 3      使修改的环境变量生效source /etc/profile                                 步骤 4      查看配置是否生效 3.3 安装Maven                                步骤 1      下载并安装到指定目录(此处以指定“/opt/tools/installed”目录为例)wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/                                步骤 2      修改Maven环境变量vim /etc/profile在“/etc/profile”文件末尾增加下面代码。export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4export PATH=$MAVEN_HOME/bin:$PATH                                步骤 3      使修改的环境变量生效source /etc/profile                                步骤 4      查看配置是否生效。mvn -v                                 步骤 5      查看配置是否生效。修改Maven配置文件中的:本地仓路径、远程仓等。配置文件路径:“/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml”远程仓库配置(修改成自己搭建的Maven仓库,如果没有,可以按照下面示例配置),在<mirrors>标签内添加以下内容: <mirror>  <id>huaweimaven</id>  <name>huawei maven</name>  <url>https://mirrors.huaweicloud.com/repository/maven/</url>  <mirrorOf>central</mirrorOf></mirror> 若编译环境需要代理才能访问外网,需要在settings.xml配置文件中添加代理配置,具体内容如下:<proxies>  <proxy>    <id>optional</id>    <active>true</active>    <protocol>http</protocol>    <username>用户名</username>    <password>密码</password>    <host>代理服务器网址</host>    <port>代理服务器端口</port>    <nonProxyHosts>local.net|some.host.com</nonProxyHosts>  </proxy></proxies> 3.4 安装Protobuf                                步骤 1      查看配置是否生效。yum install -y protobuf protobuf-devel                                步骤 2      通过执行以下命令,指定安装的Protoc可执行文件mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=2.5.0 -Dclassifier=linux-aarch_64 -Dpackaging=exe -Dfile=/usr/bin/protoc  4 编译4.1 编译netty-all-4.1.39.Final                                步骤 1      按xxx指导编译netty-all-4.1.39.Final4.2 编译flink-shaded-netty                                步骤 1      下载flink-shaded-9.0安装包。wget https://github.com/apache/flink-shaded/archive/release-9.0.tar.gz                                步骤 2      解压安装包。tar -zxf release-9.0.tar.gz                                步骤 3      进入解压后目录cd flink-shaded-release-9.0                                步骤 4      执行编译编译打成jar包,flink-shaded-netty-4.1.39.Final-9.0.jar放置于“flink-shaded-netty-4/target”目录。mvn clean install -pl flink-shaded-netty-4                                 步骤 5      使用鲲鹏分析扫描工具扫描编译生成的jar包,确保没有包含有x86的so和jar包。----结束A 修订记录写作说明:仅在第一次发布时,明确第一次正式发布。后续的刷新记录,不需要写作是第几次发布,只需要提供发布日期和修订说明即可。发布日期修订记录2021-01-05第一次正式发布 
  • [技术干货] flink-shaded-netty-4.1.39.Final-10.0移植指南
    1 介绍简要介绍大数据组件flink-shaded-netty module。2 环境要求硬件要求仅在线下的物理服务器时涉及,需要写作此章节。没有内容时请删除。硬件要求如表2-1所示。表2-1 硬件要求项目说明服务器Taishan服务器CPU鲲鹏920处理器 或 鲲鹏916处理器磁盘分区对磁盘分区无要求网络可访问外网 软件要求表2-2 软件要求项目说明CentOS7.6OS Kernel4.14.0GCC4.8.5Openjdk1.8.0_252Maven3.5.4Protobuf2.5.0netty-all4.1.39.Final 3 配置编译环境提供编译安装该软件所需的环境的安装方法,例如编译器、第三方库、JDK、OS的yum源、防火墙、用户帐号(如要安装前需要单独创建用户或用户组)、环境变量等。多个任务时原则上建议采用Section进行区分,任务操作步骤较多时可以灵活处理为子章节。任务之间的依赖关系需要在各自的任务中明确。写作注意点:l   执行的操作和命令必须用正文,不能用带灰色底纹的回显。l   命令执行后的回显,必须用文本(带灰色底纹的回显样式),不要用截图。示例:3.1 安装基础库                                步骤 1      安装gcc等相关软件。确保有外网环境后,执行yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64XXXX                                 步骤 2      解决-fsigned-char问题(修改gcc)a、寻找gcc所在路径(一般位于“/usr/bin/gcc”)。command -v gcc b、更改gcc的名字(例如改成gcc-impl)。mv /usr/bin/gcc /usr/bin/gcc-impl c、新建gcc文件。vi /usr/bin/gcc d、填入如下内容保存。#! /bin/sh/usr/bin/gcc-impl -fsigned-char "$@" e、给脚本添加执行权限。chmod +x /usr/bin/gcc f、确认命令是否可用。gcc --version                                 步骤 3      解决-fsigned-char问题(修改g++)a、寻找gcc所在路径(一般位于“/usr/bin/g++”)。command -v g++ b、更改g++的名字(例如改成g++-impl)。mv /usr/bin/gcc /usr/bin/g++-impl c、新建g++文件。vi /usr/bin/g++ d、填入如下内容保存。#! /bin/sh/usr/bin/g++-impl -fsigned-char "$@" e、给脚本添加执行权限。chmod +x /usr/bin/g++ f、确认命令是否可用。g++ --version                                 步骤 4      安装依赖 yum安装依赖的相关软件。yum install -y wget vim openssl-devel zlib-devel automake libtool make  libstdc++-static glibc-static git snappy snappy-devel fuse fuse-devel ----结束  3.2 安装OpenJDK                                 步骤 1      下载并解压安装到指定目录(此处以指定“/opt/tools/installed”目录为例)wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gztar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gzmkdir -p /opt/tools/installed/mv jdk8u252-b09 /opt/tools/installed/                                 步骤 2      配置Java环境变量vim /etc/profile在文件末尾添加如下代码。export JAVA_HOME=/opt/tools/installed/jdk8u252-b09export PATH=$JAVA_HOME/bin:$PATH                                 步骤 3      使修改的环境变量生效source /etc/profile                                 步骤 4      查看配置是否生效 3.3 安装Maven                                步骤 1      下载并安装到指定目录(此处以指定“/opt/tools/installed”目录为例)wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/                                步骤 2      修改Maven环境变量vim /etc/profile在“/etc/profile”文件末尾增加下面代码。export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4export PATH=$MAVEN_HOME/bin:$PATH                                步骤 3      使修改的环境变量生效source /etc/profile                                步骤 4      查看配置是否生效。mvn -v                                 步骤 5      查看配置是否生效。修改Maven配置文件中的:本地仓路径、远程仓等。配置文件路径:“/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml”远程仓库配置(修改成自己搭建的Maven仓库,如果没有,可以按照下面示例配置),在<mirrors>标签内添加以下内容: <mirror>  <id>huaweimaven</id>  <name>huawei maven</name>  <url>https://mirrors.huaweicloud.com/repository/maven/</url>  <mirrorOf>central</mirrorOf></mirror> 若编译环境需要代理才能访问外网,需要在settings.xml配置文件中添加代理配置,具体内容如下:<proxies>  <proxy>    <id>optional</id>    <active>true</active>    <protocol>http</protocol>    <username>用户名</username>    <password>密码</password>    <host>代理服务器网址</host>    <port>代理服务器端口</port>    <nonProxyHosts>local.net|some.host.com</nonProxyHosts>  </proxy></proxies> 3.4 安装Protobuf                                步骤 1      查看配置是否生效。yum install -y protobuf protobuf-devel                                步骤 2      通过执行以下命令,指定安装的Protoc可执行文件mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=2.5.0 -Dclassifier=linux-aarch_64 -Dpackaging=exe -Dfile=/usr/bin/protoc  4 编译4.1 编译netty-all-4.1.39.Final                                步骤 1      按xxx指导编译netty-all-4.1.39.Final4.2 编译flink-shaded-netty                                步骤 1      下载flink-shaded-10.0安装包。wget https://github.com/apache/flink-shaded/archive/release-10.0.tar.gz                                步骤 2      解压安装包。tar -zxf release-10.0.tar.gz                                步骤 3      进入解压后目录cd flink-shaded-release-10.0                                步骤 4      执行编译编译打成jar包,flink-shaded-netty-4.1.39.Final-10.0.jar放置于“flink-shaded-netty-4/target”目录。mvn clean install -pl flink-shaded-netty-4                                 步骤 5      使用鲲鹏分析扫描工具扫描编译生成的jar包,确保没有包含有x86的so和jar包。----结束A 修订记录写作说明:仅在第一次发布时,明确第一次正式发布。后续的刷新记录,不需要写作是第几次发布,只需要提供发布日期和修订说明即可。发布日期修订记录2021-01-05第一次正式发布 
  • [技术干货] flink-shaded-netty-4.1.39.Final-11.0移植指南
    1 介绍简要介绍大数据组件flink-shaded-netty module。2 环境要求硬件要求仅在线下的物理服务器时涉及,需要写作此章节。没有内容时请删除。硬件要求如表2-1所示。表2-1 硬件要求项目说明服务器Taishan服务器CPU鲲鹏920处理器 或 鲲鹏916处理器磁盘分区对磁盘分区无要求网络可访问外网 软件要求表2-2 软件要求项目说明CentOS7.6OS Kernel4.14.0GCC4.8.5Openjdk1.8.0_252Maven3.5.4Protobuf2.5.0netty-all4.1.39.Final 3 配置编译环境提供编译安装该软件所需的环境的安装方法,例如编译器、第三方库、JDK、OS的yum源、防火墙、用户帐号(如要安装前需要单独创建用户或用户组)、环境变量等。多个任务时原则上建议采用Section进行区分,任务操作步骤较多时可以灵活处理为子章节。任务之间的依赖关系需要在各自的任务中明确。写作注意点:l   执行的操作和命令必须用正文,不能用带灰色底纹的回显。l   命令执行后的回显,必须用文本(带灰色底纹的回显样式),不要用截图。示例:3.1 安装基础库                                步骤 1      安装gcc等相关软件。确保有外网环境后,执行yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64XXXX                                 步骤 2      解决-fsigned-char问题(修改gcc)a、寻找gcc所在路径(一般位于“/usr/bin/gcc”)。command -v gcc b、更改gcc的名字(例如改成gcc-impl)。mv /usr/bin/gcc /usr/bin/gcc-impl c、新建gcc文件。vi /usr/bin/gcc d、填入如下内容保存。#! /bin/sh/usr/bin/gcc-impl -fsigned-char "$@" e、给脚本添加执行权限。chmod +x /usr/bin/gcc f、确认命令是否可用。gcc --version                                 步骤 3      解决-fsigned-char问题(修改g++)a、寻找gcc所在路径(一般位于“/usr/bin/g++”)。command -v g++ b、更改g++的名字(例如改成g++-impl)。mv /usr/bin/gcc /usr/bin/g++-impl c、新建g++文件。vi /usr/bin/g++ d、填入如下内容保存。#! /bin/sh/usr/bin/g++-impl -fsigned-char "$@" e、给脚本添加执行权限。chmod +x /usr/bin/g++ f、确认命令是否可用。g++ --version                                 步骤 4      安装依赖 yum安装依赖的相关软件。yum install -y wget vim openssl-devel zlib-devel automake libtool make  libstdc++-static glibc-static git snappy snappy-devel fuse fuse-devel ----结束  3.2 安装OpenJDK                                 步骤 1      下载并解压安装到指定目录(此处以指定“/opt/tools/installed”目录为例)wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gztar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gzmkdir -p /opt/tools/installed/mv jdk8u252-b09 /opt/tools/installed/                                 步骤 2      配置Java环境变量vim /etc/profile在文件末尾添加如下代码。export JAVA_HOME=/opt/tools/installed/jdk8u252-b09export PATH=$JAVA_HOME/bin:$PATH                                 步骤 3      使修改的环境变量生效source /etc/profile                                 步骤 4      查看配置是否生效 3.3 安装Maven                                步骤 1      下载并安装到指定目录(此处以指定“/opt/tools/installed”目录为例)wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/                                步骤 2      修改Maven环境变量vim /etc/profile在“/etc/profile”文件末尾增加下面代码。export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4export PATH=$MAVEN_HOME/bin:$PATH                                步骤 3      使修改的环境变量生效source /etc/profile                                步骤 4      查看配置是否生效。mvn -v                                 步骤 5      查看配置是否生效。修改Maven配置文件中的:本地仓路径、远程仓等。配置文件路径:“/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml”远程仓库配置(修改成自己搭建的Maven仓库,如果没有,可以按照下面示例配置),在<mirrors>标签内添加以下内容: <mirror>  <id>huaweimaven</id>  <name>huawei maven</name>  <url>https://mirrors.huaweicloud.com/repository/maven/</url>  <mirrorOf>central</mirrorOf></mirror> 若编译环境需要代理才能访问外网,需要在settings.xml配置文件中添加代理配置,具体内容如下:<proxies>  <proxy>    <id>optional</id>    <active>true</active>    <protocol>http</protocol>    <username>用户名</username>    <password>密码</password>    <host>代理服务器网址</host>    <port>代理服务器端口</port>    <nonProxyHosts>local.net|some.host.com</nonProxyHosts>  </proxy></proxies> 3.4 安装Protobuf                                步骤 1      查看配置是否生效。yum install -y protobuf protobuf-devel                                步骤 2      通过执行以下命令,指定安装的Protoc可执行文件mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=2.5.0 -Dclassifier=linux-aarch_64 -Dpackaging=exe -Dfile=/usr/bin/protoc  4 编译4.1 编译netty-all-4.1.39.Final                                步骤 1      按xxx指导编译netty-all-4.1.39.Final4.2 编译flink-shaded-netty                                步骤 1      下载flink-shaded-11.0安装包。wget https://github.com/apache/flink-shaded/archive/release-11.0.tar.gz                                步骤 2      解压安装包。tar -zxf release-11.0.tar.gz                                步骤 3      进入解压后目录cd flink-shaded-release-11.0                                步骤 4      执行编译编译打成jar包,flink-shaded-netty-4.1.39.Final-11.0.jar放置于“flink-shaded-netty-4/target”目录。mvn clean install -pl flink-shaded-netty-4                                 步骤 5      使用鲲鹏分析扫描工具扫描编译生成的jar包,确保没有包含有x86的so和jar包。----结束A 修订记录写作说明:仅在第一次发布时,明确第一次正式发布。后续的刷新记录,不需要写作是第几次发布,只需要提供发布日期和修订说明即可。发布日期修订记录2021-01-05第一次正式发布 
  • [技术干货] flink-shaded-netty-4.1.49.Final-12.0移植指南
    1 介绍简要介绍大数据组件flink-shaded-netty module。2 环境要求表2-1 硬件要求项目说明服务器Taishan服务器CPU鲲鹏920处理器 或 鲲鹏916处理器磁盘分区对磁盘分区无要求网络可访问外网 软件要求表2-2 软件要求项目说明CentOS7.6OS Kernel4.14.0GCC4.8.5Openjdk1.8.0_252Maven3.5.4Protobuf2.5.0netty-all4.1.49.Final 3 配置编译环境提供编译安装该软件所需的环境的安装方法,例如编译器、第三方库、JDK、OS的yum源、防火墙、用户帐号(如要安装前需要单独创建用户或用户组)、环境变量等。多个任务时原则上建议采用Section进行区分,任务操作步骤较多时可以灵活处理为子章节。任务之间的依赖关系需要在各自的任务中明确。写作注意点:l   执行的操作和命令必须用正文,不能用带灰色底纹的回显。l   命令执行后的回显,必须用文本(带灰色底纹的回显样式),不要用截图。示例:3.1 安装基础库                                步骤 1      安装gcc等相关软件。确保有外网环境后,执行yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64XXXX                                 步骤 2      解决-fsigned-char问题(修改gcc)a、寻找gcc所在路径(一般位于“/usr/bin/gcc”)。command -v gcc b、更改gcc的名字(例如改成gcc-impl)。mv /usr/bin/gcc /usr/bin/gcc-impl c、新建gcc文件。vi /usr/bin/gcc d、填入如下内容保存。#! /bin/sh/usr/bin/gcc-impl -fsigned-char "$@" e、给脚本添加执行权限。chmod +x /usr/bin/gcc f、确认命令是否可用。gcc --version                                 步骤 3      解决-fsigned-char问题(修改g++)a、寻找gcc所在路径(一般位于“/usr/bin/g++”)。command -v g++ b、更改g++的名字(例如改成g++-impl)。mv /usr/bin/gcc /usr/bin/g++-impl c、新建g++文件。vi /usr/bin/g++ d、填入如下内容保存。#! /bin/sh/usr/bin/g++-impl -fsigned-char "$@" e、给脚本添加执行权限。chmod +x /usr/bin/g++ f、确认命令是否可用。g++ --version                                 步骤 4      安装依赖 yum安装依赖的相关软件。yum install -y wget vim openssl-devel zlib-devel automake libtool make  libstdc++-static glibc-static git snappy snappy-devel fuse fuse-devel ----结束  3.2 安装OpenJDK                                 步骤 1      下载并解压安装到指定目录(此处以指定“/opt/tools/installed”目录为例)wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gztar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gzmkdir -p /opt/tools/installed/mv jdk8u252-b09 /opt/tools/installed/                                 步骤 2      配置Java环境变量vim /etc/profile在文件末尾添加如下代码。export JAVA_HOME=/opt/tools/installed/jdk8u252-b09export PATH=$JAVA_HOME/bin:$PATH                                 步骤 3      使修改的环境变量生效source /etc/profile                                 步骤 4      查看配置是否生效 3.3 安装Maven                                步骤 1      下载并安装到指定目录(此处以指定“/opt/tools/installed”目录为例)wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/                                步骤 2      修改Maven环境变量vim /etc/profile在“/etc/profile”文件末尾增加下面代码。export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4export PATH=$MAVEN_HOME/bin:$PATH                                步骤 3      使修改的环境变量生效source /etc/profile                                步骤 4      查看配置是否生效。mvn -v                                 步骤 5      查看配置是否生效。修改Maven配置文件中的:本地仓路径、远程仓等。配置文件路径:“/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml”远程仓库配置(修改成自己搭建的Maven仓库,如果没有,可以按照下面示例配置),在<mirrors>标签内添加以下内容: <mirror>  <id>huaweimaven</id>  <name>huawei maven</name>  <url>https://mirrors.huaweicloud.com/repository/maven/</url>  <mirrorOf>central</mirrorOf></mirror> 若编译环境需要代理才能访问外网,需要在settings.xml配置文件中添加代理配置,具体内容如下:<proxies>  <proxy>    <id>optional</id>    <active>true</active>    <protocol>http</protocol>    <username>用户名</username>    <password>密码</password>    <host>代理服务器网址</host>    <port>代理服务器端口</port>    <nonProxyHosts>local.net|some.host.com</nonProxyHosts>  </proxy></proxies> 3.4 安装Protobuf                                步骤 1      查看配置是否生效。yum install -y protobuf protobuf-devel                                步骤 2      通过执行以下命令,指定安装的Protoc可执行文件mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=2.5.0 -Dclassifier=linux-aarch_64 -Dpackaging=exe -Dfile=/usr/bin/protoc  4 编译4.1 编译netty-all-4.1.49.Final                                步骤 1      按xxx指导编译netty-all-4.1.49.Final4.2 编译flink-shaded-netty                                步骤 1      下载flink-shaded-12.0安装包。wget https://github.com/apache/flink-shaded/archive/release-1.12.tar.gz                                步骤 2      解压安装包。tar -zxf release-1.12.tar.gz                                步骤 3      进入解压后目录cd flink-shaded-release-1.12                                步骤 4      执行编译编译打成jar包,flink-shaded-netty-4.1.49.Final-12.0.jar放置于“flink-shaded-netty-4/target”目录。mvn clean install -pl flink-shaded-netty-4                                 步骤 5      使用鲲鹏分析扫描工具扫描编译生成的jar包,确保没有包含有x86的so和jar包。----结束 
  • [干货汇总] 带你玩转Flink流批一体分布式实时处理引擎
    >摘要:Apache Flink是为分布式、高性能的流处理应用程序打造的开源流处理框架。本文分享自华为云社区《[【云驻共创】手把手教你玩转Flink流批一体分布式实时处理引擎](https://bbs.huaweicloud.com/blogs/317816?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=other&utm_content=content)》,作者: 萌兔之约。 Apache Flink是为分布式、高性能的流处理应用程序打造的开源流处理框架。Flink不仅能提供同时支持高吞吐和exactly-once语义的实时计算,还能提供批量数据处理。相较于市面上的其他数据处理引擎,它采用的是基于流计算来模拟批处理。 # 一、Flink原理及架构 ## Flink简介 Apache Flink是为分布式、高性能的流处理应用程序打造的开源流处理框架。Flink不仅能提供同时支持高吞吐和exactly-once语义的实时计算,还能提供批量数据处理。主要由Java代码实现,支持实时流处理和批处理,批数据只是流数据的一个极限案例。支持了迭代计算,内存管理和程序优化。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/141737fpwimqyo1akyl1vx.png) 相较于市面上的其他数据处理引擎,Flink和Spark都可以同时支持流处理和批处理。但是,Spark的技术理念是基于批处理来模拟流的计算;而Flink则完全相反,它采用的是基于流计算来模拟批处理。 ## Flink关键机制 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/1417464udddadmk4ddapbu.png) 四个机制:状态、时间、检查点、窗口 Flink中有四种最重要的关键机制,这些关键机制在后面我们也会来进行详细的介绍,这里我们主要介绍它的基本概念以及主要用途。首先Flink中最重要的一个机制是状态机制(State),Flink是一种有状态的流计算引擎。状态的作用主要是我们Flink是一种流计算,它需要存储节点的中间计算结果。另外状态的保存还有利于Flink进行容错恢复。状态有密切关系的是Flink的Checkpoint,也就是检查点的机制,Checkpoint能够去把Flink的状态进行存储,相当于是做一次快照,方便Flink进行容错恢复。另外因为Flink它是一种流计算引擎,它的数据是不间断产生的,是没有界限的,因此我们需要有一种机制能够对数据进行切分,我们会采用的时间(Time)作为切分点,另外Flink进行容错性的恢复,它也需要知道从哪个时间点来进行恢复。所以说时间也是Flink中一种很重要的机制。最后是窗口window,在Flink中需要使用的窗口对数据进行切分,也方便对数据进行聚合计算。 ## Flink核心理念 Flink与其他流计算引擎的最大区别,就是状态管理。 Flink提供了内置的状态管理,可以把工作时状态存储在Flink内部,而不需要把它存储在外部系统。这样做的好处: - 降低了计算引擎对外部系统的依赖,使得部署、运维更加简单; - 对性能带来了极大的提升。 ## Flink Runtime整体架构 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/1418327dtvvqxwjb78lnsn.png) Flink运行时架构从下至上可以分为了三层,在最下层是Flink的一些配置方式,Flink可以采用单机的方式安装,也可以采用的集群的方式安装,另外也可以采用云的方式部署。在大多数情况下,Flink都是采用的集群的方式进行配置和安装的。其中呢它支持了两种集群模式,一种是Standalon,这种方式是采用了Flink自身提供的资源调度管理器。另外一种方式是基于YARN的方式进行了配置安装。 YARN提供了专用的资源管理器。在中间层次是Flink的计算引擎,这个计算引擎它同时能够支持流处理和批处理,可以接收了上层的api提交给它做作业 。Runtime这个引擎上面可以分为了两个模块,一个模块是DataStream api,一个是DataSet api。Flink向dataset和datastream,也就是批数据集以及流数据集是分开处理的,但是都是公用下面的计算引擎。基于两种类型的api,Flink又提供了更多的上层的抽象的api,API越抽象,它的表达能力越弱,但是它对数据的处理能力、抽象性也越强。在针对于上层Table api和SQL,它是主要是针对关系运算的,那针对关系数据的查询,Flink提供了统一的接口,基于流数据api,同时提供了复杂事件处理api。复杂事件指的就是说对不能够用时间去表示事件的开始、次序以及结束这样的事件进行处理的api接口。另外针对于数据及api,它提供了机器学习api以及图计算的api。 ## Flink核心概念- DataStream ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/141851f65funay80esmwmd.png) DataStream: Flink用类DataStream来表示程序中的流式数据。用户可以认为它们是含有重复数据的不可修改的集合(collection),DataStream中元素的数量是无限的。 从图中我们可以发现,对DataStream可以使用一些算子,例如KeyBy这样的算子,对它进行处理转换之后,它会转换成另外一种数据流,也称为keyedstream。那么基于keyedstream,我们进一步可以使用窗口算子,这主要是Flink程序设计中对数据流的一些处理方式。 ## Flink核心概念- DataSet DataSet : Flink系统可对数据集进行转换(例如,过滤,映射,联接,分组),数据集可从读取文件或从本地集合创建。结果通过接收器( Sink)返回,接收器可以将数据写入(分布式)文件或标准输出(例如命令行终端) ## Flink程序 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/1419179xgllhue7mfcrlq1.png) Flink程序由Source、Transformation和Sink三部分组成,其中Source主要负责数据的读取,支持HDFS、kafka和文本等;Transformation主要负责对数据的转换操作; Sink负责最终数据的输出,支持HDFS、kafka和文本输出等。在各部分之间流转的数据称为流( stream ) 。 ## Flink数据源 批处理: Files:HDFS,Local file system,MapR file system;Text,CSV,Avro,Hadoop input formats JDBC、HBase和 Collections 流处理: Files、Socket streams、Kafka、RabbitMQ、Flume、Collections、 Implement your own和SourceFunction.collecto # Flink程序运行图 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/141947qhuhgscxtokdtt72.png) Flink是一种master-Slave架构,它在启动的时候就会产生了JobManger以及TaskManager。事实上在Flink程序中还包含两个组件,这两个组件一个叫resource manager,主要负责了资源的调度与管理,另外一个称为Dispatcher。主要是用来进行client,要把JobManager进行分发公布。我们来看一看具体的运行流程。 首先是用户提交Flink程序,这个Flink程序就会转换成逻辑数据流图。客户端接收到逻辑数据流图之后,然后连同jar包以及一些依赖包就会提交给了JobManger,JobManger接收到逻辑数据流图之后会转成物理数据流图,这个物理数据流图是真实的可执行的,能够具体的将任务放置在TaskManager上,在TaskManager中会将它所拥有的资源划分成一个一个的TaskSlot。每个TaskSlot实际上就相当于是jvm,它的一个具体的线程。每个TaskSlot占用了TaskManager的一部分资源,这里的资源主要是以内存进行划分的,TaskSlot不对cpu的资源进行划分,因此没有对cpu的资源进行隔离。 ## Flink作业运行流程(一) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142001wpihdmgr7wwav3wa.png) 用户首先提交Flink程序到JobClient,经过JobClient的处理、解析、优化提交到JobManager,最后由TaskManager运行task。 在Flink中它通过了JobClient提交了任务,做过JobClient提交的任务进一步的进行优化、解析以及处理,提交给了JobManager。JobManager会将jobClient提交了逻辑数据流图转换成物理数据流图,然后将这些任务分配给taskmanager。taskmanager接受到任务之后就相应地进行处理,并且汇报了task的状态给JobManager,JobManager最后就把结果反馈给jobClient。 JobClient是Flink程序和JobManager交互的桥梁。主要负责接收程序、解析程序的执行计划、优化程序的执行计划,然后提交执行计划到JobManager。在Flink中主要有三类Operator。 Source Operator:数据源操作,比如文件、socket、Kafka等。 Transformation Operator:数据转换操作,比如map,flatMap,reduce等算子。 Sink Operator:数据存储操作。比如数据存储到HDFS、Mysql、Kafka等等。 ## 一个完整的Flink程序---java ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/1420196a7kq2tabm0pioej.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/1420257fnnbvnsm0vfppx9.png) ## Flink的数据处理 Apache Flink它同时支持批处理和流处理,也能用来做一些基于事件的应用。 首先Flink是一个纯流式的计算引擎,它的基本数据模型是数据流。流可以是无边界的无限流,即一般意义上的流处理。也可以是有边界的有限流,就是批处理。因此Flink用一套架构同时支持了流处理和批处理。 其次,Flink的一个优势是支持有状态的计算。如果处理一个事件(或一条数据)的结果只跟事6件本身的内容有关,称为无状态处理;反之结果还和之前处理过的事件有关,称为有状态处理。 ## 有界流与无界流 无界流:有定义流的开始,但没有定义流的结束。数据源会无休止地产生数据。无界流的数据必须持续处理,即数据被读取后需要立刻处理。不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142045ktewddlefszfvoiv.png) 有界流:有定义流的开始,也有定义流的结束。有界流可以在读取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。 ## 批处理示例 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142057yttjrnedherbsr0i.png) 批处理是流处理的一种非常特殊的情况。在流处理中,我们为数据定义滑动窗口或滚动窗口,并且在每次窗口滑动或滚动时生成结果。批处理则不同,我们定义一个全局窗口,所有的记录都属于同一个窗口。举例来说,以下代码表示一个简单的Flink程序,它负责每小时对某网站的访问者计数,并按照地区分组。 如果知道输入数据是有限的,则可以通过以下代码实现批处理。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/1421030yiijx7bkulxwrlm.png) 如果输入数据是有限的,那么下面代码与上面代码的运行结果相同。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142111ls369llrt8poaxot.png) ## Flink批处理模型 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142230tzlfmyue78dqcjoq.png) Flink通过一个底层引擎同时支持流处理和批处理。 在流处理引擎之上,Flink 有以下机制: - 检查点机制和状态机制:用于实现容错、有状态的处理; - 水印机制:用于实现事件时钟; - 窗口和触发器:用于限制计算范围,并定义呈现结果的时间。 在同一个流处理引擎之上,Flink 还存在另一套机制,用于实现高效的批处理。 - 用于调度和恢复的回溯法:由 Microsoft Dryad 引入,现在几乎用于所有批处理器; - 用于散列和排序的特殊内存数据结构:可以在需要时,将一部分数据从内存溢出到硬盘上; - 优化器:尽可能地缩短生成结果的时间。 流与批处理机制 两套机制分别对应各自的API(DataStream API 和 DataSet API);在创建 Flink 作业时,并不能通过将两者混合在一起来同时 利用 Flink 的所有功能。 Flink支持两种关系型的API,Table APl和sQL。这两个API都是批处理和流处理统一的APl,这意味着在无边界的实时数据流和有边界的历史记录数据流上,关系型API会以相同的语义执行查询,并产生相同的结果。 - **Table API / SQL** 正在以流批统一的方式成为分析型用例的主要 API。 - **DataStream API** 是数据驱动应用程序和数据管道的主要API。 # 二、Flink的Time与Window ## 时间背景 在流处理器编程中,对于时间的处理是非常关键的。比如计数的例子,事件流数据(例如服务器日志数据、网页点击数据和交易数据)不断产生,我们需要用key将事件分组,并且每隔一段时间就针对每一个key对应的事件计数。这就是我们熟知的“大数据”应流处理中的时间分类 在数据流处理过程中,我们经常使用系统处理时间即: processing time作为某个事件的时间,而实际上系统时间processing time是我们强加给事件的时间,由于网络延迟等原因并不能较好的反应事件之间发生的先后顺序。 在实际场景中,每个事件的时间可以分为三种: - event time,即事件发生时的时间; - ingestion time,即事件到达流处理系统的时间; - processing time,即事件被系统处理的时间。 ## 三种时间示例 例如,一条日志进入Flink的时间为2019-11-1210:00:00.123,到达window的系统时间为2019-11-1210:00:01.234,日志的内容如下: 2019-11-0218:37:15.624 INFO Fail over to rm2 2019-11-0218:37:15.624是Event Time; 2019-11-1210:00:00.123是Ingestion Time; 2019-11-1210:00:01.234是Processing Time; ## 三种时间的区别 实际情况中事件真正发生的先后顺序与系统处理时间存在一定的差异,这些差异主要由网络延迟、处理时间的长短等造成。如图所示: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142405fqitwkyxvghrglvl.png) 横坐标代表Event time,纵坐标代表processing time。理想情况下,eventtime和processing time构成的坐标应该形成一条倾斜角为45度的线。但实际应用过程中,processing time要落后与eventtime,造成事件到来的先后顺序不一致。 ## Flink支持的时间语义 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142417dwngz7nffxb21shh.png) Processing Time是指事件数据被Operator处理时所在机器的系统时间,它提供了最好的性能和最低的延迟。 Event Time是指在数据产生时该设备上对应的时间,这个时间在进入Flink之前已经存在于数据记录中了。 Ingestion Time指的是事件数据进入到Flink的时间。 ## Window概述 流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限数据集是指一种不断增长的本质上无限的数据集,而Window是一种切割无限数据为有限块进行处理的手段。Window是无限数据流处理的核心,它将一个无限的stream拆分成有限大小的"buckets"桶,我们可以在这些桶上做计算操作。 ## Window类型 Window根据应用类型可以分成两类: - CountWindow:数据驱动,按照指定的数据条数生成一个Window,与时间无关。 - TimeWindow:时间驱动,按照时间生成Window。 Apache Flink是一个天然支持无限流数据处理的分布式计算框架,在Flink中 Window可以将无限流切分成有限流。Flink中 Window可以是Time Window,也可以是Count Window。 # TimeWindow分类 TimeWindow可以根据窗口实现原理的不同分成三类:滚动窗口(Tumbling Window ) .滑动窗口( Sliding Window)和会话窗口( Session Window)。 ## 滚动窗口 将数据依据固定的窗口长度对数据进行切片。特点:时间对齐,窗口长度固定,没有重叠。 适用场景:适合做Bl统计等(做每个时间段的聚合计算)。 举一个例子,假设要对传感器输出的数值求和。一分钟滚动窗口收集最近一分钟的数值,并在一分钟结束时输出总和,如下图所示。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142458gnhl53s3ojpvgcnu.png) ## 滑动窗口 滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成。特点∶时间对齐,窗口长度固定,有重叠。 适用场景:对最近一个时间段内的统计(求某接口最近5min的失败率来决定是否要报警)。 示例:一分钟滑动窗口计算最近一分钟的数值总和,但每半分钟滑动一次并输出结果,如下图所示。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142510lnectkcuawyt4bus.png) ## 会话窗口 会话窗口由一系列事件组合一个指定时间长度的timeout间隙组成,类似于web应用的session,也就是一段时间没有接收到新数据就会生成新的窗口。特点:时间无对齐。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142524dvtqpqrwl8hwiahi.png) ## 代码定义 在Flink中,一分钟滚动窗口的定义如下: `stream.timeWindow(Time.minutes(1));` 在Flink中,每半分钟(即30秒)滑动一次的一分钟滑动窗口,如下所示: `stream.timeWindow(Time.minutes(1),Time.seconds(30));` # 三、Flink的Watermark ## 乱序问题 流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的,虽然大部分情况下,流到operator的数据都是按照事件产生的时间顺序来的,但是也不排除由于网络、分布式等原因,导致乱序的产生,所谓乱序,就是指Flink接收到的事件的先后顺序不是严格按照事件的Event Time顺序排列的。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142602wj1iu44donqh3dl1.png) 此时出现一个问题,一旦出现乱序,如果只根据eventTime决定window的运行,我们不能明确数据是否全部到位,但又不能无限期的等下去,此时必须要有个机制来保证一个特定的时间后,必须触发window去进行计算了,这个特别的机制,就是Watermark。 ## 乱序示例 例子:某App会记录用户的所有点击行为,并回传日志(在网络不好的情况下,先保存在本地,延后回传)。A用户在11:02对App进行操作,B用户在11:03对App进行操作,但是A用户的网络不太稳定,回传日志延迟了,导致我们在服务端先接受到B用户11:03的消息,然后再接受到A用户11:02的消息,消息乱序了。 # 水位线(Watermark) 对于无穷数据集,我们缺乏一种有效的方式来判断数据完整性,因此就有了Watermark,它是建立在事件时间上的一个概念,用来刻画数据流的完整性。如果按照处理时间来衡量事件,一切都是有序的、完美的,自然而然也就不需要Watermark了。换句话说事件时间带来了乱序的问题,而Watermark就是用来解决乱序问题。所谓的乱序,其实就是有事件延迟了,对于延迟的元素,我们不可能无限期的等下去,必须要有一种机制来保证一个特定的时间后,必须触发Window进行计算。这个特别的机制,就是Watermark,它告诉了算子延迟到达的消息不应该再被接收。 - Watermark是一种衡量Event Time进展的机制。 - Watermark是用于处理乱序事件的,而正确的处理乱序事件,通常用Watermark机制结合window来实现。 - 数据流中的Watermark用于表示timestamp小于Watermark的数据,都已经到达了,因此,window的执行也是由Watermark触发的。 - Watermark可以理解成一个延迟触发机制,我们可以设置Watermark的延时时长t,每次系统会校验已经到达的数据中最大的maxEventTime,然后认定eventTime小于maxEventTime - t的所有数据都已经到达,如果有窗口的停止时间等于maxEventTime – t,那么这个窗口被触发执行。 - watermark 用来让程序自己平衡延迟和结果正确性 # Watermark的原理 Flink怎么保证基于event-time的窗口在销毁的时候,已经处理完了所有的数据呢? ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142656zi1c0wdsckiswa6b.png) 这就是watermark的功能所在。watermark会携带一个单调递增的时间戳t,Watermark(t)表示所有时间戳不大于t的数据都已经到来了,未来小于等于t的数据不会再来,因此可以放心地触发和销毁窗口了。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142705ly6120lakzr1jrp1.png) 当Flink,接收到数据时,会按照一定的规则去生成Watermark,这条Watermark就等于当前所有到达数据中的maExertT me"-延N时长,也就定说,Watermark是基于数据携带的时间戳生成的,一旦Watermark比当前未触发的窗口的停止时间要晚,那么就会触发相应窗口的执行。由于eventtime是由数据携带的,因此,如果运行过程中无法获取新的数据,那么没有被触发的窗口将永远都不被触发。 上图中,我们设置的允许最大延迟到达时间为2s,所以时间戳为7s的事件对应的Watermark 是 5s,时间戳为12s的事件的Watermark是10s,如果我们的窗口是1s-5s,窗口2是6s~-10s,那么时间戳为7s的事件到达时的Matermarker.恰好触发窗口1,时间戳为 12s的事件到达时的Watermark恰好触发窗口2。 Watermark就是触发前一窗口的“关窗时间”,一旦触发关门那么以当前时刻为准在窗口范围内的所有所有数据都会收入窗中。只要没有达到水位那么不管现实中的时间推进了多久都不会触发关窗。 ## 延迟的数据 Watermark能够应对乱序的数据,但是真实世界中没法得到一个完美的 Watermark数值。要么没法获取到,要么耗费太大,因此实际工作中会近似 Watermark(t)之后,还有较小的概率接受到时间戳t之前的数据,在Flink中将这些数据定义为“late elements”,同样可以在Window中指定允许延迟的最大时间(默认为О),可以使用下面的代码进行设置: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/142720sr6cgl6v2uvpqnzl.png) ## 延迟数据处理机制 延迟事件是乱序事件的特例,和一般乱序事件不同的是它们的乱序程度超出了水位线( Watermark)的预计,导致窗口在它们到达之前已经关闭。 延迟事件出现时窗口已经关闭并产出了计算结果,对于此种情况处理的方法有3种: - 重新激活已经关闭的窗口并重新计算以修正结果。 - 将延迟事件收集起来另外处理。 - 将延迟事件视为错误消息并丢弃。 Flink默认的处理方式是第3种直接丢弃,其他两种方式分别使用Side Output和AllowedLateness。 ## Side Output机制 Side Output机制可以将延迟事件单独放入一个数据流分支,这会作为Window计算结果的副产品,以便用户获取并对其进行特殊处理。 side Output获取延迟数据: 设置allowedLateness之后,迟来的数据同样可以触发窗口,进行输出,利用Flink的sideoutput机制,可以获取到这些延迟的数据,使用方式如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/1427489re5uge4oa3v1x0m.png) ## Allowed Lateness机制 Allowed Lateness机制允许用户设置一个允许的最大延迟时长。Flink会在窗口关闭后一直保存窗口的状态直至超过允许延迟时长,这期间的延迟事件不会被丢弃,而是默认会触发窗口重新计算。因为保存窗口状态需要额外内存,并且如果窗口计算使用了ProcessWindowFunction APl还可能使得每个延迟事件触发一次窗口的全量计算,代价比较大,所以允许延迟时长不宜设得太长,延迟事件也不宜过多。 # 四、Flink的容错 ## Flink容错机制 为了保证程序的容错恢复以及程序启动时其状态恢复,Flink任务都会开启Checkpoint或者触发Savepoint进行状态保存。 - Checkpoint机制。这种机制保证了实时程序运行时,即使突然遇到异常也能够进行自我恢复。Checkpoint对于用户层面,是透明的,用户会感觉不到Checkpoint过程的存在。 - Savepoint机制。是在某个时间点程序状态全局镜像,以后程序在进行升级,或者修改并发度等情况,还能从保存的状态位继续启动恢复。Savepoint可以看做是Checkpoint在特定时期的一个状态快照。 ## Checkpoint Flink 如何保证exactly-once呢?它使用一种被称为“检查点( Checkpoint )”的特性,在出现故障时将系统重置回正确状态。Flink状态保存主要依靠Checkpoint机制,Checkpoint会定时制作分布式快照,对程序中的状态进行备份。 ## Checkpoint检查点机制 Flink中基于异步轻量级的分布式快照技术提供了Checkpoints容错机制,分布式快照可以将同一时间点Task/Operator的状态数据全局统一快照处理。Flink会在输入的数据集上间隔性地生成checkpoint barrier,通过棚栏( barrier)将间隔时间段内的数据划分到相应的checkpoint中。当应用出现异常时,Operator就能够从上一次快照中恢复所有算子之前的状态,从而保证数据的一致性。 对于状态占用空间比较小的应用,快照产生过程非常轻量,高频率创建且对Flink任务性能影响相对较小。Checkpoint过程中状态数据一般被保存在一个可配置的环境中,通常是在JobManager节点或HDFS上。 ## Checkpoint配置 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/143028qm7obfrdiuk31tyn.png) 默认情况下Flink不开启检查点,用户需要在程序中通过调用enableCheckpointing(n)方法配置和开启检查点,其中n为检查点执行的时间间隔,单位为毫秒。 **exactly-once和at-least-once语义选择** exactly-once:保证端到端数据一致性,数据要求高,不允许出现数据丢失和数据重复,Flink的性能也相对较弱; at-least-once:时延和吞吐量要求非常高但对数据的一致性要求不高的场景。 Flink默认使用exactly-once模式,可以通过setCheckpointingMode()方法来设定语义模式。 env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE) **Checkpoint超时时间** 指定每次Checkpoint执行过程中的上限时间范围,一旦Checkpoint执行时间超过该阈值,Flink将会中断Checkpoint过程,并按照超时处理。 该指标可以通过setCheckpointTimeout方法设定,默认10分钟。 env.getCheckpointConfig().setCheckpointingTimeout(60000) **检查点之间最小时间间隔** 设定两个Checkpoint之间的最小时间间隔,防止出现状态数据过大而导致Checkpoint执行时间过长,从而导致Checkpoint积压过多,最终Flink应用密集地触发Checkpoint操作,会占用大量计算资源而影响到整个应用的性能。 env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500) **最大并行执行的检查点数量** 设定能够同时执行的Checkpoint数量。在默认情况下只有一个检查点可以运行,根据用户指定的数量可以同时触发多个Checkpoint,从而提升Checkpoint整体的效率。 env.getCheckpointConfig().setMaxConcurrentCheckpoints(500) **外部检查点** 设定周期性的外部检查点,然后将状态数据持久化到外部系统中,使用这种方式不会在任务停止的过程中清理掉检查点数据,而是一直保存在外部系统介质中,也可以通过从外部检查点中对任务就行恢复。 env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION) # 作业如何恢复数据? Flink在Cancel时允许在外部介质保留Checkpoint;另一方面,Flink还有另外一个机制是SavePoint. Savepoints是检查点的一种特殊实现,底层其实是使用Checkpoints的机制。Savepoints是用户以手工命令的方式触发,并将结果持久化到指定的存储路径中,目的是帮助用户在升级和维护集群过程中保存系统中的状态数据,避免因为停机运维或者升级应用等正常终止应用的操作而导致系统无法恢复到原有的计算状态的情况,从而无法实现端到端的Exactly-Once语义保证。 ## Savepoint与Checkpoint ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202201/28/143132xc3nkhiklwig7cn2.png) checkpoint的侧重点是“容错”,即Flink作业意外失败并重启之后,能够直接从早先打下的checkpoint恢复运行,且不影响作业逻辑的准确性。而savepoint的侧重点是“维护”,即Flink作业需要在人工干预下手动重启、升级、迁移或A/B测试时,先将状态整体写入可靠存储,维护完毕之后再从savepoint恢复现场。 savepoint是“通过checkpoint机制”创建的,所以savepoint本质上是特殊的checkpoint。 checkpoint面向Flink Runtime本身,由Flink的各个TaskManager定时触发快照并自动清理,一般不需要用户干预;savepoint面向用户,完全根据用户的需要触发与清理。 - 触发管理方式上,Checkpoint是由Flink自动触发并管理;Savepoint由用户手动触发并管理 - 主要用途上,Checkpoint在Task发生异常时快速恢复,例如网络抖动导致的超时异常;Savepoint有计划的进行备份,例如修改代码,调整并发 - 从特点上看,Checkpoint轻量,自动从故障中恢复,在作业停止后默认清除;Savepoint持久,以标准格式存储,允许代码或配置发生改变,手动触发从Savepoint的恢复。 ## 状态的存储方式-MemoryStateBackend 构造方式: MemoryStateBackend(int maxStateSize, boolean asynchronousSnapshots) 存储方式: - State: TaskManager内存;Checkpoint: JobManager内存。 容量限制: 单个state maxStateSize默认5M; maxStateSize=akka.framesize ,默认10 M。·总大小不超过JobManager的内存 推荐使用的场景:本地测试;几乎无状态的作业,比如ETL。 ## 状态的存储方式- FsStateBackend 构造方式: FsStateBackend(URI checkpointDataUri ,boolean asynchronousSnapshots) 存储方式: State: TaskManager内存; CHeckpoint:外部文件存储系统(本地或HDFS)。 容量限制: ·单TaskManager 上state总量不超过它的内存; ·总大小不超过配置的文件系统容量。 推荐使用的场景:常规使用状态的作业,例如分钟级别窗口聚合、Join;需要开启HA的作业;可以在生产场景使用。 ## 状态的存储方式- RocksDBStateBackend 构造方式: RocksDBStateBackend(URI checkpointDataUri ,boolean enableIncrementalCheckpointing) 存储方式: State: TaskManager上的KV数据库(实际使用内存+磁盘); CHeckpoint:外部文件存储系统(本地或HDFS)。 容量限制: 单TaskManager 上State总量不超过它的内存+磁盘; 单Key最大2G; 总大小不超过配置的文件系统容量。 推荐使用的场景:超大状态的作业,例如天级别窗口聚合;需要开启HA的作业;要求不高的作业;可以在生产场景使用。 # 总结 本章主要讲述了Flink的架构及技术原理,以及Flink程序的运行过程。重点在于Flink流处理与批处理的不同方式,从长远来看,DataStream API应该通过有界数据流完全包含DataSet APl。
  • [问题求助] 【ApacheFlink1.14产品】【鲲鹏编译】Flink : Runtime web :npm run build 失败
    【功能模块】【ApacheFlink1.14产品】【鲲鹏编译】Flink : Runtime web   模块【操作步骤&问题现象】0.公司环境maven、git、npm已经配置代理1、操作步骤cd ./flink-release-1.14.0mvn install -DskipTests -Dtar -Dhadoop.version=2.9.2问题现象:Flink 1.11-Flink 1.13 编译均可通过,但flink-release-1.14.0编译报如下错误,请帮忙提示如何排查问题[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time:  09:03 min[INFO] Finished at: 2022-01-18T10:24:24+08:00[INFO] ------------------------------------------------------------------------[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.9.1:npm (npm run build) on project flink-runtime-web_2.11: Failed to run task: 'npm run build --https-proxy=http://proxyuser:***@192.168.1.216:808 --proxy=http://proxyuser:***@192.168.1.216:808' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 139 (Exit value: 139) -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException[ERROR] [ERROR] After correcting the problems, you can resume the build with the command[ERROR]   mvn <args> -rf :flink-runtime-web_2.11[root@hadoop47 flink-release-1.14.0]# 【截图信息】【日志信息】(可选,上传日志内容或者附件)[INFO] Reactor Summary for Flink : 1.14.0:[INFO] [INFO] Flink : ............................................ SUCCESS [  9.170 s][INFO] Flink : Annotations ................................ SUCCESS [  3.712 s][INFO] Flink : Test utils : ............................... SUCCESS [  0.254 s][INFO] Flink : Test utils : Junit ......................... SUCCESS [  2.810 s][INFO] Flink : Metrics : .................................. SUCCESS [  0.757 s][INFO] Flink : Metrics : Core ............................. SUCCESS [  2.321 s][INFO] Flink : Core ....................................... SUCCESS [ 46.265 s][INFO] Flink : Java ....................................... SUCCESS [ 10.641 s][INFO] Flink : Scala ...................................... SUCCESS [ 59.810 s][INFO] Flink : FileSystems : .............................. SUCCESS [  0.205 s][INFO] Flink : FileSystems : Hadoop FS .................... SUCCESS [  5.587 s][INFO] Flink : FileSystems : Mapr FS ...................... SUCCESS [  1.450 s][INFO] Flink : FileSystems : Hadoop FS shaded ............. SUCCESS [  6.972 s][INFO] Flink : FileSystems : S3 FS Base ................... SUCCESS [  2.117 s][INFO] Flink : FileSystems : S3 FS Hadoop ................. SUCCESS [  8.153 s][INFO] Flink : FileSystems : S3 FS Presto ................. SUCCESS [ 19.771 s][INFO] Flink : FileSystems : OSS FS ....................... SUCCESS [ 10.126 s][INFO] Flink : FileSystems : Azure FS Hadoop .............. SUCCESS [ 19.434 s][INFO] Flink : RPC : ...................................... SUCCESS [  0.220 s][INFO] Flink : RPC : Core ................................. SUCCESS [  1.015 s][INFO] Flink : RPC : Akka ................................. SUCCESS [  6.513 s][INFO] Flink : RPC : Akka-Loader .......................... SUCCESS [  3.778 s][INFO] Flink : Queryable state : .......................... SUCCESS [  0.176 s][INFO] Flink : Queryable state : Client Java .............. SUCCESS [  1.452 s][INFO] Flink : Runtime .................................... SUCCESS [01:34 min][INFO] Flink : Optimizer .................................. SUCCESS [  7.665 s][INFO] Flink : Connectors : ............................... SUCCESS [  0.188 s][INFO] Flink : Connectors : File Sink Common .............. SUCCESS [  0.638 s][INFO] Flink : Streaming Java ............................. SUCCESS [ 32.015 s][INFO] Flink : Clients .................................... SUCCESS [  5.411 s][INFO] Flink : DSTL ....................................... SUCCESS [  0.233 s][INFO] Flink : DSTL : DFS ................................. SUCCESS [  1.229 s][INFO] Flink : State backends : ........................... SUCCESS [  0.185 s][INFO] Flink : State backends : RocksDB ................... SUCCESS [  3.520 s][INFO] Flink : State backends : Changelog ................. SUCCESS [  1.414 s][INFO] Flink : Test utils : Utils ......................... SUCCESS [  3.180 s][INFO] Flink : Runtime web ................................ FAILURE [02:48 min][INFO] Flink : Test utils : Connectors .................... SKIPPED[INFO] Flink : Connectors : Base .......................... SKIPPED[INFO] Flink : Connectors : Files ......................... SKIPPED[INFO] Flink : Examples : ................................. SKIPPED[INFO] Flink : Examples : Batch ........................... SKIPPED[INFO] Flink : Connectors : Hadoop compatibility .......... SKIPPED[INFO] Flink : Tests ...................................... SKIPPED[INFO] Flink : Streaming Scala ............................ SKIPPED[INFO] Flink : Connectors : HCatalog ...................... SKIPPED[INFO] Flink : Table : .................................... SKIPPED[INFO] Flink : Table : Common ............................. SKIPPED[INFO] Flink : Table : API Java ........................... SKIPPED[INFO] Flink : Table : API Java bridge .................... SKIPPED[INFO] Flink : Formats : .................................. SKIPPED[INFO] Flink : Format : Common ............................ SKIPPED[INFO] Flink : Table : API Scala .......................... SKIPPED[INFO] Flink : Table : API Scala bridge ................... SKIPPED[INFO] Flink : Table : SQL Parser ......................... SKIPPED[INFO] Flink : Table : SQL Parser Hive .................... SKIPPED[INFO] Flink : Table : Code Splitter ...................... SKIPPED[INFO] Flink : Libraries : ................................ SKIPPED[INFO] Flink : Libraries : CEP ............................ SKIPPED[INFO] Flink : Table : Runtime ............................ SKIPPED[INFO] Flink : Table : Planner ............................ SKIPPED[INFO] Flink : Formats : Json ............................. SKIPPED[INFO] Flink : Connectors : Elasticsearch base ............ SKIPPED[INFO] Flink : Connectors : Elasticsearch 5 ............... SKIPPED[INFO] Flink : Connectors : Elasticsearch 6 ............... SKIPPED[INFO] Flink : Connectors : Elasticsearch 7 ............... SKIPPED[INFO] Flink : Connectors : HBase base .................... SKIPPED[INFO] Flink : Connectors : HBase 1.4 ..................... SKIPPED[INFO] Flink : Connectors : HBase 2.2 ..................... SKIPPED[INFO] Flink : Formats : Hadoop bulk ...................... SKIPPED[INFO] Flink : Formats : Orc .............................. SKIPPED[INFO] Flink : Formats : Orc nohive ....................... SKIPPED[INFO] Flink : Formats : Avro ............................. SKIPPED[INFO] Flink : Formats : Parquet .......................... SKIPPED[INFO] Flink : Formats : Csv .............................. SKIPPED[INFO] Flink : Connectors : Hive .......................... SKIPPED[INFO] Flink : Connectors : JDBC .......................... SKIPPED[INFO] Flink : Connectors : RabbitMQ ...................... SKIPPED[INFO] Flink : Connectors : Twitter ....................... SKIPPED[INFO] Flink : Connectors : Nifi .......................... SKIPPED[INFO] Flink : Connectors : Cassandra ..................... SKIPPED[INFO] Flink : Metrics : JMX .............................. SKIPPED[INFO] Flink : Formats : Avro confluent registry .......... SKIPPED[INFO] Flink : Test utils : Testing Framework ............. SKIPPED[INFO] Flink : Connectors : Kafka ......................... SKIPPED[INFO] Flink : Connectors : Google PubSub ................. SKIPPED[INFO] Flink : Connectors : Kinesis ....................... SKIPPED[INFO] Flink : Connectors : Pulsar ........................ SKIPPED[INFO] Flink : Connectors : SQL : Elasticsearch 6 ......... SKIPPED[INFO] Flink : Connectors : SQL : Elasticsearch 7 ......... SKIPPED[INFO] Flink : Connectors : SQL : HBase 1.4 ............... SKIPPED[INFO] Flink : Connectors : SQL : HBase 2.2 ............... SKIPPED[INFO] Flink : Connectors : SQL : Hive 1.2.2 .............. SKIPPED[INFO] Flink : Connectors : SQL : Hive 2.2.0 .............. SKIPPED[INFO] Flink : Connectors : SQL : Hive 2.3.6 .............. SKIPPED[INFO] Flink : Connectors : SQL : Hive 3.1.2 .............. SKIPPED[INFO] Flink : Connectors : SQL : Kafka ................... SKIPPED[INFO] Flink : Connectors : SQL : Kinesis ................. SKIPPED[INFO] Flink : Formats : Sequence file .................... SKIPPED[INFO] Flink : Formats : Compress ......................... SKIPPED[INFO] Flink : Formats : Avro AWS Glue Schema Registry .... SKIPPED[INFO] Flink : Formats : SQL Orc .......................... SKIPPED[INFO] Flink : Formats : SQL Parquet ...................... SKIPPED[INFO] Flink : Formats : SQL Avro ......................... SKIPPED[INFO] Flink : Formats : SQL Avro Confluent Registry ...... SKIPPED[INFO] Flink : Examples : Streaming ....................... SKIPPED[INFO] Flink : Examples : Table ........................... SKIPPED[INFO] Flink : Examples : Build Helper : .................. SKIPPED[INFO] Flink : Examples : Build Helper : Streaming Twitter  SKIPPED[INFO] Flink : Examples : Build Helper : Streaming State machine SKIPPED[INFO] Flink : Examples : Build Helper : Streaming Google PubSub SKIPPED[INFO] Flink : Container .................................. SKIPPED[INFO] Flink : Queryable state : Runtime .................. SKIPPED[INFO] Flink : Kubernetes ................................. SKIPPED[INFO] Flink : Yarn ....................................... SKIPPED[INFO] Flink : Libraries : Gelly .......................... SKIPPED[INFO] Flink : Libraries : Gelly scala .................... SKIPPED[INFO] Flink : Libraries : Gelly Examples ................. SKIPPED[INFO] Flink : External resources : ....................... SKIPPED[INFO] Flink : External resources : GPU ................... SKIPPED[INFO] Flink : Metrics : Dropwizard ....................... SKIPPED[INFO] Flink : Metrics : Graphite ......................... SKIPPED[INFO] Flink : Metrics : InfluxDB ......................... SKIPPED[INFO] Flink : Metrics : Prometheus ....................... SKIPPED[INFO] Flink : Metrics : StatsD ........................... SKIPPED[INFO] Flink : Metrics : Datadog .......................... SKIPPED[INFO] Flink : Metrics : Slf4j ............................ SKIPPED[INFO] Flink : Libraries : CEP Scala ...................... SKIPPED[INFO] Flink : Table : Uber ............................... SKIPPED[INFO] Flink : Python ..................................... SKIPPED[INFO] Flink : Table : SQL Client ......................... SKIPPED[INFO] Flink : Libraries : State processor API ............ SKIPPED[INFO] Flink : Scala shell ................................ SKIPPED[INFO] Flink : Dist ....................................... SKIPPED[INFO] Flink : Yarn Tests ................................. SKIPPED[INFO] Flink : E2E Tests : ................................ SKIPPED[INFO] Flink : E2E Tests : CLI ............................ SKIPPED[INFO] Flink : E2E Tests : Parent Child classloading program SKIPPED[INFO] Flink : E2E Tests : Parent Child classloading lib-package SKIPPED[INFO] Flink : E2E Tests : Dataset allround ............... SKIPPED[INFO] Flink : E2E Tests : Dataset Fine-grained recovery .. SKIPPED[INFO] Flink : E2E Tests : Datastream allround ............ SKIPPED[INFO] Flink : E2E Tests : Batch SQL ...................... SKIPPED[INFO] Flink : E2E Tests : Stream SQL ..................... SKIPPED[INFO] Flink : E2E Tests : Distributed cache via blob ..... SKIPPED[INFO] Flink : E2E Tests : High parallelism iterations .... SKIPPED[INFO] Flink : E2E Tests : Stream stateful job upgrade .... SKIPPED[INFO] Flink : E2E Tests : Queryable state ................ SKIPPED[INFO] Flink : E2E Tests : Local recovery and allocation .. SKIPPED[INFO] Flink : E2E Tests : Elasticsearch 5 ................ SKIPPED[INFO] Flink : E2E Tests : Elasticsearch 6 ................ SKIPPED[INFO] Flink : Quickstart : ............................... SKIPPED[INFO] Flink : Quickstart : Java .......................... SKIPPED[INFO] Flink : Quickstart : Scala ......................... SKIPPED[INFO] Flink : E2E Tests : Quickstart ..................... SKIPPED[INFO] Flink : E2E Tests : Confluent schema registry ...... SKIPPED[INFO] Flink : E2E Tests : Stream state TTL ............... SKIPPED[INFO] Flink : E2E Tests : SQL client ..................... SKIPPED[INFO] Flink : E2E Tests : File sink ...................... SKIPPED[INFO] Flink : E2E Tests : State evolution ................ SKIPPED[INFO] Flink : E2E Tests : RocksDB state memory control ... SKIPPED[INFO] Flink : E2E Tests : Common ......................... SKIPPED[INFO] Flink : E2E Tests : Metrics availability ........... SKIPPED[INFO] Flink : E2E Tests : Metrics reporter prometheus .... SKIPPED[INFO] Flink : E2E Tests : Heavy deployment ............... SKIPPED[INFO] Flink : E2E Tests : Connectors : Google PubSub ..... SKIPPED[INFO] Flink : E2E Tests : Streaming Kafka base ........... SKIPPED[INFO] Flink : E2E Tests : Streaming Kafka ................ SKIPPED[INFO] Flink : E2E Tests : Plugins : ...................... SKIPPED[INFO] Flink : E2E Tests : Plugins : Dummy fs ............. SKIPPED[INFO] Flink : E2E Tests : Plugins : Another dummy fs ..... SKIPPED[INFO] Flink : E2E Tests : TPCH ........................... SKIPPED[INFO] Flink : E2E Tests : Streaming Kinesis .............. SKIPPED[INFO] Flink : E2E Tests : Elasticsearch 7 ................ SKIPPED[INFO] Flink : E2E Tests : Common Kafka ................... SKIPPED[INFO] Flink : E2E Tests : TPCDS .......................... SKIPPED[INFO] Flink : E2E Tests : Netty shuffle memory control ... SKIPPED[INFO] Flink : E2E Tests : Python ......................... SKIPPED[INFO] Flink : E2E Tests : HBase .......................... SKIPPED[INFO] Flink : E2E Tests : AWS Glue Schema Registry ....... SKIPPED[INFO] Flink : E2E Tests : Pulsar ......................... SKIPPED[INFO] Flink : State backends : Heap spillable ............ SKIPPED[INFO] Flink : Contrib : .................................. SKIPPED[INFO] Flink : Contrib : Connectors : Wikiedits ........... SKIPPED[INFO] Flink : FileSystems : Tests ........................ SKIPPED[INFO] Flink : Docs ....................................... SKIPPED[INFO] Flink : Walkthrough : .............................. SKIPPED[INFO] Flink : Walkthrough : Common ....................... SKIPPED[INFO] Flink : Walkthrough : Datastream Java .............. SKIPPED[INFO] Flink : Walkthrough : Datastream Scala ............. SKIPPED[INFO] Flink : Tools : CI : Java .......................... SKIPPED[INFO] ------------------------------------------------------------------------[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time:  09:03 min[INFO] Finished at: 2022-01-18T10:24:24+08:00[INFO] ------------------------------------------------------------------------[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.9.1:npm (npm run build) on project flink-runtime-web_2.11: Failed to run task: 'npm run build --https-proxy=http://proxyuser:***@192.168.1.216:808 --proxy=http://proxyuser:***@192.168.1.216:808' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 139 (Exit value: 139) -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException[ERROR] [ERROR] After correcting the problems, you can resume the build with the command[ERROR]   mvn <args> -rf :flink-runtime-web_2.11npm 配置[root@hadoop47 flink-release-1.14.0]# npm config ls -l; cli configslong = truemetrics-registry = "https://registry.npm.taobao.org/"scope = ""user-agent = "npm/6.13.4 node/v12.14.1 linux arm64"; userconfig /root/.npmrcproxy = "http://192.168.1.216:808/"registry = "https://registry.npm.taobao.org/"unsafe-perm = true; default valuesaccess = nullallow-same-version = falsealso = nullalways-auth = falseaudit = trueaudit-level = "low"auth-type = "legacy"before = nullbin-links = truebrowser = nullca = nullcache = "/root/.npm"cache-lock-retries = 10cache-lock-stale = 60000cache-lock-wait = 10000cache-max = nullcache-min = 10cafile = undefinedcert = nullcidr = nullcolor = truecommit-hooks = truedepth = nulldescription = truedev = falsedry-run = falseeditor = "vi"engine-strict = falsefetch-retries = 2fetch-retry-factor = 10fetch-retry-maxtimeout = 60000fetch-retry-mintimeout = 10000force = falseformat-package-lock = truefund = truegit = "git"git-tag-version = trueglobal = falseglobal-style = falseglobalconfig = "/opt/tools/installed/node-v12.14.1-linux-arm64/etc/npmrc"globalignorefile = "/opt/tools/installed/node-v12.14.1-linux-arm64/etc/npmignore"group = 0ham-it-up = falseheading = "npm"https-proxy = nullif-present = falseignore-prepublish = falseignore-scripts = falseinit-author-email = ""init-author-name = ""init-author-url = ""init-license = "ISC"init-module = "/root/.npm-init.js"init-version = "1.0.0"json = falsekey = nulllegacy-bundling = falselink = falselocal-address = undefinedloglevel = "notice"logs-max = 10; long = false (overridden)maxsockets = 50message = "%s"; metrics-registry = null (overridden)node-options = nullnode-version = "12.14.1"noproxy = nulloffline = falseonload-script = nullonly = nulloptional = trueotp = nullpackage-lock = truepackage-lock-only = falseparseable = falseprefer-offline = falseprefer-online = falseprefix = "/opt/tools/installed/node-v12.14.1-linux-arm64"preid = ""production = falseprogress = true; proxy = null (overridden)read-only = falserebuild-bundle = true; registry = "https://registry.npmjs.org/" (overridden)rollback = truesave = truesave-bundle = falsesave-dev = falsesave-exact = falsesave-optional = falsesave-prefix = "^"save-prod = falsescope = ""script-shell = nullscripts-prepend-node-path = "warn-only"searchexclude = nullsearchlimit = 20searchopts = ""searchstaleness = 900send-metrics = falseshell = "/bin/bash"shrinkwrap = truesign-git-commit = falsesign-git-tag = falsesso-poll-frequency = 500sso-type = "oauth"strict-ssl = truetag = "latest"tag-version-prefix = "v"timing = falsetmp = "/tmp"umask = 18unicode = true; unsafe-perm = false (overridden)update-notifier = trueusage = falseuser = 1000; user-agent = "npm/{npm-version} node/{node-version} {platform} {arch} {ci}" (overridden)userconfig = "/root/.npmrc"version = falseversions = falseviewer = "man"
  • [赋能学习] 华为FusionInsight MRS实战 - 使用Flink SQL-Client连接hive
    # 华为FusionInsight MRS实战 - 使用Flink SQL-Client连接hive ## 介绍 在之前的文章我们了解到如何使用华为Flink Server界面通过Flink SQL将数据写入hive。详细内容请参考如下连接。 [《华为FusionInsight MRS实战 - FlinkSQL从kafka写入hive》](https://bbs.huaweicloud.com/forum/thread-173950-1-1.html) 本文介绍如何使用Flink SQL-Client方式连接hive,并写入数据 ## 前提条件 首先需要了解以下三点内容。 1. 如何配置Flink客户端。 参考:[《华为FusionInsight MRS Flink客户端配置》](https://bbs.huaweicloud.com/forum/thread-175741-1-1.html) 2. 如何配置Flink SQL Client。参考:[《华为FusionInsight MRS Flink SQL-Client客户端配置》](https://bbs.huaweicloud.com/forum/thread-176103-1-1.html) 3. 如何使用Flink SQL Client。参考:[《华为FusionInsight MRS实战 - Flink增强特性之可视化开发平台FlinkSever开发学习》](https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=161992) ## 操作步骤 - 因为将写入hive表,需要开启flink的checkpoint功能,需要手动在客户端配置文件`/opt/92_client/hadoopclient/Flink/flink/conf/flink-conf.yaml`添加如下内容 ``` execution.checkpointing.interval: 15000 state.backend: filesystem state.checkpoints.dir: hdfs:///flink/checkpoints ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171617y4tipaigstnm40ed.png) - 使用命令启动flink session `./bin/yarn-session.sh -t conf/` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/1716407ygz4jqwrht0e2yr.png) - 使用命令登录flink sql client客户端 `./sql-client.sh embedded -d ./../conf/sql-client-defaults.yaml` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171703rb0g7ubwmktrijim.png) - 创建hive目的表 ``` use catalog myhive; SET table.sql-dialect=hive; CREATE TABLE IF NOT EXISTS hive_dialect_tbl ( `id` int , `name` string , `age` int ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171725huxpkl8tox1vr5rp.png) - 创建数据源表 ``` SET table.sql-dialect=default; CREATE TABLE datagen ( `id` int , `name` string , `age` int ) WITH ( 'connector' = 'datagen', 'rows-per-second'='1' ); ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171748mqgnv8bmklpxwtj6.png) - 在sql client创建数据写入 `INSERT INTO hive_dialect_tbl SELECT * FROM datagen;` - sql client端查看结果 ``` set execution.result-mode=tableau; select * from hive_dialect_tbl; ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/1718141uwhoepoiaiqwjlf.png) - hive端查看数据 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/171833rwiosqejcgoo8udt.png)
  • [问题求助] 创建Flink集群时执行yarn-session.sh命令失败
    执行命令:bin/yarn-session.sh -n 3 -jm 1024 -tm 1024报错图片:
  • [赋能学习] 华为FusionInsight MRS实战 - Flink CDC特性学习
    # 华为FusionInsight MRS实战 - Flink CDC特性学习 ## Flink cdc介绍 Flink CDC连接器是Apache Flink新版本特性,是数据源连接器,使用更改数据捕获(CDC)从不同数据库接收更改。Flink CDC连接器集成了Debezium作为引擎来捕获数据更改。所以它可以充分利用Debezium的能力。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/112535tjbh9lentmbac92x.png) 华为FusionInsight MRS 812版本,Flink版本1.12为例,介绍Flink CDC对应能力 Flink CDC与Flink版本对应关系 |Flink CDC Connector Version|Flink Version| | ---- | ---- | |1.0.0|1.11.*| |1.1.0|1.11.*| |1.2.0|1.12.*| |1.3.0|1.12.*| |1.4.0|1.13.*| |2.0.*|1.13.*| |2.1.*|1.13.*| 选择使用flink cdc版本1.2.0 Flink CDC支持数据源 |Database|Version| | ---- | ---- | |MySQL|Database: 5.7, 8.0.xJDBC Driver: 8.0.16| |PostgreSQL|Database: 9.6, 10, 11, 12JDBC Driver: 42.2.12 | 可支持的格式 |Format |Supported Connector |Flink Version| | ---- | ---- | ---- | |Changelog Json|Apache Kafka|1.11+| ## Flink cdc 方案优势 同之前的实时同步方案相比,使用flink cdc能够减少cdl工具和kafka的维护成本,链路更短,延迟更低,flink提供了exactly once语义,可以从指定position读取,并且去掉了kafka,减少了消息的存储成本。 ## 场景说明 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/112609rvm99dkn6crfneyc.png) 1. 使用Flink cdc的能力直接从数据源MySQL中获取数据内容并使用Flink SQL处理发送至数据下游 2. 使用Kafka进行数据接收,使用Changelog格式 ## 样例数据简介 生产库MySQL原始数据: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/112632ppbjzz0cst1krstz.png) ## 前提条件 该特性目前只支持在Flink Client客户端使用,所以首先需要了解以下三点内容。 1. 如何配置Flink客户端。 参考:[《华为FusionInsight MRS Flink客户端配置》](https://bbs.huaweicloud.com/forum/thread-175741-1-1.html) 2. 如何配置Flink SQL Client。参考:[《华为FusionInsight MRS Flink SQL-Client客户端配置》](https://bbs.huaweicloud.com/forum/thread-176103-1-1.html) 3. 如何使用Flink SQL Client。参考:[《华为FusionInsight MRS实战 - Flink增强特性之可视化开发平台FlinkSever开发学习》](https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=161992) ## 操作步骤 - 准备驱动包 https://github.com/ververica/flink-cdc-connectors/releases 根据上述对应版本,选择flink cdc版本为1.2.0 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/112838lns4q3awzysrrjoh.png) 下载对应的jar包并放置到flink客户端lib目录下,比如 /opt/92_client/hadoopclient/Flink/flink/lib ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/113048lx0qy8nwmdoowalc.png) - 使用命令启动flink session `./bin/yarn-session.sh -t conf/` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/113113igl7bfjymb6julfw.png) - 使用命令登录flink sql client客户端 `./sql-client.sh embedded -d ./../conf/sql-client-defaults.yaml` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/113136hvyiurtu9r9wmthc.png) - 在sql client创建数据源表 ``` CREATE TABLE MYSQL_MATERIAL_INFO( uid INT, uname VARCHAR(32), age INT, sex VARCHAR(30), mostlike VARCHAR(30), lastview VARCHAR(30), totalcost INT, localts as LOCALTIMESTAMP ) WITH( 'connector' = 'mysql-cdc', 'hostname' = '172.16.2.118', 'port' = '3306', 'username' = 'root', 'password' = 'Huawei@123', 'database-name' = 'hudi', 'table-name' = 'hudisource' ); ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/113158lhwky3cqjso4bgzd.png) - 在sql client创建kafka目的表 ``` CREATE TABLE huditableout( uid INT, uname VARCHAR(32), age INT, sex VARCHAR(30), mostlike VARCHAR(30), lastview VARCHAR(30), totalcost INT, localts TIMESTAMP ) WITH( 'connector' = 'kafka', 'topic' = 'changelog_json_format_test', 'properties.bootstrap.servers' = '172.16.9.116:21005', 'properties.group.id' = 'example', 'scan.startup.mode' = 'latest-offset', 'format' = 'changelog-json' ); ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/113221uc2xlkjhkztaernm.png) - 在sql client创建数据写入 ``` insert into huditableout select uid, uname, age, sex, mostlike, lastview, totalcost, localts from MYSQL_MATERIAL_INFO; ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/113246b8juakcy8etsxaov.png) - 在mysql源库中测试数据的增删改查,然后使用kafka消费查看changelog-json格式的结果 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/1133087o4i91nfn4zpguje.png)
  • [赋能学习] 华为FusionInsight MRS Flink SQL-Client客户端配置
    1. 根据产品文档安装Flink客户端; 2. 将sql-client-defaults.yaml(见附件)放入/opt/client/Flink/flink/conf中 3. 将jaas.conf 放入/opt/client/Flink/flink/conf中 ``` Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=false useTicketCache=true debug=false; }; ``` 4. 添加sql-client.sh中添加在JVM_ARGS参数: JVM_ARGS="-Djava.security.auth.login.config=/opt/client/Flink/flink/conf/jaas.conf $JVM_ARGS" ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/30/113725klrdoum8tvtemglh.png)
  • [技术干货] GES与Flink的对接
    Flink作为新一代流批统一的计算引擎,它可以从不同的第三方存储引擎中读取数据,进行处理,然后再写出到另外的存储引擎中。GES提供了与Flink的对接工具GES-Flink-Connector。GES-Flink-Connector是一款自定义的离线/实时数据同步Flink连接器(connector),用于外部数据源与GES图数据库的数据同步。如果你想了解GES-Flink-Connector的功能和使用,可以参考博文:图数据库的易用性—GES与Flink的对接
  • [赋能学习] 华为FusionInsight MRS Flink客户端配置
    # 华为FusionInsight MRS Flink客户端配置 ## 场景说明 使用华为FusionInsight MRS的Flink组件进行开发工作时,需要了解如何配置Flink客户端。本文将介绍如何进行该配置 ## 前提条件 已安装FusionInsight MRS客户端,比如在/opt/hadoopclient路径 ## 操作步骤 - 下载用户认证文件并上传至客户端/opt/hadoopclient/Flink/flink/conf ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/28/172158yqjasfckgpcn8zto.png) 并配置/opt/hadoopclient/Flink/flink/conf/flink-conf.yaml文件中的认证内容跟上述下载信息匹配 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/28/172222qurcedofkkrdzuxe.png) 注意:配置的值和冒号之间要有一个空格 - 生成cookie密钥 先加载环境变量: source /opt/hadoopclient/bigdata_env 完成认证: kinit poc 登录客户端路径: /opt/hadoopclient/Flink/flink/bin 执行: sh generate_keystore.sh 密码可填:123456 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/28/172248nsqlyhzuckpwecdt.png) 上述该步骤会在/opt/hadoopclient/Flink/flink/conf路径中生成配置文件flink.keystore以及flink.truststore - 配置/opt/hadoopclient/Flink/flink/conf/flink-conf.yaml文件 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/28/172310rzzbd5ff0i7quytr.png) 注意:配置flink.keystore以及flink.truststore文件的路径要是相对路径,并且配置的值和冒号之间要有一个空格 - 使用如下命令启动flink session ``` cd /opt/hadoopclient/Flink/flink ./bin/yarn-session.sh -t conf/ ``` ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/28/172331suwrklktrf3vkmdz.png) ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/28/1723524vllqamj7lsrx6k6.png)
  • [业务动态] 关于《使用DLI Flink SQL进行电商实时业务数据分析》微认证正式上线的预通知
    尊敬的微认证客户:您好!为帮助您深入了解华为云产品,探索新的技术场景,我们非常高兴地与您分享一个好消息:由华为资深研发团队精心打磨,潜心研发的新微认证《使用DLI Flink SQL进行电商实时业务数据分析》将于2021年12月31日正式上线!届时请进入华为云培训中心-微认证-大数据 查看产品详情,体验使用,我们非常期待您的宝贵建议。以下为该微认证详情,您可提前了解:产品名称: 《使用DLI Flink SQL进行电商实时业务数据分析开发》适合人群: 向大数据转型的运维软件开发人员和对大数据应用开发感兴趣的社会大众;培训方案: 基于电商实时业务应用场景,完成Flink对实时数据采集及计算的应用开发实践;技术能力: 实时数据采集及计算引擎Flink的应用开发流程;认证价值: 实时数据采集及计算引擎Flink的应用开发,通过实践提升大数据应用开发能力。届时我们还将开展相关微认证上新活动,详情请关注华为云培训中心论坛-热门活动 相关通知。发布日期:2021年12月28日
  • [问题求助] 根据【Flink 1.9.1 移植指南】编译flink,存在不存在的URL,导致编译错误,有什么办法解决?
    【功能模块】帮助文档【操作步骤&问题现象】[ERROR] Cannot download "https://github.com/sass/node-sass/releases/download/v4.11.0/linux-arm64-64_binding.node":【截图信息】
  • [行业动态] Flink Hudi 0.10.0 发布,多项重要更新,稳定性大幅提升
    前言随着云数仓技术的不断成熟,数据湖俨然已成为当下最热门的技术之一,而 Apache Hudi 是当下最具竞争力的数据湖格式之一:拥有最活跃的开源社区之一,周活跃 PR 一直维持在 50+ 水平;拥有最活跃的国内用户群之一,目前的 Apache Hudi 钉钉群用户已超过 2200+,国内各大厂商都已经布局 Apache Hudi 生态。Apache Hudi 的活跃度得益于其出色的 file format 设计和丰富的事物语义支持:类 LSM 的 file format 布局很好的适配了近实时更新场景,解决了超大数据集更新的痛点;Hudi 的事物层语义在目前的湖存储中是极其成熟和丰富的,基本所有的数据治理都可以自动化完成:compaction、rollback、cleaning、clustering。Flink On HudiApache Hudi 的 table format 对流计算友好的特性使得 Flink On Hudi 成为 Apache Hudi 项目最值得探索和挖掘的方向之一,Flink 不仅为 Hudi 解锁了超大数据流的实时更新能力、更添加了流式消费和计算的能力,让端到端近实时 ETL 得以在低成本的文件存储上轻松实现。Flink On Hudi 项目在 2020 年 11 月立项,至今已迭代了三个版本,从第一个版本开始人气和活跃度就一直高涨。5 月份组建的 Apache Hudi 钉钉群截止目前半年的时间,已经有超过 2200+ 用户,并且活跃度一直排在 Flink 用户群的前列。Flink On Hudi 已成为部署 Apache Hudi 项目的首选方案,国内主要云厂商:阿里云、华为云、腾讯云,国外的 AWS 都已集成 Flink On Hudi;国内的大型互联网公司:头条、快手、B站 以及传统企业:顺丰、海康等均有 Flink On Hudi 的生产实践,具钉钉群的跟踪回访等不完全统计,至少超过 50+ 国内公司在生产上使用 Flink On Hudi,Uber 公司更将 Flink On Hudi 作为 2022 年的重点方向在推进 !Flink On Hudi 的开发者生态也非常活跃,目前国内有阿里云、华为云、头条、B站的同学持续贡献,Uber 公司和 AWS 更专门投入人力来对接 Flink On Hudi。版本 Highlights0.10.0 版本经过社区用户的千锤百炼,贡献了多项重要的 fix,更有核心读写能力的大幅增强,解锁了多个新场景,Flink On Hudi 侧的更新重点梳理如下:Bug 修复修复对象存储上极端 case 流读数据丢失的问题 [HUDI-2548];修复全量+增量同步偶发的数据重复 [HUDI-2686];修复 changelog 模式下无法正确处理 DELETE 消息 [HUDI-2798];修复在线压缩的内存泄漏问题 [HUDI-2715]。新特性支持增量读取;支持 batch 更新;新增 Append 模式写入,同时支持小文件合并;支持 metadata table。功能增强写入性能大幅提升:优化写入内存、优化了小文件策略(更加均衡,无碎片文件)、优化了 write task 和 coordinator 的交互;流读语义增强:新增参数 earliest,提升从最早消费性能、支持参数跳过压缩读取,解决读取重复问题;在线压缩策略增强:新增 eager failover + rollback,压缩顺序改为从最早开始;优化事件顺序语义:支持处理序,支持事件序自动推导。下面挑一些重点内容为大家详细介绍:小文件优化Flink On Hudi 写入流程大致分为以下几个组件:row data to hoodie:负责将 table 的数据结构转成 HoodieRecord;bucket assigner:负责新的文件 bucket (file group) 分配;write task:负责将数据写入文件存储;coordinator:负责写 trasaction 的发起和 commit;cleaner:负责数据清理。其中的 bucket assigner 负责了文件 file group 的分配,也是小文件分配策略的核心组件。0.10.0 版本的每个 bucket assign task 持有一个 bucket assigner,每个 bucket assigner 独立管理自己的一组 file group 分组:在写入 INSERT 数据的时候,bucket assigner 会扫描文件视图,查看当前管理的 file group 中哪些属于小文件范畴,如果 file group 被判定为小文件,则会继续追加写入。比如上图中 task-1 会继续往 FG-1、FG-2 中追加 80MB 和 60MB 的数据。为了避免过度的写放大,当可写入的 buffer 过小时会忽略,比如上图中 FG-3、FG-4、FG-5 虽然是小文件,但是不会往文件中追加写。task-2 会新开一个 file group 写入。全局文件视图0.10.0 版本将原本 write task 端的文件视图统一挪到 JobManager,JobManager 启动之后会使用 Javaline 本地启动一个 web server,提供全局文件视图的访问代理。Write task 通过发送 http 请求和 web server 交互,拿到当前写入的 file group 视图。Web server 避免了重复的文件系统视图加载,极大的节省了内存开销。流读能力增强0.10.0 版本新增了从最早消费数据的参数,通过指定 read.start-commit 为 earliest 即可流读全量 + 增量数据,值得一提的是,当从 earliest 开始消费时,第一次的 file split 抓取会走直接扫描文件视图的方式,在开启 metadata table 功能后,文件的扫描效率会大幅度提升;之后的增量读取部分会扫描增量的 metadata,以便快速轻量地获取增量的文件讯息。新增处理顺序Apache Hudi 的消息合并大体分为两块:增量数据内部合并、历史数据和增量数据合并。消息之间合并通过 write.precombine.field 字段来判断版本新旧,如下图中标注蓝色方块的消息为合并后被选中的消息。0.10.0 版本可以不指定 write.precombine.field 字段,此时使用处理顺序:即后来的消息比较新,对应上图紫色部分被选中的消息。Metadata TableMetadata table 是 0.7.0 Hudi 引入的功能,目的是在查询端减少 DFS 的访问,类似于文件 listings 和 partitions 信息直接通过 metadata table 查询获取。Metadata 在 0.10.0 版本得到大幅加强,Flink 端也支持了 该功能。新版的 metadata table 为同步更新模型,当完成一次成功的数据写入之后,coordinator 会先同步抽取文件列表、partiiton 列表等信息写入 metadata table 然后再写 event log 到 timeline (即 metadata 文件)。Metadata table 的基本文件格式为 avro log,avro log 中的文件编码区别于正常的 MOR data log 文件,是由高效的 HFile data block 构成,这样做的好处是自持更高效率的 kv 查找。同时 metadata table 的 avro log 支持直接压缩成 HFile 文件,进一步优化查询效率。总结和展望在短短的半年时间,Flink On Hudi 至今已积攒了数量庞大的用户群体。积极的用户反馈和丰富的用户场景不断打磨 Flink On Hudi 的易用性和成熟度,使得 Flink On Hudi 项目以非常高效的形式快速迭代。通过和头部公司如头条、B 站等共建的形式,Flink On Hudi 形成了非常良性的开发者用户群。Flink On Hudi 是 Apache Hudi 社区接下来两个大版本主要的发力方向,在未来规划中,主要有三点:完善端到端 streaming ETL 场景 支持原生的 change log、支持维表查询、支持更轻量的去重场景;Streaming 查询优化 record-level 索引,二级索引,独立的文件索引;Batch 查询优化 z-ordering、data skipping。文章转载自Apache Flink公众号  https://mp.weixin.qq.com/s/q_yqa4jTmEHHoItp1V5Vgg免责声明:转载文章版权归原作者所有。如涉及作品内容、版权等问题,请及时联系文章编辑!
总条数:107 到第
上滑加载中