2.0版本缩略图
使用Dockerfile的方式,继承了官方镜像
#2022-08-01
#FROM apache/superset:9291ad5d4ce1fb9a7d5301c06cf62efb1c355092
#2022-08-23
FROM apache/superset:51e567ffef684b5e3fb9e5bdfaccd9ad2777f4c8
USER root
# 自行扩展部分,注意user的切换
RUN xxx
USER superset
官方配置
参见 https://superset.apache.org/docs/installation/async-queries-celery/
必要配置如下(基本摘自官方和他人博客,很容易搜索到)
# 引入redis库
from cachelib.redis import RedisCache
DEFAULT_FEATURE_FLAGS: {
"THUMBNAILS": True,
"ALERT_REPORTS": True,
THUMBNAIL_SELENIUM_USER = "admin"
THUMBNAIL_CACHE_CONFIG: CacheConfig = {
"CACHE_DEFAULT_TIMEOUT": int(timedelta(days=7).total_seconds()),
"REFRESH_TIMEOUT_ON_RETRIEVAL": True,
'CACHE_TYPE': 'redis', # 使用 Redis
'CACHE_REDIS_HOST': 'redis', # 配置域名
'CACHE_REDIS_PORT': 6379, # 配置端口号
'CACHE_REDIS_URL': 'redis://redis:6379/0', # 配置 URL,保存视图使用的redis的第0个数据库
'CACHE_KEY_PREFIX': 'SUPERSET_THUMBNAIL_' # 保存视图用的前缀
}
# 其他cache也贴一下
# Default cache for Superset objects
CACHE_CONFIG: CacheConfig = {
'CACHE_TYPE': 'redis', # 使用 Redis
'CACHE_REDIS_HOST': 'redis', # 配置域名
'CACHE_REDIS_PORT': 6379, # 配置端口号
'CACHE_REDIS_URL': 'redis://redis:6379/0', # 配置 URL,保存视图使用的redis的第2个数据库
'CACHE_KEY_PREFIX': 'SUPERSET_VIEW_' # 保存视图用的前缀
}
# Cache for datasource metadata and query results
DATA_CACHE_CONFIG: CacheConfig = {
'CACHE_TYPE': 'redis', # 使用 Redis
'CACHE_REDIS_HOST': 'redis', # 配置域名
'CACHE_REDIS_PORT': 6379, # 配置端口号
'CACHE_REDIS_URL': 'redis://redis:6379/0', # 配置 URL,保存视图使用的redis的第0个数据库
'CACHE_KEY_PREFIX': 'SUPERSET_DATA_' # 保存视图用的前缀
}
# Cache for dashboard filter state (`CACHE_TYPE` defaults to `SimpleCache` when
# running in debug mode unless overridden)
FILTER_STATE_CACHE_CONFIG: CacheConfig = {
"CACHE_DEFAULT_TIMEOUT": int(timedelta(days=90).total_seconds()),
# should the timeout be reset when retrieving a cached value
"REFRESH_TIMEOUT_ON_RETRIEVAL": True,
'CACHE_TYPE': 'redis', # 使用 Redis
'CACHE_REDIS_HOST': 'redis', # 配置域名
'CACHE_REDIS_PORT': 6379, # 配置端口号
'CACHE_REDIS_URL': 'redis://redis:6379/0', # 配置 URL,保存视图使用的redis的第0个数据库
'CACHE_KEY_PREFIX': 'SUPERSET_DATA_' # 保存视图用的前缀
}
# Cache for explore form data state (`CACHE_TYPE` defaults to `SimpleCache` when
# running in debug mode unless overridden)
EXPLORE_FORM_DATA_CACHE_CONFIG: CacheConfig = {
"CACHE_DEFAULT_TIMEOUT": int(timedelta(days=7).total_seconds()),
# should the timeout be reset when retrieving a cached value
"REFRESH_TIMEOUT_ON_RETRIEVAL": True,
'CACHE_TYPE': 'redis', # 使用 Redis
'CACHE_REDIS_HOST': 'redis', # 配置域名
'CACHE_REDIS_PORT': 6379, # 配置端口号
'CACHE_REDIS_URL': 'redis://redis:6379/0', # 配置 URL,保存视图使用的redis的第0个数据库
'CACHE_KEY_PREFIX': 'SUPERSET_DATA_' # 保存视图用的前缀
}
RESULTS_BACKEND = RedisCache(host='redis', port=6379,
key_prefix='superset_results')
#Celery定时任务
class CeleryConfig: # pylint: disable=too-few-public-methods
broker_url = 'redis://redis:6379/0'
imports = ("superset.sql_lab", "superset.tasks", "superset.tasks.thumbnails",)
result_backend = 'redis://redis:6379/0'
worker_log_level = "DEBUG"
worker_prefetch_multiplier = 1
task_acks_late = False
task_annotations = {
"sql_lab.get_sql_results": {"rate_limit": "100/s"},
"email_reports.send": {
"rate_limit": "1/s",
"time_limit": int(timedelta(seconds=120).total_seconds()),
"soft_time_limit": int(timedelta(seconds=150).total_seconds()),
"ignore_result": True,
},
}
beat_schedule = {
"email_reports.schedule_hourly": {
"task": "email_reports.schedule_hourly",
"schedule": crontab(minute=1, hour="*"),
},
"reports.scheduler": {
"task": "reports.scheduler",
"schedule": crontab(minute="*", hour="*"),
},
"reports.prune_log": {
"task": "reports.prune_log",
"schedule": crontab(minute=0, hour=0),
},
}
CELERY_CONFIG = CeleryConfig # pylint: disable=invalid-name
#Chrome浏览器相关
WEBDRIVER_TYPE = "chrome"
WEBDRIVER_OPTION_ARGS = [
"--force-device-scale-factor=2.0",
"--high-dpi-support=2.0",
"--headless",
"--disable-gpu",
"--disable-dev-shm-usage",
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-extensions",
]
# The base URL to query for accessing the user interface
WEBDRIVER_BASEURL = "http://0.0.0.0:7001/"
GLOBAL_ASYNC 先不开启
运行
docker run -d -p 6379:6379 redis:3.0.1 -name redis
docker run -d -p 7001:7001 --name=superset --link redis:redis superset
--link redis:redis 可以使superset中用”redis“字符串来访问redis服务
错误排查
chrome
如果遇到selenium和chrome关键字,多半是chrome及驱动安装有问题
可尝试下面脚本
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
apt install -y ./google-chrome-stable_current_amd64.deb && \
wget https://chromedriver.storage.googleapis.com/106.0.5249.21/chromedriver_linux64.zip
unzip chromedriver_linux64.zip && \
chmod +x chromedriver && \
mv chromedriver /usr/bin && \
rm -f google-chrome-stable_current_amd64.deb chromedriver_linux64.zip
附chromedriver版本
空白缩略图
多半是因为查询任务没有执行导致,可以使用GUI工具检查下redis的celery队列
启动Celery
nohup celery --app=superset.tasks.celery_app:app worker --pool=prefork -O fair -c 4 &
nohup celery --app=superset.tasks.celery_app:app beat &
中文
字体问题,需要安装字体库,直接在构建镜像这个步骤中做
RUN apt-get install ttf-mscorefonts-installer -y && \
apt-get install fontconfig ttf-wqy-zenhei -y