<div id="article_content" class="article_content clearfix">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-25cebea3f9.css">
<div id="content_views" class="htmledit_views">
<h1><a name="t0"></a>1.OLAP詳解</h1>
<h2><a name="t1"></a>1.1.OLAP的場景特征</h2>
<p>1、讀多于寫</p>
<p>不同于事務處理(OLTP)的場景,比如電商場景中加購物車、下單、支付等需要在原地進行大量<a href="https://so.csdn.net/so/search?q=insert&spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://so.csdn.net/so/search?q=insert&spm=1001.2101.3001.7020","extra":"{\"searchword\":\"insert\"}"}" data-tit="insert" data-pretit="insert">insert</a>、update、delete操作,數據分析(OLAP)場景通常是將數據批量導入后,進行任意維度的靈活探索、BI工具洞察、報表制作等。</p>
<p>數據一次性寫入后,分析師需要嘗試從各個角度對數據做挖掘、分析,直到發現其中的商業價值、業務變化趨勢等信息。這是一個需要反復試錯、不斷調整、持續優化的過程,其中數據的讀取次數遠多于寫入次數。這就要求底層數據庫為這個特點做專門設計,而不是盲目采用傳統數據庫的技術架構。</p>
<p>2、大寬表,讀大量行但是少量列,結果集較小</p>
<p>在OLAP場景中,通常存在一張或是幾張多列的大寬表,列數高達數百甚至數千列。對數據分析處理時,選擇其中的少數幾列作為維度列、其他少數幾列作為指標列,然后對全表或某一個較大范圍內的數據做聚合計算。這個過程會掃描大量的行數據,但是只用到了其中的少數列。而聚合計算的結果集相比于動輒數十億的原始數據,也明顯小得多。</p>
<p>3、數據批量寫入,且數據不更新或少更新</p>
<p>OLTP類業務對于延時(Latency)要求更高,要避免讓客戶等待造成業務損失;而OLAP類業務,由于數據量非常大,通常更加關注寫入吞吐(Throughput),要求海量數據能夠盡快導入完成。一旦導入完成,歷史數據往往作為存檔,不會再做更新、刪除操</p>
<p>4、無需事務,數據一致性要求低</p>
<p>OLAP類業務對于事務需求較少,通常是導入歷史日志數據,或搭配一款事務型數據庫并實時從事務型數據庫中進行數據同步。多數OLAP系統都支持最終一致性。</p>
<p>5、靈活多變,不適合預先建模</p>
<p>分析場景下,隨著業務變化要及時調整分析維度、挖掘方法,以盡快發現數據價值、更新業務指標。而數據倉庫中通常存儲著海量的歷史數據,調整代價十分高昂。預先建模技術雖然可以在特定場景中加速計算,但是無法滿足業務靈活多變的發展需求,維護成本過高。</p>
<h3><a name="t2"></a>1.1.1.技術選型</h3>
<ul><li>少量數據:單機程序</li><li>中級數據:ES、MySQL的分庫分表</li><li>海量數據:druid,kylin,doris,clickhouse</li><li>海量數據做查詢分析高效:列式數據庫,寫模式(保證同一列的數據類型是一樣的:方便壓縮)</li></ul>
<h2><a name="t3"></a>1.2.<a href="https://so.csdn.net/so/search?q=ClickHouse&spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://so.csdn.net/so/search?q=ClickHouse&spm=1001.2101.3001.7020","extra":"{\"searchword\":\"ClickHouse\"}"}" data-tit="ClickHouse" data-pretit="clickhouse">ClickHouse</a>官網解釋</h2>
<p>URL地址:https://clickhouse.tech/docs/zh/</p>
<blockquote>
<p>1、絕大多數請求都是讀請求<br> 2、數據以相當大的批次(> 1000行)更新,而不是單行更新;或者它根本沒有更新。<br> 3、數據已添加到數據庫,但不會進行修改。<br> 4、對于讀取,每次查詢都從數據庫中讀取大量的行,但是同時又僅需要少量的列<br> 5、表格“寬”,意味著它們包含大量列。<br> 6、查詢相對較少(通常每臺服務器數百個查詢或每秒更少)。<br> 7、對于簡單查詢,允許延遲大約50毫秒。<br> 8、列中的數據相對較小:一般來說,都是數字和短字符串(例如,每個URL 60個字節)<br> 9、處理單個查詢時需要高吞吐量(每個服務器每秒最多數十億行)。<br> 10、Transactions不是必需的。<br> 11、對數據一致性要求低。<br> 12、每個查詢有一個大表。所有其他表都很小,除了這個大表。<br> 13、查詢結果明顯小于源數據。換句話說,數據被過濾或聚合后能夠被盛放在單臺服務器的內存中</p>
</blockquote>
<h1><a name="t4"></a>2.ClickHouse</h1>
<h2><a name="t5"></a>2.1.概述</h2>
<p>源代碼:C++</p>
<p>典型特點總結:<span style="color:#f33b45;">ROLAP、在線實時查詢、完整的DBMS、列式存儲、不需要任何數據預處理、支持批量更新、具有非常完善的SQL支持和函數、支持高可用、不依賴Hadoop復雜生態、開箱即用</span></p>
<p>簡單的說,ClickHouse作為分析型數據庫,<span style="color:#f33b45;">有三大特點:一是跑分快, 二是功能多 ,三是文藝范</span></p>
<p>1.跑分快: ClickHouse跑分是Vertica的5倍快:</p>
<blockquote>
<p>clickHouse性能超過了市面上大部分的列式存儲數據庫,相比傳統的數據ClickHouse要快100-1000X,ClickHouse還是有非常大的優勢:<br> 100Million 數據集:ClickHouse比Vertica約快5倍,比Hive快279倍,比MySQL快801倍<br> 1Billion 數據集:ClickHouse比Vertica約快5倍,MySQL和Hive已經無法完成任務了</p>
</blockquote>
<p>2.功能多:ClickHouse支持數據統計分析各種場景</p>
<blockquote>
<p>支持類SQL查詢,<br> 支持繁多庫函數(例如IP轉化,URL分析等,預估計算/HyperLoglog等)<br> 支持數組(Array)和嵌套數據結構(Nested Data Structure)<br> 支持數據庫異地復制部署</p>
</blockquote>
<p>3.文藝范:目前ClickHouse的限制很多,生來就是為小資服務的</p>
<blockquote>
<p>相對較缺乏的文檔,社區剛開始活躍,只有開源的C++源碼<br> 不理睬Hadoop生態,走自己的路</p>
</blockquote>
<p>函數數量對比:Clickhouse:779個、hive-1.x:216個、hive-2.x:271個</p>
<h2><a name="t6"></a>2.2使用場景</h2>
<p>適合:用于結構良好清晰且不可變的事件或日志流分析。</p>
<p>不適合:事務性工作(OLTP),高請求率的鍵值訪問,低延遲的修改或刪除已存在數據,Blob或文檔存儲,超標準化數據。</p>
<h2><a name="t7"></a>2.3ClickHouse優缺點</h2>
<h3><a name="t8"></a>2.3.1優點</h3>
<p>1、真正的面向列的 DBMS</p>
<p>ClickHouse 是一個 DBMS,而不是一個單一的數據庫。它允許在運行時創建表和數據庫、加載數據和運行查詢,而無需重新配置和重新啟動服務器。</p>
<p>2、數據壓縮</p>
<p>一些面向列的 DBMS(InfiniDB CE 和 MonetDB)不使用數據壓縮。但是,數據壓縮確實提高了性能。</p>
<p>3、磁盤存儲的數據</p>
<p>許多面向列的 DBMS(SAP HANA 和 GooglePowerDrill)只能在內存中工作。但即使在數千臺服務器上,內存也太小,無法在 Yandex.Metrica 中存儲所有瀏覽量和會話。</p>
<p>4、多核并行處理</p>
<p>多核多節點并行化大型查詢。</p>
<p>5、在多個服務器上分布式處理</p>
<p>在 ClickHouse 中,數據可以駐留在不同的分片上。每個分片都可以用于容錯的一組副本,查詢會在所有分片上并行處理。</p>
<p>6、SQL支持</p>
<p>ClickHouse SQL 跟真正的 SQL 有不一樣的函數名稱。不過語法基本跟 SQL 語法兼容,支持 JOIN、FROM、IN 和 JOIN 子句以及標量子查詢支持子查詢。</p>
<p>7、向量化引擎</p>
<p>數據不僅按列存儲,而且由矢量 - 列的部分進行處理,這使開發者能夠實現高 CPU 性能。</p>
<p>8、實時數據更新</p>
<p>ClickHouse 支持主鍵表。為了快速執行對主鍵范圍的查詢,數據使用合并樹 (MergeTree) 進行遞增排序。由于這個原因,數據可以不斷地添加到表中。</p>
<p>9、支持近似計算</p>
<p>該庫支持為有限數量的隨機密鑰(而不是所有密鑰)運行聚合。在數據中密鑰分發的特定條件下,這提供了相對準確的結果,同時使用較少的資源。</p>
<p>10、數據復制和對數據完整性的支持</p>
<p>ClickHouse 使用異步多主復制。寫入任何可用的副本后,數據將分發到所有剩余的副本。系統在不同的副本上保持相同的數據。數據在失敗后自動恢復。</p>
<h3><a name="t9"></a>2.3.2缺點</h3>
<ol><li>沒有完整的事務支持,不支持Transaction:想快就別想Transaction</li><li>缺少完整的Update/Delete操作,缺少高頻率、低延遲的修改或刪除已存在數據的能力,僅能用于批量刪除或修改數據。</li><li>聚合結果必須小于一臺機器的內存大小:不是大問題</li><li>支持有限操作系統,正在慢慢完善</li><li>開源社區剛剛啟動,主要是俄語為主,中文社區:http://www.clickhouse.com.cn</li><li>不適合key-value存儲,不支持 Blob 等文檔型數據庫</li></ol>
<h1><a name="t10"></a>3.安裝與啟動</h1>
<h2><a name="t11"></a>3.1安裝</h2>
<h3><a name="t12"></a>3.1.1在線安裝</h3>
<p>yum install yum-utils -y</p>
<p>rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG</p>
<p>yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/clickhouse.repo</p>
<p>yum install clickhouse-server clickhouse-client -y</p>
<h3><a name="t13"></a>3.1.2離線安裝</h3>
<p>下載地址:https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/ https://packagecloud.io/Altinity/clickhouse</p>
<p>安裝順序:</p>
<p>rpm -ivh clickhouse-common-static-20.5.4.40-1.el7.x86_64.rpm</p>
<p>rpm -ivh clickhouse-server-common-20.5.4.40-1.el7.x86_64.rpm</p>
<p>rpm -ivh clickhouse-server-20.5.4.40-1.el7.x86_64.rpm</p>
<p>rpm -ivh clickhouse-client-20.5.4.40-1.el7.x86_64.rpm</p>
<p>注意:<span style="color:#f33b45;">就算配置成集群了,每個服務器依然還是單獨運行的。</span></p>
<h3><a name="t14"></a>安裝的成功的核心目錄</h3>
<p>(1)/etc/clickhouse-server:服務端的配置文件目錄,包括全局配置config.xml和用戶配置users.xml等。</p>
<p>(2)/var/lib/clickhouse:默認數據存儲目錄,通常會修改默認路徑配置,將數據保存到大容量磁盤掛載路徑</p>
<p>(3)/var/log/clickhouse-server:默認日志保存目錄,通常會修改路徑配置將日志保存到大容量磁盤掛載的路徑</p>
<h3><a name="t15"></a>可執行文件</h3>
<blockquote>
<p>clickhouse:主程序的可執行文件。<br> clickhouse-client:一個指向ClickHouse可執行文件的軟鏈接,供客戶端連接使用。<br> clickhouse-server:一個指向ClickHouse可執行文件的軟鏈接,供服務端啟動使用。<br> clickhouse-compressor:內置提供的壓縮工具,可用于數據的正壓反解。</p>
</blockquote>
<p></p>
<h2><a name="t16"></a>3.2啟動</h2>
<h3><a name="t17"></a>3.2.1單機啟動</h3>
<p>前臺啟動:clickhouse-server --config-file=/etc/clickhouse-server/config.xml</p>
<p>后臺啟動:nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml 1>~/logs/clickhouse_std.log 2>~/logs/clickhouse_err.log &</p>
<p>進程查看:ps -aux | grep clickhouse 、netstat -nltp | grep clickhouse</p>
<p>如果報錯:</p>
<p style="text-align:center;"><img alt="" height="272" src="https://img-blog.csdnimg.cn/20210603231343635.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1l1YW5fQ1NERg==,size_16,color_FFFFFF,t_70" width="1200"></p>
<p>解決方案:修改安裝目錄的權限!,默認使用clickhouse用戶!命令為:</p>
<p>cd /var/lib/、chown -R root:root clickhouse</p>
<p>客戶端啟動:clickhouse-client --port 端口號。 在/etc/clickhouse-server/config.xml中的<tcp_port>9977</tcp_port></p>
<h3><a name="t18"></a>3.2.2集群啟動</h3>
<p> 1.添加配置文件/etc/metrika.xml。分發到CK所在的服務器。如下所示:</p>
<pre data-index="0" class="set-code-hide" name="code"><code class="language-XML hljs"><ol class="hljs-ln" style="width:1178px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><<span class="hljs-name">yandex</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">clickhouse_remote_servers</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment"><!-- 3分片1副本 --></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">perftest_3shards_1replicas</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">shard</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment"><!-- 數據自動同步 --></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">internal_replication</span>></span>true<span class="hljs-tag"></<span class="hljs-name">internal_replication</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">replica</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">host</span>></span>hadoop1<span class="hljs-tag"></<span class="hljs-name">host</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">port</span>></span>9977<span class="hljs-tag"></<span class="hljs-name">port</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">replica</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">shard</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">shard</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">replica</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">internal_replication</span>></span>true<span class="hljs-tag"></<span class="hljs-name">internal_replication</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">host</span>></span>hadoop2<span class="hljs-tag"></<span class="hljs-name">host</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">port</span>></span>9977<span class="hljs-tag"></<span class="hljs-name">port</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">replica</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">shard</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">shard</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">internal_replication</span>></span>true<span class="hljs-tag"></<span class="hljs-name">internal_replication</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">replica</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">host</span>></span>hadoop3<span class="hljs-tag"></<span class="hljs-name">host</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="24"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">port</span>></span>9977<span class="hljs-tag"></<span class="hljs-name">port</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="25"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">replica</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="26"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">shard</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="27"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">perftest_3shards_1replicas</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">clickhouse_remote_servers</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="30"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment"><!--zookeeper相關配置--></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="31"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">zookeeper-servers</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">node</span> <span class="hljs-attr">index</span>=<span class="hljs-string">"1"</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">host</span>></span>hadoop1<span class="hljs-tag"></<span class="hljs-name">host</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">port</span>></span>2181<span class="hljs-tag"></<span class="hljs-name">port</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">node</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">node</span> <span class="hljs-attr">index</span>=<span class="hljs-string">"2"</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">host</span>></span>hadoop2<span class="hljs-tag"></<span class="hljs-name">host</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="38"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">port</span>></span>2181<span class="hljs-tag"></<span class="hljs-name">port</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="39"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">node</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="40"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">node</span> <span class="hljs-attr">index</span>=<span class="hljs-string">"3"</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="41"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">host</span>></span>hadoop3<span class="hljs-tag"></<span class="hljs-name">host</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="42"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">port</span>></span>2181<span class="hljs-tag"></<span class="hljs-name">port</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="43"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">node</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="44"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">zookeeper-servers</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="45"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="46"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment"><!-- 配置文件中macros若省略,則建復制表時每個分片需指定zookeeper路徑及副本名稱,同一分片上路徑相同,副本名稱不同;若不省略需每個分片不同配置 --></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="47"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">macros</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="48"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">replica</span>></span>hadoop2<span class="hljs-tag"></<span class="hljs-name">replica</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="49"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">macros</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="50"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="51"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">networks</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="52"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">ip</span>></span>::/0<span class="hljs-tag"></<span class="hljs-name">ip</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="53"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">networks</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="54"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="55"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-comment"><!-- 配置壓縮 --></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="56"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">clickhouse_compression</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="57"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">case</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="58"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">min_part_size</span>></span>10000000000<span class="hljs-tag"></<span class="hljs-name">min_part_size</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="59"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">min_part_size_ratio</span>></span>0.01<span class="hljs-tag"></<span class="hljs-name">min_part_size_ratio</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="60"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">method</span>></span>lz4<span class="hljs-tag"></<span class="hljs-name">method</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="61"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">case</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="62"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">clickhouse_compression</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="63"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="64"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"></<span class="hljs-name">yandex</span>></span></div></div></li></ol></code><div class="hide-preCode-box"><span class="hide-preCode-bt" data-report-view="{"spm":"1001.2101.3001.7365"}"><img class="look-more-preCode contentImg-no-view" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png" alt="" title=""></span></div><div class="hljs-button {2}" data-title="復制" onclick="hljs.copyCode(event)"></div></pre>
<p> 注意其中標簽<macros>,不同服務器上的配置不一樣。 </p>
<pre data-index="1"><code class="language-XML hljs"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><<span class="hljs-name">macros</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">shard</span>></span>01<span class="hljs-tag"></<span class="hljs-name">shard</span>></span> <span class="hljs-comment"><!-- 不用機器放的分片數不一樣 --></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">replica</span>></span>rep_1_1<span class="hljs-tag"></<span class="hljs-name">replica</span>></span> <span class="hljs-comment"><!-- 不同機器放的副本數不一樣,這里表示分片一的第一個副本 --></span> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"></<span class="hljs-name">macros</span>></span></div></div></li></ol></code><div class="hljs-button {2}" data-title="復制" onclick="hljs.copyCode(event)"></div></pre>
<p> 手動創建可以直接被使用。這個是因為/etc/clickhouse-server/config.xml該配置文件有默認指定/etc/metrika.xml。如下,如果有需要修改,可添加:<include_from>...</include_from>來手動指定路徑。</p>
<p><img alt="" height="78" src="https://img-blog.csdnimg.cn/6af316f6dbf54a59bec288d3d3e5dba5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWXVhbl9DU0RG,size_20,color_FFFFFF,t_70,g_se,x_16" width="904"></p>
<p> 啟動服務后,發現指定的集群無效,需要在/etc/clickhouse-server/config.xml文件中指定如下:</p>
<pre data-index="2"><code class="language-XML hljs"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><<span class="hljs-name">remote_servers</span> <span class="hljs-attr">incl</span>=<span class="hljs-string">"clickhouse_remote_servers"</span> /></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><<span class="hljs-name">zookeeper</span> <span class="hljs-attr">incl</span>=<span class="hljs-string">"zookeeper-servers"</span> <span class="hljs-attr">optional</span>=<span class="hljs-string">"true"</span> /></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><<span class="hljs-name">macros</span> <span class="hljs-attr">incl</span>=<span class="hljs-string">"macros"</span> <span class="hljs-attr">optional</span>=<span class="hljs-string">"true"</span> /></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><<span class="hljs-name">compression</span> <span class="hljs-attr">incl</span>=<span class="hljs-string">"clickhouse_compression"</span> <span class="hljs-attr">optional</span>=<span class="hljs-string">"true"</span> /></span></div></div></li></ol></code><div class="hljs-button {2}" data-title="復制" onclick="hljs.copyCode(event)"></div></pre>
<p> 啟動zookeeper與CK服務端,可參照上面的檢查啟動是否OK:</p>
<p> zkServer.sh start</p>
<p> nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml 1>~/logs/clickhouse_std.log 2>~/logs/clickhouse_err.log &</p>
<p></p>
<p> 2.客戶端連接:</p>
<p> clickhouse-client --host hadoop1 --port 9977 -m --user=bigdata --password=bigdata</p>
<p> -m如果設定,允許多行查詢。</p>
<p><span style="color:#f33b45;"> 注意集群的使用:</span></p>
<p><span style="color:#f33b45;"> 如果創建了一張表,這張表的引擎是分布式的引擎,那么這個表所存儲在那個集群里面的機器,就是一個集群了。每個clickhouse中的部分表是單機的,部分表是分布式的。</span></p>
<p><span style="color:#f33b45;"> 普通建表語句都是單機的。創建分布式才會在所有節點都可以顯示。</span></p>
<p><span style="color:#f33b45;"> create database if not exists mydb on cluster perftest_3shards_1replicas</span></p>
<p></p>
<p>3.設置連接用戶名密碼:vim /etc/clickhouse-server/users.xml 復制到所有節點</p>
<pre data-index="3"><code class="language-XML hljs"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"><<span class="hljs-name">bigdata</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">password</span>></span>bigdata<span class="hljs-tag"></<span class="hljs-name">password</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">networks</span> <span class="hljs-attr">incl</span>=<span class="hljs-string">"networks"</span> <span class="hljs-attr">replace</span>=<span class="hljs-string">"replace"</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">ip</span>></span>::/0<span class="hljs-tag"></<span class="hljs-name">ip</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"></<span class="hljs-name">networks</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">profile</span>></span>default<span class="hljs-tag"></<span class="hljs-name">profile</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-tag"><<span class="hljs-name">quota</span>></span>default<span class="hljs-tag"></<span class="hljs-name">quota</span>></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-tag"></<span class="hljs-name">bigdata</span>></span></div></div></li></ol></code><div class="hljs-button {2}" data-title="復制" onclick="hljs.copyCode(event)"></div></pre>
<h1><a name="t19"></a>4.卸載 clickhouse</h1>
<ol><li>查詢是否安裝 clickhouse:rpm -qa | grep clickhouse</li><li>卸載 clickhouse:rpm -e clickhouse-client-20.5.4.40-2.noarch --nodeps、rpm -e clickhouse-server-20.5.4.40-2.noarch --nodeps、rpm -e clickhouse-common-static-20.5.4.40-2.x86_64 --nodeps</li><li>刪除數據目錄:rm -rf /var/lib/clickhouse</li><li>刪除集群配置文件:rm -rf /etc/metrika.xml</li><li>刪除配置文件:rm -rf /etc/clickhouse-*</li><li>刪除日志文件:rm -rf /var/log/clickhouse-server</li><li>刪除 zookeeper 上 clickhouse 的數據:rmr /clickhouse</li><li>也可以進行全局尋找:然后執行刪除操作:find / -name 'clickhouse'</li></ol>
<p></p>
<h1><a name="t20"></a>5.ClickHouse一些信息總結</h1>
<ul><li>配置文件路徑:/etc/clickhouse-server/config.xml</li><li>日志文件路徑:/var/log/clickhouse-server/</li><li>建表信息路徑:/var/lib/clickhouse/metadata/</li><li>表數據路徑:/var/lib/clickhouse/data/</li></ul>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
</div><div><div></div></div>
</div>