Apache Superset是一个开源的、现代的、轻量级BI分析工具,能够对接多种数据源、拥有丰富的图标展示形式、支持自定义仪表盘,且拥有友好的用户界面,十分易用。
Superset是由Python语言编写的Web应用,要求Python3.6的环境。
conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同Python版本的软件包及其依赖,并能够在不同的Python环境之间切换,Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,Miniconda包括Conda、Python。
此处,我们不需要如此多的工具包,只是用来管理不同版本的Python环境,故选择MiniConda。
下载地址:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
(1)将Miniconda3-latest-Linux-x86_64.sh上传到/opt/module/路径
(2)执行以下命令进行安装,并按照提示操作,直到安装完成。
[user@hadoop102 module]$ bash Miniconda3-latest-Linux-x86_64.sh
(3)一直按回车键,直到出现Please answer ‘yes’ or ‘no’:’
Please answer 'yes' or 'no':'
>>> yes
(4)指定安装路径(根据用户需求指定):/opt/module/miniconda3
[/home/atguigu/miniconda3] >>> /opt/module/miniconda3
(5)是否初始化Miniconda3,输入yes
Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>> yes
(6)出现以下字样,即为安装完成
Thank you for installing Miniconda3!
(1)配置环境变量
[user@hadoop102 miniconda3]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容
export CONDA_HOME=/opt/module/miniconda3
export PATH=$PATH:$CONDA_HOME/bin
(2)source一下环境变量或者重启一下连接虚拟机的客户端
[user@hadoop102 miniconda3]$ source /etc/profile.d/my_env.sh
Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可通过以下命令,禁止激活默认base环境。
[user@hadoop102 ~]$ conda config --set auto_activate_base false
1)配置conda国内镜像(清华)
[user@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
[user@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
[user@hadoop102 ~]$ conda config --set show_channel_urls yes
2)创建Python3.6环境
[user@hadoop102 ~]$ conda create --name superset python=3.6
说明:
conda环境管理常用命令
创建环境:conda create -n env_name
查看所有环境:conda info --envs
删除一个环境:conda remove -n env_name --all
3)激活superset环境
[user@hadoop102 ~]$ conda activate superset
激活后效果如下图所示
说明:退出当前环境
(superset) [user@hadoop102 ~]$ conda deactivate
1)安装Superset依赖
(superset) [user@hadoop102 ~]$ sudo yum install -y python-setuptools
(superset) [user@hadoop102 ~]$ sudo yum install -y gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel
2)安装(更新)setuptools和pip(豆瓣)
(superset) [user@hadoop102 ~]$ pip install --upgrade setuptools pip -i https://pypi.douban.com/simple/
说明:pip是python的包管理工具,可以和centos中的yum类比
3)安装Supetset
(superset) [user@hadoop102 ~]$ pip install apache-superset -i https://pypi.douban.com/simple/
说明:-i的作用是指定镜像,这里选择国内镜像(豆瓣)
4)初始化Supetset数据库(Supetset是一个web应用,自带数据库,需要初始化)
(superset) [user@hadoop102 ~]$ superset db upgrade
5)创建管理员用户
(superset) [user@hadoop102 ~]$ export FLASK_APP=superset
(superset) [user@hadoop102 ~]$ flask fab create-admin
Username [admin]: user
User first name [admin]: user
User last name [user]: user
Email [[email protected]]:
Password: 123456
Repeat for confirmation: 123456
说明:flask是一个python web框架,Superset使用的就是flask
6)Superset初始化
(superset) [user@hadoop102 ~]$ superset init
1)安装gunicorn
(superset) [user@hadoop102 ~]$ pip install gunicorn -i https://pypi.douban.com/simple/
说明:gunicorn是一个Python Web Server,可以和java中的TomCat类比
2)启动Superset
第一步:确保当前conda环境为superset,及下图所示
(superset) [user@hadoop102 ~]$
第二步:启动
(superset) [user@hadoop102 ~]$ gunicorn --workers 5 --timeout 120 --bind hadoop102:8787 "superset.app:create_app()" --daemon
说明:
workers:指定进程个数
timeout:worker进程超时时间,超时会自动重启
bind:绑定本机地址,即为Superset访问地址
daemon:后台运行
3)停止superset
(1)停掉gunicorn进程
(superset) [user@hadoop102 ~]$ ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9
(2)退出superset环境
(superset) [user@hadoop102 ~]$ conda deactivate
4)登录Superset
访问http://hadoop102:8787,并使用1.3节中第5步创建的管理员账号进行登录。
例如:用户名:user 密码:123456
1)安装连接MySQL数据源的依赖
(superset) [user@hadoop102 ~]$ conda install mysqlclient
Proceed ([y]/n)? y
说明:对接不同的数据源,需安装不同的依赖,以下地址为官网说明
https://superset.apache.org/docs/databases/installing-database-drivers
2)重启Superset
(superset) [user@hadoop102 ~]$ superset.sh restart
https://prestodb.github.io/
https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.196/presto-server-0.196.tar.gz
[user@hadoop102 software]$ tar -zxvf presto-server-0.196.tar.gz -C /opt/module/
[user@hadoop102 module]$ mv presto-server-0.196/ presto
[user@hadoop102 presto]$ mkdir data
[user@hadoop102 presto]$ mkdir etc
[user@hadoop102 etc]$ vim jvm.config
添加如下内容
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
[user@hadoop102 etc]$ mkdir catalog
[user@hadoop102 catalog]$ vim hive.properties
添加如下内容
connector.name=hive-hadoop2
hive.metastore.uri=thrift://hadoop102:9083
[user@hadoop102 module]$ xsync presto
[user@hadoop102 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/module/presto/data
[user@hadoop103 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffe
node.data-dir=/opt/module/presto/data
[user@hadoop104 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffd
node.data-dir=/opt/module/presto/data
10)Presto是由一个coordinator节点和多个worker节点组成。在hadoop102上配置成coordinator,在hadoop103、hadoop104上配置为worker。
(1)hadoop102上配置coordinator节点
[user@hadoop102 etc]$ vim config.properties
添加内容如下
coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery-server.enabled=true
discovery.uri=http://hadoop102:8881
(2)hadoop103、hadoop104上配置worker节点
[user@hadoop103 etc]$ vim config.properties
添加内容如下
coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoop102:8881
[user@hadoop104 etc]$ vim config.properties
添加内容如下
coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoop102:8881
[user@hadoop102 hive]$
nohup bin/hive --service metastore >/dev/null 2>&1 &
12)分别在hadoop102、hadoop103、hadoop104上启动Presto Server
(1)前台启动Presto,控制台显示日志
[user@hadoop102 presto]$ bin/launcher run
[user@hadoop103 presto]$ bin/launcher run
[user@hadoop104 presto]$ bin/launcher run
(2)后台启动Presto
[user@hadoop102 presto]$ bin/launcher start
[user@hadoop103 presto]$ bin/launcher start
[user@hadoop104 presto]$ bin/launcher start
13)日志查看路径/opt/module/presto/data/var/log
驱动设置:
之后就连接到hive,输入指令可查看Schemas
输入sql即可进行查询:
Presto能够完成不能框架下的数据查询,例如进行mysql和hive的查询:
Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
Kylin的主要特点包括支持SQL接口、支持超大规模数据集、亚秒级响应、可伸缩性、高吞吐率、BI工具集成等。
1)标准SQL接口:Kylin是以标准的SQL作为对外服务的接口。
2)支持超大数据集:Kylin对于大数据的支撑能力可能是目前所有技术中最为领先的。早在2015年eBay的生产环境中就能支持百亿记录的秒级查询,之后在移动的应用场景中又有了千亿记录秒级查询的案例。
3)亚秒级响应:Kylin拥有优异的查询相应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量,提高了响应速度。
4)可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群。
5)BI工具集成
Kylin可以与现有的BI工具集成,具体包括如下内容。
ODBC:与Tableau、Excel、PowerBI等工具集成
JDBC:与Saiku、BIRT等Java工具集成
RestAPI:与JavaScript、Web网页集成
Kylin开发团队还贡献了Zepplin的插件,也可以使用Zepplin来访问Kylin服务。
1)上传Kylin安装包apache-kylin-3.0.2-bin.tar.gz
2)解压apache-kylin-3.0.2-bin.tar.gz到/opt/module
[user@hadoop102 sorfware]$ tar -zxvf apache-kylin-3.0.2-bin.tar.gz -C /opt/module/
[user@hadoop102 module]$ mv /opt/module/apache-kylin-3.0.2-bin /opt/module/kylin
3)Kylin兼容性问题
修改/opt/module/kylin/bin/find-spark-dependency.sh,排除冲突的jar包
需要增加的内容:! -name ‘jackson’ ! -name ‘metastore’
注意前后保留空格
(1)启动Kylin之前,需先启动Hadoop(hdfs,yarn,jobhistoryserver)、Zookeeper、Hbase
(2)启动Kylin
[user@hadoop102 kylin]$ bin/kylin.sh start
在http://hadoop102:7070/kylin查看Web页面
用户名为:ADMIN,密码为:KYLIN
5)关闭Kylin
[user@hadoop102 kylin]$ bin/kylin.sh stop
Kylin的使用可分为 创建工程-获取数据源-创建model-创建cube 4步组成
点击下图中的"+"。
填写项目名称和描述信息,并点击Submit按钮提交。
点击DataSource
点击下图按钮导入Hive表
选择所需数据表,并点击Sync按钮
点击Models,点击"+New"按钮,点击"★New Model"按钮。
填写Model信息,点击Next
指定事实表
选择维度表,并指定事实表和维度表的关联条件,点击Ok
指定维度字段,并点击Next
指定度量字段,并点击Next
指定事实表分区字段(仅支持时间分区),点击Save按钮,model创建完毕
点击new, 并点击new cube
填写cube信息,选择cube所依赖的model,并点击next
cube自动合并设置,cube需按照日期分区字段每天进行构建,每次构建的结果会保存在Hbase中的一张表内,为提高查询效率,需将每日的cube进行合并,此处可设置合并周期。
构建Cube(计算),点击对应Cube的action按钮,选择build
1)每日全量维度表及拉链维度表重复Key问题如何处理
按照上述流程,会发现,在cube构建流程中出现以下错误
错误原因分析:
上述错误原因是model中的维度表dwd_dim_user_info_his为拉链表、dwd_dim_sku_info为每日全量表,故使用整张表作为维度表,必然会出现订单表中同一个user_id或者sku_id对应多条数据的问题,针对上述问题,有以下两种解决方案。
方案一:在hive中创建维度表的临时表,该临时表中只存放维度表最新的一份完整的数据,在kylin中创建模型时选择该临时表作为维度表。
方案二:与方案一思路相同,但不使用物理临时表,而选用视图(view)实现相同的功能。
此处采用方案二:
(1)创建维度表视图
–拉链维度表视图
create view dwd_dim_user_info_his_view as select * from dwd_dim_user_info_his where end_date=‘9999-99-99’;
–全量维度表视图
create view dwd_dim_sku_info_view as select * from dwd_dim_sku_info where dt=date_add(current_date,-1);
–当前情形我们先创建一个2020-06-14的视图
create view dwd_dim_sku_info_view as select * from dwd_dim_sku_info where dt=‘2020-06-14’;
(2)在DataSource中导入新创建的视图,之前的维度表,可选择性删除。
(3)重新创建model、cube。