美文网首页收藏
Superset缩略图

Superset缩略图

作者: chiweng2009 | 来源:发表于2022-10-18 20:25 被阅读0次

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版本

https://chromedriver.storage.googleapis.com/

空白缩略图

多半是因为查询任务没有执行导致,可以使用GUI工具检查下redis的celery队列


image.png

启动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

效果

image.png

相关文章

网友评论

    本文标题:Superset缩略图

    本文链接:https://www.haomeiwen.com/subject/nijszrtx.html