华为云用户手册

  • 2023-06-15 镜像版本 镜像说明 更新内容 Huawei Cloud EulerOS 2.0 镜像名称: Huawei Cloud EulerOS 2.0 标准版 64位 升级系统内核版本,修复安全漏洞 删除kernel.unknown_nmi_panic内核参数 更新一键密码插件版本 内核版本: 5.10.0-60.18.0.50.r865_35.hce2.x86_64 发布区域:所有区域 Huawei Cloud EulerOS 2.0 镜像名称: Huawei Cloud EulerOS 2.0等保2.0三级版 64位 升级系统内核版本,修复安全漏洞 删除kernel.unknown_nmi_panic内核参数 更新一键密码插件版本 内核版本:5.10.0-60.18.0.50.r865_35.hce2.x86_64 发布区域:所有区域
  • 2024-05-31 镜像版本 镜像说明 更新内容 Debian 镜像名称: Debian 11.1.0 64bit Debian 10.0.0 64 bit 升级系统内核版本,修复安全漏洞 更新一键密码插件、 CES 等插件版本 内核版本: Debian 11.1.0:5.10.0-28-amd64 Debian 10.0.0:4.19.0-26-amd64 发布区域:所有区域 Rocky Linux 镜像名称: Rocky Linux 9.0 64bit Rocky Linux 8.5 64bit Rocky Linux 8.4 64bit 升级系统内核版本,修复安全漏洞 更新一键密码插件、CES等插件版本 内核版本: Rocky 9.0:5.14.0-362.24.1.el9_3.x86_64 Rocky 8.5:4.18.0-513.18.1.el8_9.x86_64 Rocky 8.4:4.18.0-513.18.1.el8_9.x86_64 发布区域:所有区域 AlmaLinux 镜像名称: AlmaLinux 9.0 64bit AlmaLinux 8.4 64bit AlmaLinux 8.3 64bit 升级系统内核版本,修复安全漏洞 更新一键密码插件、CES等插件版本 内核版本: AlmaLinux 9.0:5.14.0-362.18.1.el9_3.x86_64 AlmaLinux 8.4:4.18.0-513.18.1.el8_9.x86_64 AlmaLinux 8.3:4.18.0-513.18.1.el8_9.x86_64 发布区域:所有区域 CentOS Stream 镜像名称: CentOS Stream 8 64bit CentOS Stream 9 64bit 升级系统内核版本,修复安全漏洞 更新一键密码插件、CES等插件版本 内核版本: CentOS Stream 8 64bit: 4.18.0-544.el8.x86_64 CentOS Stream 9 64bit:5.14.0-437.el9.x86_64 发布区域:所有区域
  • 2024-04-18 镜像版本 镜像说明 更新内容 CentOS 镜像名称: CentOS 7.4 64bit CentOS 7.5 64bit CentOS 7.6 64bit CentOS 7.7 64bit CentOS 7.8 64bit CentOS 7.9 64bit 升级系统内核版本,修复安全漏洞 更新一键密码插件、CES等插件版本 内核版本: CentOS 7: 3.10.0-1160.108.1.el7.x86_64 发布区域:所有区域 Ubuntu 镜像名称: Ubuntu 20.04 server 64bit Ubuntu 22.04 server 64bit 升级系统内核版本,修复安全漏洞 更新一键密码插件、CES等插件版本 内核版本: Ubuntu 20.04:5.4.0-170-generic Ubuntu 22.04:5.15.0-92-generic 发布区域:所有区域 Huawei Cloud EulerOS 2.0 镜像名称: Huawei Cloud EulerOS 2.0 标准版 64位 升级系统内核版本,修复安全漏洞 更新一键密码插件、CES等插件版本 内核版本: 5.10.0-60.18.0.50.r1083_58.hce2.x86_64 发布区域:所有区域 Huawei Cloud EulerOS 2.0 镜像名称: Huawei Cloud EulerOS 2.0等保2.0三级版 64位 升级系统内核版本,修复安全漏洞 更新一键密码插件、CES等插件版本 内核版本: 5.10.0-60.18.0.50.r1083_58.hce2.x86_64 发布区域:所有区域
  • 操作场景 HBase把Thrift结合起来可以向外部应用提供HBase服务。在HBase服务安装时可选部署ThriftServer实例,ThriftServer系统可访问HBase的用户,拥有HBase所有NameSpace和表的读、写、执行、创建和管理的权限。访问ThriftServer服务同样需要进行Kerberos认证。HBase实现了两套Thrift Server服务,此处“hbase-thrift-example”为ThriftServer实例服务的调用实现。
  • 样例代码 代码认证 以下代码在“hbase-thrift-example”样例工程的“com.huawei.bigdata.hbase.examples”包的“TestMain”类中。 private static void init() throws IOException { // Default load from conf directory conf = HBaseConfiguration.create(); String userdir = TestMain.class.getClassLoader().getResource("conf").getPath() + File.separator;[1] //In Linux environment //String userdir = System.getProperty("user.dir") + File.separator + "conf" + File.separator; conf.addResource(new Path(userdir + "core-site.xml"), false); conf.addResource(new Path(userdir + "hdfs-site.xml"), false); conf.addResource(new Path(userdir + "hbase-site.xml"), false); } [1]userdir获取的是编译后资源路径下conf目录的路径。初始化配置用到的core-site.xml、hdfs-site.xml、hbase-site.xml文件和用于安全认证的用户凭证文件,需要放置到"src/main/resources/conf"的目录下。 安全登录 请根据实际情况,修改“userName”为实际用户名,例如“developuser”。 private static void login() throws IOException { if (User.isHBaseSecurityEnabled(conf)) { userName = " developuser "; //In Windows environment String userdir = TestMain.class.getClassLoader().getResource("conf").getPath() + File.separator; //In Linux environment //String userdir = System.getProperty("user.dir") + File.separator + "conf" + File.separator; userKeytabFile = userdir + "user.keytab"; krb5File = userdir + "krb5.conf"; /* * if need to connect zk, please provide jaas info about zk. of course, * you can do it as below: * System.setProperty("java.security.auth.login.config", confDirPath + * "jaas.conf"); but the demo can help you more : Note: if this process * will connect more than one zk cluster, the demo may be not proper. you * can contact us for more help */ LoginUtil.setJaasConf(ZOOKEEPER_DEFAULT_ LOG IN_CONTEXT_NAME, userName, userKeytabFile); LoginUtil.login(userName, userKeytabFile, krb5File, conf); } } 连接ThriftServer实例 try { test = new ThriftSample(); test.test("10.120.16.170", THRIFT_PORT, conf);[2] } catch (TException | IOException e) { LOG.error("Test thrift error", e); } [2]test.test()传入参数为待访问的ThriftServer实例所在节点ip地址,需根据实际运行集群情况进行修改,且该节点ip需要配置到运行样例代码的本机hosts文件中。 “THRIFT_PORT”为ThriftServer实例的配置参数"hbase.regionserver.thrift.port"对应的值。
  • 开发思路 数据准备。 创建三张表,雇员信息表“employees_info”、雇员联络信息表“employees_contact”、雇员信息扩展表“employees_info_extended”。 雇员信息表“employees_info”的字段为雇员编号、姓名、支付薪水币种、薪水金额、缴税税种、工作地、入职时间,其中支付薪水币种“R”代表人民币,“D”代表美元。 雇员联络信息表“employees_contact”的字段为雇员编号、电话号码、e-mail。 雇员信息扩展表“employees_info_extended”的字段为雇员编号、姓名、电话号码、e-mail、支付薪水币种、薪水金额、缴税税种、工作地,分区字段为入职时间。 创建表代码实现请见创建Hive表。 加载雇员信息数据到雇员信息表“employees_info”中。 加载数据代码实现请见加载数据到Hive表中。 雇员信息数据如表1所示: 表1 雇员信息数据 编号 姓名 支付薪水币种 薪水金额 缴税税种 工作地 入职时间 1 Wang R 8000.01 personal income tax&0.05 Country1:City1 2014 3 Tom D 12000.02 personal income tax&0.09 Country2:City2 2014 4 Jack D 24000.03 personal income tax&0.09 Country3:City3 2014 6 Linda D 36000.04 personal income tax&0.09 Country4:City4 2014 8 Zhang R 9000.05 personal income tax&0.05 Country5:City5 2014 加载雇员联络信息数据到雇员联络信息表“employees_contact”中。 雇员联络信息数据如表2所示: 表2 雇员联络信息数据 编号 电话号码 e-mail 1 135 XXXX XXXX xxxx@xx.com 3 159 XXXX XXXX xxxxx@xx.com.cn 4 186 XXXX XXXX xxxx@xx.org 6 189 XXXX XXXX xxxx@xxx.cn 8 134 XXXX XXXX xxxx@xxxx.cn 数据分析。 数据分析代码实现,请见查询Hive表数据。 查看薪水支付币种为美元的雇员联系方式。 查询入职时间为2014年的雇员编号、姓名等字段,并将查询结果加载进表employees_info_extended中的入职时间为2014的分区中。 统计表employees_info中有多少条记录。 查询使用以“cn”结尾的邮箱的员工信息。 提交数据分析任务,统计表employees_info中有多少条记录。实现请参见Hive JDBC访问样例程序。
  • 使用Python提交Flink普通作业 获取样例工程“flink-examples/pyflink-example/pyflink-kafka”中的“pyflink-kafka.py”和“insertData2kafka.sql”。 参考准备本地应用开发环境将准备好的Python虚拟环境打包,获取“venv.zip”文件。 zip -q -r venv.zip venv/ 以root用户登录主管理节点,将1和2获取的“venv.zip”、“pyflink-kafka.py”和“insertData2kafka.sql”文件上传至客户端环境。 per-job模式:将上述文件上传到“客户端安装目录/Flink/flink”。 yarn-application模式:将上述文件和“flink-connector-kafka-实际版本号.jar”包上传到“客户端安装目录/Flink/flink/yarnship”。 修改“pyflink-kafka.py”中的“specific_jars”路径。 per-job模式:修改为SQL文件的实际路径。如:file:///客户端安装目录/Flink/flink/lib/flink-connector-kafka-实际版本号.jar yarn-application模式:修改为:file://"+os.getcwd()+"/../../../../yarnship/flink-connector-kafka-实际版本号.jar 修改“pyflink-kafka.py”中的“file_path”路径。 per-job模式:修改为sql文件的实际路径。如:客户端安装目录/Flink/flink/insertData2kafka.sql yarn-application模式:修改为os.getcwd() + "/../../../../yarnship/insertData2kafka.sql" 执行以下命令指定运行环境。 export PYFLINK_CLIENT_EXECUTABLE=venv.zip/venv/bin/python3 执行以下命令运行程序。 per-job模式: ./bin/flink run --detached -t yarn-per-job -Dyarn.application.name=py_kafka -pyarch venv.zip -pyexec venv.zip/venv/bin/python3 -py pyflink-kafka.py 运行结果: yarn-application模式 ./bin/flink run-application --detached -t yarn-application -Dyarn.application.name=py_kafka -Dyarn.ship-files=/opt/client/Flink/flink/yarnship/ -pyarch yarnship/venv.zip -pyexec venv.zip/venv/bin/python3 -pyclientexec venv.zip/venv/bin/python3 -pyfs yarnship -pym pyflink-kafka 运行结果: 父主题: PyFlink样例程序
  • Manager应用开发流程 本文档主要基于Java API对Manager进行应用开发。 开发流程中各阶段的说明如图1和表1所示。 图1 Manager应用程序开发流程 表1 Manager应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解基本认证的基本概念,了解场景需求,设计表等。 Manager应用开发简介 准备开发和运行环境 Manager REST API的应用开发程序当前推荐使用Java语言进行开发,可使用IntelliJ IDEA工具。 准备Manager应用开发和运行环境 准备样例工程 Manager REST API提供了不同场景下的样例程序,您可以导入样例工程进行程序学习。 配置并导入Manager样例工程 根据场景开发工程 提供了Java语言的样例工程,包含添加用户、查找用户、修改用户、删除用户,导出用户列表等典型应用场景。 开发Manager应用 编译并运行程序 指导用户将开发好的程序编译并提交运行。 在本地开发环境中调测Manager应用 查看程序运行结果 程序运行结果会写在用户指定的路径下。用户还可以通过UI查看应用运行情况。 查看Manager应用调测结果 父主题: Manager管理开发指南
  • 功能简介 使用REST服务,传入对应host与port组成的url以及指定的Namespace,通过HTTP协议,对Namespace进行创建、查询、删除,获取指定Namespace中表的操作。 HBase表以“命名空间:表名”格式进行存储,若在创建表时不指定命名空间,则默认存储在“default”中。其中,“hbase”命名空间为系统表命名空间,请不要对该系统表命名空间进行业务建表或数据读写等操作。
  • 样例代码 -- 从本地文件系统/opt/hive_examples_data/目录下将employee_info.txt加载进employees_info表中. ---- 用新数据覆盖原有数据 LOAD DATA LOCAL INPATH '/opt/hive_examples_data/employee_info.txt' OVERWRITE INTO TABLE employees_info; ---- 保留原有数据,将新数据追加到表中 LOAD DATA LOCAL INPATH '/opt/hive_examples_data/employee_info.txt' INTO TABLE employees_info; -- 从HDFS上/user/hive_examples_data/employee_info.txt加载进employees_info表中. ---- 用新数据覆盖原有数据 LOAD DATA INPATH '/user/hive_examples_data/employee_info.txt' OVERWRITE INTO TABLE employees_info; ---- 保留原有数据,将新数据追加到表中 LOAD DATA INPATH '/user/hive_examples_data/employee_info.txt' INTO TABLE employees_info; 加载数据的实质是将数据复制到HDFS上指定表的目录下。
  • HetuEngine应用开发流程介绍 开发流程中各阶段的说明如图1所示: 图1 HetuEngine应用程序开发流程 表1 HetuEngine应用开发的流程说明 阶段 说明 参考文档 了解基本概念 在开始开发应用前,需要了解HetuEngine的基本概念,了解场景需求等。 HetuEngine基本概念 准备开发和运行环境 HetuEngine的应用程序支持使用任何语言调用JDBC接口进行开发,当前样例主要是java语言。推荐使用IDEA工具,请根据指导完成不同语言的开发环境配置。HetuEngine的运行环境即客户端,请根据指导完成客户端的安装和配置。 准备本地应用开发环境 准备工程 HetuEngine提供了不同场景下的样例程序,您可以导入样例工程进行程序学习。或者您可以根据指导,新建一个HetuEngine工程。 导入并配置HetuEngine样例工程 根据场景开发工程 提供了Java语言的样例工程,包括连接HetuEngine、SQL语句执行、结果解析,断开连接等全流程的样例工程。 开发HetuEngine应用 编译并运行程序 指导用户将开发好的程序编译并提交运行。 调测HetuEngine应用 查看程序运行结果 程序运行结果会根据结果解析部分的实现显示到期望显示的地方。 调测HetuEngine应用 父主题: HetuEngine开发指南(普通模式)
  • 数据规划 在kafka中生成模拟数据(需要有Kafka权限用户)。 确保集群安装完成,包括安装HDFS、Yarn、Spark2x和Kafka服务。 将Kafka的Broker配置参数“allow.everyone.if.no.acl.found”的值修改为“true”。 创建Topic。 {zkQuorum}表示ZooKeeper集群信息,格式为IP:port。 $KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper {zkQuorum}/kafka --replication-factor 1 --partitions 1 --topic {Topic} 启动Kafka的Producer,向Kafka发送数据。 {ClassPath}表示工程jar包的存放路径,详细路径由用户指定,可参考在Linux环境中调测Spark应用章节中导出jar包的操作步骤。 java -cp $SPARK_HOME/conf:$SPARK_HOME/jars/*:$SPARK_HOME/jars/streamingClient010/*:{ClassPath} com.huawei.bigdata.spark.examples.KafkaProducer {brokerlist} {topic} {number of events produce every 0.02s} 示例: java -cp /opt/client/Spark2x/spark/conf:/opt/StructuredStreamingState-1.0.jar:/opt/client/Spark2x/spark/jars/*:/opt/client/Spark2x/spark/jars/streamingClient010/* com.huawei.bigdata.spark.examples.KafkaProducer xxx.xxx.xxx.xxx:21005,xxx.xxx.xxx.xxx:21005,xxx.xxx.xxx.xxx:21005 mytopic 10
  • 样例工程运行依赖包参考信息 Flink客户端lib目录、opt目录中都有flink jar包,其中lib目录中默认是flink核心jar包,opt目录中是对接外部组件的jar包(例如flink-connector-kafka*.jar),若应用开发中需要请手动复制相关jar包到lib目录中。 针对Flink提供的几个样例工程,其对应的运行依赖包如下: 表1 样例工程运行依赖包 样例工程 依赖包 依赖包获取地址 DataStream程序 异步Checkpoint机制程序 flink-dist_*.jar 可在Flink的客户端或者服务端安装路径的lib目录下获取。 使用Flink Jar提交SQL作业程序 FlinkServer REST API程序 flink-dist_*.jar flink-table_*.jar 可在Flink的客户端或者服务端安装路径的lib目录下获取。 向Kafka生产并消费数据程序 kafka-clients-*.jar flink-connector-kafka_*.jar kafka-clients-*.jar由Kafka组件发布提供,可在Kafka组件客户端或者服务端安装路径下的lib目录下获取。 flink-connector-kafka_*.jar可在Flink客户端或者服务端安装路径的opt目录下获取。 pipeline程序 flink-connector-netty_*.jar flink-dist_*.jar flink-connector-netty_*.jar可在二次开发样例代码编译后产生的lib文件夹下获取。 flink-dist_*.jar可在Flink的客户端或者服务端安装路径的lib目录下获取。 Stream SQL Join程序 kafka-clients-*.jar flink-connector-kafka_*.jar flink-dist_*.jar flink-table_*.jar kafka-clients-*.jar由Kafka组件发布提供,可在Kafka组件客户端或者服务端安装路径下的lib目录下获取。 flink-connector-kafka_*.jar可在Flink客户端或者服务端安装路径的opt目录下获取。 flink-dist_*.jar、flink-table_*.jar可在Flink的客户端或者服务端安装路径的lib目录下获取。 Flink读写HBase程序 flink-connector-hbase*.jar flink-dist_*.jar flink-table_*.jar hbase-clients-*.jar flink-connector-hbase_*.jar可在Flink客户端或者服务端安装路径的opt目录下获取。 flink-dist_*.jar、flink-table_*.jar可在Flink的客户端或者服务端安装路径的lib目录下获取。 hbase-clients-*.jar由HBase组件发布提供,可在HBase组件客户端或者服务端安装路径下的lib目录下获取。 Flink读写Hudi程序 hbase-unsafe-*.jar 可在二次开发样例代码编译后产生的lib文件夹下获取。
  • 准备开发环境 在进行应用开发时,要准备的开发和运行环境如表1所示。 表1 开发环境 准备项 说明 操作系统 开发环境:Windows系统,支持Windows 7以上版本。 运行环境:Windows系统或Linux系统。 如需在本地调测程序,运行环境需要和集群业务平面网络互通。 安装和配置IntelliJ IDEA 开发环境的基本配置,建议使用2019.1或其他兼容版本。 说明: 若使用IBM JDK,请确保IntelliJ IDEA中的JDK配置为IBM JDK。 若使用Oracle JDK,请确保IntelliJ IDEA中的JDK配置为Oracle JDK。 若使用Open JDK,请确保IntelliJ IDEA中的JDK配置为Open JDK。 不同的IntelliJ IDEA不要使用相同的workspace和相同路径下的示例工程 安装Maven 开发环境基本配置,用于项目管理,贯穿软件开发生命周期。 安装JDK 开发和运行环境的基本配置。版本要求如下: 服务端和客户端仅支持自带的OpenJDK,版本为1.8.0_272,不允许替换。 对于客户应用需引用SDK类的Jar包运行在客户应用进程中的。 X86客户端:Oracle JDK:支持1.8版本;IBM JDK:支持1.8.5.11版本。 TaiShan客户端:OpenJDK:支持1.8.0_272版本。 说明: 基于安全考虑,服务端只支持TLS V1.2及以上的加密协议。 IBM JDK默认只支持TLS V1.0,若使用IBM JDK,请配置启动参数“com.ibm.jsse2.overrideDefaultTLS”为“true”,设置后可以同时支持TLS V1.0/V1.1/V1.2,详情参见https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/jsse2Docs/matchsslcontext_tls.html#matchsslcontext_tls。 7-zip 用于解压“*.zip”和“*.rar”文件。 支持7-Zip 16.04版本。
  • Flink Jar作业提交SQL样例程序(Java) 提交SQL的核心逻辑如下,目前只支持提交CREATE和INSERT语句。完整代码参见com.huawei.bigdata.flink.examples.FlinkSQLExecutor。 public class FlinkSQLExecutor { public static void main(String[] args) throws IOException { System.out.println("-------------------- begin init ----------------------"); final String sqlPath = ParameterTool.fromArgs(args).get("sql", "config/redisSink.sql"); final StreamExecutionEnvironment streamEnv = StreamExecutionEnvironment.getExecutionEnvironment(); EnvironmentSettings bsSettings = EnvironmentSettings.newInstance().inStreamingMode().build(); StreamTableEnvironment tableEnv = StreamTableEnvironment.create(streamEnv, bsSettings); StatementSet statementSet = tableEnv.createStatementSet(); String sqlStr = FileUtils.readFileToString(FileUtils.getFile(sqlPath), "utf-8"); String[] sqlArr = sqlStr.split(";"); for (String sql : sqlArr) { sql = sql.trim(); if (sql.toLowerCase(Locale.ROOT).startsWith("create")) { System.out.println("----------------------------------------------\nexecuteSql=\n" + sql); tableEnv.executeSql(sql); } else if (sql.toLowerCase(Locale.ROOT).startsWith("insert")) { System.out.println("----------------------------------------------\ninsert=\n" + sql); statementSet.addInsertSql(sql); } } System.out.println("---------------------- begin exec sql --------------------------"); statementSet.execute(); } } 需将当前样例需要的依赖包,即编译之后lib文件下面的jar包复制到客户端的lib文件夹内。 以对接普通模式Kafka提交SQL为例: create table kafka_sink ( uuid varchar(20), name varchar(10), age int, ts timestamp(3), p varchar(20) ) with ( 'connector' = 'kafka', 'topic' = 'input2', 'properties.bootstrap.servers' = 'Kafka的Broker实例业务IP:Kafka端口号', 'properties.group.id' = 'testGroup2', 'scan.startup.mode' = 'latest-offset', 'format' = 'json' ); create TABLE datagen_source ( uuid varchar(20), name varchar(10), age int, ts timestamp(3), p varchar(20) ) WITH ( 'connector' = 'datagen', 'rows-per-second' = '1' ); INSERT INTO kafka_sink SELECT * FROM datagen_source; 父主题: Flink Jar作业提交SQL样例程序
  • 创建ClickHouse数据库 通过on cluster语句在集群中创建表1中以databaseName参数值为数据库名的数据库。 private void createDatabase(String databaseName, String clusterName) throws Exception { String createDbSql = "create database if not exists " + databaseName + " on cluster " + clusterName; util.exeSql(createDbSql); } 父主题: 开发ClickHouse应用
  • 常用概念 在Doris中,数据都以表(Table)的形式进行逻辑上的描述。 Row&Column 一张表包括行(Row)和列(Column): Row:即用户的一行数据。 Column: 用于描述一行数据中不同的字段。 Column可以分为两大类:Key和Value。从业务角度看,Key和Value可以分别对应维度列和指标列。从聚合模型的角度来说,Key列相同的行,会聚合成一行。其中Value列的聚合方式由用户在建表时指定。 Tablet&Partition 在Doris的存储引擎中,用户数据被水平划分为若干个数据分片(Tablet,也称作数据分桶)。每个Tablet包含若干数据行。各个Tablet之间的数据没有交集,并且在物理上是独立存储的。 多个Tablet在逻辑上归属于不同的分区(Partition)。一个Tablet只属于一个Partition,而一个Partition包含若干个Tablet。因为Tablet在物理上是独立存储的,所以可以视为Partition在物理上也是独立。Tablet是数据移动、复制等操作的最小物理存储单元。 若干个Partition组成一个Table。Partition可以视为是逻辑上最小的管理单元。数据的导入与删除,仅能针对一个Partition进行。 数据模型 Doris的数据模型主要分为三类:Aggregate、Unique、Duplicate。 Aggregate模型 导入数据时,对于Key列相同的行会聚合成一行,而Value列会按照设置的AggregationType进行聚合。 AggregationType目前有以下四种聚合方式: SUM:求和,多行的Value进行累加。 REPLACE:替代,下一批数据中的Value会替换之前导入过的行中的Value。 MAX:保留最大值。 MIN:保留最小值。 Unique模型 在某些多维分析场景下,用户更关注的是如何保证Key的唯一性,即如何获得Primary Key唯一性约束。因此,引入了Unique数据模型。 读时合并 Unique模型的读时合并实现完全可以用Aggregate模型中的REPLACE方式替代。其内部的实现方式和数据存储方式也完全一样。 写时合并 Unique模型的写时合并实现,查询性能更接近于Duplicate模型,在有主键约束需求的场景上相比Aggregate模型有较大的查询性能优势,尤其是在聚合查询以及需要用索引过滤大量数据的查询中。 在开启了写时合并选项的Unique表上,数据在导入阶段就会去将被覆盖和被更新的数据进行标记删除,同时将新的数据写入新的文件。在查询的时候,所有被标记删除的数据都会在文件级别被过滤掉,读取出来的数据就都是最新的数据,消除掉了读时合并中的数据聚合过程,并且能够在很多情况下支持多种谓词的下推。因此在许多场景都能带来比较大的性能提升,尤其是在有聚合查询的情况下。 Duplicate模型 在某些多维分析场景下,数据既没有主键,也没有聚合需求。可以引入Duplicate数据模型来满足这类需求。 这种数据模型区别于Aggregate和Unique模型。数据完全按照导入文件中的数据进行存储,不会有任何聚合。即使两行数据完全相同,也都会保留。 而在建表语句中指定的DUPLICATE KEY,只是用来指明底层数据按照那些列进行排序。 数据模型的选择建议 因为数据模型在建表时就已经确定,且无法修改。所以,选择一个合适的数据模型非常重要。 Aggregate模型可以通过预聚合,极大地降低聚合查询时所需扫描的数据量和查询的计算量,非常适合有固定模式的报表类查询场景。但是该模型对count(*) 查询不友好。同时因为固定了Value列上的聚合方式,在进行其他类型的聚合查询时,需要考虑语意正确性。 Unique模型针对需要唯一主键约束的场景,可以保证主键唯一性约束。但是无法利用ROLLUP等预聚合带来的查询优势。 对于聚合查询有较高性能需求的用户,推荐使用自1.2版本加入的写时合并实现。 Unique模型仅支持整行更新,如果用户既需要唯一主键约束,又需要更新部分列(例如将多张源表导入到一张Doris表的情形),则可以考虑使用Aggregate模型,同时将非主键列的聚合类型设置为REPLACE_IF_NOT_NULL。 Duplicate适合任意维度的Ad-hoc查询。虽然同样无法利用预聚合的特性,但是不受聚合模型的约束,可以发挥列存模型的优势(只读取相关列,而不需要读取所有Key列)。
  • Doris样例工程介绍 MRS 样例工程获取地址为https://github.com/huaweicloud/huaweicloud-mrs-example,切换分支为与MRS集群相匹配的版本分支,然后下载压缩包到本地后解压,即可获取各组件对应的样例代码工程。 当前MRS提供以下Doris相关样例工程: 表1 Doris相关样例工程 样例工程位置 描述 doris-examples/doris-example Doris数据读写操作的应用开发示例。 通过调用Doris接口可实现创建用户表、向表中插入数据、查询表数据、删除表等功能,相关业务场景介绍请参见Doris JDBC接口调用样例程序。 springboot/doris-examples Doris数据读写操作的SpringBoot应用开发示例。 提供Doris对接SpringBoot的样例,样例介绍请参见配置并导入SpringBoot样例工程。
  • 在Linux环境中调测ClickHouse Springboot样例程序 ClickHouse springboot应用程序也支持在Linux环境中运行。在程序代码完成开发后,您可以上传Jar包至准备好的Linux运行环境中运行。 前提条件 Linux环境已安装JDK,版本号需要和IntelliJ IDEA导出Jar包使用的JDK版本一致,并设置好Java环境变量。 编译并运行程序 在IDEA中右侧单击“Maven”,展开“Lifecycle”,双击“package”,对当前工程进行打包。 使用root用户登录ClickHouse客户端节点,创建运行目录,例如“/opt/test”,在IDEA的“target”目录下获取带有“-with-dependencies”的jar包,并将jar包和idea中conf文件夹一同上传到“/opt/test”目录,如: 执行如下命令,配置环境变量并运行jar包: cd 客户端安装路径 source bigdata_env cd /opt/test java -jar clickhouse-examples-1.0-SNAPSHOT-jar-with-dependencies.jar 显示结果如下: 调用ClickHouse的SpringBoot样例接口触发样例代码运行: Windows环境运行方式: 打开浏览器,输入:http://ClickHouse客户端节点IP:8080/clickhouse/executeQuery,查看浏览器返回信息: ClickHouse springboot client runs normally. Linux环境下执行运行方式: 登录ClickHouse客户端节点,执行如下命令,查看linux下shell日志打印和日志文件打印: curl http://localhost:8080/clickhouse/executeQuery vi clickhouse-springboot-example.log
  • 操作步骤 客户端机器必须安装有Python3,其版本不低于3.6。 在客户端机器的命令行终端输入python3可查看Python版本号。如下显示Python版本为3.8.2。 Python 3.8.2 (default, Jun 23 2020, 10:26:03) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux Type "help", "copyright", "credits" or "license" for more information. 客户端机器必须安装有setuptools,版本为47.3.1。 具体软件,请到对应的官方网站获取。 https://pypi.org/project/setuptools/#files 将下载的setuptools压缩文件复制到客户端机器上,解压后进入解压目录,在客户端机器的命令行终端执行python3 setup.py install。 如下内容表示安装setuptools的47.3.1版本成功。 Finished processing dependencies for setuptools==47.3.1 安装Python客户端到客户端机器。 参考获取MRS应用开发样例工程,获取样例代码解压目录中“src\hive-examples”目录下的样例工程文件夹“python3-examples”。 进入“python3-examples”文件夹。 根据python3的版本,选择进入“dependency_python3.6”或“dependency_python3.7”或“dependency_python3.8”文件夹。 执行whereis easy_install命令,找到easy_install程序路径。如果有多个路径,使用easy_install --version确认选择setuptools对应版本的easy_install,如/usr/local/bin/easy_install 使用对应的easy_install命令,依次安装dependency_python3.x文件夹下的egg文件。如: /usr/local/bin/easy_install future-0.18.2-py3.8.egg 输出以下关键内容表示安装egg文件成功。 Finished processing dependencies for future==0.18.2
  • 操作步骤 以客户端安装用户,登录安装HBase客户端的节点。 进入HBase客户端安装目录: 例如:cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建HBase表的权限,具体请参见创建角色配置拥有对应权限的角色,参考创建用户为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行此命令。 kinit MRS 集群用户 例如,kinit hbaseuser。 直接执行Phoenix客户端命令。 sqlline.py 建表: CREATE TABLE TEST (id VARCHAR PRIMARY KEY, name VARCHAR); 插入数据: UPSERT INTO TEST(id,name) VALUES ('1','jamee'); 查询数据: SELECT * FROM TEST; 删表: DROP TABLE TEST; 退出Phoenix命令行。 !quit
  • 场景说明 假定用户开发一个应用程序,用于管理企业中的使用A业务的用户信息,如表1所示,A业务操作流程如下: 创建用户信息表。 在用户信息中新增用户的学历、职称等信息。 根据用户编号查询用户姓名和地址。 根据用户姓名进行查询。 查询年龄段在[20-29]之间的用户信息。 数据统计,统计用户信息表的人员数、年龄最大值、年龄最小值、平均年龄。 用户销户,删除用户信息表中该用户的数据。 A业务结束后,删除用户信息表。 表1 用户信息 编号 姓名 性别 年龄 地址 12005000201 张三 男 19 广东省深圳市 12005000202 李婉婷 女 23 河北省石家庄市 12005000203 王明 男 26 浙江省宁波市 12005000204 李刚 男 18 湖北省襄阳市 12005000205 赵恩如 女 21 江西省上饶市 12005000206 陈龙 男 32 湖南省株洲市 12005000207 周微 女 29 河南省南阳市 12005000208 杨艺文 女 30 重庆市开县 12005000209 徐兵 男 26 陕西省渭南市 12005000210 肖凯 男 25 辽宁省大连市
  • 开发思路 根据上述的业务场景进行功能分解,需要开发的功能点如表2所示。 表2 在HBase中开发的功能 序号 步骤 代码实现 1 根据表1中的信息创建表。 请参见创建HBase表。 2 导入用户数据。 请参见向HBase表中插入数据。 3 增加“教育信息”列族,在用户信息中新增用户的学历、职称等信息。 请参见修改HBase表。 4 根据用户编号查询用户姓名和地址。 请参见使用Get API读取HBase表数据。 5 根据用户姓名进行查询。 请参见使用Filter过滤器读取HBase表数据。 6 为提升查询性能,创建二级索引或者删除二级索引。 请参见创建HBase表二级索引和基于二级索引查询HBase表数据。 7 用户销户,删除用户信息表中该用户的数据。 请参见删除HBase表数据。 8 A业务结束后,删除用户信息表。 请参见删除HBase表。
  • 操作步骤 获取运行在Yarn上的任务的具体信息。 命令: curl -k -i --negotiate -u : "https://10-120-85-2:8090/ws/v1/cluster/apps/" 其中10-120-85-2为ResourceManager主节点的hostname,8090为ResourceManager的端口号。 用户能看到哪个队列的任务,要看这个用户是否有这个队列的admin权限。 如果当前组件使用了Ranger进行权限控制,需基于Ranger配置相关策略进行权限管理。 运行结果: { "apps": { "app": [ { "id": "application_1461743120947_0001", "user": "spark", "name": "Spark-JD BCS erver", "queue": "default", "state": "RUNNING", "finalStatus": "UNDEFINED", "progress": 10, "trackingUI": "ApplicationMaster", "trackingUrl": "https://10-120-85-2:8090/proxy/application_1461743120947_0001/", "diagnostics": "AM is launched. ", "clusterId": 1461743120947, "applicationType": "SPARK", "applicationTags": "", "startedTime": 1461804906260, "finishedTime": 0, "elapsedTime": 6888848, "amContainerLogs": "https://10-120-85-2:8044/node/containerlogs/container_e12_1461743120947_0001_01_000001/spark", "amHostHttpAddress": "10-120-85-2:8044", "allocatedMB": 1024, "allocatedVCores": 1, "runningContainers": 1, "memorySeconds": 7053309, "vcoreSeconds": 6887, "preemptedResourceMB": 0, "preemptedResourceVCores": 0, "numNonAMContainerPreempted": 0, "numAMContainerPreempted": 0, "resourceRequests": [ { "capability": { "memory": 1024, "virtualCores": 1 }, "nodeLabelExpression": "", "numContainers": 0, "priority": { "priority": 0 }, "relaxLocality": true, "resourceName": "*" } ], "logAggregationStatus": "NOT_START", "amNodeLabelExpression": "" }, { "id": "application_1461722876897_0002", "user": "admin", "name": "QuasiMonteCarlo", "queue": "default", "state": "FINISHED", "finalStatus": "SUCCEEDED", "progress": 100, "trackingUI": "History", "trackingUrl": "https://10-120-85-2:8090/proxy/application_1461722876897_0002/", "diagnostics": "Attempt recovered after RM restart", "clusterId": 1461743120947, "applicationType": "MAPREDUCE", "applicationTags": "", "startedTime": 1461741052993, "finishedTime": 1461741079483, "elapsedTime": 26490, "amContainerLogs": "https://10-120-85-2:8044/node/containerlogs/container_e11_1461722876897_0002_01_000001/admin", "amHostHttpAddress": "10-120-85-2:8044", "allocatedMB": -1, "allocatedVCores": -1, "runningContainers": -1, "memorySeconds": 158664, "vcoreSeconds": 52, "preemptedResourceMB": 0, "preemptedResourceVCores": 0, "numNonAMContainerPreempted": 0, "numAMContainerPreempted": 0, "amNodeLabelExpression": "" } ] } } 结果分析: 通过这个接口,可以查询当前集群中Yarn上的任务,并且可以得到如下表1。 表1 常用信息 参数 参数描述 user 运行这个任务的用户。 applicationType 例如MAPREDUCE或者SPARK等。 finalStatus 可以知道任务是成功还是失败。 elapsedTime 任务运行的时间。 获取Yarn资源的总体信息。 命令: curl -k -i --negotiate -u : "https://10-120-85-102:8090/ws/v1/cluster/metrics" 运行结果: { "clusterMetrics": { "appsSubmitted": 2, "appsCompleted": 1, "appsPending": 0, "appsRunning": 1, "appsFailed": 0, "appsKilled": 0, "reservedMB": 0, "availableMB": 23552, "allocatedMB": 1024, "reservedVirtualCores": 0, "availableVirtualCores": 23, "allocatedVirtualCores": 1, "containersAllocated": 1, "containersReserved": 0, "containersPending": 0, "totalMB": 24576, "totalVirtualCores": 24, "totalNodes": 3, "lostNodes": 0, "unhealthyNodes": 0, "decommissionedNodes": 0, "rebootedNodes": 0, "activeNodes": 3, "rmMainQueueSize": 0, "schedulerQueueSize": 0, "stateStoreQueueSize": 0 } } 结果分析: 通过这个接口,可以查询当前集群中如表2。 表2 常用信息 参数 参数描述 appsSubmitted 已经提交的任务数。 appsCompleted 已经完成的任务数。 appsPending 正在挂起的任务数。 appsRunning 正在运行的任务数。 appsFailed 已经失败的任务数。 appsKilled 已经被kill的任务数。 totalMB Yarn资源总的内存。 totalVirtualCores Yarn资源总的VCore数。
  • 功能简介 通过调用“org.apache.hadoop.hbase.hindex.global.GlobalIndexAdmin”中的方法进行HBase全局二级索引的管理,该类中addIndices用于创建全局二级索引。 全局二级索引的创建需要指定索引列、覆盖列(可选)、索引表预分区(可选,建议指定)。 在已有存量数据的表上创建全局二级索引,需要创建索引预分区,防止索引表出现热点,索引表数据的rowkey由索引列构成,并且包含分隔符,格式为“\x01索引值\x00”,因此预分区需要指定成对应格式,例如,当使用id列和age列作为索引列时,两个列均为整数,使用id列完成预分区,可以指定索引表预分区点为: \x010,\x011,\x012....
  • 创建Doris连接 以下代码片段在“JDBCExample”类的“createConnection”方法中。 USER和PASSWD为在创建连接时用于进行安全认证的用户名和密码。 Class.forName(JDBC_DRIVER); String dbUrl = String.format(DB_URL_PATTERN, HOST, PORT); connection = DriverManager.getConnection(dbUrl, USER, PASSWD); 父主题: Doris JDBC接口调用样例程序
  • 准备开发环境 在进行二次开发时,要准备的开发和运行环境如表1所示。 表1 开发环境 准备项 说明 操作系统 开发环境:Windows系统,支持Windows 7以上版本。 运行环境:Windows系统或Linux系统。 如需在本地调测程序,运行环境需要和集群业务平面网络互通。 安装JDK 开发和运行环境的基本配置,版本要求如下: 服务端和客户端仅支持自带的OpenJDK,版本为1.8.0_272,不允许替换。 对于客户应用需引用SDK类的Jar包运行在客户应用进程中的。 X86客户端:Oracle JDK:支持1.8版本;IBM JDK:支持1.8.5.11版本。 TaiShan客户端:OpenJDK:支持1.8.0_272版本。 说明: 基于安全考虑,服务端只支持TLS V1.2及以上的加密协议。 IBM JDK默认只支持TLS V1.0,若使用IBM JDK,请配置启动参数“com.ibm.jsse2.overrideDefaultTLS”为“true”,设置后可以同时支持TLS V1.0/V1.1/V1.2,详情参见https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_8.0.0/com.ibm.java.security.component.80.doc/security-component/jsse2Docs/matchsslcontext_tls.html#matchsslcontext_tls。 安装和配置IntelliJ IDEA 用于开发HBase应用程序的工具。版本要求:2019.1或其他兼容版本。 说明: 若使用IBM JDK,请确保IntelliJ IDEA中的JDK配置为IBM JDK。 若使用Oracle JDK,请确保IntelliJ IDEA中的JDK配置为Oracle JDK。 若使用Open JDK,请确保IntelliJ IDEA中的JDK配置为Open JDK。 安装Junit插件 开发环境的基本配置。 安装Maven 开发环境的基本配置。用于项目管理,贯穿软件开发生命周期。 7-zip 用于解压“*.zip”和“*.rar”文件。 支持7-Zip 16.04版本。
  • 代码样例 以下代码片段是查找用户的示例,在“rest”包的“UserManager”类的main方法中。 //访问Manager接口完成查找用户列表 operationName = "QueryUserList"; operationUrl = webUrl + QUERY_USER_LIST_URL; String responseLineContent = httpManager.sendHttpGetRequest(httpClient, operationUrl, operationName); LOG.info("The {} response is {}.", operationName, responseLineContent);
  • MRS组件应用开发流程说明 通常MRS组件应用开发流程如下所示,各组件应用的开发编译操作可参考组件开发指南对应章节。 图1 MRS组件应用开发流程 表1 MRS组件应用开发流程说明 阶段 说明 准备开发环境 在进行应用开发前,需首先准备开发环境,推荐使用IntelliJ IDEA工具,同时本地需完成JDK、Maven等初始配置。 准备连接集群配置文件 应用程序开发或运行过程中,需通过集群相关配置文件信息连接MRS集群,配置文件通常包括用于安全认证的用户文件,可从已创建好的MRS集群中获取相关内容。 用于程序调测或运行的节点,需要与MRS集群内节点网络互通。 配置并导入样例工程 MRS提供了不同组件场景下的多种样例程序,用户可获取样例工程并导入本地开发环境中进行程序学习。 配置安全认证 连接开启了Kerberos认证的MRS集群时,应用程序中需配置具有相关资源访问权限的用户进行安全认证。 根据业务场景开发程序 根据实际业务场景开发程序,调用组件接口实现对应功能。 编译并运行程序 将开发好的程序编译运行,用户可在本地Windows开发环境中进行程序调测运行,也可以将程序编译为Jar包后,提交到Linux节点上运行。
  • 提交命令 假设用例代码打包后的jar包名为spark-hbaseContext-test-1.0.jar,并将jar包放在客户端$SPARK_HOME目录下,以下命令均在$SPARK_HOME目录执行,Java接口对应的类名前有Java字样,请参考具体样例代码进行书写。 yarn-client模式: java/scala版本(类名等请与实际代码保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode client --class com.huawei.bigdata.spark.examples.hbasecontext.JavaHBaseDistributedScanExample SparkOnHbaseJavaExample-1.0.jar ExampleAvrotable python版本(文件名等请与实际保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode client --jars SparkOnHbaseJavaExample-1.0.jar HBaseDistributedScanExample.py ExampleAvrotable yarn-cluster模式: java/scala版本(类名等请与实际代码保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode cluster --class com.huawei.bigdata.spark.examples.hbasecontext.JavaHBaseDistributedScanExample SparkOnHbaseJavaExample-1.0.jar ExampleAvrotable python版本(文件名等请与实际保持一致,此处仅为示例) bin/spark-submit --master yarn --deploy-mode cluster --jars SparkOnHbaseJavaExample-1.0.jar HBaseDistributedScanExample.py ExampleAvrotable
共100000条