UNPKG

@mhg/blog

Version:
1 lines 164 kB
<!DOCTYPE html><html lang="zh-Hans"><head hexo-theme="https://github.com/volantis-x/hexo-theme-volantis/#6.8.2"><meta name="generator" content="Hexo 8.1.2"><meta name="Volantis" content="6.8.2"><meta charset="utf-8"><meta name="robots" content="noindex,follow"><link rel="canonical" href="https://blog.mhuig.top/tags/BigData/"><meta http-equiv="x-dns-prefetch-control" content="on"><link rel="dns-prefetch" href="https://static.mhuig.top"><link rel="preconnect" href="https://static.mhuig.top" crossorigin><link rel="dns-prefetch" href="https://cdnjs.cloudflare.com"><link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin><meta name="renderer" content="webkit"><meta name="force-rendering" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"><meta name="HandheldFriendly" content="True"><meta name="mobile-web-app-capable" content="yes"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=5"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><script>function regSW(e){"localhost"!=window.location.hostname&&"serviceWorker"in navigator&&navigator.serviceWorker.register(`${e}`).then(function(e){"localhost"==window.location.hostname&&(e.onupdatefound=function(){var r=e.installing;r.onstatechange=function(){switch(r.state){case"installed":navigator.serviceWorker.controller?console.log("Updated Service Worker."):console.log("Service Worker Success!");break;case"redundant":console.log("The installing service worker became redundant.")}}})}).catch(function(e){console.error("Error during service worker registration:",e),"undefined"==typeof swinstallretry&&(swinstallretry=1,regSW("/vue.js"))})}"serviceWorker"in navigator&&Object.freeze(navigator.serviceWorker),regSW("/vue.js")</script><link rel="apple-touch-icon" sizes="180x180" href="/lib/favicon/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/lib/favicon/favicon-32x32.png"><link rel="icon" type="image/png" sizes="192x192" href="/lib/favicon/android-chrome-192x192.png"><link rel="icon" type="image/png" sizes="144x144" href="/lib/favicon/android-chrome-144x144.png"><link rel="icon" type="image/png" sizes="16x16" href="/lib/favicon/favicon-16x16.png"><link rel="manifest" href="/lib/favicon/site.webmanifest"><link rel="mask-icon" href="/lib/favicon/safari-pinned-tab.svg" color="#5bbad5"><meta name="apple-mobile-web-app-title" content="MHuiG Magicland"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="application-name" content="MHuiG Magicland"><meta name="msapplication-TileColor" content="#87ceeb"><meta name="msapplication-TileImage" content="/lib/favicon/mstile-144x144.png"><meta name="theme-color" content="#87ceeb" media="(prefers-color-scheme: light)"><meta name="theme-color" content="#21232f" media="(prefers-color-scheme: dark)"><link href="/opensearch.xml" rel="search" title="MHuiG Magicland" type="application/opensearchdescription+xml"><link rel="sitemap" type="application/xml" title="MHuiG Blog Site Map" href="https://blog.mhuig.top/sitemap.xml"><link rel="author" href="https://mhuig.top"><meta name="author" content="MHuiG"><meta name="creator" content="MHuiG"><link rel="archives" href="https://blog.mhuig.top/archives/"><meta http-equiv="Content-Security-Policy" content="frame-src 'self' https://giscus.app https://bilibili.com https://player.bilibili.com https://www.bilibili.com https://*.bilibili.com;"><link rel="preload" href="/css/style.css" as="style"><link rel="preload" href="https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/media/fonts/VarelaRound/VarelaRound-Regular.ttf" as="font" type="font/ttf" crossorigin="anonymous"><link rel="preload" href="https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/media/fonts/VarelaRound/VarelaRound-Regular.ttf" as="font" type="font/ttf" crossorigin="anonymous"><link rel="alternate" href="/atom.xml" title="Magicland" type="application/atom+xml"><link rel="alternate" href="/rss2.xml" title="Magicland" type="application/rss+xml"><title>标签:BigData - Magicland</title><meta name="keywords" content="MHuiG, @MHuiG, Blog, 博客, Magicland, 魔法世界"><meta desc name="description" content="宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。「Be Yourself, Make a Difference.」 - Magic Island - MHuiG - Magicland"><meta property="og:type" content="website"><meta property="og:title" content="Magicland"><meta property="og:url" content="https://blog.mhuig.top/tags/BigData/"><meta property="og:site_name" content="Magicland"><meta property="og:description" content="宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。「Be Yourself, Make a Difference.」 - Magic Island"><meta property="og:locale"><meta property="og:image" content="https://blog.mhuig.top/lib/favicon/android-chrome-192x192.png"><meta property="article:author" content="MHuiG"><meta property="article:tag" content="MHuiG, @MHuiG, Blog, 博客, Magicland, 魔法世界"><meta name="twitter:card" content="summary"><meta name="twitter:image" content="https://blog.mhuig.top/lib/favicon/android-chrome-192x192.png"><meta name="twitter:creator" content="@iMHuiG"><meta name="twitter:site" content="@iMHuiG"><style>#safearea{display:none}.post-story+.post-story{content-visibility:auto;contain-intrinsic-size:10px 500px}:root{--blur-px:12px;--blur-bg:var(--bg-a50);--blur-sat:300%}#u-search{display:-webkit-box;display:-moz-box;display:none;position:fixed;top:0;left:0;width:100%;height:100%;padding:60px 20px;z-index:1001}@media screen and (max-width:680px){#u-search{padding:0}}.l_header{position:fixed;z-index:1000;top:0;width:100%;height:64px;background:var(--color-card);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1)}.l_header.auto{transition:opacity .4s ease;-webkit-transition:opacity .4s ease;-khtml-transition:opacity 0.4s ease;-moz-transition:opacity .4s ease;-o-transition:opacity .4s ease;-ms-transition:opacity .4s ease;visibility:hidden}.l_header.auto.show{opacity:1!important;-webkit-opacity:1!important;-moz-opacity:1!important;visibility:visible}.l_header .container{margin-left:16px;margin-right:16px}.l_header #wrapper{height:100%;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.l_header #wrapper .nav-main,.l_header #wrapper .nav-sub{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-khtml-flex-wrap:nowrap;-moz-flex-wrap:nowrap;-o-flex-wrap:nowrap;-ms-flex-wrap:nowrap;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;align-items:center}.l_header #wrapper .nav-main{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.l_header #wrapper.sub .nav-main{transform:translateY(-64px);-webkit-transform:translateY(-64px);-khtml-transform:translateY(-64px);-moz-transform:translateY(-64px);-o-transform:translateY(-64px);-ms-transform:translateY(-64px)}.l_header #wrapper .nav-sub{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;opacity:0;-webkit-opacity:0;-moz-opacity:0;height:64px;width:calc(100% - 2 * 16px);position:absolute}.l_header #wrapper .nav-sub ::-webkit-scrollbar{display:-webkit-box;display:-moz-box;display:none}@media screen and (min-width:2048px){.l_header #wrapper .nav-sub{max-width:55vw;margin:auto}}.l_header #wrapper.sub .nav-sub{opacity:1;-webkit-opacity:1;-moz-opacity:1}.l_header #wrapper .title{position:relative;color:var(--color-text);padding-left:24px;max-height:64px}.l_header #wrapper .nav-main .title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0;line-height:64px;padding:0 24px;font-size:1.25rem;font-family:"Varela Round",system-ui,"PingFang SC","Microsoft YaHei","Source Han Sans SC","Noto Sans SC",Helvetica,Arial,sans-serif,Helvetica,monospace}.l_header #wrapper .nav-main .title img{height:64px}.l_header .nav-sub{max-width:1080px;margin:auto}.l_header .nav-sub .title{font-weight:700;font-family:"Varela Round",system-ui,"PingFang SC","Microsoft YaHei","Source Han Sans SC","Noto Sans SC",Helvetica,Arial,sans-serif,Menlo,Monaco,monospace,sans-serif;line-height:1.2;max-height:64px;white-space:normal;flex-shrink:1}.l_header .switcher{display:-webkit-box;display:-moz-box;display:none;line-height:64px;align-items:center}.l_header .switcher .s-toc{display:-webkit-box;display:-moz-box;display:none}@media screen and (max-width:768px){.l_header .switcher .s-toc{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex}}.l_header .switcher>li{height:48px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;margin:2px}@media screen and (max-width:500px){.l_header .switcher>li{margin:0 1px;height:48px}}.l_header .switcher>li>a{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center;width:48px;height:48px;padding:.85em 1.1em;border-radius:100px;-webkit-border-radius:100px;border:none;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;color:var(--theme)}.l_header .switcher>li>a:hover{border:none}.l_header .switcher>li>a.active,.l_header .switcher>li>a:active{border:none;background:var(--color-site-bg)}@media screen and (max-width:500px){.l_header .switcher>li>a{width:36px;height:48px}}.l_header .nav-sub .switcher{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex}.l_header .m_search{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;height:64px;width:240px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}@media screen and (max-width:1024px){.l_header .m_search{width:44px;min-width:44px}.l_header .m_search input::placeholder{opacity:0;-webkit-opacity:0;-moz-opacity:0}.l_header .m_search:hover{width:240px}.l_header .m_search:hover input::placeholder{opacity:1;-webkit-opacity:1;-moz-opacity:1}}@media screen and (min-width:500px){.l_header .m_search:hover .input{width:100%}.l_header .m_search:hover .input::placeholder{opacity:1;-webkit-opacity:1;-moz-opacity:1}}@media screen and (max-width:500px){.l_header .m_search{min-width:0}.l_header .m_search input::placeholder{opacity:1;-webkit-opacity:1;-moz-opacity:1}}.l_header .m_search .form{position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;width:100%;align-items:center}.l_header .m_search .icon{position:absolute;width:36px;left:5px;color:var(--color-meta)}@media screen and (max-width:500px){.l_header .m_search .icon{display:-webkit-box;display:-moz-box;display:none}}.l_header .m_search .input{display:-webkit-box;display:-moz-box;display:block;padding-top:8px;padding-bottom:8px;line-height:1.3;width:100%;color:var(--color-text);background:var(--color-card-darken2);box-shadow:none;-webkit-box-shadow:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;padding-left:40px;font-size:.875rem;border-radius:8px;-webkit-border-radius:8px;border:none;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}@media screen and (min-width:500px){.l_header .m_search .input:focus{box-shadow:0 4px 8px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.1)}}@media screen and (max-width:500px){.l_header .m_search .input{background:var(--color-block);padding-left:8px;border:none}.l_header .m_search .input:focus,.l_header .m_search .input:hover{border:none}}@media (max-width:500px){.l_header .m_search{left:0;width:0;overflow:hidden;position:absolute;background:var(--color-card-lighten5);transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.l_header .m_search .input{border-radius:32px;-webkit-border-radius:32px;margin-left:16px;padding-left:16px}.l_header.z_search-open .m_search{width:100%}.l_header.z_search-open .m_search .input{width:calc(100% - 120px)}}ul.m-pc>li>a{color:inherit;border-bottom:2px solid transparent}ul.m-pc>li>a.active,ul.m-pc>li>a:active{border-bottom:2px solid var(--theme)}ul.list-v li:hover>ul.list-v,ul.m-pc li:hover>ul.list-v{display:-webkit-box;display:-moz-box;display:block}ul.nav-list-h{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;align-items:stretch}ul.nav-list-h>li{position:relative;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;height:100%;line-height:2.4;border-radius:4px;-webkit-border-radius:4px}ul.nav-list-h>li>a{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:600}ul.list-v{z-index:1;display:-webkit-box;display:-moz-box;display:none;position:absolute;background:var(--color-card);box-shadow:0 2px 4px 0 rgba(0,0,0,.08),0 4px 8px 0 rgba(0,0,0,.08),0 8px 16px 0 rgba(0,0,0,.08);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.08),0 4px 8px 0 rgba(0,0,0,.08),0 8px 16px 0 rgba(0,0,0,.08);margin-top:-6px;border-radius:4px;-webkit-border-radius:4px;padding:8px 0}ul.list-v.show{display:-webkit-box;display:-moz-box;display:block}ul.list-v hr{margin-top:8px;margin-bottom:8px}ul.list-v>li{white-space:nowrap;word-break:keep-all}ul.list-v>li.header{font-size:.78125rem;font-weight:700;line-height:2em;color:var(--color-meta);margin:8px 16px 4px}ul.list-v>li.header i{margin-right:8px}ul.list-v>li ul{margin-left:0;display:-webkit-box;display:-moz-box;display:none;margin-top:-40px}ul.list-v .aplayer-container{min-height:64px;padding:6px 16px}ul.list-v>li>a{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;display:-webkit-box;display:-moz-box;display:block;color:var(--color-list);font-size:.875rem;font-weight:700;line-height:36px;padding:0 20px 0 16px;text-overflow:ellipsis;margin:0 4px;border-radius:4px;-webkit-border-radius:4px}@media screen and (max-width:1024px){ul.list-v>li>a{line-height:40px}}ul.list-v>li>a>i{margin-right:8px}ul.list-v>li>a.active,ul.list-v>li>a:active{color:var(--color-list-hl)}ul.list-v>li>a:hover{color:var(--color-list-hl);background:var(--color-site-bg)}.l_header .menu>ul>li>a{display:-webkit-box;display:-moz-box;display:block;padding:0 8px}.l_header .menu>ul>li>a>i{margin-right:4px}.l_header ul.nav-list-h>li{color:var(--color-list);line-height:64px}.l_header ul.nav-list-h>li>a{max-height:64px;overflow:hidden;color:inherit}.l_header ul.nav-list-h>li>a.active,.l_header ul.nav-list-h>li>a:active{color:var(--theme)}.l_header ul.nav-list-h>li:hover>a{color:var(--color-list-hl)}.l_header ul.nav-list-h>li i.music{animation:rotate-effect 1.5s linear infinite;-webkit-animation:rotate-effect 1.5s linear infinite;-khtml-animation:rotate-effect 1.5s linear infinite;-moz-animation:rotate-effect 1.5s linear infinite;-o-animation:rotate-effect 1.5s linear infinite;-ms-animation:rotate-effect 1.5s linear infinite}@-moz-keyframes rotate-effect{0%{transform:rotate(0);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0)}25%{transform:rotate(90deg);-webkit-transform:rotate(90deg);-khtml-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg)}50%{transform:rotate(180deg);-webkit-transform:rotate(180deg);-khtml-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg)}75%{transform:rotate(270deg);-webkit-transform:rotate(270deg);-khtml-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-khtml-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg)}}@-webkit-keyframes rotate-effect{0%{transform:rotate(0);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0)}25%{transform:rotate(90deg);-webkit-transform:rotate(90deg);-khtml-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg)}50%{transform:rotate(180deg);-webkit-transform:rotate(180deg);-khtml-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg)}75%{transform:rotate(270deg);-webkit-transform:rotate(270deg);-khtml-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-khtml-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg)}}@-o-keyframes rotate-effect{0%{transform:rotate(0);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0)}25%{transform:rotate(90deg);-webkit-transform:rotate(90deg);-khtml-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg)}50%{transform:rotate(180deg);-webkit-transform:rotate(180deg);-khtml-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg)}75%{transform:rotate(270deg);-webkit-transform:rotate(270deg);-khtml-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-khtml-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg)}}@keyframes rotate-effect{0%{transform:rotate(0);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0)}25%{transform:rotate(90deg);-webkit-transform:rotate(90deg);-khtml-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg)}50%{transform:rotate(180deg);-webkit-transform:rotate(180deg);-khtml-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg)}75%{transform:rotate(270deg);-webkit-transform:rotate(270deg);-khtml-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-khtml-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg)}}.menu-phone li ul.list-v{right:calc(100% - .5 * 16px)}.menu-phone li ul.list-v ul{right:calc(100% - .5 * 16px)}#wrapper{max-width:1080px;margin:auto}@media screen and (min-width:2048px){#wrapper{max-width:55vw}}#wrapper .menu{-webkit-box-flex:1;-moz-box-flex:1;-webkit-flex:1 1;-ms-flex:1 1;flex:1 1;margin:0 16px 0 0}#wrapper .menu .list-v ul{left:calc(100% - .5 * 16px)}.menu-phone{display:-webkit-box;display:-moz-box;display:none;margin-top:16px;right:8px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.menu-phone ul{right:calc(100% - .5 * 16px)}@media screen and (max-width:500px){.menu-phone{display:-webkit-box;display:-moz-box;display:block}}.l_header{max-width:65vw;left:calc((100% - 65vw) * .5);border-bottom-left-radius:8px;border-bottom-right-radius:8px}@media screen and (max-width:2048px){.l_header{max-width:1112px;left:calc((100% - 1112px) * .5)}}@media screen and (max-width:1112px){.l_header{left:0;border-radius:0;-webkit-border-radius:0;max-width:100%}}@media screen and (max-width:500px){.l_header .container{margin-left:0;margin-right:0}.l_header #wrapper .nav-main .title{padding-left:16px;padding-right:16px}.l_header #wrapper .nav-sub{width:100%}.l_header #wrapper .nav-sub .title{overflow-y:scroll;margin-top:2px;padding:8px 16px}.l_header #wrapper .switcher{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;margin-right:8px}.l_header .menu{display:-webkit-box;display:-moz-box;display:none}}@media screen and (max-width:500px){.list-v li{max-width:270px}}@font-face{font-family:'Varela Round';src:url("https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/media/fonts/VarelaRound/VarelaRound-Regular.ttf");font-weight:'normal';font-style:'normal';font-display:swap}@font-face{font-family:'Varela Round';src:url("https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/media/fonts/VarelaRound/VarelaRound-Regular.ttf");font-weight:'normal';font-style:'normal';font-display:swap}@media (prefers-color-scheme:dark){:root{--color-mode:'dark'}:root:not([color-scheme]){--color-site-body:#121212;--color-read-bkg:#21232f;--color-read-post:#252d38;--color-site-bg:#21232f;--color-site-inner:#efefef;--color-site-footer:#666;--color-card:#252d38;--color-text:rgba(238,238,238,0.871);--color-block:rgba(68,68,68,0.65);--color-codeblock:#444;--color-inlinecode:#d56d28;--color-h1:rgba(255,255,255,0.871);--color-h2:rgba(255,255,255,0.871);--color-h3:rgba(255,255,255,0.6);--color-h4:rgba(255,255,255,0.6);--color-h5:rgba(255,255,255,0.6);--color-h6:rgba(255,255,255,0.6);--color-p:rgba(217,217,217,0.871);--color-list:rgba(217,217,217,0.871);--color-list-hl:#4dabf5;--color-meta:rgba(191,191,191,0.871);--color-link:rgba(191,191,191,0.871);--color-copyright-bkg:#21252b;--link-color:#e4e4e4;--color-text-a10:rgba(238,238,238,0.1);--color-text-a50:rgba(238,238,238,0.5);--color-text-a60:rgba(238,238,238,0.6);--color-text-a70:rgba(238,238,238,0.7);--color-text-a80:rgba(238,238,238,0.8);--color-text-a85:rgba(238,238,238,0.85);--color-text-a90:rgba(238,238,238,0.9);--color-card-a50:rgba(37,45,56,0.5);--color-card-a60:rgba(37,45,56,0.6);--color-card-a70:rgba(37,45,56,0.7);--color-card-a80:rgba(37,45,56,0.8);--color-card-a90:rgba(37,45,56,0.9);--color-card-darken2:#212832;--color-card-lighten5:#2f3947;--color-p-a20:rgba(217,217,217,0.2);--color-p-a70:rgba(217,217,217,0.7);--color-p-a75:rgba(217,217,217,0.75);--color-block-lighten3:rgba(76,76,76,0.65);--color-block-darken2:rgba(63,63,63,0.65);--color-mix60-p-card:rgba(133,137,142,0.922);--color-codeblock-darken6:#353535;--color-mix75-theme-text:rgba(74,167,241,0.968);--color-mix90-block-text:rgba(93,93,93,0.672)}:root:not([color-scheme]) img{filter:brightness(70%)!important}:root:not([color-scheme]) .blur{background:rgba(33,35,47,.9)!important}:root:not([color-scheme]) .white-box.blur{background:rgba(37,45,56,.9)!important}:root:not([color-scheme]) .nav-main .u-search-input{background:var(--color-card)!important}:root:not([color-scheme]) #l_main .article .prev-next>a{background:var(--color-block)!important}:root:not([color-scheme]) #l_main .article .prev-next>a:hover{background:var(--color-site-bg)!important}:root:not([color-scheme]) .article blockquote{background:var(--color-block)!important}:root:not([color-scheme]) .article-title a{color:var(--color-h1)!important}:root:not([color-scheme]) #u-search .modal,:root:not([color-scheme]) #u-search .modal-body,:root:not([color-scheme]) #u-search .modal-header{background:var(--color-card)!important}:root:not([color-scheme]) #u-search .modal-body .modal-results .result:hover{background:var(--color-block)!important}:root:not([color-scheme]) .u-search-input:hover{background:var(--color-block)!important}:root:not([color-scheme]) .u-search-input:focus{background:var(--color-site-body)!important}}[color-scheme=dark]{--color-site-body:#121212;--color-read-bkg:#21232f;--color-read-post:#252d38;--color-site-bg:#21232f;--color-site-inner:#efefef;--color-site-footer:#666;--color-card:#252d38;--color-text:rgba(238,238,238,0.871);--color-block:rgba(68,68,68,0.65);--color-codeblock:#444;--color-inlinecode:#d56d28;--color-h1:rgba(255,255,255,0.871);--color-h2:rgba(255,255,255,0.871);--color-h3:rgba(255,255,255,0.6);--color-h4:rgba(255,255,255,0.6);--color-h5:rgba(255,255,255,0.6);--color-h6:rgba(255,255,255,0.6);--color-p:rgba(217,217,217,0.871);--color-list:rgba(217,217,217,0.871);--color-list-hl:#4dabf5;--color-meta:rgba(191,191,191,0.871);--color-link:rgba(191,191,191,0.871);--color-copyright-bkg:#21252b;--link-color:#e4e4e4;--color-text-a10:rgba(238,238,238,0.1);--color-text-a50:rgba(238,238,238,0.5);--color-text-a60:rgba(238,238,238,0.6);--color-text-a70:rgba(238,238,238,0.7);--color-text-a80:rgba(238,238,238,0.8);--color-text-a85:rgba(238,238,238,0.85);--color-text-a90:rgba(238,238,238,0.9);--color-card-a50:rgba(37,45,56,0.5);--color-card-a60:rgba(37,45,56,0.6);--color-card-a70:rgba(37,45,56,0.7);--color-card-a80:rgba(37,45,56,0.8);--color-card-a90:rgba(37,45,56,0.9);--color-card-darken2:#212832;--color-card-lighten5:#2f3947;--color-p-a20:rgba(217,217,217,0.2);--color-p-a70:rgba(217,217,217,0.7);--color-p-a75:rgba(217,217,217,0.75);--color-block-lighten3:rgba(76,76,76,0.65);--color-block-darken2:rgba(63,63,63,0.65);--color-mix60-p-card:rgba(133,137,142,0.922);--color-codeblock-darken6:#353535;--color-mix75-theme-text:rgba(74,167,241,0.968);--color-mix90-block-text:rgba(93,93,93,0.672)}[color-scheme=dark] img{filter:brightness(70%)!important}[color-scheme=dark] .blur{background:rgba(33,35,47,.9)!important}[color-scheme=dark] .white-box.blur{background:rgba(37,45,56,.9)!important}[color-scheme=dark] .nav-main .u-search-input{background:var(--color-card)!important}[color-scheme=dark] #l_main .article .prev-next>a{background:var(--color-block)!important}[color-scheme=dark] #l_main .article .prev-next>a:hover{background:var(--color-site-bg)!important}[color-scheme=dark] .article blockquote{background:var(--color-block)!important}[color-scheme=dark] .article-title a{color:var(--color-h1)!important}[color-scheme=dark] #u-search .modal,[color-scheme=dark] #u-search .modal-body,[color-scheme=dark] #u-search .modal-header{background:var(--color-card)!important}[color-scheme=dark] #u-search .modal-body .modal-results .result:hover{background:var(--color-block)!important}[color-scheme=dark] .u-search-input:hover{background:var(--color-block)!important}[color-scheme=dark] .u-search-input:focus{background:var(--color-site-body)!important}@media screen and (max-width:500px){[color-scheme=dark] .l_header .m_search{background:var(--color-site-bg)!important}}#l_cover{min-height:64px}.cover-wrapper{top:0;left:0;max-width:100%;height:100vh;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-khtml-flex-wrap:nowrap;-moz-flex-wrap:nowrap;-o-flex-wrap:nowrap;-ms-flex-wrap:nowrap;-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;align-items:center;align-self:center;align-content:center;color:var(--color-site-inner);padding:0 16px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;position:relative;overflow:hidden;margin-bottom:-100px}.cover-wrapper .cover-bg{position:absolute;width:100%;height:100%;background-position:center;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover}.cover-wrapper .cover-bg.lazyload:not(.loaded){opacity:0;-webkit-opacity:0;-moz-opacity:0}.cover-wrapper .cover-bg.lazyload.loaded{animation-delay:0s;animation-duration:.5s;animation-fill-mode:forwards;animation-timing-function:ease-out;animation-name:fadeIn}@-moz-keyframes fadeIn{0%{opacity:0;-webkit-opacity:0;-moz-opacity:0;filter:blur(12px);transform:scale(1.02);-webkit-transform:scale(1.02);-khtml-transform:scale(1.02);-moz-transform:scale(1.02);-o-transform:scale(1.02);-ms-transform:scale(1.02)}100%{opacity:1;-webkit-opacity:1;-moz-opacity:1}}@-webkit-keyframes fadeIn{0%{opacity:0;-webkit-opacity:0;-moz-opacity:0;filter:blur(12px);transform:scale(1.02);-webkit-transform:scale(1.02);-khtml-transform:scale(1.02);-moz-transform:scale(1.02);-o-transform:scale(1.02);-ms-transform:scale(1.02)}100%{opacity:1;-webkit-opacity:1;-moz-opacity:1}}@-o-keyframes fadeIn{0%{opacity:0;-webkit-opacity:0;-moz-opacity:0;filter:blur(12px);transform:scale(1.02);-webkit-transform:scale(1.02);-khtml-transform:scale(1.02);-moz-transform:scale(1.02);-o-transform:scale(1.02);-ms-transform:scale(1.02)}100%{opacity:1;-webkit-opacity:1;-moz-opacity:1}}@keyframes fadeIn{0%{opacity:0;-webkit-opacity:0;-moz-opacity:0;filter:blur(12px);transform:scale(1.02);-webkit-transform:scale(1.02);-khtml-transform:scale(1.02);-moz-transform:scale(1.02);-o-transform:scale(1.02);-ms-transform:scale(1.02)}100%{opacity:1;-webkit-opacity:1;-moz-opacity:1}}.cover-wrapper .cover-body{z-index:1;position:relative;width:100%;height:100%}.cover-wrapper#full{height:calc(100vh + 100px);padding-bottom:100px}.cover-wrapper#half{max-height:640px;min-height:400px;height:calc(36vh - 64px + 200px)}.cover-wrapper #scroll-down{width:100%;height:64px;position:absolute;bottom:100px;text-align:center;cursor:pointer}.cover-wrapper #scroll-down .scroll-down-effects{color:#fff;font-size:24px;line-height:64px;position:absolute;width:24px;left:calc(50% - 12px);text-shadow:0 1px 2px rgba(0,0,0,.1);animation:scroll-down-effect 1.5s infinite;-webkit-animation:scroll-down-effect 1.5s infinite;-khtml-animation:scroll-down-effect 1.5s infinite;-moz-animation:scroll-down-effect 1.5s infinite;-o-animation:scroll-down-effect 1.5s infinite;-ms-animation:scroll-down-effect 1.5s infinite}@-moz-keyframes scroll-down-effect{0%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}50%{top:-16px;opacity:.4;-webkit-opacity:0.4;-moz-opacity:0.4}100%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}}@-webkit-keyframes scroll-down-effect{0%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}50%{top:-16px;opacity:.4;-webkit-opacity:0.4;-moz-opacity:0.4}100%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}}@-o-keyframes scroll-down-effect{0%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}50%{top:-16px;opacity:.4;-webkit-opacity:0.4;-moz-opacity:0.4}100%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}}@keyframes scroll-down-effect{0%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}50%{top:-16px;opacity:.4;-webkit-opacity:0.4;-moz-opacity:0.4}100%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}}.cover-wrapper .cover-body{margin-top:64px;margin-bottom:100px}.cover-wrapper .cover-body,.cover-wrapper .cover-body .bottom,.cover-wrapper .cover-body .top{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;align-items:center;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;max-width:100%}.cover-wrapper .cover-body .bottom{margin-top:32px}.cover-wrapper .cover-body .title{font-family:"Varela Round",system-ui,"PingFang SC","Microsoft YaHei","Source Han Sans SC","Noto Sans SC",Helvetica,Arial,sans-serif,Helvetica,monospace;font-size:3.125rem;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.1)}.cover-wrapper .cover-body .subtitle{font-size:20px}.cover-wrapper .cover-body .logo{max-height:120px;max-width:calc(100% - 4 * 16px)}@media screen and (min-height:1024px){.cover-wrapper .cover-body .title{font-size:3rem}.cover-wrapper .cover-body .subtitle{font-size:1.05rem}.cover-wrapper .cover-body .logo{max-height:150px}}.cover-wrapper .cover-body .m_search{position:relative;max-width:calc(100% - 16px);width:320px;vertical-align:middle}.cover-wrapper .cover-body .m_search .form{position:relative;display:-webkit-box;display:-moz-box;display:block;width:100%}.cover-wrapper .cover-body .m_search .icon,.cover-wrapper .cover-body .m_search .input{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.cover-wrapper .cover-body .m_search .icon{position:absolute;display:-webkit-box;display:-moz-box;display:block;line-height:2.5rem;width:32px;top:0;left:5px;color:var(--color-p-a75)}.cover-wrapper .cover-body .m_search .input{display:-webkit-box;display:-moz-box;display:block;height:2.5rem;width:100%;box-shadow:none;-webkit-box-shadow:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;font-size:.875rem;-webkit-appearance:none;padding-left:36px;border-radius:1.4rem;-webkit-border-radius:1.4rem;background:var(--color-card-a60);backdrop-filter:blur(10px);border:none;color:var(--color-text)}@media screen and (max-width:500px){.cover-wrapper .cover-body .m_search .input{padding-left:36px}}.cover-wrapper .cover-body .m_search .input:hover{background:var(--color-card-a80)}.cover-wrapper .cover-body .m_search .input:focus{background:var(--color-card)}.cover-wrapper .list-h{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;align-items:stretch;border-radius:4px;-webkit-border-radius:4px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.cover-wrapper .list-h a{-webkit-box-flex:1;-moz-box-flex:1;-webkit-flex:1 0;-ms-flex:1 0;flex:1 0;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;display:flex;font-weight:600}.cover-wrapper .list-h a img{display:-webkit-box;display:-moz-box;display:block;border-radius:2px;-webkit-border-radius:2px;margin:4px;min-width:40px;max-width:44px}@media screen and (max-width:768px){.cover-wrapper .list-h a img{min-width:36px;max-width:40px}}@media screen and (max-width:500px){.cover-wrapper .list-h a img{margin:2px 4px;min-width:32px;max-width:36px}}@media screen and (max-width:375px){.cover-wrapper .list-h a img{min-width:28px;max-width:32px}}.cover-wrapper{max-width:100%}.cover-wrapper.search .bottom .menu{margin-top:16px}.cover-wrapper.search .bottom .menu .list-h a{white-space:nowrap;-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;align-items:baseline;padding:2px;margin:4px;color:var(--color-site-inner);opacity:.75;-webkit-opacity:0.75;-moz-opacity:0.75;text-shadow:0 1px 2px rgba(0,0,0,.05);border-bottom:2px solid transparent}.cover-wrapper.search .bottom .menu .list-h a i{margin-right:4px}.cover-wrapper.search .bottom .menu .list-h a p{font-size:.9375rem}.cover-wrapper.search .bottom .menu .list-h a.active,.cover-wrapper.search .bottom .menu .list-h a:active,.cover-wrapper.search .bottom .menu .list-h a:hover{opacity:1;-webkit-opacity:1;-moz-opacity:1;border-bottom:2px solid var(--color-site-inner)}.cover-wrapper.dock .menu,.cover-wrapper.featured .menu,.cover-wrapper.focus .menu{border-radius:6px;-webkit-border-radius:6px}.cover-wrapper.dock .menu .list-h a,.cover-wrapper.featured .menu .list-h a,.cover-wrapper.focus .menu .list-h a{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;align-items:center;padding:12px;line-height:24px;border-radius:4px;-webkit-border-radius:4px;border-bottom:none;text-align:center;align-content:flex-end;color:var(--color-text-a70);font-size:1.5rem}@media screen and (max-width:500px){.cover-wrapper.dock .menu .list-h a,.cover-wrapper.featured .menu .list-h a,.cover-wrapper.focus .menu .list-h a{padding:12px 8px}}.cover-wrapper.dock .menu .list-h a i,.cover-wrapper.featured .menu .list-h a i,.cover-wrapper.focus .menu .list-h a i{margin:8px}.cover-wrapper.dock .menu .list-h a p,.cover-wrapper.featured .menu .list-h a p,.cover-wrapper.focus .menu .list-h a p{font-size:.875rem}.cover-wrapper.dock .menu .list-h a.active,.cover-wrapper.featured .menu .list-h a.active,.cover-wrapper.focus .menu .list-h a.active{background:var(--color-card);backdrop-filter:none}.cover-wrapper.dock .menu .list-h a.active i,.cover-wrapper.dock .menu .list-h a.active i+p,.cover-wrapper.featured .menu .list-h a.active i,.cover-wrapper.featured .menu .list-h a.active i+p,.cover-wrapper.focus .menu .list-h a.active i,.cover-wrapper.focus .menu .list-h a.active i+p{color:var(--theme)}.cover-wrapper.dock .menu .list-h a.active img+p,.cover-wrapper.featured .menu .list-h a.active img+p,.cover-wrapper.focus .menu .list-h a.active img+p{color:var(--color-text)}.cover-wrapper.dock .menu .list-h a:hover,.cover-wrapper.featured .menu .list-h a:hover,.cover-wrapper.focus .menu .list-h a:hover{background:var(--color-card)}.cover-wrapper.featured .menu .list-h{margin:-2px}.cover-wrapper.featured .menu .list-h a{margin:2px;background:var(--color-card-a50)}@supports (backdrop-filter:blur(20px)){.cover-wrapper.featured .menu .list-h a{background:var(--color-card-a50);backdrop-filter:saturate(200%) blur(20px)}}:root{--hue:206.57142857142856deg;--sat:89.74358974358974%;--light:54.11764705882353%;--alpha:1;--theme:hsla(var(--hue) var(--sat) var(--light) / 1);--theme-a10:hsla(var(--hue) var(--sat) var(--light) / 0.1);--theme-a20:hsla(var(--hue) var(--sat) var(--light) / 0.2);--theme-a30:hsla(var(--hue) var(--sat) var(--light) / 0.3);--theme-a50:hsla(var(--hue) var(--sat) var(--light) / 0.5);--theme-a90:hsla(var(--hue) var(--sat) var(--light) / 0.9);--accent:#ff5722;--link:hsla(206.57142857142856deg 89.74358974358974% 54.11764705882353% / 1);--link-a20:hsla(206.57142857142856deg 89.74358974358974% 54.11764705882353% / 0.2);--background:hsla(210deg 20% 98% / 1);--card:#fff;--bg-a20:hsla(210deg 0% 100% / 0.2);--bg-a50:hsla(210deg 0% 100% / 0.5);--bg-a60:hsla(210deg 0% 100% / 0.6);--bg-a75:hsla(210deg 0% 100% / 0.75);--bg-a100:hsla(210deg 0% 100% / 1);--text:hsla(210deg 0% 0% / 1);--text-reverse:hsla(210deg 0% 100% / 1);--text-p1:hsla(210deg 0% 0% / 0.8);--text-p2:hsla(210deg 0% 0% / 0.7);--text-p3:hsla(210deg 0% 0% / 0.5);--text-p4:hsla(210deg 0% 0% / 0.4);--text-meta:hsla(210deg 0% 0% / 0.2);--text-code:hsla(210deg 0% 0% / 0.9);--text-a10:hsla(210deg 0% 0% / 0.1);--text-a20:hsla(210deg 0% 0% / 0.2);--block:hsla(210deg 50% 12% / 0.04);--block-border:hsla(210deg 50% 12% / 0.06)}@media (prefers-color-scheme:dark){:root{--background:hsla(210deg 8% 12% / 1);--card:hsla(210deg 10% 24% / 1);--bg-a20:hsla(210deg 0% 0% / 0.2);--bg-a50:hsla(210deg 0% 0% / 0.5);--bg-a60:hsla(210deg 0% 0% / 0.6);--bg-a75:hsla(210deg 0% 0% / 0.75);--bg-a100:hsla(210deg 0% 0% / 1);--text:hsla(210deg 0% 100% / 1);--text-reverse:hsla(210deg 0% 0% / 1);--text-p1:hsla(210deg 0% 100% / 0.8);--text-p2:hsla(210deg 0% 100% / 0.7);--text-p3:hsla(210deg 0% 100% / 0.5);--text-p4:hsla(210deg 0% 100% / 0.4);--text-meta:hsla(210deg 0% 100% / 0.2);--text-code:hsla(210deg 0% 100% / 0.9);--text-a10:hsla(210deg 0% 100% / 0.1);--text-a20:hsla(210deg 0% 100% / 0.2);--block:hsla(210deg 24% 72% / 0.08);--block-border:hsla(210deg 24% 72% / 0.12);--text-code:hsla(20 75 60 / 1)}}@media screen and (prefers-color-scheme:dark) and (max-width:667px){:root{--background:#000}}:root[color-scheme=light]{--background:hsla(210deg 20% 98% / 1);--card:#fff;--bg-a20:hsla(210deg 0% 100% / 0.2);--bg-a50:hsla(210deg 0% 100% / 0.5);--bg-a60:hsla(210deg 0% 100% / 0.6);--bg-a75:hsla(210deg 0% 100% / 0.75);--bg-a100:hsla(210deg 0% 100% / 1);--text:hsla(210deg 0% 0% / 1);--text-reverse:hsla(210deg 0% 100% / 1);--text-p1:hsla(210deg 0% 0% / 0.8);--text-p2:hsla(210deg 0% 0% / 0.7);--text-p3:hsla(210deg 0% 0% / 0.5);--text-p4:hsla(210deg 0% 0% / 0.4);--text-meta:hsla(210deg 0% 0% / 0.2);--text-code:hsla(210deg 0% 0% / 0.9);--text-a10:hsla(210deg 0% 0% / 0.1);--text-a20:hsla(210deg 0% 0% / 0.2);--block:hsla(210deg 50% 12% / 0.04);--block-border:hsla(210deg 50% 12% / 0.06)}:root[color-scheme=dark]{--background:hsla(210deg 8% 12% / 1);--card:hsla(210deg 10% 24% / 1);--bg-a20:hsla(210deg 0% 0% / 0.2);--bg-a50:hsla(210deg 0% 0% / 0.5);--bg-a60:hsla(210deg 0% 0% / 0.6);--bg-a75:hsla(210deg 0% 0% / 0.75);--bg-a100:hsla(210deg 0% 0% / 1);--text:hsla(210deg 0% 100% / 1);--text-reverse:hsla(210deg 0% 0% / 1);--text-p1:hsla(210deg 0% 100% / 0.8);--text-p2:hsla(210deg 0% 100% / 0.7);--text-p3:hsla(210deg 0% 100% / 0.5);--text-p4:hsla(210deg 0% 100% / 0.4);--text-meta:hsla(210deg 0% 100% / 0.2);--text-code:hsla(210deg 0% 100% / 0.9);--text-a10:hsla(210deg 0% 100% / 0.1);--text-a20:hsla(210deg 0% 100% / 0.2);--block:hsla(210deg 24% 72% / 0.08);--block-border:hsla(210deg 24% 72% / 0.12);--text-code:hsla(20 75 60 / 1)}@media screen and (max-width:667px){:root[color-scheme=dark]{--background:#000}}:root{--color-site-body:#87ceeb;--color-site-bg:#87ceeb;--color-site-inner:#555;--color-site-footer:#666;--color-card:#fff;--color-text:#444;--color-block:#f6f6f6;--color-inlinecode:#d56d28;--color-codeblock:#fff7ea;--color-h1:#3a3a3a;--color-h2:#3a3a3a;--color-h3:#333;--color-h4:#444;--color-h5:#555;--color-h6:#666;--color-p:#444;--color-list:#666;--color-list-hl:#1a78c2;--color-meta:#888;--color-read-bkg:#e0d8c8;--color-read-post:#f8f1e2;--color-copyright-bkg:#f5f5f5;--link-color:#00323c;--color-text-a10:rgba(68,68,68,0.1);--color-text-a50:rgba(68,68,68,0.5);--color-text-a60:rgba(68,68,68,0.6);--color-text-a70:rgba(68,68,68,0.7);--color-text-a80:rgba(68,68,68,0.8);--color-text-a85:rgba(68,68,68,0.85);--color-text-a90:rgba(68,68,68,0.9);--color-card-a50:rgba(255,255,255,0.5);--color-card-a60:rgba(255,255,255,0.6);--color-card-a70:rgba(255,255,255,0.7);--color-card-a80:rgba(255,255,255,0.8);--color-card-a90:rgba(255,255,255,0.9);--color-card-darken2:#fafafa;--color-card-lighten5:#fff;--color-p-a20:rgba(68,68,68,0.2);--color-p-a70:rgba(68,68,68,0.7);--color-p-a75:rgba(68,68,68,0.75);--color-block-lighten3:#fefefe;--color-block-darken2:#f1f1f1;--color-mix60-p-card:#8e8e8e;--color-codeblock-darken6:#ffebcb;--color-mix75-theme-text:#2981c7;--color-mix90-block-text:#e4e4e4}:root{text-autospace:normal}*{box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;outline:0;margin:0;padding:0}::-webkit-scrollbar{height:4px;width:4px}::-webkit-scrollbar-track-piece{background:0 0}::-webkit-scrollbar-thumb{background:var(--theme);cursor:pointer;border-radius:2px;-webkit-border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--accent)}html{color:var(--color-text);width:100%;height:100%;font-family:"Varela Round",system-ui,"PingFang SC","Microsoft YaHei","Source Han Sans SC","Noto Sans SC",Helvetica,Arial,sans-serif,Menlo,Monaco,monospace,sans-serif;font-size:16px}html>::-webkit-scrollbar{height:4px;width:4px}html>::-webkit-scrollbar-track-piece{background:0 0}html>::-webkit-scrollbar-thumb{background:var(--theme);cursor:pointer;border-radius:2px;-webkit-border-radius:2px}html>::-webkit-scrollbar-thumb:hover{background:var(--accent)}body{background-color:var(--color-site-body);text-rendering:optimizelegibility;-webkit-tap-highlight-color:transparent;line-height:1.6;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body.modal-active{overflow:hidden}@media screen and (max-width:680px){body.modal-active{position:fixed;top:0;right:0;bottom:0;left:0}}a{color:var(--link);cursor:pointer;text-decoration:none;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}a:hover{color:var(--accent)}a:active,a:hover{outline:0}ol,ul{padding-left:0}ol li,ul li{list-style:none}header{display:-webkit-box;display:-moz-box;display:block}img{border:0;background:0 0;max-width:100%}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;height:0;border:0;border-radius:1px;-webkit-border-radius:1px;border-bottom:1px solid rgba(68,68,68,.1)}button,input{color:inherit;font:inherit;margin:0;background:0 0;border:none}button{overflow:visible;text-transform:none;-webkit-appearance:button;cursor:pointer}@supports (backdrop-filter:blur(20px)){.blur{background:var(--color-card-a90)!important;backdrop-filter:saturate(200%) blur(20px)}}.shadow{box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1)}.shadow.floatable{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all 0.28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.shadow.floatable:hover{box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1)}@media screen and (prefers-color-scheme:dark) and (max-width:500px){.l_header .m_search{background:var(--color-site-bg)!important}}.zh-dash{font-family:"PingFang SC","Microsoft YaHei","Noto Sans SC","Source Han Sans SC",sans-serif;white-space:nowrap}mjx-container{padding:0 0!important}mjx-container:not([display=true]){padding:4px 2px 4px 6px!important}mjx-container[jax=SVG]{direction:ltr}mjx-container[jax=SVG]>svg{overflow:visible}mjx-container[jax=SVG][display=true]{display:-webkit-box;display:-moz-box;display:block;text-align:center;margin:1em 0}mjx-container[jax=SVG][justify=left]{text-align:left}mjx-container[jax=SVG][justify=right]{text-align:right}g[data-mml-node=merror]>g{fill:#f00;stroke:#f00}g[data-mml-node=merror]>rect[data-background]{fill:#ff0;stroke:none}g[data-mml-node=mtable]>line[data-line]{stroke-width:70px;fill:none}g[data-mml-node=mtable]>rect[data-frame]{stroke-width:70px;fill:none}g[data-mml-node=mtable]>.mjx-dashed{stroke-dasharray:140}g[data-mml-node=mtable]>.mjx-dotted{stroke-linecap:round;stroke-dasharray:0,140}g[data-mml-node=mtable]>svg{overflow:visible}[jax=SVG] mjx-tool{display:-webkit-box;display:-moz-box;display:inline-block;position:relative;width:0;height:0}[jax=SVG] mjx-tool>mjx-tip{position:absolute;top:0;left:0}mjx-tool>mjx-tip{display:-webkit-box;display:-moz-box;display:inline-block;padding:.2em;border:1px solid #888;font-size:70%;background-color:#f8f8f8;color:#000;box-shadow:2px 2px 5px #aaa;-webkit-box-shadow:2px 2px 5px #aaa}g[data-mml-node=maction][data-toggle]{cursor:pointer}mjx-status{display:-webkit-box;display:-moz-box;display:block;position:fixed;left:1em;bottom:1em;min-width:25%;padding:.2em .4em;border:1px solid #888;font-size:90%;background-color:#f8f8f8;color:#000}foreignObject[data-mjx-xml]{font-family:initial;line-height:normal;overflow:visible}.MathJax path{stroke-width:3}mjx-container[display=true]{overflow:auto hidden}mjx-container[display=true]+br{display:-webkit-box;display:-moz-box;display:none}.fa-brands.color-github,.fa-duotone.color-github,.fa-light.color-github,.fa-regular.color-github,.fa-solid.color-github,.fa-thin.color-github,.fa.color-github,.fad.color-github,.fal.color-github,.far.color-github,.fas.color-github,.iziToast>.iziToast-body .iziToast-icon.color-github{color:#000}.fa-brands.color-friends,.fa-duotone.color-friends,.fa-light.color-friends,.fa-regular.color-friends,.fa-solid.color-friends,.fa-thin.color-friends,.fa.color-friends,.fad.color-friends,.fal.color-friends,.far.color-friends,.fas.color-friends,.iziToast>.iziToast-body .iziToast-icon.color-friends{color:#d31ee9}.fa-brands.color-about,.fa-duotone.color-about,.fa-light.color-about,.fa-regular.color-about,.fa-solid.color-about,.fa-thin.color-about,.fa.color-about,.fad.color-about,.fal.color-about,.far.color-about,.fas.color-about,.iziToast>.iziToast-body .iziToast-icon.color-about{color:#0095ff}.fa-brands.color-travellings,.fa-duotone.color-travellings,.fa-light.color-travellings,.fa-regular.color-travellings,.fa-solid.color-travellings,.fa-thin.color-travellings,.fa.color-travellings,.fad.color-travellings,.fal.color-travellings,.far.color-travellings,.fas.color-travellings,.iziToast>.iziToast-body .iziToast-icon.color-travellings{color:#734ae6}.cover-wrapper .cover-body .subtitle{font-size:.875rem}</style><link rel="stylesheet" href="/css/style.css" media="print" onload='this.media="all",this.onload=null'><noscript><link rel="stylesheet" href="/css/style.css"></noscript><script>let userColorScheme=localStorage.getItem("color-scheme");userColorScheme&&document.documentElement.setAttribute("color-scheme",userColorScheme)</script><script>window.MSInputMethodContext&&document.documentMode&&document.write('<style>html{overflow-x: hidden !important;overflow-y: hidden !important;}.kill-ie{text-align:center;height: 100%;margin-top: 15%;margin-bottom: 5500%;}.kill-t{font-size: 2rem;}.kill-c{font-size: 1.2rem;}#l_header,#l_body{display: none;}</style><div class="kill-ie"><span class="kill-t"><b>抱歉,您的浏览器无法访问本站</b></span><br/><span class="kill-c">微软已经于2016年终止了对 Internet Explorer (IE) 10 及更早版本的支持,<br/>继续使用存在极大的安全隐患,请使用当代主流的浏览器进行访问。</span><br/><a target="_blank" rel="noopener" href="https://blogs.windows.com/windowsexperience/2021/05/19/the-future-of-internet-explorer-on-windows-10-is-in-microsoft-edge/"><strong>了解详情 ></strong></a></div>')</script><noscript><style>html{overflow-x:hidden!important;overflow-y:hidden!important}.kill-noscript{text-align:center;height:100%;margin-top:15%;margin-bottom:5500%}.kill-t{font-size:2rem}.kill-c{font-size:1.2rem}#l_body,#l_header{display:none}</style><div class="kill-noscript"> <span class="kill-t"><b>抱歉,您的浏览器无法访问本站</b></span><br> <span class="kill-c">本页面需要浏览器支持(启用)JavaScript</span><br> <a target="_blank" rel="external nofollow noopener noreferrer" href="https://www.baidu.com/s?wd=启用JavaScript"><strong>了解详情 ></strong></a></div></noscript><script>!function(){const e=new WeakMap,t=new Proxy({},{get(o,n){const l=e.get(t);return l?.[n]},set(o,n,l){e.has(t)||e.set(t,Object.create(null));return e.get(t)[n]=l,!0},deleteProperty(o,n){const l=e.get(t);return!(!l||!Object.prototype.hasOwnProperty.call(l,n))&&(delete l[n],0===Object.keys(l).length&&e.delete(t),!0)},ownKeys(o){const n=e.get(t);return n?Object.keys(n):[]},getOwnPropertyDescriptor(o,n){const l=e.get(t);if(l&&Object.prototype.hasOwnProperty.call(l,n))return{value:l[n],writable:!0,enumerable:!0,configurable:!0}}});Object.defineProperty(window,"volantis",{value:t,writable:!0,configurable:!0,enumerable:!0})}(),volantis.dom={},volantis.simpleTextHash=e=>{let t=5381;for(let o=0;o<e.length;o++)t=(t<<5)+t+e.charCodeAt(o),t&=t;return t.toString(16).padStart(8,"0")},volantis.getFunctionHash=e=>{const t=e.toString();return volantis.simpleTextHash(t)},volantis.EventListener={list:[],remove(){this.list.forEach(e=>{e.ele.removeEventListener(e.type,e.f,!1)}),this.list=[]}};class VolantisEventListener{constructor(e,t,o){this.type=e,this.f=t,this.ele=o}}class VolantisDom{constructor(e){return this._ele=e||document.createElement("div"),new Proxy(this,{get:(e,t)=>void 0!==e[t]?e[t]:void 0!==e._ele[t]?"function"==typeof e._ele[t]?e._ele[t].bind(e._ele):e._ele[t]:void 0,set:(e,t,o)=>void 0!==e._ele[t]?(e._ele[t]=o,!0):(e[t]=o,!0)})}find(e){const t=this._ele.querySelector(e);return t?new VolantisDom(t):null}hasClass(e){return this._ele.classList.contains(e)}addClass(e){return"string"!=typeof e||e.split(" ").forEach(e=>{e&&this._ele.classList.add(e)}),this}removeClass(e){return"string"!=typeof e||e.split(" ").forEach(e=>{e&&this._ele.classList.remove(e)}),this}toggleClass(e){return"string"!=typeof e||e.split(" ").forEach(e=>{e&&this._ele.classList.toggle(e)}),this}on(e,t,o=!0){return"function"!=typeof t||(this._ele.addEventListener(e,t,!1),o&&volantis.EventListener.list.push(new VolantisEventListener(e,t,this._ele))),this}click(e,t){return this.on("click",e,t)}scroll(e,t){return this.on("scroll",e,t)}html(e){return void 0===e?this._ele.innerHTML:(this._ele.innerHTML=e,this)}hide(){return this._ele.classList.remove("show"),this._ele.style.removeProperty("display"),this}show(){return this._ele.classList.add("show"),this._ele.style.removeProperty("display"),this}}volantis.dom.$=e=>e?e instanceof VolantisDom?e:e instanceof NodeList||e instanceof HTMLCollection?Array.from(e).map(e=>new VolantisDom(e)):e instanceof Node?new VolantisDom(e):null:null;class RunItem{constructor(){this.list=[]}start(){this.list.forEach(e=>e.run())}push(e,t,o=!0){if("function"!=typeof e)return;let n=e;o&&(n=()=>{volantis.requestAnimationFrame(e)}),t=t||volantis.getFunctionHash(e);const l=this.list.findIndex(e=>e.name===t);-1===l?this.list.push(new TaskItem(n,t)):this.list[l]=new TaskItem(n,t)}remove(e){"string"==typeof e&&(this.list=this.list.filter(t=>t.name!==e))}}class TaskItem{constructor(e,t){this.name=t||volantis.getFunctionHash(e),this.fn=e}run(){try{this.fn()}catch(e){console.error(`Error executing task ${this.name}:`,e)}}}function errorImgAvatar(e){e.src=volantis.GLOBAL_CONFIG.default.avatar,e.srcset=volantis.GLOBAL_CONFIG.default.avatar,e.onerror=null}function errorImgCover(e){e.src=volantis.GLOBAL_CONFIG.default.cover,e.srcset=volantis.GLOBAL_CONFIG.default.cover,e.onerror=null}volantis.pjax={},volantis.pjax.method={complete:new RunItem,error:new RunItem,send:new RunItem},volantis.pjax=Object.assign(volantis.pjax,{push:volantis.pjax.method.complete.push.bind(volantis.pjax.method.complete),error:volantis.pjax.method.error.push.bind(volantis.pjax.method.error),send:volantis.pjax.method.send.push.bind(volantis.pjax.method.send)}),volantis.rightmenu={},volantis.rightmenu.method={handle:new RunItem},volantis.rightmenu=Object.assign(volantis.rightmenu,{handle:volantis.rightmenu.method.handle.push.bind(volantis.rightmenu.method.handle)}),volantis.dark={},volantis.dark.method={toggle:new RunItem},volantis.dark=Object.assign(volantis.dark,{push:volantis.dark.method.toggle.push.bind(volantis.dark.method.toggle)}),volantis.js=(e,t)=>new Promise((o,n)=>{setTimeout(function(){var l;if(document.querySelector(`script[src="${l=e,l.replace(/[#".'()[\]]/g,"\\$&")}"]`))return void o();const i=document.createElement("script");i.src=e;if(i.onload=()=>{"function"==typeof t&&t(),o()},i.onerror=()=>n(new Error(`Failed to load script: ${e}`)),t&&"object"==typeof t&&!Array.isArray(t))for(const e in t)t.hasOwnProperty(e)&&("onload"===e?i.onload=()=>{t[e](),o()}:"pjax"===e?(i.setAttribute("pjax",""),i.setAttribute("data-pjax","")):!0===t[e]?i.setAttribute(e,""):i.setAttribute(e,t[e]));(document.head||document.documentElement).appendChild(i)})}),volantis.css=e=>new Promise((t,o)=>{setTimeout(function(){var n;if(document.querySelector(`link[href="${n=e,n.replace(/[#".'()[\]]/g,"\\$&")}"]`))return void t();const l=document.createElement("link");Object.assign(l,{rel:"stylesheet",href:e,onload:()=>t(),onerror:()=>o(new Error(`Failed to load CSS: ${e}`))}),document.head.appendChild(l)})}),volantis.import={jQuery:()=>"undefined"==typeof jQuery?volantis.js(volantis.GLOBAL_CONFIG.cdn.jquery):new Promise(e=>{e()})},volantis.throttle=(e,t=200)=>{let o=0;return function(...n){const l=Date.now();l-o>=t&&(e.apply(this,n),o=l)}},volantis.debounce=(e,t=200)=>{let o=null;return function(){o&&clearTimeout(o),o=setTimeout(()=>{e.apply(this,arguments),o=null},t)}},volantis.requestAnimationFrame=e=>(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){return window.setTimeout(e,1e3/60)}),window.requestAnimationFrame(e)),volantis.rafThrottle=e=>{let t=null;return(...o)=>{t||(t=volantis.requestAnimationFrame(()=>{e(...o),t=null}))}},volantis.layoutHelper=(e,t,o={})=>{const{clean:n=!1,pjax:l=!0}={...o},i=()=>{const o=document.createElement("div");o.innerHTML=t;const l=document.querySelector(`#layoutHelper-${e}`);l&&(n&&(l.innerHTML=""),l.append(o))};i(),l&&volantis.pjax.push(i,`layoutHelper-${e}`)},volantis.scroll={engine:new RunItem,unengine:new RunItem},volantis.scroll=Object.assign(volantis.scroll,{push:volantis.scroll.engine.push.bind(volantis.scroll.engine)}),volantis.scroll.getScrollTop=()=>{let e;return window.pageYOffset?e=window.pageYOffset:document.compatMode&&"BackCompat"!=document.compatMode?e=document.documentElement.scrollTop:document.body&&(e=document.body.scrollTop),e},volantis.scroll.scrollHeight=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},volantis.scroll.offsetHeight=function(){return Math.min(document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},volantis.scroll.progress=function(){return volantis.scroll.getScrollTop()/(volantis.scroll.scrollHeight()-volantis.scroll.offsetHeight())},volantis.scroll.handleScrollEvents=()=>{volantis.scroll.lastScrollTop=volantis.scroll.getScrollTop(),volantis.requestAnimationFrame(function e(){const t=volantis.scroll.getScrollTop();volantis.scroll.lastScrollTop!==t?(volantis.scroll.del=t-volantis.scroll.lastScrollTop,volantis.scroll.lastScrollTop=t,volantis.scroll.unengine.list=[],volantis.scroll.engine.start()):volantis.scroll.unengine.start(),volantis.requestAnimationFrame(e)})},volantis.scroll.handleScrollEvents(),volantis.scroll.ele=null,volantis.scroll.to=(e,t={})=>{e&&(volantis.scroll.ele=e,opt={top:e.getBoundingClientRect().top+document.documentElement.scrollTop,behavior:volantis.GLOBAL_CONFIG.scroll_behavior},"top"in t&&(opt.top=t.top),"behavior"in t&&(opt.behavior=t.behavior),"addTop"in t&&(opt.top+=t.addTop),"observerDic"in t||(t.observerDic=100),window.scrollTo(opt),t.observer&&setTimeout(()=>{volantis.scroll.ele==e&&volantis.scroll.unengine.push(()=>{let o=e.getBoundingClientRect().top;o>=-t.observerDic&&o<=t.observerDic||volantis.scroll.to(e,t),volantis.scroll.unengine.remove("unengineObserver")},"unengineObserver")},1e3))},volantis.cleanContentVisibility=()=>{document.querySelector(".post-story")&&(console.log("cleanContentVisibility"),document.querySelectorAll(".post-story").forEach(e=>{e.classList.remove("post-story")}))};const nativeSetTimeout=window.setTimeout,nativeSetInterval=window.setInterval,nativeClearTimeout=window.clearTimeout,nativeClearInterval=window.clearInterval;volantis.activeTimeout=[],volantis.activeInterval=[],window.setTimeout=function(e,t,...o){const n=nativeSetTimeout(function(...t){try{return e.apply(this,t)}finally{const e=volantis.activeTimeout.indexOf(n);-1!==e&&volantis.activeTimeout.splice(e,1)}},t,...o);return volantis.activeTimeout.push(n),n},window.setInterval=function(e,t,...o){const n=nativeSetInterval(e,t,...o);return volantis.activeInterval.push(n),n},window.clearTimeout=function(e){nativeClearTimeout(e);const t=volantis.activeTimeout.indexOf(e);-1!==t&&volantis.activeTimeout.splice(t,1)},window.clearInterval=function(e){nativeClearInterval(e);const t=volantis.activeInterval.indexOf(e);-1!==t&&volantis.activeInterval.splice(t,1)},volantis.getActiveInterval=function(){return[...volantis.activeInterval]},volantis.getActiveTimeout=function(){return[...volantis.activeTimeout]},volantis.clearAllTimers=function(){volantis.getActiveInterval().forEach(function(e){clearInterval(e)}),volantis.getActiveTimeout().forEach(function(e){clearTimeout(e)})},volantis.pjax.send(volantis.clearAllTimers,"clearAllTimers"),document.addEventListener("DOMContentLoaded",function(){volantis.dom.bodyAnchor=volantis.dom.$(document.getElementById("safearea")),volantis.dom.topBtn=volantis.dom.$(document.getElementById("s-top")),volantis.dom.wrapper=volantis.dom.$(document.getElementById("wrapper")),volantis.dom.coverAnchor=volantis.dom.$(document.querySelector("#l_cover .cover-wrapper")),volantis.dom.switcher=volantis.dom.$(document.querySelector("#l_header .switcher .s-search")),volantis.dom.header=volantis.dom.$(document.getElementById("l_header")),volantis.dom.search=volantis.dom.$(document.querySelector("#l_header .m_search")),volantis.dom.mPhoneList=volantis.dom.$(document.querySelectorAll("#l_header .m-phone .list-v"))})</script><script>volantis.debug=!1,volantis.GLOBAL_CONFIG={root:"/",debug:!1,default:{avatar:"https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/media/placeholder/avatar/round/3442075.svg",link:"https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/media/placeholder/link/8f277b4ee0ecd.svg",cover:"https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/media/placeholder/cover/76b86c0226ffd.svg",image:"https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/media/placeholder/image/2659360.svg",topic:"https://static.mhuig.top/gh/cdn-x/placeholder@1.0.12/image/10433048.png",project:"https://static.mhuig.top/gh/cdn-x/placeholder@1.0.12/image/2779789.png",banner:"https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/banner/books.jpg",loading:"https://api.iconify.design/eos-icons:three-dots-loading.svg?color=%231cd0fd",image_onerror:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2rem' height='2rem' viewBox='0 0 24 24'%3E%3C!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --%3E%3Cpath fill='%23F44336' d='M22 12.698c-.002 1.47-.013 2.718-.096 3.743c-.097 1.19-.296 2.184-.74 3.009a4.2 4.2 0 0 1-.73.983c-.833.833-1.893 1.21-3.237 1.39C15.884 22 14.2 22 12.053 22h-.106c-2.148 0-3.83 0-5.144-.177c-1.343-.18-2.404-.557-3.236-1.39c-.738-.738-1.12-1.656-1.322-2.795c-.2-1.12-.236-2.512-.243-4.241Q1.999 12.737 2 12v-.054c0-2.148 0-3.83.177-5.144c.18-1.343.557-2.404 1.39-3.236s1.893-1.21 3.236-1.39c1.168-.157 2.67-.175 4.499-.177a.697.697 0 1 1 0 1.396c-1.855.002-3.234.018-4.313.163c-1.189.16-1.906.464-2.436.994S3.72 5.8 3.56 6.99C3.397 8.2 3.395 9.788 3.395 12v.784l.932-.814a2.14 2.14 0 0 1 2.922.097l3.99 3.99a1.86 1.86 0 0 0 2.385.207l.278-.195a2.79 2.79 0 0 1 3.471.209l2.633 2.37c.265-.557.423-1.288.507-2.32c.079-.972.09-2.152.091-3.63a.698.698 0 0 1 1.396 0' opacity='.5'/%3E%3Cpath fill='%23F44336' fill-rule='evenodd' d='M17.5 11c-2.121 0-3.182 0-3.841-.659S13 8.621 13 6.5s0-3.182.659-3.841S15.379 2 17.5 2s3.182 0 3.841.659S22 4.379 22 6.5s0 3.182-.659 3.841S19.621 11 17.5 11m-1.47-7.03a.75.75 0 1 0-1.06 1.06l1.47 1.47l-1.47 1.47a.75.75 0 0 0 1.06 1.06l1.47-1.47l1.47 1.47a.75.75 0 1 0 1.06-1.06L18.56 6.5l1.47-1.47a.75.75 0 0 0-1.06-1.06L17.5 5.44z' clip-rule='evenodd'/%3E%3C/svg%3E"},lastupdate:new Date(1787014577137),scroll_behavior:"smooth",cdn:{jquery:"https://static.mhuig.top/npm/jquery@3.7.1/dist/jquery.min.js",izitoast_css:"https://static.mhuig.top/npm/izitoast@1.4.0/dist/css/iziToast.min.css",izitoast_js:"https://static.mhuig.top/npm/izitoast@1.4.0/dist/js/iziToast.min.js",fancybox_css:"https://static.mhuig.top/npm/@fancyapps/ui@5.0.36/dist/fancybox/fancybox.css",fancybox_js:"https://static.mhuig.top/npm/@fancyapps/ui@5.0.36/dist/fancybox/fancybox.umd.js"},sidebar:{webinfo:{lastupd:{enable:!1,friendlyShow:!0},runtime:{data:"2019/08/19",unit:"天"}}},plugins:{message:{enable:!1,icon:{default:"fa-solid fa-info-circle light-blue",quection:"fa-solid fa-question-circle light-blue"},time:{default:5e3,quection:2e4},position:"topRight",transitionIn:"bounceInLeft",transitionOut:"fadeOutRight",titleColor:"var(--color-text)",messageColor:"var(--color-text)",backgroundColor:"var(--color-card)",zindex:2147483647,copyright:{enable:!0,title:"知识共享许可协议",message:"请遵守 CC BY-NC-SA 4.0 协议。",icon:"far fa-copyright light-blue"},aplayer:{enable:!0,play:"fa-solid fa-play",pause:"fa-solid fa-pause"},rightmenu:{enable:!0,notice:!0}},aplayer:{id:1480000098,enable:!0}},tag_plugins:{chat:{api:"https://siteinfo.listentothewind.cn/api/v1"}},search:{dataPath:"/content.json"},languages:{search:{hits_empty:"找不到您查询的内容:${query}",hits_stats:"找到 ${hits} 条结果,用时 ${time} 毫秒",normal:"输入关键词搜索",hits_found:"找到 ${totalResults} 个相关结果",history:"搜索历史",no_history:"暂无搜索历史",clear_history:"清除历史",filter_all:"全部",filter_posts:"文章",filter_pages:"页面",filter_tags:"标签",searching:"搜索中...",placeholder:"搜索文章、标签或分类...",label_posts:"文章",label_pages:"页面",label_tags:"标签"},search:{no_title:"无标题",config_invalid:"搜索配置无效,请检查设置。"}}}</script><script type="application/ld+json">[{"@context":"http://schema.org","@type":"Organization","name":"MHuiG Magicland","url":"https://blog.mhuig.top/","logo":{"@type":"ImageObject","url":"/lib/favicon/android-chrome-192x192.png","width":192,"height":192}},{"@context":"http://schema.org","@type":"Person","name":"MHuiG","image":{"@type":"ImageObject","url":"/lib/favicon/android-chrome-192x192.png"},"url":"https://blog.mhuig.top/","sameAs":["https://github.com/MHuiG","https://twitter.com/iMHuiG","https://t.me/MHuiG","https://keybase.io/MHuiG"],"description":"「Be Yourself, Make a Difference.」"},{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://blog.mhuig.top/","name":"Magicland"}},{"@type":"ListItem","position":2,"item":{"@id":"https://blog.mhuig.top/tags/BigData/","name":"BigData"}}]},{"@context":"http://schema.org","@type":"WebSite","name":"MHuiG Magicland","url":"https://blog.mhuig.top/","keywords":"MHuiG, @MHuiG, Blog, 博客, Magicland, 魔法世界","description":"宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。「Be Yourself, Make a Difference.」 - Magic Island","author":{"@type":"Person","name":"MHuiG","image":{"@type":"ImageObject","url":"/lib/favicon/android-chrome-192x192.png"},"url":"https://blog.mhuig.top/","description":"「Be Yourself, Make a Difference.」"},"publisher":{"@type":"Organization","name":"MHuiG Magicland","url":"https://blog.mhuig.top/","logo":{"@type":"ImageObject","url":"/lib/favicon/android-chrome-192x192.png","width":192,"height":192}},"potentialAction":{"@type":"SearchAction","name":"CoCo | The Cat of MHuiG","target":{"@type":"EntryPoint","urlTemplate":"https://blog.mhuig.top/havefun/coco/?s={search_term_string}"},"query-input":"required name=search_term_string"}},{"@context":"http://schema.org","@type":"BlogPosting","description":"宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒。「Be Yourself, Make a Difference.」 - Magic Island","inLanguage":"zh-Hans","mainEntityOfPage":{"@type":"WebPage"},"author":{"@type":"Person","name":"MHuiG","image":{"@type":"ImageObject","url":"/lib/favicon/android-chrome-192x192.png"},"url":"https://blog.mhuig.top/"},"publisher":{"@type":"Organization","name":"MHuiG Magicland","logo":{"@type":"ImageObject","url":"/lib/favicon/android-chrome-192x192.png","width":192,"height":192}},"wordCount":0,"image":{"@type":"ImageObject","url":"/lib/favicon/android-chrome-192x192.png","width":192,"height":192}}]</script></head><body itemscope itemtype="http://schema.org/WebPage"><pjax></pjax><header itemscope itemtype="http://schema.org/WPHeader" id="l_header" class="l_header auto shadow floatable blur show" style="opacity:0"><div class="container"><div id="wrapper"><div class="nav-sub"><p class="title"></p><ul class="switcher nav-list-h m-phone" id="pjax-header-nav-list"><li><a id="s-comment" class="fa-solid fa-comments fa-fw" target="_self" title="comment"></a></li><li><a id="s-toc" class="s-toc fa-solid fa-list fa-fw" target="_self" title="toc"></a></li></ul></div><div class="nav-main"> <a class="title flat-box" target="_self" href="/">MHuiG</a><div class="menu navigation"><ul class="nav-list-h m-pc"><li><a class="menuitem flat-box faa-parent animated-hover" title="索引"><i class="fa-duotone fa-list-alt fa-fw"></i> 索引</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" href="/notes/" title="便签" active-action="action-notes"><i class="fa-duotone fa-books fa-fw"></i> 便签</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/categories/" title="分类" active-action="action-categories"><i class="fa-duotone fa-folder-open fa-fw"></i> 分类</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/tags/" title="标签" active-action="action-tags"><i class="fa-duotone fa-tags fa-fw"></i> 标签</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/archives/" title="归档" active-action="action-archives"><i class="fa-duotone fa-archive fa-fw"></i> 归档</a></li></ul></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/friends/" title="友链" active-action="action-pagesfriends"><i class="fa-duotone fa-link fa-fw"></i> 友链</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" href="https://www.travellings.cn/go-by-clouds.html" title="Travelling" target="_blank" active-action="action-https:wwwtravellingscngo-by-cloudshtml" rel="external nofollow noopener noreferrer"><i class="fa-duotone fa-subway fa-fw"></i> Travelling</a></li></ul></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/about/" title="关于" active-action="action-pagesabout"><i class="fa-duotone fa-user-tie fa-fw"></i> 关于</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/time-machine/" title="时光机" active-action="action-pagestime-machine"><i class="fa-duotone fa-clock fa-fw"></i> 时光机</a></li><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="noopener" href="https://mhuig.top/privacy-policy/" title="隐私政策" active-action="action-https:mhuigtopprivacy-policy"><i class="fa-duotone fa-user-secret fa-fw"></i> 隐私政策</a></li></ul></li><li><a class="menuitem flat-box faa-parent animated-hover" title="更多"><i class="fa-duotone fa-fan fa-spin fa-fw"></i> 更多</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/beer/" title="Sponsor" active-action="action-pagesbeer"><i class="fa-duotone fa-heart-square fa-fw"></i> Sponsor</a></li><hr><li><a class="menuitem flat-box faa-parent animated-hover" title="博客管理"><i class="fa-duotone fa-user-shield fa-fw"></i> 博客管理</a><ul class="list-v"><li><a class="menuitem flat-box header toggle-mode-btn"><i class="fa-duotone fa-bat fa-fw"></i> 暗黑模式</a></li><li></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/rss/" title="RSS订阅" active-action="action-pagesrss"><i class="fa-duotone fa-rss fa-fw"></i> RSS订阅</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/sitemap.xml" title="站点地图" active-action="action-sitemapxml"><i class="fa-duotone fa-sitemap fa-fw"></i> 站点地图</a></li><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="external nofollow noopener noreferrer" href="https://mhuig.instatus.com/" title="Monitors" active-action="action-https:mhuiginstatuscom"><i class="fa-duotone fa-telescope fa-fw"></i> Monitors</a></li><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="external nofollow noopener noreferrer" href="https://ssl.mhuig.top/" title="SSL Status" active-action="action-https:sslmhuigtop"><i class="fa-brands fa-expeditedssl fa-fw"></i> SSL Status</a></li></ul></li><hr><li><a class="menuitem flat-box faa-parent animated-hover" title="工具箱"><i class="fa-duotone fa-tools fa-fw"></i> 工具箱</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="external nofollow noopener noreferrer" href="https://rssbox.mhuig.top/" title="RSS Box" active-action="action-https:rssboxmhuigtop"><i class="fa-duotone fa-conveyor-belt-boxes fa-fw"></i> RSS Box</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/havefun/coco/" title="My Cat" active-action="action-havefuncoco"><i class="fa-duotone fa-cat fa-fw"></i> My Cat</a></li><li><a class="menuitem flat-box"><i class="fa-duotone fa-compact-disc fa-spin fa-fw music"></i> Music</a><ul class="list-v"><li><div class="aplayer-container"><div class="aplayer-local"></div></div></li></ul></li><li></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/talk/" title="碎言碎语" active-action="action-pagestalk"><i class="fa-duotone fa-comments fa-fw"></i> 碎言碎语</a></li></ul></li><hr><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="external nofollow noopener noreferrer" href="https://github.com/MHuiG" title="GitHub" active-action="action-https:githubcomMHuiG"><i class="fa-brands fa-github fa-fw"></i> GitHub</a></li></ul></li></ul></div><div class="m_search"><form name="searchform" class="form u-search-form"><i class="icon fa-solid fa-search fa-fw"></i> <input type="text" class="input u-search-input" placeholder="Search..."></form></div><ul class="switcher nav-list-h m-phone"><li><a class="s-search fa-solid fa-search fa-fw" target="_self" title="search"></a></li><li><a class="s-menu fa-solid fa-bars fa-fw" target="_self" title="menu"></a><ul class="menu-phone list-v navigation white-box"><li><a class="menuitem flat-box faa-parent animated-hover" title="索引"><i class="fa-duotone fa-list-alt fa-fw"></i> 索引</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" href="/notes/" title="便签" active-action="action-notes"><i class="fa-duotone fa-books fa-fw"></i> 便签</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/categories/" title="分类" active-action="action-categories"><i class="fa-duotone fa-folder-open fa-fw"></i> 分类</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/tags/" title="标签" active-action="action-tags"><i class="fa-duotone fa-tags fa-fw"></i> 标签</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/archives/" title="归档" active-action="action-archives"><i class="fa-duotone fa-archive fa-fw"></i> 归档</a></li></ul></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/friends/" title="友链" active-action="action-pagesfriends"><i class="fa-duotone fa-link fa-fw"></i> 友链</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" href="https://www.travellings.cn/go-by-clouds.html" title="Travelling" target="_blank" active-action="action-https:wwwtravellingscngo-by-cloudshtml" rel="external nofollow noopener noreferrer"><i class="fa-duotone fa-subway fa-fw"></i> Travelling</a></li></ul></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/about/" title="关于" active-action="action-pagesabout"><i class="fa-duotone fa-user-tie fa-fw"></i> 关于</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/time-machine/" title="时光机" active-action="action-pagestime-machine"><i class="fa-duotone fa-clock fa-fw"></i> 时光机</a></li><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="noopener" href="https://mhuig.top/privacy-policy/" title="隐私政策" active-action="action-https:mhuigtopprivacy-policy"><i class="fa-duotone fa-user-secret fa-fw"></i> 隐私政策</a></li></ul></li><li><a class="menuitem flat-box faa-parent animated-hover" title="更多"><i class="fa-duotone fa-fan fa-spin fa-fw"></i> 更多</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/beer/" title="Sponsor" active-action="action-pagesbeer"><i class="fa-duotone fa-heart-square fa-fw"></i> Sponsor</a></li><hr><li><a class="menuitem flat-box faa-parent animated-hover" title="博客管理"><i class="fa-duotone fa-user-shield fa-fw"></i> 博客管理</a><ul class="list-v"><li><a class="menuitem flat-box header toggle-mode-btn"><i class="fa-duotone fa-bat fa-fw"></i> 暗黑模式</a></li><li></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/rss/" title="RSS订阅" active-action="action-pagesrss"><i class="fa-duotone fa-rss fa-fw"></i> RSS订阅</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/sitemap.xml" title="站点地图" active-action="action-sitemapxml"><i class="fa-duotone fa-sitemap fa-fw"></i> 站点地图</a></li><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="external nofollow noopener noreferrer" href="https://mhuig.instatus.com/" title="Monitors" active-action="action-https:mhuiginstatuscom"><i class="fa-duotone fa-telescope fa-fw"></i> Monitors</a></li><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="external nofollow noopener noreferrer" href="https://ssl.mhuig.top/" title="SSL Status" active-action="action-https:sslmhuigtop"><i class="fa-brands fa-expeditedssl fa-fw"></i> SSL Status</a></li></ul></li><hr><li><a class="menuitem flat-box faa-parent animated-hover" title="工具箱"><i class="fa-duotone fa-tools fa-fw"></i> 工具箱</a><ul class="list-v"><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="external nofollow noopener noreferrer" href="https://rssbox.mhuig.top/" title="RSS Box" active-action="action-https:rssboxmhuigtop"><i class="fa-duotone fa-conveyor-belt-boxes fa-fw"></i> RSS Box</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/havefun/coco/" title="My Cat" active-action="action-havefuncoco"><i class="fa-duotone fa-cat fa-fw"></i> My Cat</a></li><li><a class="menuitem flat-box faa-parent animated-hover" href="/pages/talk/" title="碎言碎语" active-action="action-pagestalk"><i class="fa-duotone fa-comments fa-fw"></i> 碎言碎语</a></li></ul></li><hr><li><a class="menuitem flat-box faa-parent animated-hover" target="_blank" rel="external nofollow noopener noreferrer" href="https://github.com/MHuiG" title="GitHub" active-action="action-https:githubcomMHuiG"><i class="fa-brands fa-github fa-fw"></i> GitHub</a></li></ul></li></ul></li></ul></div></div></div></header><div id="l_body"><div id="l_cover"><div id="none" class="cover-wrapper featured" style="display:none"><div class="cover-bg lazyload placeholder" data-bg></div><div class="cover-body"><div class="top"><p class="title">Magicland</p><p class="subtitle">「看庭前花开花落,望天上云卷云舒」</p></div><div class="bottom"><div class="menu navigation"><div class="list-h"><a target="_blank" rel="external nofollow noopener noreferrer" href="https://github.com/MHuiG" active-action="action-https:githubcomMHuiG"><i class="fa-brands fa-github color-github fa-fw"></i><p>Github</p></a><a href="/pages/friends/" active-action="action-pagesfriends"><i class="fa-duotone fa-link color-friends fa-fw"></i><p>友链</p></a><a href="/pages/about/" active-action="action-pagesabout"><i class="fa-duotone fa-user-tie color-about fa-fw"></i><p>关于</p></a><a href="https://www.travellings.cn/go-by-clouds.html" target="_blank" active-action="action-https:wwwtravellingscngo-by-cloudshtml" rel="external nofollow noopener noreferrer"><i class="fa-duotone fa-subway color-travellings fa-fw"></i><p>Travelling</p></a></div></div></div></div><div id="scroll-down" style="display:none"><i class="fa fa-chevron-down scroll-down-effects"></i></div></div></div><div id="safearea"><div class="body-wrapper"><div id="l_main" class><section class="post-list"><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/7e3480e9/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="大数据架构演变"><meta itemprop="description" content="解析大数据架构从BI系统到Hadoop离线&#x2F;实时处理的演变,对比Lambda架构(Hadoop+Storm混合处理)、Kappa架构(纯流处理)及IOTA架构(统一数据模型+边缘计算)的技术特点与应用场景,展现数据处理范式从T+1到实时计算的发展历程。"></span><div class="headimg-div" position="bottom"> <a class="headimg-a" href="/p/7e3480e9/"><img itemprop="image" class="headimg lazyload" alt="大数据架构演变" src="https://static.mhuig.top/npm/mhgoos@0.0.1651972675436/202127204646.webp" class="lazyload" data-srcset="https://static.mhuig.top/npm/mhgoos@0.0.1651972675436/202127204646.webp" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="></a></div><h2 class="article-title" itemprop="name headline"> <a href="/p/7e3480e9/" itemprop="url">大数据架构演变</a></h2><div class="md article-desc" itemprop="articleBody"><p>解析大数据架构从BI系统到Hadoop离线/实时处理的演变,对比Lambda架构(Hadoop+Storm混合处理)、Kappa架构(纯流处理)及IOTA架构(统一数据模型+边缘计算)的技术特点与应用场景,展现数据处理范式从T+1到实时计算的发展历程。</p></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:19:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/%E6%9E%B6%E6%9E%84/">架构</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/%E6%9E%B6%E6%9E%84/" itemprop="url"><span itemprop="name">架构</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-spark/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Spark 系列专题"><meta itemprop="description" content="Apache Spark是加州大学伯克利分校开发的分布式计算框架,核心是弹性分布式数据集(RDD),支持内存计算,比Hadoop MapReduce快10-100倍。通过DAG引擎优化执行计划,提供SQL查询(Spark SQL)、流处理(Structured Streaming)和机器学习(MLlib)等组件,支持Java、Python等多语言API,广泛应用于大数据分析、实时处理和AI训练场景。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Spark 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M315.4 300.3l-50.63 49.38l11.88 69.63c1 5.75-1.375 11.63-6 15c-4.75 3.375-11 3.875-16.13 1.125l-62.5-32.88l-62.63 32.88c-11 6-24.25-3.5-22.13-16.13l12-69.63L68.6 300.3C64.47 296.2 62.97 290.2 64.72 284.6c1.75-5.5 6.625-9.625 12.38-10.38l69.88-10.25l31.25-63.5C180.7 195.3 186.1 191.1 191.1 191.1c5.75 0 11.13 3.375 13.63 8.5l31.38 63.5l69.75 10.25c5.875 .875 10.63 4.875 12.38 10.38C320.1 290.1 319.5 296.2 315.4 300.3z"/><path class="fa-secondary" d="M491.1 .7163c-38.75 11.5-111.8 34.25-187.6 61.25c-2.125-7-4-13.5-5.625-18.63c-1.375-4.5-4.75-8.25-9.25-10.13c-4.375-1.875-9.375-1.625-13.63 .625C232.5 55.97 122.1 116.5 60.59 176.3c-1.125 1-2.5 2-3.5 3c-76.13 76.13-76.13 199.5 0 275.6c76 76.13 199.5 76 275.5-.125c1-1 2-2.375 3-3.5c59.88-61.63 120.4-172.1 142.5-214.4c2.25-4.25 2.5-9.25 .625-13.75c-1.75-4.375-5.5-7.75-10.13-9.125c-5.25-1.625-11.63-3.5-18.63-5.625c27-76 49.75-149 61.38-187.8c1.625-5.625 .1251-11.88-4.125-16C502.1 .4663 496.9-1.034 491.1 .7163zM315.4 300.3l-50.63 49.38l11.88 69.63c1 5.75-1.375 11.63-6 15c-4.75 3.375-11 3.875-16.13 1.125l-62.5-32.88l-62.63 32.88c-11 6-24.25-3.5-22.13-16.13l12-69.63L68.6 300.3C64.47 296.2 62.97 290.2 64.72 284.6c1.75-5.5 6.625-9.625 12.38-10.38l69.88-10.25l31.25-63.5c2.5-5.125 7.875-8.5 13.75-8.5c5.75 0 11.13 3.375 13.63 8.5l31.38 63.5l69.75 10.25c5.875 .875 10.63 4.875 12.38 10.38C320.1 290.1 319.5 296.2 315.4 300.3z"/></svg></p><p> <span class="p logo center large">Spark</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/spark/" title="开始阅读"><i class="fa-duotone fa-comet"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Spark/">Spark</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Spark/" itemprop="url"><span itemprop="name">Spark</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/376025fe/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="大数据技术概述"><meta itemprop="description" content="解析大数据时代特征(数据量大、类型多、速度快、价值密度低),阐述其对科学研究范式(实验、理论、计算、数据)和思维方式(全样、效率、相关)的变革,详解Hadoop&#x2F;Spark等核心技术及数据采集、存储、处理全流程。"></span><div class="headimg-div" position="bottom"> <a class="headimg-a" href="/p/376025fe/"><img itemprop="image" class="headimg lazyload" alt="大数据技术概述" src="https://static.mhuig.top/npm/imbox@0.0.15/c/63.webp" class="lazyload" data-srcset="https://static.mhuig.top/npm/imbox@0.0.15/c/63.webp" srcset="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="></a></div><h2 class="article-title" itemprop="name headline"> <a href="/p/376025fe/" itemprop="url">大数据技术概述</a></h2><div class="md article-desc" itemprop="articleBody"><p>解析大数据时代特征(数据量大、类型多、速度快、价值密度低),阐述其对科学研究范式(实验、理论、计算、数据)和思维方式(全样、效率、相关)的变革,详解Hadoop/Spark等核心技术及数据采集、存储、处理全流程。</p></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/%E6%A6%82%E8%BF%B0/">概述</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/%E6%A6%82%E8%BF%B0/" itemprop="url"><span itemprop="name">概述</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-nosql/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="NoSQL 系列专题"><meta itemprop="description" content="NoSQL(Not Only SQL)指非关系型数据库,是对传统关系型数据库的补充,支持海量数据存储与灵活扩展,无需固定模式。分为键值(如Redis)、文档(如MongoDB)、列族(如HBase)和图数据库(如Neo4j)四大类,分别适用于缓存、内容管理、大数据分析和社交网络等场景。基于CAP理论和BASE模型,在一致性、可用性和分区容错间权衡,满足高并发与分布式需求。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">NoSQL 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 448 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M0 186.1V128C0 172.2 100.3 208 224 208C347.7 208 448 172.2 448 128V186.1C433.1 197.8 413.1 207.3 393.2 214.7C348.3 230.7 288.5 240 224 240C159.5 240 99.66 230.7 54.85 214.7C34.02 207.3 14.93 197.8 0 186.1V186.1zM0 346.1V288C0 332.2 100.3 368 224 368C347.7 368 448 332.2 448 288V346.1C433.1 357.8 413.1 367.3 393.2 374.7C348.3 390.7 288.5 400 224 400C159.5 400 99.66 390.7 54.85 374.7C34.02 367.3 14.93 357.8 0 346.1z"/><path class="fa-secondary" d="M448 80V128C448 172.2 347.7 208 224 208C100.3 208 0 172.2 0 128V80C0 35.82 100.3 0 224 0C347.7 0 448 35.82 448 80zM393.2 214.7C413.1 207.3 433.1 197.8 448 186.1V288C448 332.2 347.7 368 224 368C100.3 368 0 332.2 0 288V186.1C14.93 197.8 34.02 207.3 54.85 214.7C99.66 230.7 159.5 240 224 240C288.5 240 348.3 230.7 393.2 214.7V214.7zM54.85 374.7C99.66 390.7 159.5 400 224 400C288.5 400 348.3 390.7 393.2 374.7C413.1 367.3 433.1 357.8 448 346.1V432C448 476.2 347.7 512 224 512C100.3 512 0 476.2 0 432V346.1C14.93 357.8 34.02 367.3 54.85 374.7z"/></svg></p><p> <span class="p logo center large">NoSQL</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/nosql/" title="开始阅读"><i class="fa-duotone fa-database"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/NoSQL/">NoSQL</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/NoSQL/" itemprop="url"><span itemprop="name">NoSQL</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-flink/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Flink 系列专题"><meta itemprop="description" content="Apache Flink是Apache基金会顶级开源流处理框架,以一切皆流为核心理念,将批处理视为流处理的有界特例。它采用真正的事件驱动模型,支持毫秒级延迟与精确一次(exactly-once)语义,通过Watermark机制优雅处理乱序事件。核心优势在于流批一体架构,统一DataStream API可处理有界&#x2F;无界数据,结合Pipeline Region调度与Unified Shuffle服务实现资源高效利用。提供SQL&#x2F;Table API与DataStream双接口,内置RocksDB&#x2F;批处理状态后端,广泛应用于金融监控、实时数仓等场景,字节跳动、快手等企业日均处理数据超万亿条。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Flink 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M463.9 448H448.9c18.25-18.38 30.1-42.13 30.1-64c0-26.5-22.12-52.75-47.87-61.13L432 224h47.88c20.36 0 35.62-18.85 31.4-38.77C500.9 136.4 466.8 96 415.9 96V64c-48 0-74.25 62.75-89.37 108.3L216 504.3C231.5 508.9 247.5 512 264.2 512h231.7c8.75 0 15.99-7.125 15.99-16C511.9 469.6 490.3 448 463.9 448zM415.1 160c0-8.875 7.12-16 15.1-16s15.98 7.125 15.98 16s-7.125 16-15.1 16S415.1 168.9 415.1 160z"/><path class="fa-secondary" d="M287.1 288.1l-71.95 216.3c-66.92-19.56-118.1-77.63-120-149.7C95.64 329.2 101.8 305.5 112 284.2C47.94 269.6 0 212.5 0 144C0 64.47 64.47 0 143.1 0s143.1 64.47 143.1 144V288.1z"/></svg></p><p> <span class="p logo center large">Flink</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/flink/" title="开始阅读"><i class="fa-duotone fa-acorn"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Flink/">Flink</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Flink/" itemprop="url"><span itemprop="name">Flink</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-echarts/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Echarts 系列专题"><meta itemprop="description" content="ECharts是Apache开源的JavaScript数据可视化库,支持折线图、柱状图等50+图表类型,通过JSON配置实现主题切换、动态排序等交互效果。其基于ZRender引擎,支持Canvas&#x2F;SVG双渲染,适配Web&#x2F;移动端及Vue&#x2F;React框架,广泛应用于金融分析、大屏监控等场景。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Echarts 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 576 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M527.4 240H304V16.58C304 7.555 310.1 0 320 0C443.7 0 544 100.3 544 224C544 233 536.4 240 527.4 240zM558.4 288C567.6 288 575 295.8 573.8 305C566.1 360.9 539.1 410.6 499.9 447.3C493.9 452.1 484.5 452.5 478.7 446.7L320 288H558.4z"/><path class="fa-secondary" d="M32 272C32 150.7 122.1 50.34 238.1 34.25C248.2 32.99 256 40.36 256 49.61V288L412.5 444.5C419.2 451.2 418.7 462.2 411 467.7C371.8 495.6 323.8 512 272 512C139.5 512 32 404.6 32 272z"/></svg></p><p> <span class="p logo center large">Echarts</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/echarts/" title="开始阅读"><i class="fa-duotone fa-chart-pie"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Echarts/">Echarts</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Echarts/" itemprop="url"><span itemprop="name">Echarts</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-azkaban/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Azkaban 系列专题"><meta itemprop="description" content="Azkaban是LinkedIn开源的批量工作流调度工具,通过Job配置文件定义任务依赖,提供Web界面管理调度。支持Hadoop生态组件,Java开发易扩展,适用于ETL和大数据任务自动化。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Azkaban 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 448 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M160 32V64H288V32C288 14.33 302.3 0 320 0C337.7 0 352 14.33 352 32V64H400C426.5 64 448 85.49 448 112V192H0V112C0 85.49 21.49 64 48 64H96V32C96 14.33 110.3 0 128 0C145.7 0 160 14.33 160 32zM216.1 416.1C207.6 426.3 192.4 426.3 183 416.1L119 352.1C109.7 343.6 109.7 328.4 119 319C128.4 309.7 143.6 309.7 152.1 319L200 366.1L295 271C304.4 261.7 319.6 261.7 328.1 271C338.3 280.4 338.3 295.6 328.1 304.1L216.1 416.1z"/><path class="fa-secondary" d="M448 464C448 490.5 426.5 512 400 512H48C21.49 512 0 490.5 0 464V192H448V464zM328.1 304.1C338.3 295.6 338.3 280.4 328.1 271C319.6 261.7 304.4 261.7 295 271L200 366.1L152.1 319C143.6 309.7 128.4 309.7 119 319C109.7 328.4 109.7 343.6 119 352.1L183 416.1C192.4 426.3 207.6 426.3 216.1 416.1L328.1 304.1z"/></svg></p><p> <span class="p logo center large">Azkaban</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/azkaban/" title="开始阅读"><i class="fa-duotone fa-calendar-check"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Azkaban/">Azkaban</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Azkaban/" itemprop="url"><span itemprop="name">Azkaban</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-sqoop/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Sqoop 系列专题"><meta itemprop="description" content="Apache Sqoop是Apache旗下的开源数据迁移工具,专注于在Hadoop生态系统(HDFS、Hive、HBase)与关系型数据库(MySQL、Oracle等)间高效传输结构化数据。它通过将命令转换为MapReduce作业实现并行处理,支持全量&#x2F;增量导入导出,并提供自动类型转换和元数据同步功能,简化大数据与传统数据库的集成流程。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Sqoop 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 576 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M256 0v128h128L256 0zM568.1 295l-80-80c-9.375-9.375-24.56-9.375-33.94 0s-9.375 24.56 0 33.94L494.1 288H216C202.8 288 192 298.8 192 312s10.75 24 24 24h278.1l-39.03 39.03C450.3 379.7 448 385.8 448 392s2.344 12.28 7.031 16.97c9.375 9.375 24.56 9.375 33.94 0l80-80C578.3 319.6 578.3 304.4 568.1 295z"/><path class="fa-secondary" d="M384 336v128c0 26.51-21.49 48-48 48h-288C21.49 512 0 490.5 0 464v-416C0 21.49 21.49 0 48 0H256v128h128v160H216C202.8 288 192 298.8 192 312s10.75 24 24 24H384z"/></svg></p><p> <span class="p logo center large">Sqoop</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/sqoop/" title="开始阅读"><i class="fa-duotone fa-file-export"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Sqoop/">Sqoop</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Sqoop/" itemprop="url"><span itemprop="name">Sqoop</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-kafka/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Kafka 系列专题"><meta itemprop="description" content="Apache Kafka是LinkedIn开发的分布式流处理平台,以高吞吐、低延迟和持久化存储为核心特性,支持每秒百万级消息处理。其架构采用发布-订阅模式,通过Topic分类数据,Partition实现并行处理,副本机制保障高可用,广泛用于日志收集、实时分析和事件驱动架构。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Kafka 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 640 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M160 64C160 28.65 188.7 0 224 0C259.3 0 288 28.65 288 64C288 99.35 259.3 128 224 128C188.7 128 160 99.35 160 64zM512 128C512 92.65 540.7 64 576 64C611.3 64 640 92.65 640 128C640 163.3 611.3 192 576 192C540.7 192 512 163.3 512 128zM640 448C640 483.3 611.3 512 576 512C540.7 512 512 483.3 512 448C512 412.7 540.7 384 576 384C611.3 384 640 412.7 640 448zM0 304C0 268.7 28.65 240 64 240C99.35 240 128 268.7 128 304C128 339.3 99.35 368 64 368C28.65 368 0 339.3 0 304z"/><path class="fa-secondary" d="M305.6 163.2C315.4 161.1 325.6 159.1 336 159.1C372.1 159.1 405 173.3 430.3 195.2L512.4 134.1C514.9 158.1 529.7 177.6 550.2 186.6L468.2 246.8C475.8 264.3 480 283.7 480 303.1C480 319.6 477.5 334.7 472.9 348.8L544.9 392C525.6 402.8 512.4 423.3 512 446.9L439.9 403.7C413.7 430.1 376.8 448 336 448C267.5 448 210.1 400.1 195.6 336H119.4C124.9 326.6 128 315.7 128 304C128 292.3 124.9 281.4 119.4 271.1H195.6C203 239 221.8 210.4 247.6 190.3L218.4 127.8C220.3 127.9 222.1 128 224 128C245.7 128 264.9 117.2 276.4 100.7L305.6 163.2zM336 384C380.2 384 416 348.2 416 303.1C416 259.8 380.2 223.1 336 223.1C291.8 223.1 255.1 259.8 255.1 303.1C255.1 348.2 291.8 384 336 384z"/></svg></p><p> <span class="p logo center large">Kafka</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/kafka/" title="开始阅读"><i class="fa-duotone fa-chart-network"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Kafka/">Kafka</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Kafka/" itemprop="url"><span itemprop="name">Kafka</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-flume/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Flume 系列专题"><meta itemprop="description" content="Apache Flume是分布式、可靠的日志采集传输系统,通过Source-Channel-Sink架构实现数据流动。支持Exec&#x2F;Taildir等多数据源接入,Memory&#x2F;File Channel缓存数据,可输出至HDFS&#x2F;HBase&#x2F;Kafka等目的地。其事务机制保障数据可靠传输,广泛用于大数据平台日志聚合与实时数据管道构建。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Flume 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 640 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M288 0H96C78.33 0 64 14.33 64 32v192c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32V32C320 14.33 305.7 0 288 0zM544 64h-128c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V96C576 78.33 561.7 64 544 64z"/><path class="fa-secondary" d="M544 320H96c-54.4 0-96 41.6-96 96s41.6 96 96 96h448c54.4 0 96-41.6 96-96S598.4 320 544 320zM128 448c-19.2 0-32-12.8-32-32s12.8-32 32-32s32 12.8 32 32S147.2 448 128 448zM320 448c-19.2 0-32-12.8-32-32s12.8-32 32-32s32 12.8 32 32S339.2 448 320 448zM512 448c-19.2 0-32-12.8-32-32s12.8-32 32-32s32 12.8 32 32S531.2 448 512 448z"/></svg></p><p> <span class="p logo center large">Flume</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/flume/" title="开始阅读"><i class="fa-duotone fa-conveyor-belt-boxes"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Flume/">Flume</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Flume/" itemprop="url"><span itemprop="name">Flume</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-hive/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Hive 系列专题"><meta itemprop="description" content="Apache Hive是基于Hadoop的开源数据仓库工具,通过类SQL的HiveQL查询语言,将结构化数据映射为数据库表并转换为MapReduce、Tez或Spark任务执行,适用于大规模数据集的离线分析。其数据存储于HDFS,元数据通过Metastore管理,支持分区表、分桶表等优化结构,以及自定义函数扩展功能。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Hive 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 576 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M342.1 170.9c4.611-4.236 8.76-8.973 12.28-14.18c5.75-8.512 9.906-18.19 12.04-28.61C367.4 122.9 368 117.5 368 111.1c0-20.4-7.832-38.84-20.4-52.97l31.71-31.71c6.25-6.25 6.25-16.38 0-22.62s-16.38-6.25-22.62 0l-34.99 34.99C311.4 34.88 300.1 31.1 288 31.1c-5.523 0-10.92 .5618-16.12 1.628c-6.189 1.266-12 3.445-17.58 6.051L219.3 4.688c-6.25-6.25-16.38-6.25-22.62 0s-6.25 16.38 0 22.62L228.4 58.99C215.8 73.12 208 91.59 208 111.1c0 5.523 .5586 10.92 1.625 16.13c2.131 10.42 6.287 20.09 12.04 28.61C225.2 161.1 229.6 166.5 234.3 170.8C207.1 181.7 185.6 200.4 170.2 224h235.6C390.5 200.5 368.3 181.9 342.1 170.9zM234.5 464h107c13.61-13.89 28.02-30.1 41.23-48H193.3C206.5 433.9 220.9 450.1 234.5 464zM420.9 256H155.1c-4.773 14.15-7.951 29.04-7.945 44.8c0 1.068 .2266 2.134 .2559 3.203h281.1c.0293-1.068 .2559-2.133 .2559-3.201C428.8 285 425.6 270.1 420.9 256zM172.5 384h230.1c8.742-15.45 15.8-31.55 20.21-48H152.3C156.7 352.4 163.8 368.6 172.5 384z"/><path class="fa-secondary" d="M193.3 416h189.5c7.52-10.19 14.5-20.93 20.76-32H172.5C178.8 395.1 185.7 405.8 193.3 416zM152.3 336h271.4c2.834-10.59 4.555-21.28 4.84-32H147.5C147.7 314.7 149.5 325.4 152.3 336zM288 512c0 0 24.78-18.69 53.5-48H234.5C263.2 493.3 288 512 288 512zM448 95.1c-27.72 0-55.38 9.465-80.73 22.73c-1.732 20.65-11.2 38.83-25.63 52.03c11.44 4.789 22.22 11.14 31.91 18.62C401.6 170.5 427.5 160 448 160c34.67 0 64 21.92 64 48C512 233.1 482.7 256 448 256c-8.865 0-19.02-2.6-29.64-6.322C414.9 240.7 411 231.1 405.8 224H170.2C163.8 233.8 158.1 244.7 155.1 256h265.7c4.773 14.15 7.951 29.04 7.945 44.8c0 1.068-.2266 2.133-.2559 3.201c-.125 4.727-.5566 9.452-1.213 14.16C434.2 319.2 441.1 320 448 320c70.67 0 128-50.12 128-111.1C576 146.2 518.7 95.1 448 95.1zM155.1 256c.7305-2.166 1.695-4.205 2.5-6.332C147 253.4 136.8 256 127.1 256C93.29 256 64 234 64 207.1C64 192.9 73.79 182.1 79.62 176.1C91.93 166.2 109.5 159.1 127.1 160c20.47 0 46.42 10.53 74.42 29.38C212.1 181.9 222.8 175.6 234.3 170.8C219.8 157.6 210.4 139.4 208.7 118.7C183.3 105.5 155.7 95.1 128 95.1C57.33 95.99 0 146.1 0 207.1C0 269.8 57.29 320 127.1 320C134.9 320 141.8 319.2 148.7 318.2C148 313.5 147.6 308.7 147.5 304C147.4 302.9 147.2 301.9 147.2 300.8C147.2 285 150.4 270.1 155.1 256z"/></svg></p><p> <span class="p logo center large">Hive</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/hive/" title="开始阅读"><i class="fa-duotone fa-bee"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Hive/">Hive</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Hive/" itemprop="url"><span itemprop="name">Hive</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-hadoop/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Hadoop 系列专题"><meta itemprop="description" content="Apache Hadoop是开源分布式计算平台,核心为HDFS分布式文件系统与MapReduce批处理引擎。HDFS采用分块存储与副本机制保障高可靠性,MapReduce通过分治思想实现并行计算,支持PB级数据处理。生态包含Hive数据仓库、HBase数据库等组件,适用于离线分析与数据湖构建,金融、互联网企业广泛应用。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Hadoop 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 640 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M528 128c-8.837 0-16 7.164-16 15.1c0 8.836 7.163 15.99 16 15.99S544 152.9 544 144C544 135.2 536.8 128 528 128zM352 192.1V119.3c-30.58-17.61-41.08-56.66-23.47-87.24c.0056-.0097-.0056 .0097 0 0L293.9 32.2C290.1 42.45 288.1 53.27 288 64.2c.1005 27.19 11.73 53.05 32 71.18v56.76c.0439 33.67 26.14 61.61 59.74 63.89L408 255.1c4.418 0 8-3.581 8-7.999V231.1c0-4.418-3.582-7.999-8-7.999h-27.22C364.4 222.3 351.1 208.5 352 192.1z"/><path class="fa-secondary" d="M512 32.05l-72.65 .1546c-17.51-30.64-56.54-41.28-87.18-23.77s-41.28 56.54-23.77 87.18C334 105.5 342.2 113.6 352 119.3v72.81c.0039 16.42 12.44 30.23 28.78 31.89H408c4.418 0 8 3.581 8 7.999v15.1c0 4.418-3.582 7.999-8 7.999L384 256.1c-35.33-.0331-63.97-28.61-64-63.94V135.4C299.7 117.3 288.1 91.38 288 64.2c.1059-10.93 2.102-21.75 5.9-31.1L192 32.06c-106 0-192 86.05-192 191.1v111.1c0 8.836 7.163 15.1 16 15.1L32 352v143.1C32 504.8 39.16 512 48 512h64C120.8 512 128 504.8 128 496v-107.8c32.35 17.54 70.72 27.84 112 27.84s79.65-10.32 112-27.86v107.9C352 504.8 359.2 512 368 512h64c8.837 0 16-7.164 16-15.1V288l64 .0092c23.44 0 45.11-6.767 64-17.75v97.37c.0572 8.864-7.067 16.13-15.93 16.35C551.3 384.1 544.1 376.9 544 368.1c0-8.779-7.64-16-16.42-16L496 352c-8.837 0-16 7.164-16 15.1c.0551 44.22 35.84 80.06 80.07 80c2.736-.0034 5.581-.1318 8.302-.415C610 443.4 640 405.1 640 363.3V160C639.1 89.37 582.7 32.05 512 32.05zM528 160c-8.837 0-16-7.157-16-15.99c0-8.836 7.163-15.1 16-15.1S544 135.2 544 144C543.1 152.9 536.8 160 528 160z"/></svg></p><p> <span class="p logo center large">Hadoop</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/hadoop/" title="开始阅读"><i class="fa-duotone fa-elephant"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Hadoop/">Hadoop</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Hadoop/" itemprop="url"><span itemprop="name">Hadoop</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div><div class="post-wrapper"><div class="post post-v3 white-box reveal shadow floatable blur" itemscope itemtype="http://schema.org/Article"><link itemprop="mainEntityOfPage" href="https://blog.mhuig.top/p/notes-zookeeper/"><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="Magicland"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="Zookeeper 系列专题"><meta itemprop="description" content="ZooKeeper是高性能分布式协调服务,基于ZAB协议实现数据一致性,提供配置管理、服务发现等核心功能。采用Leader-Follower-Observer架构,支持分布式锁、命名服务等场景,通过树形ZNode存储节点数据,客户端可监听节点变化实现实时同步。"></span><span hidden><meta itemprop="image" content="/lib/favicon/android-chrome-192x192.png"></span> <span hidden itemprop="name headline">Zookeeper 系列专题</span><div class="md article-desc" itemprop="articleBody"><p><svg style="width: 50px; margin: 0 auto; display: block;" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-primary" d="M152.1 224.1c-12.5-12.5-32.75-12.5-45.25 0L38.97 291.1c-50.01 50-45.26 181-22.63 203.7c22.63 22.63 153.6 27.38 203.6-22.63l67.88-67.89c12.5-12.5 12.5-32.75 0-45.25L152.1 224.1z"/><path class="fa-secondary" d="M502.6 99.88l-90.51-90.51c-12.5-12.5-32.75-12.51-45.26 0l-45.25 45.25c-29.46 29.46-35.37 73.31-18.46 108.1L197.4 269.4l45.26 45.26l105.8-105.8c35.65 16.91 79.51 11 108.1-18.46l45.26-45.25C515.1 132.6 515.1 112.4 502.6 99.88zM412.1 145.1c-12.48 12.48-32.78 12.47-45.26 0c-12.47-12.47-12.48-32.77 0-45.26l22.63-22.63l45.25 45.26L412.1 145.1z"/></svg></p><p> <span class="p logo center large">Zookeeper</span></p><br><br><span class="btn solid large center"><a class="button" href="/notes/zookeeper/" title="开始阅读"><i class="fa-duotone fa-shovel"></i> 开始阅读</a></span><br></div><div class="meta-v3" line_style="solid"><div><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="/lib/avatar/avatar-16.webp"><meta itemprop="name" content="MHuiG"><meta itemprop="url" content="https://mhuig.top/"></span> <time class="update-time" itemprop="dateModified" datetime="2025-11-20T18:18:00+08:00" title="Nov 20, 2025">2025-11-20</time><span class="dot"></span> <a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/">大数据</a><span class="sep"></span><a class="category-link" href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Zookeeper/">Zookeeper</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/" itemprop="url"><span itemprop="name">大数据</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/%E5%A4%A7%E6%95%B0%E6%8D%AE/Zookeeper/" itemprop="url"><span itemprop="name">Zookeeper</span></a></span><span class="dot"></span> <a class="category-link" href="/tags/BigData/">BigData</a><span class="sep"></span><a class="category-link" href="/tags/Notes/">Notes</a> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/BigData/" itemprop="url"><span itemprop="name">BigData</span></a></span> <span hidden itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/tags/Notes/" itemprop="url"><span itemprop="name">Notes</span></a></span></div></div></div></div></section></div><aside id="l_side" itemscope itemtype="http://schema.org/WPSideBar"><section class="widget blogger desktop shadow floatable blur pjax"><div class="content"> <a class="avatar flat-box rectangle" href="/pages/about/"><img no-lazy src="/lib/avatar/avatar-240.webp" alt="avatar"></a><div class="social-wrapper"><a href="/atom.xml" class="social fa-solid fa-rss flat-btn" target="_blank" rel="external nofollow noopener noreferrer"></a><a href="https://mhuig.top/contact/" class="social fa-solid fa-envelope flat-btn" target="_blank" rel="external nofollow noopener noreferrer"></a><a href="https://github.com/MHuiG/" class="social fa-brands fa-github flat-btn" target="_blank" rel="external nofollow noopener noreferrer"></a><a href="https://t.me/MHuiG" class="social fa-brands fa-telegram flat-btn" target="_blank" rel="external nofollow noopener noreferrer"></a></div></div></section><section class="widget grid desktop shadow floatable blur pjax"><header><i class="fa-duotone fa-map-signs fa-fw" aria-hidden="true"></i> <span class="name">站内导航</span></header><div class="content"><div class="grid navigation"><a class="flat-box" href="/pages/friends/" active-action="action-pagesfriends"><i class="fa-duotone fa-link AMETHYST fa-fw" aria-hidden="true"></i> 小伙伴们</a><a class="flat-box" href="/pages/about/" active-action="action-pagesabout"><i class="fa-duotone fa-user-tie BELIZEHOLE fa-fw" aria-hidden="true"></i> 留言板</a><a class="flat-box" href="/pages/beer/" active-action="action-pagesbeer"><i class="fa-duotone fa-heart-square POMEGRANATE fa-fw" aria-hidden="true"></i> Sponsor</a></div></div></section><section class="widget webinfo desktop shadow floatable blur pjax"><header><i class="fa-duotone fa-chart-line fa-fw" aria-hidden="true"></i> <span class="name">站点信息</span></header><div class="content"><div class="webinfo"><div class="webinfo-item"><div>文章数目:</div><div>73 篇</div></div><div class="webinfo-item"><div>已运行时间:</div><div id="webinfo-runtime-count"></div></div><div class="webinfo-item"><div>本站总字数:</div><div>88.4k 字</div></div></div></div></section><section class="widget recent desktop mobile shadow floatable blur pjax"><header><i class="fa-solid fa-clock fa-fw" aria-hidden="true"></i> <span class="name">最近更新</span></header><div class="content"><widget class="widget-wrapper recent post-list"><div class="widget-body fs14"><a class="item title" href="/p/b150f6f2/"><span class="title">OKR目标管理中的七成完成度现象及其博弈论分析</span></a><a class="item title" href="/p/cb3fc42/"><span class="title">空白的答案</span></a><a class="item title" href="/p/56c48370/"><span class="title">爱与时空的星际救赎:《星际穿越》中的生存抉择与人性光辉</span></a><a class="item title" href="/p/2f345bb/"><span class="title">辛普森悖论|你还相信数据吗</span></a><a class="item title" href="/p/175a1706/"><span class="title">尝试在博客中添加简易文章推荐功能</span></a><a class="item title" href="/p/de4b9576/"><span class="title">记一次重装系统(Win11)</span></a><a class="item title" href="/p/6a03238d/"><span class="title">部署第一个智能合约</span></a><a class="item title" href="/p/6dc844b7/"><span class="title">一组粗略的类比</span></a><a class="item title" href="/p/6ace289f/"><span class="title">唯物辩证法</span></a><a class="item title" href="/p/171a81d0/"><span class="title">辩证唯物论</span></a></div></widget></div></section><div class="widget-sticky pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div><div class="widget pjax"></div></aside><pjax><script>window.pdata={},pdata.ispage=!1,pdata.commentPath="",pdata.commentPlaceholder="",pdata.commentConfig={};var l_header=document.getElementById("l_header");l_header.classList.add("show");var cover_wrapper=document.querySelector("#l_cover .cover-wrapper"),scroll_down=document.getElementById("scroll-down");cover_wrapper.id="none",cover_wrapper.style.display="none",scroll_down.style.display="none"</script></pjax></div><footer class="footer clearfix" itemscope itemtype="http://schema.org/WPFooter"><br><br><div class="aplayer-container"><div class="aplayer-local"></div></div><br><div class="social-wrapper" itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/atom.xml" class="social fa-duotone fa-rss flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url"></a><a href="https://mhuig.top/contact/" class="social fa-duotone fa-envelope flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url"></a><a href="https://github.com/MHuiG" class="social fa-brands fa-github flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url"></a><a href="https://t.me/MHuiG" class="social fa-brands fa-telegram flat-btn" target="_blank" rel="external nofollow noopener noreferrer" itemprop="url"></a></div><div><p>博客内容遵循 <a target="_blank" rel="external nofollow noopener noreferrer" href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans">署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议</a></p></div><div class="copyright"><p><a href="https://icp.gov.moe" target="_blank" rel="external nofollow noopener noreferrer">萌ICP备</a> <a href="https://icp.gov.moe/?keyword=2020012138" target="_blank" rel="external nofollow noopener noreferrer">2020012138号</a><br><a target="_blank" rel="noopener" href="https://mhuig.top/">Copyright © Since 2018 MHuiG</a></p></div></footer><a id="s-top" class="fa-solid fa-arrow-up fa-fw" title="top"></a></div></div><div><script>volantis.css("https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/libs/@fortawesome/fontawesome-pro/css/all.min.css")</script><script src="/js/app.js"></script><script>const rootElement=document.documentElement,darkModeStorageKey="color-scheme",rootElementDarkModeAttributeName="color-scheme",setLS=(e,t)=>{localStorage.setItem(e,t)},removeLS=e=>{localStorage.removeItem(e)},getLS=e=>localStorage.getItem(e),getModeFromCSSMediaQuery=()=>window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",resetRootDarkModeAttributeAndLS=()=>{rootElement.removeAttribute("color-scheme"),removeLS("color-scheme")},validColorModeKeys={dark:!0,light:!0},applyCustomDarkModeSettings=e=>{const t=e||getLS("color-scheme");getCustomDarkMode(),t===getModeFromCSSMediaQuery()?resetRootDarkModeAttributeAndLS():validColorModeKeys[t]?rootElement.setAttribute("color-scheme",t):resetRootDarkModeAttributeAndLS()},invertDarkModeObj={dark:"light",light:"dark"},getCustomDarkMode=()=>{let e=getLS("color-scheme");if(validColorModeKeys[e])e=invertDarkModeObj[e];else{if(null!==e)return;e=invertDarkModeObj[getModeFromCSSMediaQuery()]}volantis.dark.mode="dark"==e?"light":"dark"},toggleCustomDarkMode=()=>{let e=getLS("color-scheme");if(validColorModeKeys[e])e=invertDarkModeObj[e];else{if(null!==e)return;e=invertDarkModeObj[getModeFromCSSMediaQuery()]}return setLS("color-scheme",e),e};function bindToggleButton(){document.querySelectorAll("#wrapper .toggle-mode-btn,#rightmenu-wrapper .toggle-mode-btn").forEach(function(e){volantis.dom.$(e).on("click",volantis.dark.toggle)})}volantis.dark.toggle=()=>{const e=toggleCustomDarkMode();applyCustomDarkModeSettings(e),volantis.dark.method.toggle.start()},applyCustomDarkModeSettings(),document.addEventListener("DOMContentLoaded",()=>{volantis.requestAnimationFrame(bindToggleButton)}),volantis.pjax.push(bindToggleButton,"dark_bindToggleButton");const darkModelListeners={dark:e=>{e.matches&&(volantis.dark.mode="dark"),volantis.dark.method.toggle.start()},light:e=>{e.matches&&(volantis.dark.mode="light"),volantis.dark.method.toggle.start()}};window.matchMedia("(prefers-color-scheme: dark)").addListener(darkModelListeners.dark),window.matchMedia("(prefers-color-scheme: light)").addListener(darkModelListeners.light)</script><script>function loadIssuesJS(){null!=document.getElementById("sites-api")&&"undefined"==typeof SitesJS&&volantis.js("/js/plugins/tags/sites.js");null!=document.getElementById("friends-api")&&"undefined"==typeof FriendsJS&&volantis.js("/js/plugins/tags/friends.js");null!=document.getElementById("fposts-api")&&"undefined"==typeof FpostsJS&&volantis.js("/js/plugins/tags/fposts.js");null!=document.getElementById("contributors-api")&&"undefined"==typeof ContributorsJS&&volantis.js("/js/plugins/tags/contributors.js")}loadIssuesJS(),volantis.pjax.push(()=>{loadIssuesJS()},"loadIssuesJS")</script><script>function loadDataService(){const e=document.querySelectorAll("a.link-card[cardlink]");e?.length>0&&volantis.js("/js/plugins/tags/siteinfo.js",{defer:!0}).then(function(){setCardLink(e)});document.querySelector(".tag-plugin.timeline.ds-timeline")&&volantis.js("https://static.mhuig.top/npm/marked@14.1.2/marked.min.js").then(function(){volantis.js("/js/plugins/tags/timeline.js",{defer:!0})});const t=document.querySelectorAll(".voice>audio");t?.length>0&&volantis.js("/js/plugins/tags/chat/voice.js",{defer:!0}).then(function(){createVoiceDom(t)});const n=document.querySelectorAll(".video>video");n?.length>0&&volantis.js("/js/plugins/tags/chat/video.js",{defer:!0}).then(function(){videoEvents(n)});const o=document.querySelectorAll(".chat-file");o?.length>0&&volantis.js("/js/plugins/tags/chat/download-file.js",{defer:!0}).then(function(){downloadFileEvent(o)});let i=document.querySelectorAll(".chat .status-bar .time"),s=null,l=null;if(i.length>0){c();const d=(new Date).getSeconds();function c(){for(let e=0;e<i.length;++e){const t=i[e],n=new Date,o=n.getHours(),s=n.getMinutes();t.innerHTML=a(o)+":"+a(s)}}function a(e){return e<10?"0"+e:e}s=setInterval(function(){c(),s&&(clearInterval(s),s=null);l=setInterval(c,6e4)},1e3*(60-d))}const r=new Map,u=new IntersectionObserver((e,t)=>{e.filter(e=>e.isIntersecting).sort((e,t)=>e.intersectionRect.y!==t.intersectionRect.y?e.intersectionRect.y-t.intersectionRect.y:e.intersectionRect.x-t.intersectionRect.x).forEach((e,n)=>{t.unobserve(e.target),setTimeout(()=>{e.target.classList.add("quote-blink"),setTimeout(()=>{e.target.classList.remove("quote-blink")},1e3)},Math.max(100,16)*(n+1))})});document.querySelectorAll(".chat .talk .quote").forEach(e=>{const t=function(){var t=document.getElementById("quote-"+e.getAttribute("quotedCellTag"));if(t){var n=t.parentElement,o=n.clientHeight/2;t.offsetTop>o-t.clientHeight/2?n.scrollTo({top:t.offsetTop-o+t.clientHeight/2,behavior:"smooth"}):n.scrollTo({top:0,behavior:"smooth"}),u.observe(t)}};e.addEventListener("click",t),r.set(e,t)}),volantis.pjax.send(()=>{u&&u.disconnect(),r.forEach((e,t)=>{t.removeEventListener("click",e)}),r.clear()},"chatQuotes")}loadDataService(),volantis.pjax.push(()=>{loadDataService()},"loadDataService")</script><script defer="defer" src="https://static.mhuig.top/npm/vanilla-lazyload@19.1.3/dist/lazyload.min.js"></script><script>window.lazyLoadOptions={elements_selector:".lazyload",threshold:0},window.addEventListener("LazyLoad::Initialized",function(n){window.lazyLoadInstance=n.detail.instance},!1),document.addEventListener("DOMContentLoaded",function(){lazyLoadInstance.update()}),document.addEventListener("pjax:complete",function(){lazyLoadInstance.update()})</script><script>window.FPConfig={delay:0,ignoreKeywords:["#"],maxRPS:6,hoverDelay:0}</script><script defer="defer" src="https://static.mhuig.top/npm/volantis-static@0.0.1761982841160/libs/flying-pages/flying-pages.min.js"></script><script>volantis.css("https://static.mhuig.top/npm/aplayer@1.10.1/dist/APlayer.min.css"),volantis.js("https://static.mhuig.top/npm/aplayer@1.10.1/dist/APlayer.min.js").then(()=>{function e(){document.querySelector(".aplayer-local-min")&&document.querySelectorAll(".aplayer-local-min").forEach(e=>{new APlayer(Object.assign({container:e,mini:!0,order:"list",volume:"0.7",autoplay:!1,loop:"all",theme:"#1BCDFC",listMaxHeight:"320px",listFolded:"true",preload:"auto",lrcType:3,audio:[{name:"虹之间",artist:"钢琴版伴奏",url:"https://blog.mhuig.top/music-Archive/BetweenTheRainbow.mp3",lrc:"https://blog.mhuig.top/music-Archive/BetweenTheRainbow.lrc",cover:"https://blog.mhuig.top/music-Archive/BetweenTheRainbow.jpg"},{name:"Avem",artist:"Alan Walker",url:"https://blog.mhuig.top/music-Archive/Avem.mp3",lrc:"https://blog.mhuig.top/music-Archive/Avem.lrc",cover:"https://blog.mhuig.top/music-Archive/Avem.jpg"},{name:"Fly",artist:"Marshmello / Leau Culver",url:"https://blog.mhuig.top/music-Archive/fly.mp3",lrc:"https://blog.mhuig.top/music-Archive/fly.lrc",cover:"https://blog.mhuig.top/music-Archive/fly.jpg"},{name:"Alone",artist:"Marshmello",url:"https://blog.mhuig.top/music-Archive/alone.mp3",lrc:"https://blog.mhuig.top/music-Archive/alone.lrc",cover:"https://blog.mhuig.top/music-Archive/alone.jpg"}]},JSON.parse(e.querySelector(".aplayer-local-min-conf").innerText)))})}document.querySelectorAll(".aplayer-local").forEach(e=>{new APlayer({container:e,fixed:!1,order:"list",volume:"0.7",autoplay:!1,loop:"all",theme:"#1BCDFC",listMaxHeight:"320px",listFolded:"true",preload:"auto",lrcType:3,audio:[{name:"虹之间",artist:"钢琴版伴奏",url:"https://blog.mhuig.top/music-Archive/BetweenTheRainbow.mp3",lrc:"https://blog.mhuig.top/music-Archive/BetweenTheRainbow.lrc",cover:"https://blog.mhuig.top/music-Archive/BetweenTheRainbow.jpg"},{name:"Avem",artist:"Alan Walker",url:"https://blog.mhuig.top/music-Archive/Avem.mp3",lrc:"https://blog.mhuig.top/music-Archive/Avem.lrc",cover:"https://blog.mhuig.top/music-Archive/Avem.jpg"},{name:"Fly",artist:"Marshmello / Leau Culver",url:"https://blog.mhuig.top/music-Archive/fly.mp3",lrc:"https://blog.mhuig.top/music-Archive/fly.lrc",cover:"https://blog.mhuig.top/music-Archive/fly.jpg"},{name:"Alone",artist:"Marshmello",url:"https://blog.mhuig.top/music-Archive/alone.mp3",lrc:"https://blog.mhuig.top/music-Archive/alone.lrc",cover:"https://blog.mhuig.top/music-Archive/alone.jpg"}]})}),e(),volantis.pjax.push(e,"aplayerMin")})</script><script>function check_giscus(){return"dark"===volantis.dark.mode?volantis.giscus.Theme="dark":volantis.giscus.Theme="light",document.getElementById("giscus_container")}function pjax_giscus(){const s=check_giscus();if(!s)return;let t=Object.assign({theme:{light:"light",dark:"dark"},repo:"MHuiG/talk","repo-id":"MDEwOlJlcG9zaXRvcnkyODQ4NDg1NTg=",category:"Giscus","category-id":"DIC_kwDOEPpxrs4B_X67",mapping:"pathname","reactions-enabled":"1","emit-metadata":"1",lang:"zh-CN","input-position":"top"},pdata.commentConfig);const e=document.createElement("script");e.setAttribute("src","https://giscus.app/client.js"),Object.keys(t).forEach(s=>{"theme"!=s&&e.setAttribute("data-"+s,t[s])}),e.setAttribute("data-theme",volantis.giscus.Theme),e.setAttribute("crossorigin","anonymous"),s.appendChild(e)}function dark_giscus(){if(!check_giscus())return;const s={setConfig:{theme:volantis.giscus.Theme}};document.querySelector("iframe.giscus-frame").contentWindow.postMessage({giscus:s},"https://giscus.app")}volantis.layoutHelper("comments",'<div id="giscus_container"></div>'),volantis.giscus={},pjax_giscus(),volantis.pjax.push(pjax_giscus,"giscus"),volantis.dark.push(dark_giscus,"giscus")</script><script>async function loadSearchScript(){return volantis.js("/js/search/hexo.js")}function loadSearchService(){loadSearchScript(),document.querySelectorAll(".input.u-search-input").forEach(e=>{e.removeEventListener("focus",loadSearchService,!1)}),document.querySelectorAll(".u-search-form").forEach(e=>{e.addEventListener("submit",e=>{e.preventDefault()},!1)})}function OpenSearch(e){"undefined"==typeof SearchService?loadSearchScript().then(()=>{SearchService.setQueryText(e),SearchService.search()}):(SearchService.setQueryText(e),SearchService.search())}if(window.location.search&&/^\?s=/g.test(window.location.search)){OpenSearch(decodeURI(window.location.search).replace(/\ /g,"-").replace(/^\?s=/g,""))}document.querySelectorAll(".input.u-search-input").forEach(e=>{e.addEventListener("focus",loadSearchService,!1)})</script><script>function pjax_highlightjs_copyCode(){(document.querySelector(".highlight .code pre")||document.querySelector(".article pre code"))&&VolantisApp.utilCopyCode(".highlight .code pre, .article pre code")}volantis.requestAnimationFrame(pjax_highlightjs_copyCode),volantis.pjax.push(pjax_highlightjs_copyCode,"pjax_highlightjs_copyCode")</script><script>function load_swiper(){document.querySelector(".swiper-container")&&(volantis.css("https://static.mhuig.top/npm/swiper@11.1.14/swiper-bundle.min.css"),volantis.js("https://static.mhuig.top/npm/swiper@11.1.14/swiper-bundle.min.js").then(()=>{pjax_swiper()}))}function pjax_swiper(){const e=document.querySelector(".swiper-container").getAttribute("effect")||"cards";volantis.swiper=new Swiper(".swiper-container",{slidesPerView:"auto",spaceBetween:8,centeredSlides:!0,effect:e,rewind:!0,pagination:{el:".swiper-pagination",clickable:!0},navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev"}})}load_swiper(),volantis.pjax.push(()=>{document.querySelectorAll(".swiper-container")[0]&&(void 0===volantis.swiper?load_swiper():pjax_swiper())},"swiper")</script><script>window.paceOptions={eventLag:{lagThreshold:30},ajax:{ignoreURLs:["signalr","__browserLink","browserLinkSignalR"],trackWebSockets:!1}},volantis.css("https://static.mhuig.top/npm/pace-js@1.2.4/themes/blue/pace-theme-minimal.css"),volantis.js("https://static.mhuig.top/npm/pace-js@1.2.4/pace.min.js").then(()=>{Pace.options.restartOnPushState=!1,volantis.pjax.send(Pace.restart,"Pace.restart"),volantis.pjax.push(()=>{setTimeout(()=>{Pace.stop(),document.body.className=document.body.className.replaceAll("pace-running ","")},1200)},"Pace.stop"),volantis.scroll.push(volantis.debounce(()=>{Pace.stop(),Pace.trigger("start"),Pace.bar.update(100*volantis.scroll.progress()),document.body.className=document.body.className.replaceAll("pace-running ","")}),"阅读进度")})</script><script src="https://static.mhuig.top/npm/pjax@0.2.8/pjax.min.js"></script><script>const performanceMonitor={slowThreshold:800,slowCount:0,maxSlowAllowed:1,requestStartTime:0,start(){this.requestStartTime=Date.now()},check(){Date.now()-this.requestStartTime>this.slowThreshold?this.slowCount++:this.slowCount=0},res(){return this.slowCount>=this.maxSlowAllowed}};var pjax;document.addEventListener("DOMContentLoaded",function(){pjax=new Pjax({elements:'a[href]:not([href^="#"]):not([href="javascript:void(0)"]):not([pjax-fancybox]):not([onclick="return false;"]):not([onclick="return!1"]):not([target="_blank"]):not([target="view_window"]):not([href$=".xml"])',selectors:["head title","head meta[name=keywords]","head meta[name=description]","#l_main","#pjax-header-nav-list",".pjax","pjax","meta[name=robots]","link[rel=canonical]","meta[property='og:title']","meta[property='og:description']","meta[property='og:url']","meta[property='og:image']","script[type='application/ld+json']"],cacheBust:!1,timeout:900})}),document.addEventListener("pjax:send",function(e){window.stop(),performanceMonitor.start();try{var t=window.location.pathname,o=e.triggerElement.href,n=[""];""!=n[0]&&n.forEach(e=>{-1==t.indexOf(e)&&-1==o.indexOf(e)||(window.location.href=o)}),performanceMonitor.res()&&(window.location.href=o)}catch(e){}volantis.pjax.method.send.start()}),document.addEventListener("pjax:complete",function(){performanceMonitor.check(),document.querySelectorAll("script[data-pjax], .pjax-reload script").forEach(e=>{const t=e.text||e.textContent||e.innerHTML||"",o=document.createElement("script");Object.keys(e.attributes).forEach(t=>{o.setAttribute(e.attributes[t].nodeName,e.attributes[t].nodeValue)}),t&&o.appendChild(document.createTextNode(t)),e.parentNode.replaceChild(o,e)}),volantis.pjax.method.complete.start()}),document.addEventListener("pjax:error",function(e){"pjax"===volantis.debug?(console.error(e),console.log("pjax error: \n"+JSON.stringify(e))):(volantis.pjax.method.error.start(),window.location.href=e.triggerElement.href)})</script><pjax></pjax><script>function listenSidebarTOC(){const t=document.querySelectorAll(".toc li");if(!t.length)return;const e=[];Array.from(t).forEach(t=>{const n=t.querySelector(".toc-link"),i=document.getElementById(n.getAttribute("href")?decodeURI(n.getAttribute("href")).replace("#",""):n.getAttribute("toc-action")?.split("toc-")[1]);return e.push(i),n.getAttribute("href")&&(n.setAttribute("toc-action","toc-"+decodeURI(n.getAttribute("href")).replace("#","")),n.removeAttribute("href")),i&&i.id&&n.addEventListener("click",t=>{t.preventDefault(),volantis.scroll.to(i,{addTop:5,observer:!0}),history.pushState(null,document.title,"#"+i.id)}),i});function n(t){if(t.classList.contains("active-current"))return;document.querySelectorAll(".toc .active").forEach(t=>{t.classList.remove("active","active-current")}),t.classList.add("active","active-current");let e=t.parentNode;for(;!e.matches(".toc");)e.matches("li")&&e.classList.add("active"),e=e.parentNode}volantis.activateNavIndex=0,n(t[volantis.activateNavIndex]),e[0]&&volantis.scroll.push(volantis.debounce(()=>{if(e[0].getBoundingClientRect().top>=0)volantis.activateNavIndex=0;else if(e[e.length-1].getBoundingClientRect().top<0)volantis.activateNavIndex=e.length-1;else for(let t=0;t<e.length;t++){const n=e[t],i=e[(t+1)%e.length];if(n.getBoundingClientRect().top<0&&i.getBoundingClientRect().top>=0){volantis.activateNavIndex=t;break}}n(t[volantis.activateNavIndex])}),"sidebar-toc")}document.addEventListener("DOMContentLoaded",()=>{volantis.requestAnimationFrame(listenSidebarTOC)}),volantis.pjax.push(listenSidebarTOC,"listenSidebarTOC")</script><script>try{let t=(t,e,i=2)=>Math.abs(t-e)<=i,e=(e,i)=>!t(e.width,i.width)||!t(e.height,i.height),i=new WeakMap,n=(t,n=t.getClientBoundingRect())=>{let o=i.get(t);o&&!e(o,n)||(i.set(t,n),t.style["contain-intrinsic-size"]=`${n.width}px ${n.height}px`)},o=new IntersectionObserver((t,e)=>{t.forEach(t=>{n(t.target,t.boundingClientRect)})},{rootMargin:"500px 0px 500px 0px"}),r=new ResizeObserver((t,e)=>{t.forEach(t=>{n(t.target,t.contentRect)})}),s=t=>{let e=document.querySelectorAll(t);e.length&&(e.forEach(t=>{o.observe(t),r.observe(t)}),requestAnimationFrame(()=>{requestAnimationFrame(()=>{e[0].style["content-visibility"]="auto"})}))},c=()=>{"content-visibility"in document.documentElement.style&&s(".post-story")};c(),volantis.pjax.push(c,"contentVisibilityScrollFix")}catch(t){console.log(t)}</script><script>document.onreadystatechange=function(){if("complete"==document.readyState){const{saveData:e,effectiveType:t}=navigator.connection||navigator.mozConnection||navigator.webkitConnection||{};("none"==getComputedStyle(document.querySelector("#safearea"),null).display||e||/2g/.test(t))&&(document.querySelectorAll(".reveal").forEach(function(e){e.style.opacity="1"}),document.querySelector("#safearea").style.display="block")}}</script></div><pjax> <a style="position:absolute;left:-9999px" target="_blank" rel="external nofollow noopener noreferrer" href="https://bot-trap.mhuig.top/">Are You A Robot?</a> <a style="position:absolute;left:-9999px" href="/post-sitemap.xml">站点文章地图</a> <a style="position:absolute;left:-9999px" href="/page-sitemap.xml">站点页面地图</a></pjax><script>(()=>{function t(){if("localhost:4000"!=window.location.host&&!/blog\.mhuig\.top/.test(window.location.host)){const t=document.createElement("meta");t.name="robots",t.content=atob("bm9pbmRleCwgbm9mb2xsb3csIG5vYXJjaGl2ZQ=="),document.head.appendChild(t)}}function o(){document.querySelector("figcaption")&&document.querySelectorAll("figcaption").forEach(t=>{volantis.dom.$(t).on("click",function(){const t=!window.CodeBlockFullscreen;window.CodeBlockFullscreen=t;const o=document.getElementById("post")||document.getElementById("docs")||document.getElementById("page");if(!o)return;const e=this.parentElement,n=e.parentElement,l=document.documentElement,c=document.querySelectorAll(".highlight > table .gutter");o.classList.toggle("code-block-fullscreen",t),e.classList.toggle("code-block-fullscreen",t),n.classList.toggle("code-block-fullscreen",t),e.classList.toggle("code-block-fullscreen-overflow-auto",t),l.classList.toggle("code-block-fullscreen-html-scroll",t),c.forEach(o=>{o.classList.toggle("code-block-fullscreen-gutter",t)})})})}t(),volantis.pjax.push(t),top.location!=self.location&&(top.location=self.location),"mhuig.github.io"==window.location.host||"localhost:4000"==window.location.host||/mhuig\.top$/.test(window.location.host)||/kix\.moe$/.test(window.location.host)||/mhuig/.test(window.location.host)||/ipfs/.test(window.location.host)||(window.location.href=atob("aHR0cHM6Ly9ibG9nLm1odWlnLnRvcC8=")),o(),volantis.pjax.push(o);const e=[{month:12,day:13},function(){const t=(new Date).getFullYear(),o=t%100,e=t>=2e3?4.81:5.59,n=Math.floor(o/4),l=Math.floor(.2422*o+e)-n;return{month:4,day:Math.max(4,l)}}(),{month:7,day:7},{month:9,day:18},{month:9,day:30}];function n(){document.documentElement.classList.remove("mourning-mode");if(!["/","/index.html","/index.htm","/index"].includes(window.location.pathname))return;const t=new Date,o=t.getMonth()+1,n=t.getDate();e.some(t=>t.month===o&&t.day===n)&&document.documentElement.classList.add("mourning-mode")}const l=document.createElement("style");l.textContent="\n      html.mourning-mode {\n        filter: grayscale(100%);\n        -webkit-filter: grayscale(100%);\n        transition: filter 0.5s ease;\n      }\n    ",document.head.appendChild(l),n(),document.addEventListener("pjax:complete",n)})()</script><pjax><script>function isSpider(){const e=navigator.userAgent.toLowerCase();return["Googlebot","Bingbot","BaiduSpider","360Spider","SogouSpider","YandexBot","DuckDuckBot","Baiduspider","Bytespider"].some(t=>e.includes(t.toLowerCase()))}function decodeShift(e,t=3){return[...e].map(e=>String.fromCharCode(e.charCodeAt(0)-t)).join("")}function autoWrapDash(e=document.body,t=!1){if("string"==typeof e&&(e=document.querySelector(e)),!e)return;const n="zh-dash",o=["——"];t&&o.push("--");const r=`\n    script,\n    style,\n    noscript,\n    textarea,\n    select,\n    option,\n    pre,\n    code,\n    .${n}\n  `,a=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(e){const t=e.parentElement;if(!t)return NodeFilter.FILTER_REJECT;if(t.closest(r))return NodeFilter.FILTER_REJECT;const n=e.nodeValue;return o.some(e=>n.includes(e))?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),c=[];for(;a.nextNode();)c.push(a.currentNode);c.forEach(e=>{const r=e.nodeValue,a=document.createDocumentFragment();let c=0;const i=o.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),u=new RegExp(i,"g");let l;for(;null!==(l=u.exec(r));){l.index>c&&a.appendChild(document.createTextNode(r.slice(c,l.index)));const e=document.createElement("span");e.className=n,t&&"--"===l[0]?e.textContent="——":e.textContent=l[0],a.appendChild(e),c=l.index+l[0].length}c<r.length&&a.appendChild(document.createTextNode(r.slice(c))),e.parentNode.replaceChild(a,e)})}!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DevtoolsDetecter=t()}(this,function(){"use strict";function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function n(e,n){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=function(e,n){if(e){if("string"==typeof e)return t(e,n);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?t(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){o&&(e=o);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("d.")}var c,i=!0,u=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return i=e.done,e},e:function(e){u=!0,c=e},f:function(){try{i||null==o.return||o.return()}finally{if(u)throw c}}}}return function(){var t=!1,o=!1,r=!1,a=7e6,c=1e3,i=500,u=null,l=null,f=function(){return t||o},d=[],s=function(){var e,t=n(d);try{for(t.s();!(e=t.n()).done;){var o=e.value;try{o(f())}catch(e){}}}catch(e){t.e(e)}finally{t.f()}},p=function(e){if(r){var t=document.createElement("div");t.innerHTML="".concat(e,"<br>"),document.body.appendChild(t)}},m=console,y=Math,h=Int8Array,v=setInterval,g=Date,w=!1;"undefined"!=typeof performance&&(w=performance);var b=function(){return w?w.now():+new g},S=document.createElement("div");try{S.__defineGetter__("id",function(){o=!0,p("**"),s()})}catch(e){o=0}var T=function(){if(0!==o){o=!1,m.log(S);try{m.clear()}catch(e){}}},C=function(e){for(var t=0,n=0;n<e.length;n++)t+=e[n];return t/e.length},E=function(e,t){e.push(t),e.length>5&&e.shift()},k=function(){for(var e=b(),t=a,n=new h(t+1),o=2;o<=t;++o)if(0===n[o])for(var r=o*o;r<=t;r+=o)n[r]=1;return b()-e},x=[],I=[],j=[],D=-1,N=k(),A=N,F=N,L=function(){D++;var e=function(){for(var e=b(),t=0;t<c;t++){m.log||alert("Ha"),m.log(t);try{m.clear()}catch(e){}}return b()-e}();if(E(x,e),p(x),D&&D%5==0){var n=C(x),o=function(e){for(var t=C(e),n=0,o=0;o<e.length;o++)n+=y.pow(e[o]-t,2);return n/e.length}(x);E(I,n),E(j,o),p("=".concat(n,"e").concat(o,"")),n>A||n>.85*A&&o>F&&C([x[0],x[1],x[2]])<C([x[1],x[2],x[3]])&&C([x[1],x[2],x[3]])<C([x[2],x[3],x[4]])?(t=!0,p("**")):(t=!1,D>=25&&(A=y.min(5*C(I),N),F=y.min(5*C(j),N),p("==".concat(A," ").concat(F," "))))}_(),s()},_=function(){var e,n;t||"undefined"!=typeof eruda&&(!0===(null===(e=eruda)||void 0===e||null===(n=e._devTools)||void 0===n?void 0:n._isShow)?(t=!0,p("**")):t=!1)};return new(function(){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t)}var n,o;return n=t,(o=[{key:"debug",value:function(){r=!0,p("ua: ".concat(navigator.userAgent)),p("hardwareConcurrency: ".concat(navigator.hardwareConcurrency));try{performance&&performance.memory&&(p("memory used: ".concat(performance.memory.usedJSHeapSize)),p("memory total: ".concat(performance.memory.totalJSHeapSize)),p("memory limit: ".concat(performance.memory.jsHeapSizeLimit)))}catch(e){}p("Benchmark: ".concat(N))}},{key:"getStatus",value:function(){return f()}},{key:"setBenchmarkMaxN",value:function(e){a=e}},{key:"setTimingSamplingMaxN",value:function(e){c=e}},{key:"setBenchmark",value:function(e){k=e}},{key:"setTimer",value:function(e){i=e}},{key:"addListener",value:function(e){d.push(e)}},{key:"launch",value:function(){u=v(L,i),l=v(T,i)}},{key:"stop",value:function(){clearInterval(u),clearInterval(l)}}])&&e(n.prototype,o),Object.defineProperty(n,"prototype",{writable:!1}),t}())}()}),DevtoolsDetecter.addListener(e=>{if(e){new Function(atob("Y29uc29sZS5jbGVhcigpOw=="))(),new Function('console.log(decodeShift("敷炼恹佟剪/云昲係刹佟争七亞exj敁圫远量"))')();for(let e in console)"function"==typeof console[e]&&(console[e]=()=>{});for(let e in window)"function"==typeof window[e]&&(window[e]=()=>{});setTimeout=clearTimeout=setInterval=clearInterval=()=>{},alert=confirm=prompt=()=>{},Object.defineProperty(window,"localStorage",{value:{getItem:()=>null,setItem:()=>{},removeItem:()=>{},clear:()=>{},key:()=>null},writable:!1}),Object.defineProperty(window,"sessionStorage",{value:{getItem:()=>null,setItem:()=>{},removeItem:()=>{},clear:()=>{},key:()=>null},writable:!1}),fetch=()=>Promise.reject("disabled"),XMLHttpRequest=function(){return{open(){},send(){},abort(){}}},document.querySelectorAll("script").forEach(e=>{e.remove()})}}),isSpider()||localStorage&&"k"==localStorage.getItem("k")||DevtoolsDetecter.launch(),autoWrapDash(document.body,!1),volantis.pjax.push(()=>{autoWrapDash(document.body,!1)},"autoWrapDash")</script></pjax></body></html>