美文网首页收藏
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