Massively Parallel Processing
GreenPlum
01.Greenplum MPP 架构
02.Primary/Mirror 同步机制
03.Greenplum 计算能力估算
04.segment mirrir mode
05.最佳配置
06.Install Greenplum for CentOS 8.4
07.greenplum adds mirror to master and segment
08.Greenplum Command Center v6.22.0
09.Greenplum平台扩展框架(PXF)
11.management tool
12.管理数据库
13.分布式数据库存储及查询处理
14.角色权限及客户端认证管理
系统配置和参数
Greenplum to Greenplum modules
18.gptransfer and gpcopy
22.Apache MADlib
21.gpbackup and gprestore
20.备份与恢复
gpfdist 原理解析
Greenplum Stream Server(GPSS)
17.Loading and unloading data
16.数据库性能
15.Database objects
Greenplum mapreduce
Apache Doris
安装 Apache Doris
本文档使用 MrDoc 发布
-
+
home page
安装 Apache Doris
# 1.Apache Doris Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景,这个简短的指南将告诉你如何下载 Doris 最新稳定版本,在单节点上安装并运行它,包括创建数据库、数据表、导入数据及查询等。 ## 1.1.软硬件需求 1. Linux 操作系统版本需求 CentOS 7.1 及以上 2. 软件需求 - Java 1.8 及以上 - GCC 4.8.2 及以上 3. 操作系统安装要求 设置系统最大打开文件句柄数 ``` cat > /etc/security/limits.conf <<EOF * soft nofile 65536 * hard nofile 65536 EOF ``` 4. 时钟同步 Doris 的元数据要求时间精度要小于5000ms,所以所有集群所有机器要进行时钟同步,避免因为时钟问题引发的元数据不一致导致服务出现异常。 5.关闭交换分区(swap) Linux交换分区会给Doris带来很严重的性能问题,需要在安装之前禁用交换分区 6.文件系统 推荐使用ext4文件系统,在安装操作系统的时候,请选择ext4文件系统。 7. 存储空间 - FE 的磁盘空间主要用于存储元数据,包括日志和 image。通常从几百 MB 到几个 GB 不等。 - BE 的磁盘空间主要用于存放用户数据,总磁盘空间按用户总数据量 * 3(3副本)计算,然后再预留额外 40% 的空间用作后台 compaction 以及一些中间数据的存放。 - 一台机器上可以部署多个 BE 实例,但是只能部署一个 FE。如果需要 3 副本数据,那么至少需要 3 台机器各部署一个 BE 实例(而不是1台机器部署3个BE实例)。多个FE所在服务器的时钟必须保持一致(允许最多5秒的时钟偏差) - 测试环境也可以仅适用一个 BE 进行测试。实际生产环境,BE 实例数量直接决定了整体查询延迟。 - 所有部署节点关闭 Swap。 8. FE 节点的数量 - FE 角色分为 Follower 和 Observer,(Leader 为 Follower 组中选举出来的一种角色,以下统称 Follower)。 - FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。 - Follower 的数量必须为奇数,Observer 数量随意。 - 根据以往经验,当集群可用性要求很高时(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。 > 通常我们建议 10 ~ 100 台左右的机器,来充分发挥 Doris 的性能(其中 3 台部署 FE(HA),剩余的部署 BE) > 当然,Doris的性能与节点数量及配置正相关。在最少4台机器(一台 FE,三台 BE,其中一台 BE 混部一个 Observer FE 提供元数据备份),以及较低配置的情况下,依然可以平稳的运行 Doris。 > 如果 FE 和 BE 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。 9. Broker 部署 Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可 ## 1.2.网络需求 Doris 各个实例直接通过网络进行通讯。以下表格展示了所有需要的端口 | 实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 | | --- | --- | --- | --- | --- | | BE | be_port | 9060 | FE --> BE | BE 上 thrift server 的端口,用于接收来自 FE 的请求 | | BE | webserver_port | 8040 | BE <--> BE | BE 上的 http server 的端口 | | BE | heartbeat_service_port | 9050 | FE --> BE | BE 上心跳服务端口(thrift),用于接收来自 FE 的心跳 | | BE | brpc_port | 8060 | FE <--> BE, BE <--> BE | BE 上的 brpc 端口,用于 BE 之间通讯 | | FE | http_port | 8030 | FE <--> FE,用户 <--> FE | FE 上的 http server 端口 | | FE | rpc_port | 9020 | BE --> FE, FE <--> FE | FE 上的 thrift server 端口,每个fe的配置需要保持一致 | | FE | query_port | 9030 | 用户 <--> FE | FE 上的 mysql server 端口 | | FE | edit_log_port | 9010 | FE <--> FE | FE 上的 bdbje 之间通信用的端口 | | Broker | broker_ipc_port | 8000 | FE --> Broker, BE --> Broker | Broker 上的 thrift server,用于接收请求 | 当部署多个 FE 实例时,要保证 FE 的 http_port 配置相同。部署前请确保各个端口在应有方向上的访问权限。 因为有多网卡的存在,或因为安装过 docker 等环境导致的虚拟网卡的存在,同一个主机可能存在多个不同的 ip。当前 Doris 并不能自动识别可用 IP。所以当遇到部署主机上有多个 IP 时,必须通过 priority_networks 配置项来强制指定正确的 IP。 priority_networks 是 FE 和 BE 都有的一个配置,配置项需写在 fe.conf 和 be.conf 中。该配置项用于在 FE 或 BE 启动时,告诉进程应该绑定哪个IP。示例如下: ``` priority_networks=10.1.3.0/24 ``` 这是一种 CIDR 的表示方法。FE 或 BE 会根据这个配置项来寻找匹配的IP,作为自己的 localIP。 当配置完 priority_networks 并启动 FE 或 BE 后,只是保证了 FE 或 BE 自身的 IP 进行了正确的绑定。而在使用 ADD BACKEND 或 ADD FRONTEND 语句中,也需要指定和 priority_networks 配置匹配的 IP,否则集群无法建立。举例: BE 的配置为:priority_networks=10.1.3.0/24 但是在 ADD BACKEND 时使用的是:ALTER SYSTEM ADD BACKEND "192.168.0.1:9050"; 则 FE 和 BE 将无法正常通信。这时,必须 DROP 掉这个添加错误的 BE,重新使用正确的 IP 执行 ADD BACKEND。 BROKER 当前没有,也不需要 priority_networks 这个选项。Broker 的服务默认绑定在 0.0.0.0 上。只需在 ADD BROKER 时,执行正确可访问的 BROKER IP 即可。 表名大小写敏感性设置 doris默认为表名大小写敏感,如有表名大小写不敏感的需求需在集群初始化时进行设置。表名大小写敏感性在集群初始化完成后不可再修改。详细参见 变量 中关于lower_case_table_names变量的介绍。 # 2.下载 Doris Doris 运行在 Linux 环境中,推荐 CentOS 7.x 或者 Ubuntu 16.04 以上版本,同时你需要安装 Java 运行环境(JDK最低版本要求是8),要检查你所安装的 Java 版本,请运行以下命令: ``` java -version ``` 接下来,下载 Doris 的最新二进制版本,然后解压。 https://doris.apache.org/zh-CN/download/ ``` tar zxf apache-doris-x.x.x.tar.gz ``` # 3.配置 Doris ## 3.1.配置 FE 进入到 apache-doris-x.x.x/fe 目录 ``` cd apache-doris-x.x.x/fe ``` step 1.配置 FE 修改 FE 配置文件 conf/fe.conf ,主要修改两个参数:priority_networks 。 a.添加 priority_networks 参数 ``` priority_networks=172.23.16.0/24 ``` b.meta_dir是元数据存放位置。默认值为 ${DORIS_HOME}/doris-meta。需手动创建该目录。 ``` meta_dir=/path/your/doris-meta ``` c.JAVA_OPTS 默认 java 最大堆内存为 4GB,建议生产环境调整至 8G 以上 step 2.启动 FE 在 FE 安装目录下执行下面的命令,来完成 FE 的启动。 ``` ./bin/start_fe.sh --daemon ``` step 3.查看 FE 运行状态 你可以通过下面的命令来检查 Doris 是否启动成功 ``` curl http://127.0.0.1:8030/api/bootstrap ``` 这里 IP 和 端口分别是 FE 的 IP 和 http_port(默认8030),如果是你在 FE 节点执行,直接运行上面的命令即可。 如果返回结果中带有 "msg":"success" 字样,则说明启动成功。 你也可以通过 Doris FE 提供的Web UI 来检查,在浏览器里输入地址 ``` http:// fe_ip:8030 ``` 可以看到下面的界面,说明 FE 启动成功  使用 Doris 内置的默认用户 root 进行登录,密码是空 这是一个 Doris 的管理界面,只能拥有管理权限的用户才能登录,普通用户不能登录。 step 4.连接 FE 通过 MySQL 客户端来连接 Doris FE,下载免安装的 MySQL 客户端 解压刚才下载的 MySQL 客户端,在 bin/ 目录下可以找到 mysql 命令行工具。然后执行下面的命令连接 Doris。 ``` mysql -uroot -P9030 -h127.0.0.1 ``` - root 用户是 doris 内置的默认用户,也是超级管理员用户,具体的用户权限查看 权限管理 - -P : Doris 的查询端口,默认端口是 9030,对应的是fe.conf里的 query_port - -h : FE IP地址,如果你的客户端和 FE 安装在同一个节点可以使用127.0.0.1,这种也是 Doris 提供的如果你忘记 root 密码,可以通过这种方式不需要密码直接连接登录,进行对 root 密码进行重置 执行下面的命令查看 FE 运行状态,然后你可以看到类似下面的结果: ``` mysql> show frontends\G *************************** 1. row *************************** Name: 172.21.32.5_9010_1660549353220 IP: 172.21.32.5 EditLogPort: 9010 HttpPort: 8030 QueryPort: 9030 RpcPort: 9020 Role: FOLLOWER IsMaster: true ClusterId: 1685821635 Join: true Alive: true ReplayedJournalId: 49292 LastHeartbeat: 2022-08-17 13:00:45 IsHelper: true ErrMsg: Version: 1.1.2-rc03-ca55ac2 CurrentConnected: Yes 1 row in set (0.03 sec) ``` 如果 IsMaster、Join 和 Alive 三列均为true,则表示节点正常。 step 5.停止 FE 节点 Doris FE 的停止可以通过下面的命令完成 ``` ./bin/stop_fe.sh ``` ## 3.2配置 BE 我们进入到 apache-doris-x.x.x/be 目录 ``` cd apache-doris-x.x.x/be ``` step 1.修改 FE 配置文件 conf/be.conf ,这里我们主要修改两个参数:priority_networks' 及 storage_root 。 a. 添加 priority_networks 参数 ``` priority_networks=172.23.16.0/24 ``` b.配置 BE 数据存储目录 ``` storage_root_path=/path/your/data_dir ``` storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ; 分隔(最后一个目录后不要加 ;)。 可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开。如果用户不是SSD和HDD磁盘混合使用的情况,不需要按照如下示例一和示例二的配置方法配置,只需指定存储目录即可;也不需要修改FE的默认存储介质配置 如果是SSD磁盘要在目录后面加上.SSD,HDD磁盘在目录后面加.HDD ``` storage_root_path=/home/disk1/doris.HDD;/home/disk2/doris.SSD;/home/disk2/doris ``` - /home/disk1/doris.HDD : 表示存储介质是HDD; - /home/disk2/doris.SSD: 表示存储介质是SSD; - /home/disk2/doris: 表示存储介质是HDD(默认) 不论HDD磁盘目录还是SSD磁盘目录,都无需添加后缀,storage_root_path参数里指定medium即可 ``` storage_root_path=/home/disk1/doris,medium:hdd;/home/disk2/doris,medium:ssd ``` - /home/disk1/doris,medium:hdd: 表示存储介质是HDD; - /home/disk2/doris,medium:ssd: 表示存储介质是SSD; c.BE webserver_port端口配置 如果 be 部署在 hadoop 集群中,注意调整 be.conf 中的 webserver_port = 8040 ,以免造成端口冲突 step 2.启动 BE 在 BE 安装目录下执行下面的命令,来完成 BE 的启动。 ``` ./bin/start_be.sh --daemon ``` BE 进程将启动并进入后台执行。日志默认存放在 be/log/ 目录下。如启动失败,可以通过查看 be/log/be.log 或者 be/log/be.out 查看错误信息。 ## 3.3.在 FE 中添加所有 BE 节点 BE 节点需要先在 FE 中添加,才可加入集群。可以使用 mysql-client(下载MySQL 5.7) 连接到 FE: ``` ./mysql-client -h fe_host -P query_port -uroot ``` 其中 fe_host 为 FE 所在节点 ip;query_port 在 fe/conf/fe.conf 中的;默认使用 root 账户,无密码登录。 登录后,执行以下命令来添加每一个 BE: ``` ALTER SYSTEM ADD BACKEND "be_host:heartbeat-service_port"; ``` - be_host_ip:这里是你 BE 的 IP 地址,和你在 be.conf 里的 priority_networks 匹配 - heartbeat_service_port:这里是你 BE 的心跳上报端口,和你在 be.conf 里的 heartbeat_service_port 匹配,默认是 9050。 step 4.查看 BE 运行状态 你可以在 MySQL 命令行下执行下面的命令查看 BE 的运行状态。 ``` mysql> SHOW BACKENDS\G *************************** 1. row *************************** BackendId: 10003 Cluster: default_cluster IP: 172.21.32.5 HeartbeatPort: 9050 BePort: 9060 HttpPort: 8040 BrpcPort: 8060 LastStartTime: 2022-08-16 15:31:37 LastHeartbeat: 2022-08-17 13:33:17 Alive: true SystemDecommissioned: false ClusterDecommissioned: false TabletNum: 170 DataUsedCapacity: 985.787 KB AvailCapacity: 782.729 GB TotalCapacity: 984.180 GB UsedPct: 20.47 % MaxDiskUsedPct: 20.47 % Tag: {"location" : "default"} ErrMsg: Version: 1.1.2-rc03-ca55ac2 Status: {"lastSuccessReportTabletsTime":"2022-08-17 13:33:05","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} 1 row in set (0.01 sec) ``` Alive : true表示节点运行正常 step 5.停止 BE 节点 Doris BE 的停止可以通过下面的命令完成 ``` ./bin/stop_be.sh ``` # 4.(可选)FS_Broker 部署 Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS 、对象存储的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。 step 1.拷贝源码 fs_broker 的 output 目录下的相应 Broker 目录到需要部署的所有节点上。建议和 BE 或者 FE 目录保持同级。 step 2.修改相应 Broker 配置 step 3.启动 Broker ``` bin/start_broker.sh --daemon ``` step 4.添加 Broker 要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表。 ``` ALTER SYSTEM ADD BROKER broker_name "broker_host1:broker_ipc_port1","broker_host2:broker_ipc_port2",...; ``` 其中 broker_host 为 Broker 所在节点 ip;broker_ipc_port 在 Broker 配置文件中的conf/apache_hdfs_broker.conf。 step 5.查看 Broker 状态 使用 mysql-client 连接任一已启动的 FE,执行以下命令查看 Broker 状态:SHOW PROC "/brokers"; 注:在生产环境中,所有实例都应使用守护进程启动,以保证进程退出后,会被自动拉起,如 Supervisor。如需使用守护进程启动,在 0.9.0 及之前版本中,需要修改各个 start_xx.sh 脚本,去掉最后的 & 符号。从 0.10.0 版本开始,直接调用 sh start_xx.sh 启动即可。 # 创建数据表 创建一个数据库 ``` create database demo; ``` 创建数据表 ``` use demo; CREATE TABLE IF NOT EXISTS demo.example_tbl ( `user_id` LARGEINT NOT NULL COMMENT "用户id", `date` DATE NOT NULL COMMENT "数据灌入日期时间", `city` VARCHAR(20) COMMENT "用户所在城市", `age` SMALLINT COMMENT "用户年龄", `sex` TINYINT COMMENT "用户性别", `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间", `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费", `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间", `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间" ) AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`) DISTRIBUTED BY HASH(`user_id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1" ); ``` 示例数据 ``` 10000,2017-10-01,北京,20,0,2017-10-01 06:00:00,20,10,10 10000,2017-10-01,北京,20,0,2017-10-01 07:00:00,15,2,2 10001,2017-10-01,北京,30,1,2017-10-01 17:05:45,2,22,22 10002,2017-10-02,上海,20,1,2017-10-02 12:59:12,200,5,5 10003,2017-10-02,广州,32,0,2017-10-02 11:20:00,30,11,11 10004,2017-10-01,深圳,35,0,2017-10-01 10:00:15,100,3,3 10004,2017-10-03,深圳,35,0,2017-10-03 10:20:22,11,6,6 ``` 将上面的数据保存在test.csv文件中。 # 导入数据 这里我们通过Stream load 方式将上面保存到文件中的数据导入到我们刚才创建的表里。 ``` curl --location-trusted -u root: -T test.csv -H "column_separator:," http://127.0.0.1:8030/api/demo/example_tbl/_stream_load ``` -T test.csv : 这里使我们刚才保存的数据文件,如果路径不一样,请指定完整路径 -u root : 这里是用户名密码,我们使用默认用户root,密码是空 127.0.0.1:8030 : 分别是 fe 的 ip 和 http_port 执行成功之后我们可以看到下面的返回信息 ``` { "TxnId": 30303, "Label": "8690a5c7-a493-48fc-b274-1bb7cd656f25", "TwoPhaseCommit": "false", "Status": "Success", "Message": "OK", "NumberTotalRows": 7, "NumberLoadedRows": 7, "NumberFilteredRows": 0, "NumberUnselectedRows": 0, "LoadBytes": 399, "LoadTimeMs": 381, "BeginTxnTimeMs": 3, "StreamLoadPutTimeMs": 5, "ReadDataTimeMs": 0, "WriteDataTimeMs": 191, "CommitAndPublishTimeMs": 175 } ``` NumberLoadedRows: 表示已经导入的数据记录数 NumberTotalRows: 表示要导入的总数据量 Status :Success 表示导入成功 到这里我们已经完成的数据导入,下面就可以根据我们自己的需求对数据进行查询分析了。 查询数据 我们上面完成了建表,输数据导入,下面我们就可以体验 Doris 的数据快速查询分析能力。 ``` mysql> select * from example_tbl; +---------+------------+--------+------+------+---------------------+------+----------------+----------------+ | user_id | date | city | age | sex | last_visit_date | cost | max_dwell_time | min_dwell_time | +---------+------------+--------+------+------+---------------------+------+----------------+----------------+ | 10000 | 2017-10-01 | 北京 | 20 | 0 | 2017-10-01 07:00:00 | 35 | 10 | 2 | | 10001 | 2017-10-01 | 北京 | 30 | 1 | 2017-10-01 17:05:45 | 2 | 22 | 22 | | 10002 | 2017-10-02 | 上海 | 20 | 1 | 2017-10-02 12:59:12 | 200 | 5 | 5 | | 10003 | 2017-10-02 | 广州 | 32 | 0 | 2017-10-02 11:20:00 | 30 | 11 | 11 | | 10004 | 2017-10-01 | 深圳 | 35 | 0 | 2017-10-01 10:00:15 | 100 | 3 | 3 | | 10004 | 2017-10-03 | 深圳 | 35 | 0 | 2017-10-03 10:20:22 | 11 | 6 | 6 | +---------+------------+--------+------+------+---------------------+------+----------------+----------------+ 6 rows in set (0.02 sec) mysql> select * from example_tbl where city='上海'; +---------+------------+--------+------+------+---------------------+------+----------------+----------------+ | user_id | date | city | age | sex | last_visit_date | cost | max_dwell_time | min_dwell_time | +---------+------------+--------+------+------+---------------------+------+----------------+----------------+ | 10002 | 2017-10-02 | 上海 | 20 | 1 | 2017-10-02 12:59:12 | 200 | 5 | 5 | +---------+------------+--------+------+------+---------------------+------+----------------+----------------+ 1 row in set (0.05 sec) mysql> select city, sum(cost) as total_cost from example_tbl group by city; +--------+------------+ | city | total_cost | +--------+------------+ | 广州 | 30 | | 上海 | 200 | | 北京 | 37 | | 深圳 | 111 | +--------+------------+ 4 rows in set (0.05 sec) ```
Seven
Oct. 29, 2022, 10:15 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
share
link
type
password
Update password