云服务器内容精选

  • 相关系统配置 FE配置。 下面几个配置属于Broker load的系统级别配置,也就是作用于所有Broker load导入任务的配置。主要通过修改FE配置项来调整配置值。 max_bytes_per_broker_scanner/max_broker_concurrency max_bytes_per_broker_scanner配置限制了单个BE处理的数据量的最大值。max_broker_concurrency配置限制了一个作业的最大的导入并发数。最小处理的数据量(默认64M),最大并发数,源文件的大小和当前集群BE的个数 共同决定了本次导入的并发数。 本次导入并发数=Math.min(源文件大小/最小处理量(默认64M),最大并发数,当前BE节点个数)。 本次导入单个BE的处理量=源文件大小/本次导入的并发数。 通常一个导入作业支持的最大数据量为max_bytes_per_broker_scanner*BE节点数。如果需要导入更大数据量,则需要适当调整max_bytes_per_broker_scanner参数的大小。 默认配置: 参数名:max_broker_concurrency, 默认10。 参数名:max_bytes_per_broker_scanner,默认3G,单位bytes。
  • 作业调度 系统会限制一个集群内正在运行的Broker Load作业数量,以防止同时运行过多的Load作业。 首先,FE的配置参数:desired_max_waiting_jobs会限制一个集群内未开始或正在运行(作业状态为PENDING或LOADING)的Broker Load作业数量。默认为100。如果超过这个阈值,新提交的作业将会被直接拒绝。 一个Broker Load作业会被分为pending task和loading task阶段。其中pending task负责获取导入文件的信息,而loading task会发送给BE执行具体的导入任务。 FE的配置参数async_pending_load_task_pool_size用于限制同时运行的pending task的任务数量。也相当于控制了实际正在运行的导入任务数量。该参数默认为10。也就是说,假设用户提交了100个Load作业,同时只会有10个作业会进入LOADING状态开始执行,而其他作业处于PENDING等待状态。 FE的配置参数async_loading_load_task_pool_size用于限制同时运行的loading task的任务数量。一个Broker Load作业会有1 pending task和多个loading task(等于LOAD语句中DATA INFILE子句的个数)。所以async_loading_load_task_pool_size应该大于等于async_pending_load_task_pool_size。
  • 基本原理 用户在提交导入任务后,FE会生成对应的Plan并根据目前BE的个数和文件的大小,将Plan分给多个BE执行,每个BE执行一部分导入数据。 BE在执行的过程中会从Broker拉取数据,在对数据transform之后将数据导入系统。所有BE均完成导入,由FE最终决定导入是否成功。 + | 1. user create broker load v +----+----+ | | | FE | | | +----+----+ | | 2. BE etl and load the data +--------------------------+ | | | +---v---+ +--v----+ +---v---+ | | | | | | | BE | | BE | | BE | | | | | | | +---+-^-+ +---+-^-+ +--+-^--+ | | | | | | | | | | | | 3. pull data from broker +---v-+-+ +---v-+-+ +--v-+--+ | | | | | | |Broker | |Broker | |Broker | | | | | | | +---+-^-+ +---+-^-+ +---+-^-+ | | | | | | +---v-+-----------v-+----------v-+-+ | HDFS/BOS/AFS cluster | | | +----------------------------------+
  • 开始导入 下面我们通过几个实际的场景示例来看Broker Load的使用。 数据样例: '100','101','102','103','104','105',100.00,100.01,100.02,'100',200,100.08,2022-04-01 '101','102','103','104','105','105',100.00,100.01,100.02,'100',200,100.08,2022-04-02 '102','103','104','105','106','105',100.00,100.01,100.02,'100',200,100.08,2022-04-03 准备工作: 在本地创建示例数据文件source_text.txt,并上传至hdfs的/tmp/。 在hive中创建ods_source表。 CREATE TABLE `ods_source`( `id` string, `store_id` string, `company_id` string, `tower_id` string, `commodity_id` string, `commodity_name` string, `commodity_price` double, `member_price` double, `cost_price` double, `unit` string, `quantity` string, `actual_price` double, `day ` string ) row format delimited fields terminated by ',' lines terminated by '\n' stored as textfile; 将hdfs创建的txt文件导入到ods_source表。 load data inpath '/tmp/source_text.txt' into table ods_source;
  • 导入的原子性保证 Doris的每一个导入任务,不论是使用Broker Load进行批量导入,还是使用INSERT语句进行单条导入,都是一个完整的事务操作。导入事务可以保证一批次内的数据原子生效,不会出现部分数据写入的情况。 同时,每个导入任务都会有一个Label。这个Label在数据库(Database)中是唯一的,用于唯一标识一个导入任务。Label可以由用户指定,部分导入功能也会由系统自动生成。 Label是用于保证对应的导入任务,仅能成功导入一次。一个被成功导入的Label,再次使用时,会被拒绝并报错Label already used。通过这个机制,可以在Doris侧做到At-Most-Once语义。如果结合上游系统的At-Least-Once语义,则可以实现导入数据的Exactly-Once语义。
  • 同步和异步 Doris目前的导入方式分为两类,同步和异步。如果是外部程序接入Doris的导入功能,需要判断使用导入方式是哪类再确定接入逻辑。 同步 同步导入方式即用户创建导入任务,Doris同步执行导入,执行完成后返回用户导入结果。用户可直接根据创建导入任务命令返回的结果同步判断导入是否成功。 异步 异步导入方式即用户创建导入任务后,Doris直接返回创建成功。创建成功不代表数据已经导入。导入任务会被异步执行,用户在创建成功后,需要通过轮询的方式发送命令查看导入作业的状态。如果创建失败,则可以根据失败信息,判断是否需要再次创建。 无论是异步还是同步的导入类型,都不应该在Doris返回导入失败或导入创建失败后,无休止的重试。外部系统在有限次数重试并失败后,保留失败信息,大部分多次重试均失败问题都是使用方法问题或数据本身问题。
  • 使用须知 如果导出数据时未勾选“生成单表文件”,则导出的数据文件后缀为“.zip”格式,此格式的数据文件暂不支持直接导入,需要解压后才可再次导入。 如果导出数据时勾选了“生成单表文件”,则导出的数据文件为每个单表的数据文件(“.sql”或者“.csv”格式),该情况下导出的数据文件可直接再次导入。 如果导出的MySQL 8.0实例表数量超过10万(5.7和5.6版本超过1万)时,使用导出数据库功能会报错表数量过多,无法导出数据。此时请使用导出SQL结果集功能。
  • 前提条件 已创建包含Doris服务的集群,集群内各服务运行正常。 待连接Doris数据库的节点与 MRS 集群网络互通。 创建具有Doris管理权限的用户。 集群已启用Kerberos认证(安全模式) 在 FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。 使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。 集群未启用Kerberos认证(普通模式) 使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。 已准备待导入至Doris的数据文件。
  • 字符集 PG里面的字符集支持各种字符集存储文本,包括单字节字符集,比如ISO 8859系列,以及多字节字符集,比如EUC(扩展Unix编码Extended Unix Code)、UTF-8和Mule内部编码。MPPDB中目前主要使用的字符集包括GBK、UTF-8和LATIN1。所有被支持的字符集都可以被客户端透明地使用,但少数只能在服务器上使用(即作为一种服务器端编码,GBK编码在PG中只是客户端编码,不是服务端编码,MPPDB将GBK引入到服务端编码,这是很多问题的根源)。默认的字符集是在使用initdb初始化PG数据库时选择的。在创建一个数据库实例时可以重载字符集,因此可能会有多个数据库实例并且每一个使用不同的字符集。一个重要的限制是每个数据库的字符集必须和数据库LC_CTYPE(字符分类)和LC_COLLATE (字符串排序顺序)设置兼容。对于C或POSIX,任何字符集都是允许的,但是对于其他区域只有一种字符集可以正确工作。不过,在Windows上UTF-8编码可以和任何区域配合使用。 SQL_ASCII设置与其他设置表现得相当不同。如果服务器字符集是SQL_ASCII,服务器把字节值0-127根据ASCII标准解释,而字节值128-255则当作无法解析的字符。如果设置为SQL_ASCII,就不会有编码转换。因此,这个设置基本不是用来声明所使用的指定编码,因为这个声明会忽略编码。在大多数情况下,如果使用了任何非ASCII数据,那么使用SQL_ASCII设置都是不明智的,因为PG将无法帮助你转换或者校验非ASCII字符。 数据库系统支持某种编码,主要涉及三个方面:数据库服务器支持,数据访问接口支持以及客户端工具支持。 数据库服务器字符编码 数据库服务器支持某种编码,是指数据库服务器能够从客户端接收、存储以及向客户端提供该种编码的字符(包括标识符、字符型字段值),并能将该种编码的字符转换到其它编码(如UTF-8编码转到GBK编码)。 指定数据库服务器编码:创建数据库时指定:CREATE DATABASE … ENCODING … //可以取ASCII、UTF-8、EUC_CN、……; 查看数据库编码:show server_encoding。 数据库访问接口编码 数据库访问接口支持某种编码,是指数据库访问接口要做到能对该种编码的字符进行正确读写,不应出现数据丢失、数据失真等情况。以JDBC接口为例: JDBC接口一般根据JVM的file.encoding设置client_encoding:set client_encoding to file_encoding; 将String转换成client_encoding编码的字节流,传给服务器端:原型String.getBytes(client_encoding) ; 收到服务器的字节流后,使用client_encoding构造String对象作为getString的返回值给应用程序:原型String(byte[], …, client_encoding)。 客户端编码 客户端工具支持某种编码,是指客户端工具能够显示从数据库读取该种编码的字符,也能通过本工具将该种编码的字符提交到服务器端。 指定会话的客户端编码:SET CLIENT_ENCODING TO 'value'; 查看数据库编码:Show client_encoding。
  • 区域支持 区域支持指的是应用遵守文化偏好的问题,包括字母表、排序、数字格式等。区域是在使用initdb创建一个数据库时自动被初始化的。默认情况下,initdb将会按照它的执行环境的区域设置初始化数据库,即系统已经设置好的区域。如果想要使用其他的区域,可以使用手工指定(initdb –locale=xx)。 如果想要将几种区域的规则混合起来,可以使用以下区域子类来控制本地化规则的某些方面。这些类名转换成initdb的选项名来覆盖某个特定分类的区域选择。 表1 区域支持 字段 描述 LC_COLLATE 字符串排序顺序。 LC_CTYPE 字符分类(什么是一个字符?它的大写形式是否等效?) LC_MESSAGES 消息使用的语言Language of messages。 LC_MONETARY 货币数量使用的格式。 LC_NUMERIC 数字的格式。 LC_TIME 日期和时间的格式。
  • ClickHouse通过MySQL引擎对接RDS服务 MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERT和SELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换。 MySQL引擎使用语法: CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') MySQL数据库引擎参数说明: host:port:RDS服务MySQL数据库实例IP地址和端口。 database:RDS服务MySQL数据库名。 user:RDS服务MySQL数据库用户名。 password:RDS服务MySQL数据库用户密码,命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 MySQL引擎使用示例: 连接到RDS服务的MySQL数据库。详细操作可以参考RDS服务MySQ L实例 连接。 在MySQL数据库上创建表,并插入数据。 创建表mysql_table: CREATE TABLE `mysql_table` ( `int_id` INT NOT NULL AUTO_INCREMENT, `float` FLOAT NOT NULL, PRIMARY KEY (`int_id`)); 插入表数据: insert into mysql_table (`int_id`, `float`) VALUES (1,2); 登录ClickHouse客户端安装节点。执行以下命令,切换到客户端安装目录。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建ClickHouse表的权限,具体请参见创建ClickHouse角色章节,为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行本步骤。 如果是MRS 3.1.0版本集群,则需要先执行:export CLICKHOUSE_SECURITY_ENABLED=true kinit 组件业务用户 例如,kinit clickhouseuser。 使用客户端命令连接ClickHouse。 clickhouse client --host clickhouse实例IP --user 用户名 --password --port 端口号 输入用户密码 在ClickHouse中创建MySQL引擎的数据库,创建成功后自动与MySQL服务器交换数据。 CREATE DATABASE mysql_db ENGINE = MySQL('RDS服务MySQL数据库实例IP地址:MySQL数据库实例端口', 'MySQL数据库名', 'MySQL数据库用户名', 'MySQL数据库用户名密码'); 切换到新建的数据库mysql_db,并查询表数据。 USE mysql_db; 在ClickHouse中查询MySQL数据库表数据。 SELECT * FROM mysql_table; ┌─int_id─┬─float─┐ │ 1 │ 2 │ └─────┴──── ┘ 新增插入数据后也可以正常进行查询。 INSERT INTO mysql_table VALUES (3,4); SELECT * FROM mysql_table; ┌─int_id─┬─float─┐ │ 1 │ 2 │ │ 3 │ 4 │ └─────┴──── ┘
  • 前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业执行时操作的HDFS/OBS目录、HBase表和数据。 获取外部数据源(SFTP服务器或关系型数据库)使用的用户和密码。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从SFTP、FTP和HDFS/OBS导入数据时,确保外部数据源的输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的任务需要使用指定Yarn队列功能,该用户需要已授权有相关Yarn队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
  • 前提条件 已创建包含Doris服务的集群,集群内各服务运行正常。 待连接Doris数据库的节点与MRS集群网络互通。 创建具有Doris管理权限的用户。 集群已启用Kerberos认证(安全模式) 在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。 使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。 集群未启用Kerberos认证(普通模式) 使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。 Doris中已安装并启动DBroker实例。 已安装Hive客户端。 如果Doris通过Broker Load跨集群导入数据,需要配置跨集群互信,相关操作可参考配置跨Manager集群互信。
  • 前提条件 创建或获取该任务中创建Loader作业的业务用户和密码。 确保用户已授权访问作业执行时操作的HDFS/OBS目录和数据。 确保用户已授权访问作业执行时操作的HBase表或phoenix表。 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。 使用Loader从HDFS/OBS导入数据时,确保HDFS/OBS输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。 如果设置的作业需要使用指定YARN队列功能,该用户需要已授权有相关YARN队列的权限。 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
  • ClickHouse通过MySQL引擎对接RDS服务 MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERT和SELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换。 MySQL引擎使用语法: CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') MySQL数据库引擎参数说明: host:port :RDS服务MySQL数据库实例IP地址和端口。 database :RDS服务MySQL数据库名。 user :RDS服务MySQL数据库用户名。 password:RDS服务MySQL数据库用户密码,命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 MySQL引擎使用示例: 连接到RDS服务的MySQL数据库。详细操作可以参考RDS服务MySQL实例连接。 在MySQL数据库上创建表,并插入数据。 创建表mysql_table: CREATE TABLE `mysql_table` ( `int_id` INT NOT NULL AUTO_INCREMENT, `float` FLOAT NOT NULL, PRIMARY KEY (`int_id`)); 插入表数据: insert into mysql_table (`int_id`, `float`) VALUES (1,2); 登录ClickHouse客户端安装节点。执行以下命令,切换到客户端安装目录。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户,当前用户需要具有创建ClickHouse表的权限,具体请参见ClickHouse用户及权限管理章节,为用户绑定对应角色。如果当前集群未启用Kerberos认证,则无需执行本步骤。 如果是MRS 3.1.0版本集群,则需要先执行:export CLICKHOUSE_SECURITY_ENABLED=true kinit 组件业务用户 例如,kinit clickhouseuser。 使用客户端命令连接ClickHouse。 clickhouse client --host clickhouse实例IP --user 用户名 --password --port 端口号 输入用户密码 在ClickHouse中创建MySQL引擎的数据库,创建成功后自动与MySQL服务器交换数据。 CREATE DATABASE mysql_db ENGINE = MySQL('RDS服务MySQL数据库实例IP地址:MySQL数据库实例端口', 'MySQL数据库名', 'MySQL数据库用户名', 'MySQL数据库用户名密码'); 切换到新建的数据库mysql_db,并查询表数据。 USE mysql_db; 在ClickHouse中查询MySQL数据库表数据。 SELECT * FROM mysql_table; ┌─int_id─┬─float─┐ │ 1 │ 2 │ └─────┴──── ┘ 新增插入数据后也可以正常进行查询。 INSERT INTO mysql_table VALUES (3,4); SELECT * FROM mysql_table; ┌─int_id─┬─float─┐ │ 1 │ 2 │ │ 3 │ 4 │ └─────┴──── ┘