华为云用户手册

  • URI GET /v1/{project_id}/eds/instances/{instance_id}/connectors/{connector_id} 表1 路径参数 参数 是否必选 参数类型 描述 instance_id 是 String 实例ID,开通的数据交换平台实例ID。 获取方法请参考获取实例ID。 connector_id 是 String 连接器ID,指定数据交换平台下连接器的ID。 获取方法请参考获取连接器ID。 project_id 是 String 项目ID。 获取方法请参考获取项目ID。
  • 响应示例 状态码: 200 OK 连接器详情。 { "data" : { "connector_id" : "c1bf9bd7-52fc-435b-ae55-************", "connector_name" : "连接器B", "connector_description" : "测试连接器", "create_time" : "2023-10-09T11:15:48Z", "connector_status" : "ACTIVE", "create_user_name": "pa*******135", "create_user_id": "0574************", "connector_owner_name": "pa*******135", "connector_owner_Id": "0574************" "protocol_signed": "TRUE" }, "total" : 0, "error_code" : null, "error_msg" : null }
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 data ConnectorDetail object 返回数据。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 表4 ConnectorDetail 参数 参数类型 描述 connector_id String 连接器ID。 connector_name String 连接器名称。 connector_description String 连接器描述。 create_time String 连接器创建时间。 connector_status String 连接器当前状态。 枚举值: ACTIVE INACTIVE create_user_id String 创建人id。 create_user_name String 创建人。 connector_owner_name String 连接器管理员名称。 connector_owner_Id String 连接器管理员ID。 protocol_signed Boolean 签署ids协议标识,true代表已经签署了协议,false表示没有签署。 状态码: 400 表5 响应Body参数 参数 参数类型 描述 data - 返回null。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。 状态码: 500 表6 响应Body参数 参数 参数类型 描述 data - 返回null。 total Long 总数。 error_code String 错误码。 error_msg String 错误描述。
  • 开发流程 本文档主要基于Java API对IoTDB进行应用开发。 开发流程中各阶段的说明如图1和表1所示。 图1 IoTDB应用程序开发流程 表1 IoTDB应用开发的流程说明 阶段 说明 参考章节 准备开发环境 在进行应用开发前,需首先准备开发环境,推荐使用Java语言进行开发,使用IntelliJ IDEA工具,同时完成JDK、Maven等初始配置。 准备开发环境 准备连接集群配置文件 应用程序开发或运行过程中,需通过集群相关配置文件信息连接 MRS 集群,配置文件通常包括集群组件信息文件以及用于安全认证的用户文件,可从已创建好的MRS集群中获取相关内容。 用于程序调测或运行的节点,需要与MRS集群内节点网络互通,同时配置hosts域名信息。 准备连接集群配置文件 配置并导入样例工程 IoTDB提供了不同场景下的多种样例程序,用户可获取样例工程并导入本地开发环境中进行程序学习。 配置并导入样例工程 根据业务场景开发程序 提供了Java语言的样例工程,包含JDBC和Session两种连接方式,从创建存储组、创建时间序列,到插入数据再到删除存储组全流程的样例工程。 开发程序 编译并运行程序 指导用户将开发好的程序编译并提交运行。 调测程序 父主题: 概述
  • 操作步骤 获取样例代码。 下载样例工程的Maven工程源码和配置文件,请参见获取代码样例工程。 将样例代码导入IDEA中。 获取配置文件。 从集群的客户端中获取文件。在“$SPARK_HOME/conf”中下载hive-site.xml与spark-defaults.conf文件到本地。 在集群的 FusionInsight Manager页面下载所使用用户的认证文件到本地。 在HDFS中上传数据。 在Liunx中新建文本文件data,将如下数据内容保存到data文件中。 Miranda,32 Karlie,23 Candice,27 在HDFS客户端,执行如下命令获取安全认证。 cd {客户端安装目录} kinit {用于认证的业务用户} 在Linux系统HDFS客户端使用命令hadoop fs -mkdir /data(hdfs dfs命令有同样的作用),创建对应目录。 在Linux系统HDFS客户端使用命令hadoop fs -put data /data,上传数据文件。 在样例代码中配置相关参数。 认证用户配置。 userPrincipal配置为所使用的用户。 userKeytabPath配置为下载的keytab文件的路径。 Krb5ConfPath配置为下载的krb5.conf文件的路径。 域名配置为DEFAULT_REALM,在KerberosUtil类中修改DEFAULT_REALM为集群的域名。 将securityConfig拼接的字符串中user.principal与user.keytab修改为相应的用户名与路径。注意这里keytab的路径需要使用“/”。 将加载数据的sql语句改为“LOAD DATA INPATH 'hdfs:/data/data' INTO TABLE CHILD”。 在程序运行时添加运行参数,分别为hive-site.xml与spark-defaults.conf文件的路径。 运行程序。
  • 运行程序 获取样例工程“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 运行结果: 父主题: 使用Python提交普通作业
  • 简介 Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。它的最大亮点是流处理,是业界最顶级的开源流处理引擎。 Flink最适合的应用场景是低时延的数据处理(Data Processing)场景:高并发pipeline处理数据,时延毫秒级,且兼具可靠性。 Flink技术栈如图1所示。 图1 Flink技术栈 Flink在当前版本中重点构建如下特性,其他特性继承开源社区,不做增强。 DataStream Checkpoint 窗口 Job Pipeline 配置表
  • 架构 Flink架构如图2所示。 图2 Flink架构 Flink整个系统包含三个部分: Client Flink Client主要给用户提供向Flink系统提交用户任务(流式作业)的能力。 TaskManager Flink系统的业务执行节点,执行具体的用户任务。TaskManager可以有多个,各个TaskManager都平等。 JobManager Flink系统的管理节点,管理所有的TaskManager,并决策用户任务在哪些Taskmanager执行。JobManager在HA模式下可以有多个,但只有一个主JobManager。 Flink系统提供的关键能力: 低时延 提供ms级时延的处理能力。 Exactly Once 提供异步快照机制,保证所有数据真正只处理一次。 HA JobManager支持主备模式,保证无单点故障。 水平扩展能力 TaskManager支持手动水平扩展。
  • 操作步骤 参考配置Python3样例工程章节,获取样例代码,获取hetu-jdbc-XXX.jar文件,并拷贝到自定义目录中。 参考通过HSFabric实现KeyTab文件认证章节,获取“user.keytab”和“krb5.conf”文件,并放置到自定义目录中。 编辑样例代码,根据集群实际情况修改url、user、password等信息,并根据实际路径修改“jdbc_location”。 Windows系统路径填写示例:"D:\\hetu-examples-python3\\hetu-jdbc-XXX.jar" Linux系统路径示例:"/opt/hetu-examples-python3/hetu-jdbc-XXX.jar" 运行python3样例代码。 Windows直接通过pycharm或者Python IDLE运行py脚本。 Linux运行样例代码需要已安装Java。 进入样例代码路径并执行py脚本,样例代码路径如“/opt/hetu-examples-python3”: cd /opt/hetu-examples-python3 python3 JDBCExampleBroker.py 运行结果。 Windows系统中,在console界面可以看到运行结果示例: 图1 Windows系统运行结果 Linux系统中运行结果示例: Aug 12, 2023 5:19:53 PM io.XXX.jdbc.$internal.airlift.log.Logger info INFO: hsbroker finalUri is https://192.168.43.223:29860 Aug 12, 2023 5:19:53 PM io.XXX.jdbc.$internal.airlift.log.Logger info INFO: The final connection url is: //192.168.43.161:29888/hive/default Aug 12, 2023 5:19:53 PM io.XXX.jdbc.$internal.airlift.log.Logger info INFO: coordinator uri is //192.168.43.161:29888/hive/default [('default',), ('information_schema',)]
  • Flink常用接口 Flink主要使用到如下这几个类: StreamExecutionEnvironment:是Flink流处理的基础,提供了程序的执行环境。 DataStream:Flink用类DataStream来表示程序中的流式数据。用户可以认为它们是含有重复数据的不可修改的集合(collection),DataStream中元素的数量是无限的。 KeyedStream:DataStream通过keyBy分组操作生成流,通过设置的key值对数据进行分组。 WindowedStream:KeyedStream通过window窗口函数生成的流,设置窗口类型并且定义窗口触发条件,然后在窗口数据上进行一些操作。 AllWindowedStream:DataStream通过window窗口函数生成的流,设置窗口类型并且定义窗口触发条件,然后在窗口数据上进行一些操作。 ConnectedStreams:将两条DataStream流连接起来并且保持原有流数据的类型,然后进行map或者flatMap操作。 JoinedStreams:在窗口上对数据进行等值join操作(等值就是判断两个值相同的join,比如a.id = b.id),join操作是coGroup操作的一种特殊场景。 CoGroupedStreams:在窗口上对数据进行coGroup操作,可以实现流的各种join类型。 图1 Flink Stream的各种流类型转换
  • 回答 第三方jar包(例如自定义udf)区分x86和TaiShan版本时,混合使用方案: 进入到服务端spark2x sparkResource的安装目录(这个集群安装过程中可能会安装在多个节点上,随便进入一个安装节点,cd到sparkResource的安装目录)。 准备好自己的jar包例如xx.jar的x86版本和TaiShan版本。将x86版本和TaiShan版本的xx.jar分别复制到当前目录的x86文件夹和TaiShan文件夹里面。 在当前目录下执行以下命令将jar包打包: zip -qDj spark-archive-2x-x86.zip x86/* zip -qDj spark-archive-2x-arm.zip arm/* 执行以下命令查看hdfs上的spark2x依赖的jar包: hdfs dfs -ls /user/spark2x/jars/8.1.0.1 8.1.0.1是版本号,不同版本不同。 执行以下命令移动hdfs上旧的jar包文件到其他目录,例如移动到“tmp”目录。 hdfs dfs -mv /user/spark2x/jars/8.1.0.1/spark-archive-2x-arm.zip /tmp hdfs dfs -mv /user/spark2x/jars/8.1.0.1/spark-archive-2x-x86.zip /tmp 上传3中打包的spark-archive-2x-arm.zip和spark-archive-2x-x86.zip到hdfs的/user/spark2x/jars/8.1.0.1目录下,上传命令如下: hdfs dfs -put spark-archive-2x-arm.zip /user/spark2x/jars/8.1.0.1/ hdfs dfs -put spark-archive-2x-x86.zip /user/spark2x/jars/8.1.0.1/ 上传完毕后删除本地的spark-archive-2x-arm.zip,spark-archive-2x-x86.zip文件。 对其他的sparkResource安装节点执行1~2。 进入webUI重启spark2x的jdbcServer实例。 重启后,需要更新客户端配置。按照客户端所在的机器类型(x86、TaiShan)复制xx.jar的相应版本到客户端的spark2x安装目录${install_home}/Spark2x/spark/jars文件夹中。${install_home}是用户的客户端安装路径,用户需要填写实际的安装目录;若本地的安装目录为/opt/hadoopclient,那么就复制相应版本xx.jar到/opt/hadoopclient/Spark2x/spark/jars文件夹里。
  • 查看调测结果 ClickHouse应用程序运行完成后,可通过以下方式查看程序运行情况: 通过运行结果查看程序运行情况。 通过ClickHouse日志获取应用运行情况,即“logs”目录下的日志文件:clickhouse-example.log。 运行clickhouse-examples的完整样例后,控制台显示部分运行结果如下: 2023-09-19 16:20:48,344 | INFO | main | loadBalancerIPList is 192.168.5.132, loadBalancerHttpPort is 21422, user is ck_user, clusterName is default_cluster, isSec is true, password is Admin12!. | com.huawei.clickhouse.examples.Demo.main(Demo.java:42) 2023-09-19 16:20:48,350 | INFO | main | ckLbServerList current member is 0, ClickhouseBalancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Demo.getCkLbServerList(Demo.java:110) 2023-09-19 16:20:48,436 | INFO | main | Current load balancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:68) 2023-09-19 16:20:50,781 | INFO | main | Execute query:drop table if exists testdb.testtb on cluster default_cluster no delay | com.huawei.clickhouse.examples.Util.exeSql(Util.java:73) 2023-09-19 16:20:51,504 | INFO | main | Execute time is 723 ms | com.huawei.clickhouse.examples.Util.exeSql(Util.java:77) 2023-09-19 16:20:51,511 | INFO | main | Current load balancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:68) 2023-09-19 16:20:51,897 | INFO | main | Execute query:drop table if exists testdb.testtb_all on cluster default_cluster no delay | com.huawei.clickhouse.examples.Util.exeSql(Util.java:73) 2023-09-19 16:20:52,421 | INFO | main | Execute time is 524 ms | com.huawei.clickhouse.examples.Util.exeSql(Util.java:77) 2023-09-19 16:20:52,422 | INFO | main | Current load balancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:68) 2023-09-19 16:20:52,946 | INFO | main | Execute query:create database if not exists testdb on cluster default_cluster | com.huawei.clickhouse.examples.Util.exeSql(Util.java:73) 2023-09-19 16:20:53,405 | INFO | main | Execute time is 458 ms | com.huawei.clickhouse.examples.Util.exeSql(Util.java:77) 2023-09-19 16:20:53,406 | INFO | main | Current load balancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:68) 2023-09-19 16:20:53,757 | INFO | main | Execute query:create table testdb.testtb on cluster default_cluster (name String, age UInt8, date Date)engine=ReplicatedMergeTree('/clickhouse/tables/{shard}/testdb.testtb','{replica}') partition by toYYYYMM(date) order by age | com.huawei.clickhouse.examples.Util.exeSql(Util.java:73) 2023-09-19 16:20:54,243 | INFO | main | Execute time is 485 ms | com.huawei.clickhouse.examples.Util.exeSql(Util.java:77) 2023-09-19 16:20:54,244 | INFO | main | Current load balancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:68) 2023-09-19 16:20:54,640 | INFO | main | Execute query:create table testdb.testtb_all on cluster default_cluster as testdb.testtb ENGINE = Distributed(default_cluster,testdb,testtb, rand()); | com.huawei.clickhouse.examples.Util.exeSql(Util.java:73) 2023-09-19 16:20:55,175 | INFO | main | Execute time is 535 ms | com.huawei.clickhouse.examples.Util.exeSql(Util.java:77) 2023-09-19 16:20:55,175 | INFO | main | Current load balancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Util.insertData(Util.java:143) 2023-09-19 16:20:58,868 | INFO | main | Insert batch time is 503 ms | com.huawei.clickhouse.examples.Util.insertData(Util.java:160) 2023-09-19 16:21:01,015 | INFO | main | Insert batch time is 631 ms | com.huawei.clickhouse.examples.Util.insertData(Util.java:160) 2023-09-19 16:21:02,521 | INFO | main | Inert all batch time is 4163 ms | com.huawei.clickhouse.examples.Util.insertData(Util.java:164) 2023-09-19 16:21:02,522 | INFO | main | Current load balancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:68) 2023-09-19 16:21:03,051 | INFO | main | Execute query:select * from testdb.testtb_all order by age limit 10 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:73) 2023-09-19 16:21:03,430 | INFO | main | Execute time is 379 ms | com.huawei.clickhouse.examples.Util.exeSql(Util.java:77) 2023-09-19 16:21:03,433 | INFO | main | Current load balancer is 192.168.5.132:21422 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:68) 2023-09-19 16:21:03,760 | INFO | main | Execute query:select toYYYYMM(date),count(1) from testdb.testtb_all group by toYYYYMM(date) order by count(1) DESC limit 10 | com.huawei.clickhouse.examples.Util.exeSql(Util.java:73) 2023-09-19 16:21:04,361 | INFO | main | Execute time is 600 ms | com.huawei.clickhouse.examples.Util.exeSql(Util.java:77) 2023-09-19 16:21:04,362 | INFO | main | name age date | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,362 | INFO | main | huawei_9 12 2021-04-20 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,362 | INFO | main | huawei_17 15 2021-05-23 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | huawei_5 24 2021-04-15 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | huawei_13 39 2020-07-04 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | huawei_3 49 2021-06-27 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | huawei_15 50 2020-06-26 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | huawei_11 53 2020-08-14 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | huawei_12 56 2021-12-19 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | huawei_19 57 2021-10-31 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | huawei_0 57 2020-03-01 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,363 | INFO | main | toYYYYMM(date) count() | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202105 3 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202110 2 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202104 2 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202008 2 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202007 2 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202106 2 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202012 1 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202109 1 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,364 | INFO | main | 202003 1 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:04,365 | INFO | main | 202011 1 | com.huawei.clickhouse.examples.Demo.queryData(Demo.java:158) 2023-09-19 16:21:05,044 | INFO | main | Name is: huawei_9, age is: 12 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,044 | INFO | main | Name is: huawei_17, age is: 15 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,045 | INFO | main | Name is: huawei_5, age is: 24 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,045 | INFO | main | Name is: huawei_13, age is: 39 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,045 | INFO | main | Name is: huawei_3, age is: 49 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,045 | INFO | main | Name is: huawei_15, age is: 50 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,045 | INFO | main | Name is: huawei_11, age is: 53 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,045 | INFO | main | Name is: huawei_12, age is: 56 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,045 | INFO | main | Name is: huawei_19, age is: 57 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) 2023-09-19 16:21:05,046 | INFO | main | Name is: huawei_0, age is: 57 | com.huawei.clickhouse.examples.ClickhouseJDBCHaDemo.queryData(ClickhouseJDBCHaDemo.java:78) Process finished with exit code 0
  • 回答 建议将"blob.storage.directory"配置选项设置成“/tmp”或者“/opt/huawei/Bigdata/tmp”。 当用户将"blob.storage.directory"配置选项设置成自定义目录时,需要手动赋予用户该目录的owner权限。以下以FusionInsight的admin用户为例。 修改Flink客户端配置文件conf/flink-conf.yaml,配置blob.storage.directory: /home/testdir/testdirdir/xxx。 创建目录/home/testdir(创建一层目录即可),设置该目录为admin用户所属。 /home/testdir/下的testdirdir/xxx目录在启动Flink集群时会在每个节点下自动创建。 进入客户端路径,执行命令./bin/yarn-session.sh -jm 2048 -tm 3072,可以看到yarn-session正常启动并且成功创建目录。
  • JDBC样例工程的IntelliJ IDEA形式运行 在IntelliJ IDEA的jdbc-examples工程的JDBCExample类单击右键,在弹出菜单中选择“Run JDBCExample.main()”菜单项。如下图所示。 在IntelliJ IDEA输出窗口查看样例代码中的HQL所查询出的结果会有如下信息: Create table success! _c0 0 Delete table success!
  • JDBC样例工程的命令行形式运行 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUC CES S”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的jar包。 在Windows或Linux上创建一个目录作为运行目录,如“D:\jdbc_example”(Windows环境)或“/opt/jdbc_example”(Linux环境),将1中生成的“target”目录下包名中含有“-with-dependencies”字段的jar包放进该路径下,并在该目录下创建子目录“src/main/resources”。将jdbc-examples工程resources目录下的所有文件拷贝到“resources”下。 在Windows环境下执行: cd /d d:\jdbc_example java -jar hive-jdbc-example-1.0-SNAPSHOT-jar-with-dependencies.jar 在Linux环境下执行: chmod +x /opt/jdbc_example -R cd /opt/jdbc_example java -jar hive-jdbc-example-1.0-SNAPSHOT-jar-with-dependencies.jar 以上jar包名称仅供参考,具体名称以实际生成为主。 在命令行终端查看样例代码中的HQL所查询出的结果。 Windows环境运行成功结果会有如下信息: Create table success! _c0 0 Delete table success! Linux环境运行成功结果会有如下信息: Create table success! _c0 0 Delete table success!
  • 回答 导致这个问题的主要原因是,yarn-client和yarn-cluster模式在提交任务时setAppName的执行顺序不同导致,yarn-client中setAppName是在向yarn注册Application之前读取,yarn-cluser模式则是在向yarn注册Application之后读取,这就导致yarn-cluster模式设置的应用名不生效。 解决措施: 在spark-submit脚本提交任务时用--name设置应用名和sparkconf.setAppName(appname)里面的应用名一样。 比如我们代码里设置的应用名为Spark Pi,用yarn-cluster模式提交应用时可以这样设置,在--name后面添加应用名,执行的命令如下: ./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --name SparkPi jars/original-spark-examples*.jar 10
  • 回答 第三方jar包(例如自定义udf)区分x86和TaiShan版本时,混合使用方案: 进入到服务端spark2x sparkResource的安装目录(这个集群安装过程中可能会安装在多个节点上,随便进入一个安装节点,cd到sparkResource的安装目录)。 准备好自己的jar包例如xx.jar的x86版本和TaiShan版本。将x86版本和TaiShan版本的xx.jar分别复制到当前目录的x86文件夹和TaiShan文件夹里面。 在当前目录下执行以下命令将jar包打包: zip -qDj spark-archive-2x-x86.zip x86/* zip -qDj spark-archive-2x-arm.zip arm/* 执行以下命令查看hdfs上的spark2x依赖的jar包: hdfs dfs -ls /user/spark2x/jars/8.1.0.1 8.1.0.1是版本号,不同版本不同。 执行以下命令移动hdfs上旧的jar包文件到其他目录,例如移动到“tmp”目录。 hdfs dfs -mv /user/spark2x/jars/8.1.0.1/spark-archive-2x-arm.zip /tmp hdfs dfs -mv /user/spark2x/jars/8.1.0.1/spark-archive-2x-x86.zip /tmp 上传3中打包的spark-archive-2x-arm.zip和spark-archive-2x-x86.zip到hdfs的/user/spark2x/jars/8.1.0.1目录下,上传命令如下: hdfs dfs -put spark-archive-2x-arm.zip /user/spark2x/jars/8.1.0.1/ hdfs dfs -put spark-archive-2x-x86.zip /user/spark2x/jars/8.1.0.1/ 上传完毕后删除本地的spark-archive-2x-arm.zip,spark-archive-2x-x86.zip文件。 对其他的sparkResource安装节点执行1~2。 进入webUI重启spark2x的jdbcServer实例。 重启后,需要更新客户端配置。按照客户端所在的机器类型(x86、TaiShan)复制xx.jar的相应版本到客户端的spark2x安装目录${install_home}/Spark2x/spark/jars文件夹中。${install_home}是用户的客户端安装路径,用户需要填写实际的安装目录;若本地的安装目录为/opt/hadoopclient,那么就复制相应版本xx.jar到/opt/hadoopclient/Spark2x/spark/jars文件夹里。
  • SpringBoot样例工程的命令行形式运行 在IDEA界面使用Maven执行install。 当输出“BUILD SUCCESS”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“flink-dws-sink-example-1.0.0-SNAPSHOT”字段的Jar包。 在Linux上进入客户端安装目录,如“/opt/client/Flink/flink/conf”作为作为运行目录,将1中生成的“target”目录下包名中含有“flink-dws-sink-example-1.0.0-SNAPSHOT”字段的Jar包放进该路径。 执行以下命令创建yarn-session。 yarn-session.sh -t ssl/ -nm "session-spring11" -d 执行以下命令启动SpringBoot服务。 执行 GaussDB (DWS)样例 flink run flink-dws-sink-example.jar
  • 在Linux调测程序 编译并生成Jar包,并将Jar包拷贝到与依赖库文件夹同级的目录“src/main/resources”下,具体步骤请参考在Linux调测程序。 运行Consumer样例工程的命令如下。 java -cp /opt/client/lib/*:/opt/client/src/main/resources com.huawei.bigdata.kafka.example.Consumer
  • 在Windows中调测程序 确保本地的hosts文件中配置了远程集群所有主机的主机名和业务IP映射关系。 通过IntelliJ IDEA可直接运行Producer.java,如图1所示: 图1 运行Producer.java运行 运行后弹出控制台窗口,可以看到,Producer正在向默认topic(example-metric1)发送消息,每发送10条,打印一条日志。 图2 Producer运行窗口
  • 操作步骤 获取样例代码。 下载样例工程的Maven工程源码和配置文件,请参见获取代码样例工程。 将样例代码导入IDEA中。 获取配置文件。 从集群的客户端中获取文件。在“$SPARK_HOME/conf”中下载hive-site.xml与spark-defaults.conf文件到本地。 在HDFS中上传数据。 在Liunx中新建文本文件data,将如下数据内容保存到data文件中。 Miranda,32 Karlie,23 Candice,27 在Linux系统HDFS客户端使用命令hadoop fs -mkdir /data(hdfs dfs命令有同样的作用),创建对应目录。 在Linux系统HDFS客户端使用命令hadoop fs -put data /data,上传数据文件。 在样例代码中配置相关参数。 将加载数据的sql语句改为“LOAD DATA INPATH 'hdfs:/data/data' INTO TABLE CHILD”。 在程序运行时添加运行参数,分别为hive-site.xml与spark-defaults.conf文件的路径。 运行程序。
  • 操作场景 在程序代码完成开发后,您可以上传至Linux客户端环境中运行应用。使用Scala或Java语言开发的应用程序在Spark客户端的运行步骤是一样的。 使用Python开发的Spark应用程序无需打包成jar,只需将样例工程拷贝到编译机器上即可。 用户需保证worker和driver的Python版本一致,否则将报错:"Python in worker has different version %s than that in driver %s."。 用户需保证Maven已配置华为镜像站中SDK的Maven镜像仓库,具体可参考华为开源镜像配置方式
  • 操作步骤 打开IDEA工具,选择“Create New Project”。 图1 创建工程 在“New Project”页面,选择“Scala”开发环境,并选择“Scala Module”,然后单击“Next”。 如果您需要新建Java语言的工程,选择对应参数即可。 图2 选择开发环境 在工程信息页面,填写工程名称和存放路径,设置JDK版本和Scala SDK,然后单击“Finish”完成工程创建。 图3 填写工程信息
  • 问题现象 Spark能对接很多的第三方工具,因此在使用过程中经常会依赖一堆的三方包。而有一些包MRS已经自带,这样就有可能造成代码使用的jar包版本和集群自带的jar包版本不一致,在使用过程中就有可能出现jar包冲突的情况。 常见的jar包冲突报错有: 1、报错类找不到:java.lang.NoClassDefFoundError 2、报错方法找不到:java.lang.NoSuchMethodError
  • 原因分析 以自定义UDF为例: 报错信息显示是找不到类。 首先需要确认的是这个类属于的jar包是否在jvm的classpath里面, spark自带的jar都在“spark客户端目录/jars/”。 确认是否存在多个jar包拥有这个类。 如果是其他依赖包,可能是没有使用--jars添加到任务里面。 如果是已经添加到任务里面,但是依旧没有取到,可能是因为配置文件的driver或者executor的classpath配置不正确,可以查看日志确认是否加载到环境。 另外可能报错是类初始化失败导致后面使用这个类的时候出现上述报错,需要确认是否在之前就有初始化失败或者其他报错的情况发生。 报错信息显示找不到方法。 确认这个方法对应的类所在的jar包是否加载到jvm的classpath里面,spark自带的类都在“spark客户端目录/jars/”。 确认是否有多个jar包包含这个类(尤其注意相同工具的不同版本)。 如果报错是Hadoop相关的包,有可能是因为使用的Hadoop版本不一致导致部分方法已经更改。 如果报错的是三方包里面的类,可能是因为Spark已经自带了相关的jar包,但是和代码中使用的版本不一致。
  • 操作步骤 “doris-jdbc-example”样例运行成功后,显示信息如下: 2023-08-17 23:13:13,473 | INFO | main | Start execute doris example. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:41) 2023-08-17 23:13:13,885 | INFO | main | Start create database. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:44) 2023-08-17 23:13:13,949 | INFO | main | Database created successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:46) 2023-08-17 23:13:13,950 | INFO | main | Start create table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:49) 2023-08-17 23:13:14,132 | INFO | main | Table created successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:51) 2023-08-17 23:13:14,133 | INFO | main | Start to insert data into the table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:54) 2023-08-17 23:13:14,733 | INFO | main | Inserting data to the table succeeded. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:56) 2023-08-17 23:13:14,733 | INFO | main | Start to query table data. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:59) 2023-08-17 23:13:15,079 | INFO | main | Start to print query result. | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:121) 2023-08-17 23:13:15,079 | INFO | main | c1 c2 c3 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:126) 2023-08-17 23:13:15,079 | INFO | main | 0 0 0 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 1 10 100 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 2 20 200 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 3 30 300 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 4 40 400 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 5 50 500 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 6 60 600 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 7 70 700 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | 8 80 800 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | 9 90 900 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | Querying table data succeeded. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:61) 2023-08-17 23:13:15,081 | INFO | main | Start to delete the table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:64) 2023-08-17 23:13:15,114 | INFO | main | Table deleted successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:66) 2023-08-17 23:13:15,124 | INFO | main | Doris example execution successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:71) Process finished with exit code 0 Doris对接SpringBoot运行结果 在浏览器上访问链接“http://样例运行节点IP地址:8080/doris/example/executesql”,IDEA正常打印日志,请求返回如下图所示: 图1 返回样例运行信息
  • 场景说明 在安全集群环境下,各个组件之间的相互通信不能够简单的互通,而需要在通信之前进行相互认证,以确保通信的安全性。用户在提交Flink应用程序时,需要与Yarn、HDFS等之间进行通信。那么提交Flink的应用程序中需要设置安全认证,确保Flink程序能够正常运行。 当前Flink系统支持认证和加密传输,要使用认证和加密传输,用户需要安装Flink客户端并配置安全认证,本章节以“/opt/hadoopclient”为客户端安装目录为例,介绍安装客户端及配置安全认证。客户端安装目录请根据实际修改。
  • SpringBoot样例工程的命令行形式运行 在IDEA界面左下方单击“Terminal”进入终端,执行命令mvn clean package进行编译。 当输出“BUILD SUCCESS”,表示编译成功,如下图所示。编译成功后将会在样例工程的target下生成含有“-with-dependencies”字段的Jar包。 在Windows或Linux上创建一个目录作为运行目录,如“D:\hive-rest-client-example”(Windows环境)或“/opt/hive-rest-client-example”(Linux环境),将1中生成的“target”目录下包名中含有“-with-dependencies”字段的Jar包放进该路径下,并在该目录下创建子目录“src/main/resources"。将hive-rest-client-example工程resources目录下的所有文件拷贝到“resources”下。 执行以下命令启动SpringBoot服务: 在Windows环境下执行: cd /d d:\hive-rest-client-example java -jar hive-rest-client-example-8.1.0.1-3.3.1-SNAPSHOT-jar-with-dependencies.jar 在Linux环境下执行: chmod +x /opt/hive-rest-client-example -R cd /opt/hive-rest-client-example java -jar hive-rest-client-example-8.1.0.1-3.3.1-SNAPSHOT-jar-with-dependencies.jar 以上Jar包名称仅供参考,具体名称以实际生成为主。 调用Hive的SpringBoot样例接口触发样例代码运行: Windows环境运行方式: 打开浏览器,输入:http://localhost:8080/hive/example/executesql。 Linux环境下执行运行方式: 在2中存放Jar的节点上执行curl http://localhost:8080/hive/example/executesql命令。 运行样例代码时日志中可能会打印以下日志信息,虽然日志级别显示ERROR,但是不影响执行结果: ERROR 51320 --- [c-8-EventThread] o.a.c.framework.imps.EnsembleTracker : Invalid config event received: {version=100000000, server.48=ZooKeeper节点IP地址:ZooKeeper端口号:ZooKeeper端口号:participant...} 查看样例代码中的HQL所查询出的结果。 Windows环境运行成功结果会有如下信息: =========================== Hive Example Start =========================== Start create table. Table created successfully. Start to insert data into the table. Inserting data to the table succeeded. Start to query table data. Query result : employees_infoa.id employees_infoa.age employees_infoa.name 1 31 SJK 2 25 HS 3 28 HT Querying table data succeeded. Start to delete the table. Table deleted successfully. =========================== Hive Example End =========================== Linux环境运行成功结果会有如下信息: =========================== Hive Example Start =========================== Start create table. Table created successfully. Start to insert data into the table. Inserting data to the table succeeded. Start to query table data. Query result : employees_infoa.id employees_infoa.age employees_infoa.name 1 31 SJK 2 25 HS 3 28 HT Querying table data succeeded. Start to delete the table. Table deleted successfully. =========================== Hive Example End ===========================
  • 操作步骤 “doris-jdbc-example”样例运行成功后,显示信息如下: 2023-08-17 23:13:13,473 | INFO | main | Start execute doris example. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:41) 2023-08-17 23:13:13,885 | INFO | main | Start create database. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:44) 2023-08-17 23:13:13,949 | INFO | main | Database created successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:46) 2023-08-17 23:13:13,950 | INFO | main | Start create table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:49) 2023-08-17 23:13:14,132 | INFO | main | Table created successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:51) 2023-08-17 23:13:14,133 | INFO | main | Start to insert data into the table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:54) 2023-08-17 23:13:14,733 | INFO | main | Inserting data to the table succeeded. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:56) 2023-08-17 23:13:14,733 | INFO | main | Start to query table data. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:59) 2023-08-17 23:13:15,079 | INFO | main | Start to print query result. | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:121) 2023-08-17 23:13:15,079 | INFO | main | c1 c2 c3 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:126) 2023-08-17 23:13:15,079 | INFO | main | 0 0 0 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 1 10 100 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 2 20 200 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 3 30 300 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 4 40 400 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 5 50 500 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 6 60 600 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,080 | INFO | main | 7 70 700 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | 8 80 800 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | 9 90 900 | com.huawei.bigdata.doris.example.JDBCExample.query(JDBCExample.java:134) 2023-08-17 23:13:15,081 | INFO | main | Querying table data succeeded. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:61) 2023-08-17 23:13:15,081 | INFO | main | Start to delete the table. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:64) 2023-08-17 23:13:15,114 | INFO | main | Table deleted successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:66) 2023-08-17 23:13:15,124 | INFO | main | Doris example execution successfully. | com.huawei.bigdata.doris.example.JDBCExample.main(JDBCExample.java:71) Process finished with exit code 0 Doris对接SpringBoot运行结果 在浏览器上访问链接“http://样例运行节点IP地址:8080/doris/example/executesql”,IDEA正常打印日志,请求返回如下图所示: 图1 返回样例运行信息
  • 操作步骤 通过运行日志可查看应用提交后的执行详情,例如,hbase-example样例运行成功后,显示信息如下: 2280 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- Entering testCreateTable. 3091 [main] WARNcom.huawei.hadoop.hbase.example.HBaseSample- table already exists 3091 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- Exiting testCreateTable. 3091 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- Entering testPut. 3264 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- Put successfully. 3264 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- Exiting testPut. 3264 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- Entering testGet. 3283 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- 012005000201:info,address,Shenzhen, Guangdong 3283 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- 012005000201:info,name,yugeZhang San 3283 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- Get data successfully. 3283 [main] INFOcom.huawei.hadoop.hbase.example.HBaseSample- Exiting testGet. 3283 [main] INFOorg.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation- Closing zookeeper sessionid=0xd000035eba278e9 3297 [main] INFOorg.apache.zookeeper.ZooKeeper- Session: 0xd000035eba278e9 closed 3297 [main-EventThread] INFOorg.apache.zookeeper.ClientCnxn- EventThread shut down -----------finish HBase ------------------- HBase/Phoenix对接SpringBoot运行结果: 在浏览器上访问链接“http://样例运行节点IP地址:8080/hbase/HBaseDemo”和“http://样例运行节点IP地址:8080/hbase/PhoenixDemo”,IDEA正常打印日志,请求返回“finish HBase”和“finish Phoenix",如下图所示: 图1 返回“finish HBase” 图2 返回“finish Phoenix"
共100000条