目录
一、前言
随着大数据的发展,数据规模一旦到了一定的量级之后,业务对于数据的消费需求变得越来越强烈,基于数据的分析场景也会越来越多,数据分析也因此伴随着移动互联网的高速发展而飞速发展,具体来说,对数据的分析带来的优势是体现在诸多方面的,也因此当很多公司的业务数据达到一定规模之后就开始逐步深入挖掘数据背后的价值,这也形成了与之相关的数据分析领域的诸多岗位和业务,本篇将先介绍一款在数据分析领域具有重要地位的工具,Doris的搭建和使用。
二、数据分析概述
2.1 什么是数据分析
数据分析是指使用统计学方法、计算机科学技术和领域知识来识别模式、趋势和关联,从而从数据中提取有价值的信息的过程。数据分析可以帮助组织做出更明智的决策,优化业务流程,提高效率,以及发现新的商业机会。
2.2 数据分析目的和意义
数据分析的目的在于从数据中提取有价值的信息,帮助企业或组织更好地理解现状、解决问题、预测未来趋势,并据此作出更明智的决策。以下是数据分析的主要目的:
-
描述现状
-
描述性分析:通过总结和汇总数据来描述当前的状态或情况。例如,通过分析销售数据来了解过去一段时间内的销售表现。
-
绩效评估:评估关键绩效指标(KPIs)以衡量业务活动的效果,如销售额、客户满意度、网站流量等。
-
-
发现问题
-
诊断性分析:探讨数据背后的原因,找出影响结果的关键因素。例如,通过分析退货率高的产品来确定质量问题所在。
-
异常检测:识别数据中的异常值或不寻常的行为,帮助发现潜在的问题或机会。
-
-
预测未来
-
预测性分析:利用历史数据和统计模型来预测未来的趋势或结果。例如,基于历史销售数据预测下个月的销售量。
-
趋势分析:识别数据随时间变化的趋势,帮助组织预见市场的变化。
-
-
指导决策
-
规范性分析:提供决策支持,通过分析不同情景下的预期结果来指导最佳行动路径。例如,分析不同的市场推广策略来决定最优方案。
-
优化运营:通过分析业务流程中的瓶颈来优化操作,提高效率和降低成本。
-
-
提升用户体验
-
个性化推荐:根据用户的偏好和行为模式来提供个性化的推荐和服务,提升用户体验。
-
用户行为分析:通过分析用户的行为数据来改进产品设计和服务,增加用户粘性和满意度。
-
-
支持创新
-
新机会识别:通过数据分析发现新的市场机会或潜在的产品创新点。
-
研发辅助:在产品研发过程中,通过数据分析来验证假设、优化设计或评估性能。
-
-
风险管理
-
风险评估:通过分析历史数据来评估潜在的风险水平,例如信用风险、市场风险等。
-
欺诈检测:通过分析异常模式来识别欺诈行为。
-
2.3 数据分析常用的技术和工具
数据分析涉及多种技术和工具,这些技术和工具帮助分析师从数据中提取有价值的信息,支持决策制定。以下是数据分析中常用的一些技术和工具:
2.3.1 编程语言
数据分析中,常用的编程语言包括:
-
Python:广泛应用于数据分析,拥有丰富的库如 Pandas、NumPy、SciPy、Matplotlib、Seaborn、Scikit-Learn 等。
-
R:特别适合统计分析,拥有大量的统计和图形库。
-
SQL:用于从关系型数据库中提取和操作数据。
-
Julia:一种高性能的语言,特别适合于科学计算和数据分析。
2.3.2 数据处理和分析库
-
Pandas (Python):提供了高效的数据结构和数据分析工具。
-
NumPy (Python):用于数值计算的基础库。
-
SciPy (Python):提供了科学计算中的高级功能,如优化、插值等。
-
Scikit-Learn (Python):提供了广泛使用的机器学习算法。
-
Statsmodels (Python):用于统计建模。
-
Dplyr (R):提供了数据处理功能,如筛选、排序、聚合等。
-
ggplot2 (R):用于生成高质量的统计图形。
2.3.3 数据可视化工具
-
Matplotlib (Python):基础的绘图库。
-
Seaborn (Python):基于 Matplotlib,提供更高级的图形。
-
Plotly (Python/R):交互式图表库。
-
Tableau:强大的商业智能工具,用于创建交互式仪表板。
-
Power BI:微软的数据可视化工具,用于构建交互式报表。
-
QlikView/Qlik Sense:商业智能和数据可视化软件。
2.3.4 数据库系统
-
关系型数据库:如 MySQL、PostgreSQL、Oracle、Microsoft SQL Server 等,用于存储结构化数据。
-
NoSQL 数据库:如 MongoDB、Cassandra、Redis 等,用于存储非结构化或半结构化数据。
-
NewSQL 数据库:如 CockroachDB、TiDB 等,结合了传统 SQL 数据库的事务处理能力和 NoSQL 数据库的可扩展性。
2.3.5大数据处理框架
-
Apache Hadoop:分布式存储和处理大规模数据集的框架。
-
Apache Spark:高速集群计算框架,支持批处理、实时数据流处理、机器学习等。
-
Apache Flink:流处理和事件驱动应用的框架。
-
Apache Hive:数据仓库工具,提供 SQL 查询功能。
-
Apache Kafka:分布式流处理平台,用于构建实时数据管道和流应用。
2.3.6 云服务和平台
-
Amazon Web Services (AWS):提供了多种数据分析服务,如 AWS Glue、Amazon Redshift、Amazon S3 等。
-
Google Cloud Platform (GCP):提供了 BigQuery、Dataflow、Dataproc 等数据处理和分析服务。
-
Microsoft Azure:提供了 HDInsight、Azure Databricks、Azure Data Lake 等服务。
2.3.7 其他工具
-
Excel:虽然主要用于办公自动化,但在小型数据集的处理和可视化方面仍然非常流行。
-
Alteryx:用于数据准备、融合和分析的商业软件。
-
KNIME:开源的数据分析平台,支持图形化工作流设计。
这些技术和工具的选择取决于具体的需求、数据规模以及团队的技术栈。不同的工具和技术可以组合使用,形成一套完整的数据分析解决方案。
三、Doris介绍
3.1 什么是Doris
Doris由百度大数据部研发,之前叫百度Palo,于2017年开源,2018年贡献到 Apache 社区后,更名为Doris。
-
Apache Doris是一个现代化的基于MPP(大规模并行处理)技术的分析型数据库产品。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。
-
Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效!
中文文档:快速体验 - Apache Doris
3.2 Doris核心特性
Doris具有如下特点:
-
列式存储;
-
基于MPP(大规模并行处理)架构的分析型数据库;
-
性能卓越,PB级别数据毫秒/秒级响应;
-
TPC-H、TPC-DS性能领先,性价比高,高并发查询,100台集群可达10w QPS,流式导入单节点50MB/s,小批量导入毫秒延迟。
-
-
支持标准SQL语言,兼容MySQL协议;
-
使用简单;
-
高度兼容MySql协议,支持在线表结构变更高度集成,不依赖于外部存储系统;
-
-
高效的聚合表技术;
-
新型预聚合技术Rollup;
-
高性能、高可用、高可靠;
-
多副本,元数据高可用;
-
-
极简运维,支持弹性伸缩;
-
架构优雅,单集群可以水平扩展至200台以上
-
3.3 Doris核架构组件
Apache Doris 的整体架构非常简单,如下图所示,只有两类进程:
-
Frontend(FE):主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
-
Backend(BE):主要负责数据存储、查询计划的执行。
这两类进程都是可以横向扩展的,单集群可以支持到数百台机器,数十 PB 的存储容量。并且这两类进程通过一致性协议来保证服务的高可用和数据的高可靠。这种高度集成的架构设计极大地降低了一款分布式系统的运维成本。
3.4 Doris使用场景
结合上图,数据源经过各种数据集成和加工处理后,通常会入库到实时数据仓库 Apache Doris 和离线湖仓(Hive, Iceberg, Hudi 中)。作为一个分布式列式存储和查询系统,主要用于实时分析和查询海量数据。它适用于以下场景:
四、基于docker搭建Doris
网上关于Doris的搭建参考资料比较多,但是分析和尝试之后,很多跑不通,接下来演示如何基于docker快速搭建起Doris的运行环境
4.1 环境准备
4.1.1 服务器准备
服务器(云服务器或虚拟机均可),2C4G(推荐4C8G),并提前安装并启动docker
4.1.2 设置机器的linux内核参数
在启动doris的be时,需将 Linux操作系统内核参数设置为2000000,这里是Doris官方要求的,直接在Docker宿主机中设置即可
sudo sysctl -w vm.max_map_count=2000000
sysctl vm.max_map_count
4.2 获取安装包与Doris镜像
4.2.1 下载Doris运行镜像
这个镜像中安装了doris启动需要的环境,不用自己再提前准备环境了,如jdk等。镜像比较大,等待下载完成即可。
docker pull apache/doris:build-env-ldb-toolchain-latest
4.2.3 获取必要的安装包
为了后面使用mysql终端操作,还需要下载mysql的包以及doris的依赖包
# doris程序包
wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-1.2.4.1-bin-x86_64.tar.xz
# mysql 客户端连接使用的包
wget https://doris-build-hk.oss-cn-hongkong.aliyuncs.com/mysql-client/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
4.3 启动Doris容器
使用下面的命令运行Doris容器
docker run -d -it --name=doris \
-p 9030:9030 -p 8030:8030 \
apache/doris:build-env-ldb-toolchain-latest \
/bin/bash
4.4 修改与配置FE文件
由于本次的环境是基于docker搭建的,后续的操作都会在容器内进行,需要把依赖包拷贝到容器,并进入容器中配置相关的信息。
4.4.1 复制安装包到容器
复制安装包到doris容器中,将上述下载的两个安装包复制到容器内部
docker cp /root/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz doris:/opt
docker cp /root/apache-doris-1.2.4.1-bin-x86_64.tar.xz doris:/opt
4.4.2 获取网络IP
进入容器修改相关的配置文件,依次执行下面的操作
# 进入容器
docker exec -it doris bash
# 解压文件
cd /opt/
tar -xvf apache-doris-1.2.4.1-bin-x86_64.tar.xz
tar -xzvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
# 获取本机容器内网ip地址,需修改到配置文件中
hostname -i
4.4.3 配置fe的IP地址
在容器中进行配置,找到配置文件
cd /opt/apache-doris-1.2.4.1-bin-x86_64/fe/conf
vi fe.conf
打开 priority_networks注释 将刚刚 【hostname -i】 打印出来的内网ip替换到
priority_networks = 172.17.0.2/24
4.5 启动fe服务
在容器的解压包目录下,进入bin目录,执行脚本启动fe服务
./start_fe.sh --daemon
然后使用jps命令检查是否启动成功
测试服务是否正常,看到下面能够正常输出说明服务正常
curl http://127.0.0.1:8030/api/bootstrap
4.5.1 浏览器访问
浏览器地址访问 http://IP:8030/login,账号root,密码为空
登录之后效果如下:
4.5.2 fe 服务环境测试
接下来在mysql中连接fe,默认无密码
/opt/mysql-5.7.22-linux-glibc2.12-x86_64/bin/mysql -uroot -P9030 -h127.0.0.1 --skip-ssl
show frontends\G;
如果看到下面的效果,IsMaster、Join 和 Alive 三列均为true,则表示节点正常
4.6 配置be
4.6.1 配置网络IP
和上面配置fe的操作类似,基于上面的操作,继续修改配置文件
cd /opt/apache-doris-1.2.4.1-bin-x86_64/be/conf
vi be.conf
将下面这行配置加进去
priority_networks = 172.17.0.2/24
4.6.2 配置JDK
在启动脚本中需要设置jdk路径,上述下载的镜像jdk的默认路径为 /usr/lib/jvm/java-1.8.0,可以先ehco确认一下,因为路径可能随时版本的变更而改变
进入bin目录,在start_be.sh脚本中添加jdk的路径
vi start_be.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
4.7 启动be服务
启动be,然后通过mysql客户端工具连接be,即在Doris中添加已经后端节点,参照下面的指令依次执行;
# 进入bin目录,启动be
./start_be.sh --daemon
# 进入mysql
/opt/mysql-5.7.22-linux-glibc2.12-x86_64/bin/mysql -uroot -P9030 -h127.0.0.1 --skip-ssl
# 将BE节点加入到集群中
ALTER SYSTEM ADD BACKEND "172.17.0.2:9050";
# 显示doris后端详情
SHOW BACKENDS\G
Alive
- true表示节点运行正常(如果为false,可以尝试等待一会再重新查看,第一次启动会慢一点;或有其他问题在/opt/apache-doris-1.2.4.1-bin-x86_64/be/log/be.out 里面查看日志)
正常启动的进程像下面这样,会有一个空名字的进程,正常,就是be,退出mysql之后,可以通过jps命令查看
4.7 数据建表与功能测试
第一次接触doris的同学可能会疑惑,发现语法与MySQL差不多,其实还是有差别的,有点类似于学习Hive的时候,语法上跟mysql多少存在一些差别,可以通过下面的建表语句进行对比体验。
这里使用MySQL仅作为远程连接工具,在实际使用中仅需启动fe与be即可,Doris自动启动和管理内部的 MySQL 实例,用于存储和管理元数据。
4.7.1 创建测试数据表
基于上述搭建的环境,在docker容器内,执行如下命令进入mysql终端:
/opt/mysql-5.7.22-linux-glibc2.12-x86_64/bin/mysql -uroot -P9030 -h127.0.0.1 --skip-ssl
执行如下的建表sql
create database db_test;
use db_test;
CREATE TABLE IF NOT EXISTS db_test.tb_user
(
`user_id` LARGEINT NOT NULL COMMENT "user 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"
);
exit;
4.7.2 创建测试数据并导入
创建一个用于导入数据的文件
cd ~
vi test_user.csv
将下面的数据拷贝进去
10000,2024-08-31,beijing,20,0,2024-08-31 06:00:00,20,10,10
10006,2024-08-31,beijing,20,0,2024-08-31 07:00:00,15,2,2
10001,2024-08-31,beijing,30,1,2024-08-31 17:05:45,2,22,22
10002,2024-08-28,shanghai,20,1,2024-08-28 12:59:12,200,5,5
10003,2024-08-28,guangzhou,32,0,2024-08-28 11:20:00,30,11,11
10004,2024-08-31,shenzhen,35,0,2024-08-31 10:00:15,100,3,3
10004,2024-08-18,shenzhen,35,0,2024-08-18 10:20:22,11,6,6
将test_user.csv的数据导入mysql,执行下面的命令
curl --location-trusted -u root: -T test_user.csv -H "column_separator:," http://127.0.0.1:8030/api/db_test/tb_user/_stream_load
4.7.3 查询数据是否导入成功
登录mysql客户端,查询上述导入的数据
4.7.4 使用客户端工具连接
使用navicat连接,用户名root,默认无密码
当然你也可以基于上述的9030端口的web-ui界面操作
4.7.5 服务启动停止命令补充
下面再补充一下服务的启动与停止命令,基于docker容器的安装模式下:
启动命令:
/opt/apache-doris-1.2.4.1-bin-x86_64/fe/bin/start_fe.sh --daemon
/opt/apache-doris-1.2.4.1-bin-x86_64/be/bin/start_be.sh --daemon
停止命令:
/opt/apache-doris-1.2.4.1-bin-x86_64/fe/bin/stop_fe.sh
/opt/apache-doris-1.2.4.1-bin-x86_64/be/bin/stop_be.sh
注意点:
docker重启后ip会变,启动后先查看hostname -i是否跟之前的一致,不一致可以关掉有影响的docker容器重新按ip顺序启动,或者改成固定IP。
五、写在文末
本文通过实际操作演示了基于docker搭建Doris单机环境的详细过程,对于很多需要学习Doris的同学来说,搭建的过程是一个麻烦而又费时费力的过程,希望本文能够提供一个快速的操作指引,本篇到此结束,感谢观看。