<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Antony 筆記：技術原理與實務經驗 – 資料與儲存平台</title><link>https://blog.kubeantony.com/archive/data-platform/</link><description>Recent content in 資料與儲存平台 on Antony 筆記：技術原理與實務經驗</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><lastBuildDate>Tue, 24 Mar 2026 06:43:24 +0800</lastBuildDate><atom:link href="https://blog.kubeantony.com/archive/data-platform/index.xml" rel="self" type="application/rss+xml"/><item><title>Quick Start OpenSearch</title><link>https://blog.kubeantony.com/archive/data-platform/quick-start-opensearch/</link><pubDate>Tue, 24 Mar 2026 06:43:24 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/quick-start-opensearch/</guid><description>
&lt;h2&gt;環境準備&lt;span class="hx:absolute hx:-mt-20" id="環境準備"&gt;&lt;/span&gt;
&lt;a href="#%e7%92%b0%e5%a2%83%e6%ba%96%e5%82%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;os: Ubuntu 24.04.4 LTS&lt;/li&gt;
&lt;li&gt;podman version: 4.9.3&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;OpenSearch&lt;span class="hx:absolute hx:-mt-20" id="opensearch"&gt;&lt;/span&gt;
&lt;a href="#opensearch" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;建立 podman volume&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman volume create opensearch-data&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a Docker network&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman network create log-system&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;啟動 OpenSearch，並掛載 volume&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman run -d \
-p 9200:9200 \
-p 9600:9600 \
--name opensearch \
--net log-system \
-e &amp;#34;discovery.type=single-node&amp;#34; \
-e &amp;#39;OPENSEARCH_INITIAL_ADMIN_PASSWORD=&amp;lt;password&amp;gt;&amp;#39; \
-v opensearch-data:/usr/share/opensearch/data \
docker.io/opensearchproject/opensearch:latest&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;password 要自己定義，必須使用至少 8 個字元，包含至少一個大寫字母、一個小寫字母、一個數字，以及一個特殊字元。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;OpenSearch dashboard&lt;span class="hx:absolute hx:-mt-20" id="opensearch-dashboard"&gt;&lt;/span&gt;
&lt;a href="#opensearch-dashboard" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;編輯 OpenSearch Dashboards 設定檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;mkdir ~/opensearch; nano opensearch_dashboards.yml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;opensearch.hosts&lt;/code&gt; 的值要根據環境做設定，並在環境的 DNS Server 新增一筆 A Record&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;server.name: opensearch_dashboards
server.host: &amp;#34;0.0.0.0&amp;#34;
server.customResponseHeaders: { &amp;#34;Access-Control-Allow-Credentials&amp;#34;: &amp;#34;true&amp;#34; }
server.ssl.enabled: false
opensearch.hosts: [&amp;#34;https://opensearch-node.kubeantony.com:9200&amp;#34;]
opensearch.ssl.verificationMode: none
opensearch.username: kibanaserver
opensearch.password: kibanaserver
opensearch.requestHeadersWhitelist: [&amp;#34;securitytenant&amp;#34;,&amp;#34;Authorization&amp;#34;]
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.preferred: [&amp;#34;Private&amp;#34;, &amp;#34;Global&amp;#34;]
opensearch_security.readonly_mode.roles: [&amp;#34;kibana_read_only&amp;#34;]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;啟動 OpenSearch Dashboards&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman run -d --name osd \
--network host \
-v ./opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml \
docker.io/opensearchproject/opensearch-dashboards:latest&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;連線至 Web 管理網站&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;http://&amp;lt;opensearch.hosts&amp;gt;:5601/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Sy6JBmrqZx.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;With Logstash&lt;span class="hx:absolute hx:-mt-20" id="with-logstash"&gt;&lt;/span&gt;
&lt;a href="#with-logstash" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman volume create logstash-data&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;mkdir -p ~/logstash/pipeline
cat &amp;gt; ~/logstash/pipeline/logstash.conf &amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
input {
http {
host =&amp;gt; &amp;#34;0.0.0.0&amp;#34;
port =&amp;gt; 8080
}
}
filter {
}
output {
opensearch {
hosts =&amp;gt; [&amp;#34;https://opensearch-node.kubeantony.com:9200&amp;#34;]
index =&amp;gt; &amp;#34;opensearch-logstash-docker-%{&amp;#43;YYYY.MM.dd}&amp;#34;
user =&amp;gt; &amp;#34;admin&amp;#34;
password =&amp;gt; &amp;#34;!QAZ2wsx@WSX!!&amp;#34;
ssl =&amp;gt; false
ssl_certificate_verification =&amp;gt; false
}
}
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman run -d -it --name logstash \
--net log-system \
-v logstash-data:/usr/share/logstash/data \
-p 8080:8080 \
-v ~/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:Z \
docker.io/opensearchproject/logstash-oss-with-opensearch-output-plugin:8.9.0 \&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman exec -it logstash /usr/share/logstash/bin/logstash-plugin update logstash-output-opensearch
sudo podman restart logstash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl -XPOST http://logstash.kubeantony.com:8080 \
-H &amp;#34;Content-Type: application/json&amp;#34; \
-d &amp;#39;{&amp;#34;message&amp;#34;: &amp;#34;test from outside&amp;#34;}&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;Logstash Podman Quadlet 部署指南（Rootful / Podman 4.9.3）&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;操作方式&lt;/strong&gt;：以一般使用者登入，必要時透過 &lt;code&gt;sudo&lt;/code&gt; 提權。
Quadlet 檔案放在 &lt;code&gt;/etc/containers/systemd/&lt;/code&gt;，容器以 rootful 模式執行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;版本限制&lt;/strong&gt;：Podman 4.9.3 不支援 &lt;code&gt;.build&lt;/code&gt; Quadlet（需 5.2.0+），
因此自訂映像需先手動 build，再由 &lt;code&gt;.container&lt;/code&gt; 直接引用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;前置準備：安裝 podlet&lt;span class="hx:absolute hx:-mt-20" id="前置準備安裝-podlet"&gt;&lt;/span&gt;
&lt;a href="#%e5%89%8d%e7%bd%ae%e6%ba%96%e5%82%99%e5%ae%89%e8%a3%9d-podlet" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://raw.githubusercontent.com/braveantony/bash-script/refs/heads/main/install-podlet.sh &lt;span class="p"&gt;|&lt;/span&gt; sudo bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;1. 建立目錄結構&lt;span class="hx:absolute hx:-mt-20" id="1-建立目錄結構"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%bb%ba%e7%ab%8b%e7%9b%ae%e9%8c%84%e7%b5%90%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir -p /opt/logstash/build
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir -p /etc/logstash/pipeline
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir -p /etc/logstash/certs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir -p /etc/containers/systemd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. 建立 Containerfile（自訂映像，含更新 plugin）&lt;span class="hx:absolute hx:-mt-20" id="2-建立-containerfile自訂映像含更新-plugin"&gt;&lt;/span&gt;
&lt;a href="#2-%e5%bb%ba%e7%ab%8b-containerfile%e8%87%aa%e8%a8%82%e6%98%a0%e5%83%8f%e5%90%ab%e6%9b%b4%e6%96%b0-plugin" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tee /opt/logstash/build/Containerfile &amp;gt; /dev/null &lt;span class="s"&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;FROM docker.io/opensearchproject/logstash-oss-with-opensearch-output-plugin:8.9.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;RUN /usr/share/logstash/bin/logstash-plugin update logstash-output-opensearch
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. 手動 Build 自訂映像&lt;span class="hx:absolute hx:-mt-20" id="3-手動-build-自訂映像"&gt;&lt;/span&gt;
&lt;a href="#3-%e6%89%8b%e5%8b%95-build-%e8%87%aa%e8%a8%82%e6%98%a0%e5%83%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;由於 Podman 4.9.3 不支援 &lt;code&gt;.build&lt;/code&gt; Quadlet，需先手動 build 映像：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo podman build -t localhost/logstash-custom:latest &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -f /opt/logstash/build/Containerfile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此步驟需要網路連線，且首次 build 會花一些時間下載基底映像和更新 plugin。
後續如需更新 plugin，重新執行此 build 指令即可。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;4. 產生 SSL 憑證&lt;span class="hx:absolute hx:-mt-20" id="4-產生-ssl-憑證"&gt;&lt;/span&gt;
&lt;a href="#4-%e7%94%a2%e7%94%9f-ssl-%e6%86%91%e8%ad%89" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用 &lt;a
href="https://github.com/braveantony/mkcert"target="_blank" rel="noopener"&gt;mkcert&lt;/a&gt; 產出自簽憑證，再將 key 轉為 PKCS8 格式並以固定檔名放入 &lt;code&gt;/etc/logstash/certs/&lt;/code&gt;：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 產出憑證（依照 mkcert 的使用方式，請先編輯 config 中的 DOMAIN_NAME）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/braveantony/mkcert.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nano ./mkcert/config
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./mkcert/certctl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 設定你的 domain name（與 mkcert config 中一致）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;your-domain.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/mkcert
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 將 key 轉為 PKCS8 格式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;openssl pkcs8 -in &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.key&amp;#34;&lt;/span&gt; -topk8 -nocrypt -out &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/server.key&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 複製憑證到固定路徑（使用固定檔名）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.crt&amp;#34;&lt;/span&gt; /etc/logstash/certs/server.crt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/server.key&amp;#34;&lt;/span&gt; /etc/logstash/certs/server.key
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/ca.crt&amp;#34;&lt;/span&gt; /etc/logstash/certs/ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 設定權限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;0600&lt;/span&gt; /etc/logstash/certs/server.key
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;0644&lt;/span&gt; /etc/logstash/certs/server.crt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;0644&lt;/span&gt; /etc/logstash/certs/ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chown -R root:root /etc/logstash/certs/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;5. 建立 Pipeline 設定檔&lt;span class="hx:absolute hx:-mt-20" id="5-建立-pipeline-設定檔"&gt;&lt;/span&gt;
&lt;a href="#5-%e5%bb%ba%e7%ab%8b-pipeline-%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HTTP input 啟用 HTTPS + basic auth，OpenSearch output 透過環境變數帶入：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tee /etc/logstash/pipeline/logstash.conf &amp;gt; /dev/null &lt;span class="s"&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;input {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; http {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; host =&amp;gt; &amp;#34;0.0.0.0&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; port =&amp;gt; 8080
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; user =&amp;gt; &amp;#34;${HTTP_AUTH_USER}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; password =&amp;gt; &amp;#34;${HTTP_AUTH_PASSWORD}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ssl =&amp;gt; true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ssl_certificate =&amp;gt; &amp;#34;/etc/logstash/certs/server.crt&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ssl_key =&amp;gt; &amp;#34;/etc/logstash/certs/server.key&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;filter {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;output {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; opensearch {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; hosts =&amp;gt; [&amp;#34;${OPENSEARCH_HOSTS}&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; index =&amp;gt; &amp;#34;${OPENSEARCH_INDEX}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; user =&amp;gt; &amp;#34;admin&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; password =&amp;gt; &amp;#34;${OPENSEARCH_PASSWORD}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ssl =&amp;gt; false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ssl_certificate_verification =&amp;gt; false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;6. 建立環境變數檔&lt;span class="hx:absolute hx:-mt-20" id="6-建立環境變數檔"&gt;&lt;/span&gt;
&lt;a href="#6-%e5%bb%ba%e7%ab%8b%e7%92%b0%e5%a2%83%e8%ae%8a%e6%95%b8%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;將所有敏感資訊和可變設定集中管理：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tee /etc/logstash/logstash.env &amp;gt; /dev/null &lt;span class="s"&gt;&amp;lt;&amp;lt; &amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;# HTTP input basic auth
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;HTTP_AUTH_USER=logstash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;HTTP_AUTH_PASSWORD=logstash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;# OpenSearch output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;OPENSEARCH_HOSTS=https://opensearch-node.kubeantony.com:9200
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;OPENSEARCH_INDEX=opensearch-logstash-docker-%{+YYYY.MM.dd}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;OPENSEARCH_PASSWORD=!QAZ2wsx@WSX!!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chmod &lt;span class="m"&gt;0600&lt;/span&gt; /etc/logstash/logstash.env
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chown root:root /etc/logstash/logstash.env&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;請務必修改上方的預設值&lt;/strong&gt;，尤其是 &lt;code&gt;HTTP_AUTH_USER&lt;/code&gt;、&lt;code&gt;HTTP_AUTH_PASSWORD&lt;/code&gt; 和 &lt;code&gt;OPENSEARCH_PASSWORD&lt;/code&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;7. 使用 podlet 產生 Quadlet 檔案（Rootful）&lt;span class="hx:absolute hx:-mt-20" id="7-使用-podlet-產生-quadlet-檔案rootful"&gt;&lt;/span&gt;
&lt;a href="#7-%e4%bd%bf%e7%94%a8-podlet-%e7%94%a2%e7%94%9f-quadlet-%e6%aa%94%e6%a1%88rootful" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;7-1. 產生 logstash-data.volume&lt;span class="hx:absolute hx:-mt-20" id="7-1-產生-logstash-datavolume"&gt;&lt;/span&gt;
&lt;a href="#7-1-%e7%94%a2%e7%94%9f-logstash-datavolume" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo podlet --file /etc/containers/systemd/ --install &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; podman volume create logstash-data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修正 &lt;code&gt;WantedBy&lt;/code&gt; 為 rootful 慣例：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sed -i &lt;span class="s1"&gt;&amp;#39;s/WantedBy=default.target/WantedBy=multi-user.target/&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /etc/containers/systemd/logstash-data.volume&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;7-2. 產生 log-system.network&lt;span class="hx:absolute hx:-mt-20" id="7-2-產生-log-systemnetwork"&gt;&lt;/span&gt;
&lt;a href="#7-2-%e7%94%a2%e7%94%9f-log-systemnetwork" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo podlet --file /etc/containers/systemd/ --install &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; podman network create log-system&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修正 &lt;code&gt;WantedBy&lt;/code&gt;：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sed -i &lt;span class="s1"&gt;&amp;#39;s/WantedBy=default.target/WantedBy=multi-user.target/&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /etc/containers/systemd/log-system.network&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;7-3. 產生 logstash.container&lt;span class="hx:absolute hx:-mt-20" id="7-3-產生-logstashcontainer"&gt;&lt;/span&gt;
&lt;a href="#7-3-%e7%94%a2%e7%94%9f-logstashcontainer" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo podlet --file /etc/containers/systemd/ --name logstash --install &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --description &lt;span class="s2"&gt;&amp;#34;Logstash with OpenSearch Output Plugin&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; podman run -d --name logstash &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --net log-system.network &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v logstash-data.volume:/usr/share/logstash/data &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /etc/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:Z &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v /etc/logstash/certs:/etc/logstash/certs:Z,ro &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -p 8080:8080 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; localhost/logstash-custom:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;7-4. 手動補上 EnvironmentFile 和 Service 設定，並修正 WantedBy&lt;span class="hx:absolute hx:-mt-20" id="7-4-手動補上-environmentfile-和-service-設定並修正-wantedby"&gt;&lt;/span&gt;
&lt;a href="#7-4-%e6%89%8b%e5%8b%95%e8%a3%9c%e4%b8%8a-environmentfile-%e5%92%8c-service-%e8%a8%ad%e5%ae%9a%e4%b8%a6%e4%bf%ae%e6%ad%a3-wantedby" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;podlet 產生的檔案沒有 &lt;code&gt;[Service]&lt;/code&gt; 區段，需在 &lt;code&gt;[Install]&lt;/code&gt; 之前插入：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 在 [Install] 前插入 EnvironmentFile 和 [Service] 區段&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sed -i &lt;span class="s1"&gt;&amp;#39;/^\[Install\]/i EnvironmentFile=/etc/logstash/logstash.env\n\n[Service]\nRestart=always\nTimeoutStartSec=120\n&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /etc/containers/systemd/logstash.container
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 修正 WantedBy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sed -i &lt;span class="s1"&gt;&amp;#39;s/WantedBy=default.target/WantedBy=multi-user.target/&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /etc/containers/systemd/logstash.container&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;7-5. 驗證最終檔案內容&lt;span class="hx:absolute hx:-mt-20" id="7-5-驗證最終檔案內容"&gt;&lt;/span&gt;
&lt;a href="#7-5-%e9%a9%97%e8%ad%89%e6%9c%80%e7%b5%82%e6%aa%94%e6%a1%88%e5%85%a7%e5%ae%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;執行 &lt;code&gt;sudo cat /etc/containers/systemd/logstash.container&lt;/code&gt;，確認內容如下：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Unit]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Logstash with OpenSearch Output Plugin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Container]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;logstash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;localhost/logstash-custom:latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;log-system.network&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;8080:8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;logstash-data.volume:/usr/share/logstash/data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/etc/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:Z&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/etc/logstash/certs:/etc/logstash/certs:Z,ro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;EnvironmentFile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/etc/logstash/logstash.env&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Service]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;always&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;TimeoutStartSec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;[Install]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;multi-user.target&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如果 &lt;code&gt;sed&lt;/code&gt; 結果不如預期，可直接用 &lt;code&gt;sudo vi /etc/containers/systemd/logstash.container&lt;/code&gt; 手動編輯。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;8. 使用 Quadlet dry-run 驗證&lt;span class="hx:absolute hx:-mt-20" id="8-使用-quadlet-dry-run-驗證"&gt;&lt;/span&gt;
&lt;a href="#8-%e4%bd%bf%e7%94%a8-quadlet-dry-run-%e9%a9%97%e8%ad%89" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo /usr/libexec/podman/quadlet -dryrun&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;確認輸出無錯誤後再繼續。&lt;/p&gt;
&lt;h2&gt;9. 重新載入 systemd 並啟動&lt;span class="hx:absolute hx:-mt-20" id="9-重新載入-systemd-並啟動"&gt;&lt;/span&gt;
&lt;a href="#9-%e9%87%8d%e6%96%b0%e8%bc%89%e5%85%a5-systemd-%e4%b8%a6%e5%95%9f%e5%8b%95" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start logstash.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;10. 確認狀態&lt;span class="hx:absolute hx:-mt-20" id="10-確認狀態"&gt;&lt;/span&gt;
&lt;a href="#10-%e7%a2%ba%e8%aa%8d%e7%8b%80%e6%85%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl status logstash.service
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo podman ps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo podman logs logstash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;11. 測試 HTTPS + Basic Auth&lt;span class="hx:absolute hx:-mt-20" id="11-測試-https--basic-auth"&gt;&lt;/span&gt;
&lt;a href="#11-%e6%b8%ac%e8%a9%a6-https--basic-auth" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;帶認證 + 信任自簽 CA（應回傳 &lt;code&gt;ok&lt;/code&gt;）：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Example: DOMAIN_NAME=&amp;#34;logstash.kubeantony.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;your-domain.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl --cacert /etc/logstash/certs/ca.crt &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -u logstash:logstash &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -X POST https://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:8080 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;message&amp;#34;: &amp;#34;test with https&amp;#34;}&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;或跳過憑證驗證（測試用）：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -k -u logstash:logstash &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -X POST https://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:8080 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;message&amp;#34;: &amp;#34;test with https&amp;#34;}&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;不帶認證應回傳 &lt;code&gt;401&lt;/code&gt;：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -k -s -o /dev/null -w &lt;span class="s2"&gt;&amp;#34;%{http_code}&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -X POST https://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:8080 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;message&amp;#34;: &amp;#34;should fail&amp;#34;}&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;用 HTTP（非 HTTPS）應連線失敗：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -s -o /dev/null -w &lt;span class="s2"&gt;&amp;#34;%{http_code}&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -X POST http://&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:8080 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{&amp;#34;message&amp;#34;: &amp;#34;should fail&amp;#34;}&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;應該會得到 &lt;code&gt;000&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;路徑總覽&lt;span class="hx:absolute hx:-mt-20" id="路徑總覽"&gt;&lt;/span&gt;
&lt;a href="#%e8%b7%af%e5%be%91%e7%b8%bd%e8%a6%bd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;檔案&lt;/th&gt;
&lt;th&gt;路徑&lt;/th&gt;
&lt;th&gt;說明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Containerfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/opt/logstash/build/Containerfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;自訂映像 build 檔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;logstash.conf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/logstash/pipeline/logstash.conf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pipeline 設定檔&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;logstash.env&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/logstash/logstash.env&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;環境變數檔（權限 0600）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;server.crt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/logstash/certs/server.crt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SSL 憑證&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;server.key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/logstash/certs/server.key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SSL 私鑰（PKCS8，權限 0600）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ca.crt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/logstash/certs/ca.crt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CA 憑證（供客戶端驗證）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;logstash-data.volume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/containers/systemd/logstash-data.volume&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quadlet Volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;log-system.network&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/containers/systemd/log-system.network&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quadlet Network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;logstash.container&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/containers/systemd/logstash.container&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quadlet Container&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;環境變數一覽&lt;span class="hx:absolute hx:-mt-20" id="環境變數一覽"&gt;&lt;/span&gt;
&lt;a href="#%e7%92%b0%e5%a2%83%e8%ae%8a%e6%95%b8%e4%b8%80%e8%a6%bd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;變數名&lt;/th&gt;
&lt;th&gt;用途&lt;/th&gt;
&lt;th&gt;範例值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HTTP_AUTH_USER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP input basic auth 帳號&lt;/td&gt;
&lt;td&gt;&lt;code&gt;logstash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HTTP_AUTH_PASSWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;HTTP input basic auth 密碼&lt;/td&gt;
&lt;td&gt;&lt;code&gt;changeme&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OPENSEARCH_HOSTS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenSearch 連線 URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://opensearch-node.kubeantony.com:9200&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OPENSEARCH_INDEX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenSearch index 名稱（含日期格式）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;opensearch-logstash-docker-%{+YYYY.MM.dd}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OPENSEARCH_PASSWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenSearch admin 密碼&lt;/td&gt;
&lt;td&gt;&lt;code&gt;!QAZ2wsx@WSX!!&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;注意事項&lt;span class="hx:absolute hx:-mt-20" id="注意事項"&gt;&lt;/span&gt;
&lt;a href="#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a0%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;以一般使用者操作，透過 &lt;code&gt;sudo&lt;/code&gt; 提權，容器以 &lt;strong&gt;rootful&lt;/strong&gt; 模式執行。&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;sudo systemctl&lt;/code&gt;（不帶 &lt;code&gt;--user&lt;/code&gt;）管理服務。&lt;/li&gt;
&lt;li&gt;Podman 4.9.3 不支援 &lt;code&gt;.build&lt;/code&gt; Quadlet，映像需先手動 &lt;code&gt;sudo podman build&lt;/code&gt; 建構。&lt;/li&gt;
&lt;li&gt;podlet 產生的 &lt;code&gt;WantedBy=default.target&lt;/code&gt; 是 rootless 慣例，rootful 需手動改為 &lt;code&gt;multi-user.target&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;podlet 產生的檔案不包含 &lt;code&gt;[Service]&lt;/code&gt; 區段，需手動補上。&lt;/li&gt;
&lt;li&gt;寫入受保護路徑一律使用 &lt;code&gt;sudo tee&lt;/code&gt;，避免重導向權限問題。&lt;/li&gt;
&lt;li&gt;SSL 私鑰必須為 &lt;strong&gt;PKCS8 格式&lt;/strong&gt;，Logstash HTTP input plugin 不接受一般 PEM 格式的 key。&lt;/li&gt;
&lt;li&gt;憑證目錄 &lt;code&gt;/etc/logstash/certs/&lt;/code&gt; 以 &lt;code&gt;ro&lt;/code&gt;（唯讀）掛載進容器。&lt;/li&gt;
&lt;li&gt;環境變數檔 &lt;code&gt;/etc/logstash/logstash.env&lt;/code&gt; 權限務必為 &lt;code&gt;0600&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;如需修改任何環境變數，編輯 env 檔後執行 &lt;code&gt;sudo systemctl restart logstash.service&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;如需更新 plugin，重新執行步驟 3 的 build 指令後重啟服務。&lt;/li&gt;
&lt;li&gt;如需更換憑證，替換 &lt;code&gt;/etc/logstash/certs/&lt;/code&gt; 下的檔案後重啟服務。&lt;/li&gt;
&lt;li&gt;部署前建議用 &lt;code&gt;sudo /usr/libexec/podman/quadlet -dryrun&lt;/code&gt; 驗證設定。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How to install Influxdb on RedHat Enterprise Linux 9</title><link>https://blog.kubeantony.com/archive/data-platform/how-to-install-influxdb-on-redhat-enterprise-linux-9/</link><pubDate>Mon, 03 Nov 2025 07:03:14 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/how-to-install-influxdb-on-redhat-enterprise-linux-9/</guid><description>
&lt;h2&gt;1. 先決條件&lt;span class="hx:absolute hx:-mt-20" id="1-先決條件"&gt;&lt;/span&gt;
&lt;a href="#1-%e5%85%88%e6%b1%ba%e6%a2%9d%e4%bb%b6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;已安裝好可連線到 Public 網路的 RHEL 9&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;2. InfluxDB 檔案結構&lt;span class="hx:absolute hx:-mt-20" id="2-influxdb--檔案結構"&gt;&lt;/span&gt;
&lt;a href="#2-influxdb--%e6%aa%94%e6%a1%88%e7%b5%90%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Engine path&lt;span class="hx:absolute hx:-mt-20" id="engine-path"&gt;&lt;/span&gt;
&lt;a href="#engine-path" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;storage engine 的目錄路徑，InfluxDB 在此儲存時間序列資料 (time series data)。它包含以下目錄：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;data&lt;/strong&gt;：儲存時間結構合併樹 (TSM) 檔案。有關 &lt;code&gt;data&lt;/code&gt; 目錄結構的更多資訊，請參閱 TSM 目錄和檔案佈局。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;replicationq&lt;/strong&gt;：儲存 InfluxDB replication service 的複製佇列 (replication queue)。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wal&lt;/strong&gt;：儲存預寫日誌 (WAL) 檔案。有關 &lt;code&gt;wal&lt;/code&gt; 目錄結構的更多資訊，請參閱 WAL 目錄和檔案佈局。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;若要自訂此路徑，請使用 &lt;code&gt;engine-path&lt;/code&gt; 設定選項。&lt;/p&gt;
&lt;h3&gt;Bolt path&lt;span class="hx:absolute hx:-mt-20" id="bolt-path"&gt;&lt;/span&gt;
&lt;a href="#bolt-path" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Boltdb 資料庫的檔案路徑。這是一個 file-based key-value store，用於儲存非時間序列資料，例如 InfluxDB 的使用者、儀表板 (dashboards) 和任務 (tasks)。&lt;/p&gt;
&lt;p&gt;若要自訂此路徑，請使用 &lt;code&gt;bolt-path&lt;/code&gt; 設定選項。&lt;/p&gt;
&lt;h3&gt;SQLite path&lt;span class="hx:absolute hx:-mt-20" id="sqlite-path"&gt;&lt;/span&gt;
&lt;a href="#sqlite-path" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;SQLite 資料庫的檔案路徑。這是一個 SQL 資料庫，用於儲存非時間序列資料，例如 InfluxDB 的筆記本 (notebooks) 和註解 (annotations)。&lt;/p&gt;
&lt;p&gt;若要自訂此路徑，請使用 &lt;code&gt;sqlite-path&lt;/code&gt; 設定選項。&lt;/p&gt;
&lt;h3&gt;Configs path&lt;span class="hx:absolute hx:-mt-20" id="configs-path"&gt;&lt;/span&gt;
&lt;a href="#configs-path" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;influx&lt;/code&gt; CLI 連線設定 (configs) 的檔案路徑。&lt;/p&gt;
&lt;p&gt;若要使用自訂路徑，請在使用 &lt;code&gt;influx&lt;/code&gt; CLI 命令時傳遞 &lt;code&gt;--configs-path&lt;/code&gt; 旗標。&lt;/p&gt;
&lt;h3&gt;Linux default paths (package)&lt;span class="hx:absolute hx:-mt-20" id="linux-default-paths-package"&gt;&lt;/span&gt;
&lt;a href="#linux-default-paths-package" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Engine path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/var/lib/influxdb/engine/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bolt path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/var/lib/influxdb/influxd.bolt&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQLite path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/var/lib/influxdb/influxd.sqlite&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configs path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/var/lib/influxdb/configs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default config file path&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/etc/influxdb/config.toml&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Linux file system overview (package)&lt;span class="hx:absolute hx:-mt-20" id="linux-file-system-overview-package"&gt;&lt;/span&gt;
&lt;a href="#linux-file-system-overview-package" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;/var/lib/influxdb/
├── engine
│   ├── data #--&amp;gt; TSM directories and files
│   └── replicationq #--&amp;gt; WAL directories and files
├── influxd.bolt
├── influxd.pid
└── influxd.sqlite
/etc/influxdb/
└── config.toml #--&amp;gt; (influxd configuration file)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. 規劃一顆硬碟給 Influxdb 用&lt;span class="hx:absolute hx:-mt-20" id="3-規劃一顆硬碟給-influxdb-用"&gt;&lt;/span&gt;
&lt;a href="#3-%e8%a6%8f%e5%8a%83%e4%b8%80%e9%a1%86%e7%a1%ac%e7%a2%9f%e7%b5%a6-influxdb-%e7%94%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. 在 VM 新增一顆硬碟專門給 Influxdb 使用
# 2. 檢查新的硬碟名稱
$ lsblk
...
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 100G 0 disk
# 3. 將硬碟名稱設為變數
$ D=&amp;#34;/dev/sdb&amp;#34;
# 4. 使用 parted 建立 GPT 分割區，從 1 MiB 到磁碟尾，並標記為 LVM 用途
$ sudo parted -s ${D} mklabel gpt
$ sudo parted -s ${D} unit MiB mkpart primary 1 100%
# 5. 將剛建立的分割區初始化為 LVM PV
$ sudo pvcreate ${D}1
# 6. 建立名為 vg-Influxdb 的 VG
$ sudo vgcreate vg-Influxdb ${D}1
# 7. 從 VG 中建立一 LV，利用全部剩餘空間並命名為 lv-Influxdb
$ sudo lvcreate -l &amp;#43;100%FREE -n lv-Influxdb /dev/vg-Influxdb
# 8. 格式化 LV 為 XFS 檔案系統，以提供穩健且高效的儲存
$ sudo mkfs.xfs /dev/vg-Influxdb/lv-Influxdb
# 9. 將目錄設為開機自動掛載 lv 裝置上
$ echo &amp;#39;/dev/vg-Influxdb/lv-Influxdb /var/lib/influxdb xfs defaults 0 0&amp;#39; | sudo tee -a /etc/fstab
# 10. 建立目錄
$ sudo mkdir -p /var/lib/influxdb
# 11. 將目錄掛載到 lv 裝置上
$ sudo mount -a &amp;amp;&amp;amp; sudo systemctl daemon-reload&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;4. Install InfluxDB as a service with systemd&lt;span class="hx:absolute hx:-mt-20" id="4-install-influxdb-as-a-service-with-systemd"&gt;&lt;/span&gt;
&lt;a href="#4-install-influxdb-as-a-service-with-systemd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add the InfluxData key to verify downloads&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl --silent --location -O https://repos.influxdata.com/influxdata-archive.key
gpg --show-keys --with-fingerprint --with-colons ./influxdata-archive.key 2&amp;gt;&amp;amp;1 \
| grep -q &amp;#39;^fpr:\&amp;#43;9D539D90D3328DC7D6C8D3B9D8FF8E1F7DF8B07E:$&amp;#39; \
&amp;amp;&amp;amp; cat influxdata-archive.key \
| gpg --dearmor \
| sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the InfluxData repository to the repository list.&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/yum.repos.d/influxdata.repo
[influxdata]
name = InfluxData Repository - Stable
baseurl = https://repos.influxdata.com/stable/\${basearch}/main
enabled = 1
gpgcheck = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata
EOF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安裝 influxdb&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo yum install influxdb2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Updating Subscription Management repositories.
InfluxData Repository - Stable 374 kB/s | 631 kB 00:01
Dependencies resolved.
======================================================================================================================
Package Architecture Version Repository Size
======================================================================================================================
Installing:
influxdb2 x86_64 2.7.12-1 influxdata 47 M
Transaction Summary
======================================================================================================================
Install 1 Package
Total download size: 47 M
Installed size: 115 M
Is this ok [y/N]: y
Downloading Packages:
influxdb2-2.7.12-1.x86_64.rpm 5.9 MB/s | 47 MB 00:08
----------------------------------------------------------------------------------------------------------------------
Total 5.9 MB/s | 47 MB 00:08
InfluxData Repository - Stable 2.7 MB/s | 2.8 kB 00:00
Importing GPG key 0x9FC2F927:
Userid : &amp;#34;InfluxData Package Signing Key &amp;lt;support@influxdata.com&amp;gt;&amp;#34;
Fingerprint: 24C9 75CB A61A 024E E1B6 3178 7C3D 5715 9FC2 F927
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-influxdata
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: influxdb2-2.7.12-1.x86_64 1/1
Installing : influxdb2-2.7.12-1.x86_64 1/1
Running scriptlet: influxdb2-2.7.12-1.x86_64 1/1
Created symlink /etc/systemd/system/influxd.service → /usr/lib/systemd/system/influxdb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/influxdb.service → /usr/lib/systemd/system/influxdb.service.
Verifying : influxdb2-2.7.12-1.x86_64 1/1
Installed products updated.
Installed:
influxdb2-2.7.12-1.x86_64
Complete!&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;5. 啟動並初始化 Influxdb&lt;span class="hx:absolute hx:-mt-20" id="5-啟動並初始化-influxdb"&gt;&lt;/span&gt;
&lt;a href="#5-%e5%95%9f%e5%8b%95%e4%b8%a6%e5%88%9d%e5%a7%8b%e5%8c%96-influxdb" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;啟動 Influxdb 服務並設為開機自動啟動&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl enable --now influxdb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;檢視 Influxdb 服務啟動狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl status influxdb.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;● influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-11-03 11:36:43 CST; 5min ago
Docs: https://docs.influxdata.com/influxdb/
Process: 5474 ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh (code=exited, status=0/SUCCESS)
Main PID: 5475 (influxd)
Tasks: 9 (limit: 48880)
Memory: 59.2M
CPU: 253ms
CGroup: /system.slice/influxdb.service
└─5475 /usr/bin/influxd
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5475]: ts=2025-11-03T03:36:43.499145Z lvl=info msg=&amp;#34;Starting retention policy enforcement service&amp;#34; log_id=0zyxT2tl000 service=retention check_interval=30m
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5475]: ts=2025-11-03T03:36:43.499149Z lvl=info msg=&amp;#34;Starting precreation service&amp;#34; log_id=0zyxT2tl000 service=shard-precreation check_interval=10m advance_period=30m
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5475]: ts=2025-11-03T03:36:43.499456Z lvl=info msg=&amp;#34;Starting query controller&amp;#34; log_id=0zyxT2tl000 service=storage-reads concurrency_quota=1024 initial_memory_bytes_quota_per_query=9223372036854775807 memory_bytes_quota_per_query=9223372036854775807 max_memory_bytes=0 queue_size=1024
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5475]: ts=2025-11-03T03:36:43.500102Z lvl=info msg=&amp;#34;Configuring InfluxQL statement executor (zeros indicate unlimited).&amp;#34; log_id=0zyxT2tl000 max_select_point=0 max_select_series=0 max_select_buckets=0
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5494]: Command &amp;#34;print-config&amp;#34; is deprecated, use theinflux-cli command server-config to display the configuration values from the running server
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5475]: ts=2025-11-03T03:36:43.506157Z lvl=info msg=Starting log_id=0zyxT2tl000 service=telemetry interval=8h
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5475]: ts=2025-11-03T03:36:43.506184Z lvl=info msg=Listening log_id=0zyxT2tl000 service=tcp-listener transport=http addr=:8086 port=8086
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5507]: Command &amp;#34;print-config&amp;#34; is deprecated, use theinflux-cli command server-config to display the configuration values from the running server
Nov 03 11:36:43 influxdb.kubeantony.com influxd-systemd-start.sh[5474]: InfluxDB started
Nov 03 11:36:43 influxdb.kubeantony.com systemd[1]: Started InfluxDB is an open-source, distributed, time series database.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;下載 Influx CLI 套件，並解壓縮執行檔至 &lt;code&gt;/usr/local/bin&lt;/code&gt; 底下&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;wget https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.7.5-linux-amd64.tar.gz
sudo tar -xzf influxdb2-client-2.7.5-linux-amd64.tar.gz \
-C /usr/local/bin \
--strip-components=1 \
./influx
rm influxdb2-client-2.7.5-linux-amd64.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;透過 Influx CLI 初始化 InfluxDB&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;influx setup \
--host http://influxdb.kubeantony.com:8086 \
--username bigred \
--password bigred123 \
--org taroko \
--bucket default \
--force&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;User Organization Bucket
bigred taroko default&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;透過 &lt;code&gt;influx auth create&lt;/code&gt; 命令來建立一個擁有所也權限的 token&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;influx auth create \
--all-access \
--host http://influxdb.kubeantony.com:8086 \
--org taroko \
--token=$(influx auth list --json | jq -r &amp;#39;.[].token&amp;#39;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ID Description Token User Name User ID Permissions
0fbe12e7d9695000 hZgKmE_GBl9Kw0I0dSzQGGdC7Eub1JVq0peNCwanoAk_dYcCwZvh_Kb1Vte0e4-G2rJGO9k4eEtAEOQJaq4SuQ== bigred 0fbe12de55e95000 [read:orgs/3013331d26241ede/authorizations write:orgs/3013331d26241ede/authorizations read:orgs/3013331d26241ede/buckets write:orgs/3013331d26241ede/buckets read:orgs/3013331d26241ede/dashboards write:orgs/3013331d26241ede/dashboards read:/orgs/3013331d26241ede read:orgs/3013331d26241ede/sources write:orgs/3013331d26241ede/sources read:orgs/3013331d26241ede/tasks write:orgs/3013331d26241ede/tasks read:orgs/3013331d26241ede/telegrafs write:orgs/3013331d26241ede/telegrafs read:/users/0fbe12de55e95000 write:/users/0fbe12de55e95000 read:orgs/3013331d26241ede/variables write:orgs/3013331d26241ede/variables read:orgs/3013331d26241ede/scrapers write:orgs/3013331d26241ede/scrapers read:orgs/3013331d26241ede/secrets write:orgs/3013331d26241ede/secrets read:orgs/3013331d26241ede/labels write:orgs/3013331d26241ede/labels read:orgs/3013331d26241ede/views write:orgs/3013331d26241ede/views read:orgs/3013331d26241ede/documents write:orgs/3013331d26241ede/documents read:orgs/3013331d26241ede/notificationRules write:orgs/3013331d26241ede/notificationRules read:orgs/3013331d26241ede/notificationEndpoints write:orgs/3013331d26241ede/notificationEndpoints read:orgs/3013331d26241ede/checks write:orgs/3013331d26241ede/checks read:orgs/3013331d26241ede/dbrp write:orgs/3013331d26241ede/dbrp read:orgs/3013331d26241ede/notebooks write:orgs/3013331d26241ede/notebooks read:orgs/3013331d26241ede/annotations write:orgs/3013331d26241ede/annotations read:orgs/3013331d26241ede/remotes write:orgs/3013331d26241ede/remotes read:orgs/3013331d26241ede/replications write:orgs/3013331d26241ede/replications]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;設定 CLI 連線設定&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;influx config create \
--config-name myinfluxdb \
--host-url http://influxdb.kubeantony.com:8086 \
--org taroko \
--token=$(influx auth list --json | jq -r &amp;#39;.[1].token&amp;#39;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;分別建立多個 bucket&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;influx bucket create --name linux
influx bucket create --name windows
influx bucket create --name solaris
influx bucket create --name aix&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;幫以上這些 buckets 建立擁有可寫權限的 token&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;influx auth create \
--description &amp;#34;Write token for linux, windows, aix AND solaris buckets&amp;#34; \
--write-bucket $(influx bucket list --name linux --json | jq -r &amp;#39;.[0].id&amp;#39;) \
--write-bucket $(influx bucket list --name windows --json | jq -r &amp;#39;.[0].id&amp;#39;) \
--write-bucket $(influx bucket list --name aix --json | jq -r &amp;#39;.[0].id&amp;#39;) \
--write-bucket $(influx bucket list --name solaris --json | jq -r &amp;#39;.[0].id&amp;#39;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ID Description Token User Name User ID Permissions
0fbe16da13a95000 Write token for linux, windows, aix AND solaris buckets YNaFEzTRGd5MnzDerSDRvThgB854WtcmzVTF0x4fzzkYmTpQWtpQYmz3jrMkuEYhLM-oRjrsYev3fHCLpma6Xw== bigred 0fbe12de55e95000[write:orgs/3013331d26241ede/buckets/65e7b5deacab7d4d write:orgs/3013331d26241ede/buckets/229921a56017d92d write:orgs/3013331d26241ede/buckets/ed048508752dc904 write:orgs/3013331d26241ede/buckets/92ddb41e878a8bec]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用以上 token 透過 curl 指令往 buckets 寫入資料做測試&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl --request POST \
&amp;#34;http://influxdb.kubeantony.com:8086/api/v2/write?org=taroko&amp;amp;bucket=windows&amp;amp;precision=ns&amp;#34; \
--header &amp;#34;Authorization: Token $(influx auth list --id 0fbe16da13a95000 --json | jq -r &amp;#39;.token&amp;#39;)&amp;#34; \
--header &amp;#34;Content-Type: text/plain; charset=utf-8&amp;#34; \
--header &amp;#34;Accept: application/json&amp;#34; \
--data-binary &amp;#39;
airSensors,sensor_id=TLM0201 temperature=73.97038159354763,humidity=35.23103248356096,co=0.48445310567793615
airSensors,sensor_id=TLM0202 temperature=75.30007505999716,humidity=35.651929918691714,co=0.5141876544505826
&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認有成功寫入&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;influx query &amp;#39;from(bucket: &amp;#34;windows&amp;#34;)
|&amp;gt; range(start: -1m)
|&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &amp;#34;airSensors&amp;#34;)&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Result: _result
Table: keys: [_start, _stop, _field, _measurement, sensor_id]
_start:time _stop:time _field:string _measurement:string sensor_id:string _time:time _value:float
------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ----------------------------
2025-11-03T06:37:18.367026238Z 2025-11-03T06:38:18.367026238Z co airSensors TLM0201 2025-11-03T06:38:10.405809063Z 0.48445310567793615
Table: keys: [_start, _stop, _field, _measurement, sensor_id]
_start:time _stop:time _field:string _measurement:string sensor_id:string _time:time _value:float
------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ----------------------------
2025-11-03T06:37:18.367026238Z 2025-11-03T06:38:18.367026238Z humidity airSensors TLM0201 2025-11-03T06:38:10.405809063Z 35.23103248356096
Table: keys: [_start, _stop, _field, _measurement, sensor_id]
_start:time _stop:time _field:string _measurement:string sensor_id:string _time:time _value:float
------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ----------------------------
2025-11-03T06:37:18.367026238Z 2025-11-03T06:38:18.367026238Z temperature airSensors TLM0201 2025-11-03T06:38:10.405809063Z 73.97038159354763
Table: keys: [_start, _stop, _field, _measurement, sensor_id]
_start:time _stop:time _field:string _measurement:string sensor_id:string _time:time _value:float
------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ----------------------------
2025-11-03T06:37:18.367026238Z 2025-11-03T06:38:18.367026238Z co airSensors TLM0202 2025-11-03T06:38:10.405809063Z 0.5141876544505826
Table: keys: [_start, _stop, _field, _measurement, sensor_id]
_start:time _stop:time _field:string _measurement:string sensor_id:string _time:time _value:float
------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ----------------------------
2025-11-03T06:37:18.367026238Z 2025-11-03T06:38:18.367026238Z humidity airSensors TLM0202 2025-11-03T06:38:10.405809063Z 35.651929918691714
Table: keys: [_start, _stop, _field, _measurement, sensor_id]
_start:time _stop:time _field:string _measurement:string sensor_id:string _time:time _value:float
------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ------------------------------ ----------------------------
2025-11-03T06:37:18.367026238Z 2025-11-03T06:38:18.367026238Z temperature airSensors TLM0202 2025-11-03T06:38:10.405809063Z 75.30007505999716&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除測試資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;influx delete \
--org taroko \
--bucket windows \
--start 1970-01-01T00:00:00Z \
--stop 2030-01-01T00:00:00Z \
--predicate &amp;#39;_measurement=&amp;#34;airSensors&amp;#34;&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;確認是否清除成功&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;influx query &amp;#39;from(bucket: &amp;#34;windows&amp;#34;)
|&amp;gt; range(start: -1m)
|&amp;gt; filter(fn: (r) =&amp;gt; r._measurement == &amp;#34;airSensors&amp;#34;)&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;應該要看到沒有任何螢幕輸出&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;6. 參考文件&lt;span class="hx:absolute hx:-mt-20" id="6-參考文件"&gt;&lt;/span&gt;
&lt;a href="#6-%e5%8f%83%e8%80%83%e6%96%87%e4%bb%b6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://docs.influxdata.com/influxdb/v2/install/?t=Linux"target="_blank" rel="noopener"&gt;Install InfluxDB OSS v2 - influxdata DOCS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Podman Pod Deploy MinIO: Single-Node Single-Drive</title><link>https://blog.kubeantony.com/archive/data-platform/podman-pod-deploy-minio-single-node-single-drive/</link><pubDate>Thu, 11 Sep 2025 08:08:44 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/podman-pod-deploy-minio-single-node-single-drive/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h1&gt;Preface&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會採取 Step by Step 的方式介紹&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如何透過 Podman 的 Pod 建立 MinIO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Step1: Pull the Latest Stable Image of MinIO&lt;span class="hx:absolute hx:-mt-20" id="step1-pull-the-latest-stable-image-of-minio"&gt;&lt;/span&gt;
&lt;a href="#step1-pull-the-latest-stable-image-of-minio" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;執行以下命令，下載 minio 的 Image&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo podman pull quay.io/minio/minio&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;在 dockerhub 也有 (&lt;code&gt;docker://minio/minio&lt;/code&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2&gt;Step2: Create the Environment Variable File&lt;span class="hx:absolute hx:-mt-20" id="step2-create-the-environment-variable-file"&gt;&lt;/span&gt;
&lt;a href="#step2-create-the-environment-variable-file" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;執行以下命令，建立工作目錄&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;mkdir -p ~/minio/{yaml,data,config,certs/CAs,ssl}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行以下命令，產生一個啟動環境設定檔&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;echo &amp;#39;MINIO_ROOT_USER=&amp;#34;admin&amp;#34;
MINIO_ROOT_PASSWORD=&amp;#34;admin123&amp;#34;
MINIO_VOLUMES=&amp;#34;/data&amp;#34;
MINIO_SERVER_URL=&amp;#34;https://minio.example.com:9090&amp;#34;&amp;#39; &amp;gt; ~/minio/config/config.env&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MINIO_ROOT_USER&lt;/code&gt;，The access key for the root user.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MINIO_ROOT_PASSWORD&lt;/code&gt;，The secret key for the root user.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MINIO_VOLUMES&lt;/code&gt;，The directories or drives the minio server process uses as the storage backend.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MINIO_SERVER_URL&lt;/code&gt;，Specify the Fully Qualified Domain Name (FQDN) the MinIO Console must use for connecting to the MinIO Server. The Console also uses this value for setting the root hostname when generating presigned URLs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2&gt;Step3: Create an Self-Signed Certificate&lt;span class="hx:absolute hx:-mt-20" id="step3-create-an-self-signed-certificate"&gt;&lt;/span&gt;
&lt;a href="#step3-create-an-self-signed-certificate" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;執行腳本建立自簽憑證&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;domain=$2
ip=$3
help()
{
cat &amp;lt;&amp;lt;EOF
Usage: mk [OPTIONS]
Available options:
create create [domain] [IP]
delete delete cert
test test
EOF
exit
}
ssl()
{
openssl genrsa -aes256 -passout pass:password -out ca.key 4096
openssl req -new -x509 -sha256 -days 365 -subj &amp;#34;/C=TW/ST=Taipei/L=Taipei/O=test/OU=lab/CN=example&amp;#34; -passin pass:password -key ca.key -out cacerts.pem
openssl genrsa -out private.key 4096
openssl req -new -sha256 -subj &amp;#34;/CN=example&amp;#34; -key private.key -out cert.csr
echo -e &amp;#34;subjectAltName=DNS:${domain},IP:${ip}\nextendedKeyUsage = serverAuth&amp;#34; &amp;gt; extfile.cnf
openssl x509 -req -sha256 -days 365 -passin pass:password -in cert.csr -CA cacerts.pem -CAkey ca.key -out public.crt -extfile extfile.cnf -CAcreateserial
}
de()
{
rm ca.key cacerts.pem ca.srl cert.csr private.key public.crt extfile.cnf &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ];then
echo &amp;#34;delete all cert ok!&amp;#34;
else
echo &amp;#34;delete cert fail,please check!&amp;#34;
fi
}
ts()
{
openssl verify -CAfile cacerts.pem -verbose public.crt
}
case $1 in
create)
if [ &amp;#34;$#&amp;#34; == &amp;#34;3&amp;#34; ];then
ssl
else
help
fi
;;
delete)
de
;;
test)
ts
;;
*)
help
;;
esac&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cd ~/minio/ssl &amp;amp;&amp;amp; ./mk create minio.example.com 192.168.11.95&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將要給 Minio 用的 私鑰和憑證 拷貝至指定目錄區&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cp private.key public.crt ~/minio/certs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將要給 Minio 用的 CA 憑證 拷貝至指定目錄區&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cp cacerts.pem ~/minio/certs/CAs/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;讓 OS 信任憑證&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo cp cacerts.pem /usr/share/pki/trust/anchors/
$ sudo update-ca-certificates --fresh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Step4: Create and Run the Pod&lt;span class="hx:absolute hx:-mt-20" id="step4-create-and-run-the-pod"&gt;&lt;/span&gt;
&lt;a href="#step4-create-and-run-the-pod" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;編輯 Yaml 檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;nano ~/minio/yaml/minio-podman-pod.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
name: minio
spec:
hostname: minio.example.com
containers:
- name: minio
image: quay.io/minio/minio
command:
- /bin/bash
- -c
- |
/usr/bin/docker-entrypoint.sh minio server /data --console-address &amp;#34;:9090&amp;#34;
env:
- name: MINIO_CONFIG_ENV_FILE
value: /root/.minio/config.env
volumeMounts:
- mountPath: &amp;#34;/data&amp;#34;
name: minio-data-storage
- mountPath: &amp;#34;/root/.minio/&amp;#34;
name: minio-config-storage
- mountPath: &amp;#34;/root/.minio/certs&amp;#34;
name: minio-certs-storage
ports:
- name: api
containerPort: 9000
hostPort: 9000
protocol: TCP
- name: web
containerPort: 9090
hostPort: 9090
protocol: TCP
securityContext:
privileged: true
volumes:
- type: hostPath
name: minio-data-storage
hostPath:
type: DirectoryOrCreate
path: /home/rancher/minio/data
- type: hostPath
name: minio-config-storage
hostPath:
type: DirectoryOrCreate
path: /home/rancher/minio/config
- type: hostPath
name: minio-certs-storage
hostPath:
type: DirectoryOrCreate
path: /home/rancher/minio/certs
restartPolicy: always&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;建立 Pod&lt;span class="hx:absolute hx:-mt-20" id="建立-pod"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-pod" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo podman play kube ~/minio/yaml/minio-podman-pod.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;用 Rootless 建立，會遇到身分驗證的問題，請用 Rootful 建立 Pod&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;檢查是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo podman pod ps&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
86979a9842e9 minio Running 16 seconds ago fb62ef293d6f 2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Step5: Access MinIO Web Console&lt;span class="hx:absolute hx:-mt-20" id="step5-access-minio-web-console"&gt;&lt;/span&gt;
&lt;a href="#step5-access-minio-web-console" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;將 &lt;code&gt;cacerts.pem&lt;/code&gt; 匯入瀏覽器&lt;/li&gt;
&lt;li&gt;連線至 &lt;code&gt;https://192.168.11.95:9090/login&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;帳號 : &lt;code&gt;admin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;密碼 : &lt;code&gt;admin123&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="indent-title-2"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/rJmW17Xh2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Step6: Start Minio on boot&lt;span class="hx:absolute hx:-mt-20" id="step6-start-minio-on-boot"&gt;&lt;/span&gt;
&lt;a href="#step6-start-minio-on-boot" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下 &lt;code&gt;podman generate&lt;/code&gt; 和 &lt;code&gt;podman Quadlet&lt;/code&gt; 擇一執行即可&lt;/p&gt;
&lt;h3&gt;by &lt;code&gt;podman generate&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="by-podman-generate"&gt;&lt;/span&gt;
&lt;a href="#by-podman-generate" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;cd ~/minio
sudo podman generate systemd --name minio --files
sudo cp container-minio-minio.service pod-minio.service /usr/lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now pod-minio.service container-minio-minio.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;by &lt;code&gt;podman Quadlet&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="by-podman-quadlet"&gt;&lt;/span&gt;
&lt;a href="#by-podman-quadlet" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. 建立一個目錄，用來存放 Podman Quadlet 要使用的 Kubernetes YAML 設定檔
sudo mkdir -p /etc/containers/{kube,systemd}
# 2. 將預先定義好的 NFS Pod YAML 檔複製到上述目錄中
sudo cp ~/minio/yaml/minio-podman-pod.yaml /etc/containers/kube/minio-podman-pod.yaml
# 3. 使用 &amp;#34;here document&amp;#34; 的方式，建立一個 systemd 的 Quadlet unit 檔案。
# 這個 .kube 檔案會告訴 systemd 如何使用指定的 YAML 檔來管理一個 Pod。
sudo tee /etc/containers/systemd/minio-pod.kube &amp;gt;/dev/null &amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
[Unit]
Description=Podman Quadlet: Minio Pod (minio-pod)
# 指定此服務依賴於網路連線
Wants=network-online.target
After=network-online.target
[Kube]
# 指定要使用的 Kubernetes YAML 設定檔路徑
Yaml=/etc/containers/kube/minio-podman-pod.yaml
# StopTimeout=120
[Service]
# 設定服務失敗時自動重啟
Restart=always
# 設定重啟間隔為 5 秒
RestartSec=5s
# 設定停止服務的等待時間為 120 秒
TimeoutStopSec=120s
[Install]
# 設定此服務在系統開機後，進入多使用者模式時啟動
WantedBy=multi-user.target
EOF
# 4. 重新載入 systemd 設定，讓系統讀取到剛剛建立的新服務檔案
sudo systemctl daemon-reload
# 5. 設定 minio-pod 服務開機自動啟動，並立即啟動它
sudo systemctl start minio-pod.service
# 6. 檢查 minio-pod 服務目前的運行狀態
sudo systemctl status minio-pod.service&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;參考文章&lt;/h1&gt;&lt;h2&gt;Minio&lt;span class="hx:absolute hx:-mt-20" id="minio"&gt;&lt;/span&gt;
&lt;a href="#minio" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://min.io/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html"target="_blank" rel="noopener"&gt;Deploy MinIO: Single-Node Single-Drive - MinIO Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://min.io/docs/minio/linux/reference/minio-server/minio-server.html#id6"target="_blank" rel="noopener"&gt;MinIO Server - MinIO Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="http://192.241.195.202/docs/minio-server-configuration-guide.html"target="_blank" rel="noopener"&gt;MinIO Server Config Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>OpenZFS</title><link>https://blog.kubeantony.com/archive/data-platform/openzfs/</link><pubDate>Sun, 20 Oct 2024 12:28:30 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/openzfs/</guid><description>
&lt;p&gt;OpenZFS 是 Sun Microsystems 這家公司開發的，&lt;/p&gt;
&lt;h2&gt;如何安裝在 Alpine Linux&lt;span class="hx:absolute hx:-mt-20" id="如何安裝在-alpine-linux"&gt;&lt;/span&gt;
&lt;a href="#%e5%a6%82%e4%bd%95%e5%ae%89%e8%a3%9d%e5%9c%a8-alpine-linux" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo apk add zfs
$ sudo nano /etc/local.d/rc.local.start
.......
modprobe tun
modprobe fuse
mount --make-rshared /
modprobe br_netfilter
modprobe ip_tables
modprobe zfs
echo &amp;#34;$[1024*1024*1024 - 1]&amp;#34; &amp;gt; /sys/module/zfs/parameters/zfs_arc_min
echo &amp;#34;$[1024*1024*1024]&amp;#34; &amp;gt; /sys/module/zfs/parameters/zfs_arc_max
Limit ZFS Memory Usage
ZFS uses 50 % of the host memory for the Adaptive Replacement Cache (ARC) by default. For new installations starting with Proxmox VE 8.1, the ARC usage limit will be set to 10 % of the installed physical memory, clamped to a maximum of 16 GiB. This value is written to /etc/modprobe.d/zfs.conf.
Allocating enough memory for the ARC is crucial for IO performance, so reduce it with caution. As a general rule of thumb, allocate at least 2 GiB Base &amp;#43; 1 GiB/TiB-Storage. For example, if you have a pool with 8 TiB of available storage space then you should use 10 GiB of memory for the ARC.
ZFS also enforces a minimum value of 64 MiB.
$ sudo rc-update add zfs-import default
$ sudo rc-update add zfs-mount default
# To create a striped pool. The newly created pool is mounted at /new-pool. You can select a different mount point using the -m option:
$ sudo zpool create -m /opt/zfs zfs-pool /dev/sdb /dev/sdc
$ sudo reboot
$ df -h /opt/zfs
Filesystem Size Used Avail Use% Mounted on
zfs-pool 1.6T 128K 1.6T 1% /opt/zfs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Minio Architecture</title><link>https://blog.kubeantony.com/archive/data-platform/minio-architecture/</link><pubDate>Sun, 22 Sep 2024 02:49:32 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/minio-architecture/</guid><description>
&lt;h2&gt;認識 MinIO&lt;span class="hx:absolute hx:-mt-20" id="認識-minio"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%8d%e8%ad%98-minio" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;MinIO&lt;/strong&gt; was designed from the beginning to be a fully compatible alternative to &lt;strong&gt;Amazon’s S3 storage API&lt;/strong&gt;. They claim to be the most compatible S3 alternative while also providing comparable performance and scalability.&lt;/p&gt;
&lt;p&gt;MinIO also provides a variety of deployment options. It can run as a native application on most popular architectures and can also be deployed as a containerized application using &lt;strong&gt;Docker&lt;/strong&gt; or &lt;strong&gt;Kubernetes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Additionally, MinIO is &lt;strong&gt;open-source software&lt;/strong&gt;. Organizations are free to use it under the terms of the &lt;strong&gt;AGPLv3 license&lt;/strong&gt;. Just beware that this option comes with no support aside from online documentation and the MinIO user community. &lt;strong&gt;For larger enterprises, paid subscriptions with dedicated support are also available.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/HkhnJeaaR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Minio 有分成 3 個架構&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single-Node Single-Drive (SNSD or “Standalone”)&lt;/strong&gt;
A single MinIO server with a single storage volume or folder. SNSD deployment provides failover protections. Drive-level reliability and failover depends on the underlying storage volume.
SNSD deployments are best suited for evaluation and initial development of applications using MinIO for object storage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Single-Node Multi-Drive (SNMD or “Standalone Multi-Drive”)&lt;/strong&gt;
A single MinIO server with four or more storage volumes. SNMD deployments provide drive-level reliability and failover only.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-Node Multi-Drive (MNMD or “Distributed”)&lt;/strong&gt;
Multiple MinIO servers with at least four drives across all servers. The distributed MNMD topology supports production-grade object storage with drive and node-level availability and resiliency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/SyXFlepaC.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Minio 系統中的多顆硬碟可以分為 Data shard 和 Parity shard 兩個種類&lt;/p&gt;
&lt;h2&gt;連接 MinIO Server&lt;span class="hx:absolute hx:-mt-20" id="連接-minio-server"&gt;&lt;/span&gt;
&lt;a href="#%e9%80%a3%e6%8e%a5-minio-server" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;在 Taroko K8S 管理主機執行以下命令 :
$ mc config host add mios http://miniosnsd.s3-system:9000 minio minio123
.........
Added `mios` successfully.
[註] mios 是連接名稱, 不是 Bucket 名稱
$ mc config host ls
..........
mios
URL : http://miniosnsd.kube-system:9000
AccessKey : minio
SecretKey : minio123
API : s3v4
Path : auto
..........&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;管理 MinIO Bucket&lt;span class="hx:absolute hx:-mt-20" id="管理-minio-bucket"&gt;&lt;/span&gt;
&lt;a href="#%e7%ae%a1%e7%90%86-minio-bucket" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 建立 haha bucket
$ mc mb mios/haha
Bucket created successfully `mios/haha`.
# 透過 dd 命令產生 500 Mib 的檔案
$ dd if=/dev/zero of=/tmp/500M bs=10485760 count=50
50&amp;#43;0 records in
50&amp;#43;0 records out
524288000 bytes (524 MB, 500 MiB) copied, 2.09069 s, 251 MB/s
# 將檔案複製進 Minio
$ mc cp /tmp/500M mios/haha
/tmp/500M: 500.00 MiB / 500.00 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 220.76 MiB/s
# 檢查是否符合預期
$ mc ls mios/haha
[2024-09-22 09:31:18 CST] 500MiB STANDARD 500M
# 刪除 haha bucket 中的檔案
$ mc rm mios/haha/500M
Removed `mios/haha/500M`.
# 刪除 haha bucket
$ mc rb mios/haha
Removed `mios/haha` successfully.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Minio 本身在儲存的時候不是檔案系統作業，有它自己儲存資料的方式，所以像是 MySQL 這類的資料庫需要有檔案系統來寫入資料，它們就沒辦法直接儲存在 Minio 中，要透過 fuse 多墊一層檔案系統，才能讓 MySQL 資料庫的資料儲存在 Minio 中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;fuse 可以用 &lt;a
href="https://github.com/s3fs-fuse/s3fs-fuse"target="_blank" rel="noopener"&gt;s3fs-fuse&lt;/a&gt;，1.93 以前的版本不要用，1.94 有穩住，但還是沒辦法儲存高吞吐量的資料，像 MySQL 如果透過 s3fs 來將資料儲存在 Minio 中，就會遇到 I/O 不足的挑戰，s3fs 比較適合靜態的檔案儲存。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;第二種 fuse 可以選擇 &lt;a
href="https://juicefs.com/zh-cn/"target="_blank" rel="noopener"&gt;JuiceFS&lt;/a&gt;，這專案就會比 s3fs 還要適合儲存高吞吐量的資料。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Ceph 也有自己做出來的檔案系統，讓使用者能將資料寫入 Ceph 的儲存體。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;MinIO &amp;amp; Python&lt;span class="hx:absolute hx:-mt-20" id="minio--python"&gt;&lt;/span&gt;
&lt;a href="#minio--python" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;安裝 Python MinIO 套件&lt;span class="hx:absolute hx:-mt-20" id="安裝-python-minio-套件"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%89%e8%a3%9d-python-minio-%e5%a5%97%e4%bb%b6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.old
$ pip3 install minio
Defaulting to user installation because normal site-packages is not writeable
Collecting minio
Downloading minio-7.2.4-py3-none-any.whl.metadata (6.4 kB)
Collecting certifi (from minio)
Downloading certifi-2024.2.2-py3-none-any.whl.metadata (2.2 kB)
Collecting urllib3 (from minio)
Downloading urllib3-2.2.1-py3-none-any.whl.metadata (6.4 kB)
Collecting argon2-cffi (from minio)
Downloading argon2_cffi-23.1.0-py3-none-any.whl.metadata (5.2 kB)
Collecting pycryptodome (from minio)
............
$ mkdir -p ~/wulin/pyminio&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 python 或 c # &amp;hellip;程式語言將資料寫入 Minio 就可以不用多一層 fuse ，因為這些語言都有提供連接、呼叫和此用 Minio 的 library&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;撰寫 MinIO Python 程式&lt;span class="hx:absolute hx:-mt-20" id="撰寫-minio-python-程式"&gt;&lt;/span&gt;
&lt;a href="#%e6%92%b0%e5%af%ab-minio-python-%e7%a8%8b%e5%bc%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo &amp;#39;from minio import Minio
from minio.error import S3Error
def main():
client = Minio(
&amp;#34;miniosnsd.s3-system:9000&amp;#34;,
secure=False, access_key=&amp;#34;minio&amp;#34;, secret_key=&amp;#34;minio123&amp;#34;
)
found = client.bucket_exists(&amp;#34;mypy&amp;#34;)
if not found:
client.make_bucket(&amp;#34;mypy&amp;#34;)
print(&amp;#34;Created bucket&amp;#34;, &amp;#34;mypy&amp;#34;)
else:
print(&amp;#34;Bucket mypy already exists&amp;#34;)
if __name__ == &amp;#34;__main__&amp;#34;:
try:
main()
except S3Error as exc:
print(&amp;#34;error occurred.&amp;#34;, exc) &amp;#39; &amp;gt;~/wulin/pyminio/mkbucket.py &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;執行 MinIO Python 程式&lt;span class="hx:absolute hx:-mt-20" id="執行-minio-python-程式"&gt;&lt;/span&gt;
&lt;a href="#%e5%9f%b7%e8%a1%8c-minio-python-%e7%a8%8b%e5%bc%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ python ~/wulin/pyminio/mkbucket.py
Created bucket mypy
$ mc ls mios
[2024-03-18 14:57:58 CST] 0B mypy/
$ mc rb mios/mypy
# 離開 Taroko 管理主機
$ exit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;資料儲存在 Minio + K8s 當作資料處理引擎 + Spark 做資料分析 + Iceberg 可以讓資料的欄位異動，以上就能跑出資料智慧平台。&lt;/p&gt;
&lt;h2&gt;JuiceFS &amp;amp; MinIO&lt;span class="hx:absolute hx:-mt-20" id="juicefs--minio"&gt;&lt;/span&gt;
&lt;a href="#juicefs--minio" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;JuiceFS 系統架構&lt;span class="hx:absolute hx:-mt-20" id="juicefs-系統架構"&gt;&lt;/span&gt;
&lt;a href="#juicefs-%e7%b3%bb%e7%b5%b1%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/B1u3RlaaR.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;資料能夠儲存在 Ceph 或 S3 的 Storage
Meta Data (紀錄目錄的名稱、權限，目錄有哪些檔案、它們的權限&amp;hellip;等，或是 Linux 檔案系統特定的權限 sticky bit&amp;hellip;等) 能夠儲存在 Redis 資料庫&lt;/p&gt;
&lt;p&gt;JuiceFS 有提供內建的 FUSE 以檔案系統的方式將資料儲存在 JuiceFS 中，在 K8s 也有提供 CSI Driver 讓 K8s 的 Pods 能夠將資料儲存在 JuiceFS 中&lt;/p&gt;
&lt;h3&gt;Minio YAML&lt;span class="hx:absolute hx:-mt-20" id="minio-yaml"&gt;&lt;/span&gt;
&lt;a href="#minio-yaml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;kind: Service
apiVersion: v1
metadata:
name: miniosnsd
namespace: s3-system
labels:
app: miniosnsd
# annotations:
# metallb.universe.tf/address-pool: mlb-pool
spec:
# allocateLoadBalancerNodePorts: false
# type: LoadBalancer
# loadBalancerIP: 172.22.1.150
selector:
app: miniosnsd
ports:
- name: mclient
protocol: TCP
port: 9000
targetPort: 9000
- name: mconsole
protocol: TCP
port: 9001
targetPort: 9001
---
apiVersion: v1
kind: Pod
metadata:
name: miniosnsd
namespace: s3-system
labels:
app: miniosnsd
spec:
hostname: minioserver
volumes:
- name: miniodata
hostPath:
path: /var/miniosnsd
containers:
- name: minioserver
image: minio/minio
imagePullPolicy: IfNotPresent
volumeMounts:
- name: miniodata
mountPath: /disk
args:
- server
- --console-address
- :9001
- /disk
env:
- name: MINIO_ROOT_USER
value: &amp;#34;minio&amp;#34;
- name: MINIO_ROOT_PASSWORD
value: &amp;#34;minio123&amp;#34;
ports:
- containerPort: 9000
name: mclient
protocol: TCP
hostPort: 9000
- containerPort: 9001
name: mconsole
protocol: TCP
hostPort: 9001
nodeSelector:
app: taroko&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Minio 的資料實際上儲存在 K8s Node 主機的 &lt;code&gt;/var/miniosnsd&lt;/code&gt; 目錄區底下，指定在 &lt;code&gt;/var&lt;/code&gt; 目錄底下的原因是因為 K8s 專用的作業系統，很多 root filesystem 都是 read-only ，但允許 &lt;code&gt;/var&lt;/code&gt; 目錄區能夠做修改&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Btrfs send/receive 實作</title><link>https://blog.kubeantony.com/archive/data-platform/btrfs-send-receive-%E5%AF%A6%E4%BD%9C/</link><pubDate>Fri, 09 Aug 2024 03:19:12 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/btrfs-send-receive-%E5%AF%A6%E4%BD%9C/</guid><description/></item><item><title>實作 Linux LVM Live Migrate Storage</title><link>https://blog.kubeantony.com/archive/data-platform/%E5%AF%A6%E4%BD%9C-linux-lvm-live-migrate-storage/</link><pubDate>Thu, 16 May 2024 08:44:58 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E5%AF%A6%E4%BD%9C-linux-lvm-live-migrate-storage/</guid><description>
&lt;h2&gt;目標 1&lt;span class="hx:absolute hx:-mt-20" id="目標-1"&gt;&lt;/span&gt;
&lt;a href="#%e7%9b%ae%e6%a8%99-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在不停止服務且不停機的情況下，將 LV 的資料從舊的 PV 轉移到新的 PV 上，並測試如果兩個 LV 共用同一個 PV 的情況下，執行兩次 &lt;code&gt;lvconvert&lt;/code&gt; 會不會覆蓋掉第一次的 mirror。&lt;/p&gt;
&lt;h3&gt;開始實作&lt;span class="hx:absolute hx:-mt-20" id="開始實作"&gt;&lt;/span&gt;
&lt;a href="#%e9%96%8b%e5%a7%8b%e5%af%a6%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. 幫一台 VM 新增 6 顆大小同樣都是 10 G 的硬碟，並使用 root SSH 登入 VM
# 2. 做成 PV
$ pvcreate /dev/{sdb,sdc,sdd,sde,sdf,sdg}
Physical volume &amp;#34;/dev/sdb&amp;#34; successfully created.
Physical volume &amp;#34;/dev/sdc&amp;#34; successfully created.
Physical volume &amp;#34;/dev/sdd&amp;#34; successfully created.
Physical volume &amp;#34;/dev/sde&amp;#34; successfully created.
Physical volume &amp;#34;/dev/sdf&amp;#34; successfully created.
Physical volume &amp;#34;/dev/sdg&amp;#34; successfully created.
# 3. 使用 3 個 10G 的硬碟 sdb sdc sdd 創建 vgdata，使用 sde sdf sdg 替換原來的 3 個磁盤。
$ vgcreate vgdata /dev/sdb /dev/sdc /dev/sdd
Volume group &amp;#34;vgdata&amp;#34; successfully created
# 4. lvcreate 創建兩個 lv, 一個 25G，將跨 sdb sdc sdd，一個 4G lv, 在 sdd 上。
$ lvcreate -L 25G -n data vgdata
Logical volume &amp;#34;data&amp;#34; created.
$ lvcreate -L 4G -n share vgdata
Logical volume &amp;#34;share&amp;#34; created.
# 5. 檢查 LV 正在使用的裝置
$ lvs -o lv_name,lv_size,devices
LV LSize Devices
root 99.99g /dev/sda2(0)
data 25.00g /dev/sdb(0)
data 25.00g /dev/sdc(0)
data 25.00g /dev/sdd(0)
share 4.00g /dev/sdd(1282)
# 6. 建立目錄區
$ mkdir -p ~/{data,share}
# 7. 將兩個 LV 格式化成 XFS 檔案系統
$ mkfs.xfs /dev/vgdata/data
$ mkfs.xfs /dev/vgdata/share
# 8. 掛載 LV
$ mount /dev/vgdata/data ~/data/
$ mount /dev/vgdata/share ~/share/
# 9. 每 5 秒產生 1 KB 的檔案到對應的目錄區
$ cat &amp;lt;&amp;lt; EOF &amp;gt; test.sh
#!/bin/bash
# 設定檔案名稱的前綴
prefix=&amp;#34;file&amp;#34;
# 設定檔案的大小（以 KB 為單位）
size=1
# 無窮迴圈，每 5 秒產生一個新檔案
while true; do
# 產生一個隨機的檔案名稱
filename=&amp;#34;\${prefix}_\$(date &amp;#43;%Y%m%d%H%M%S).txt&amp;#34;
# 使用 dd 命令產生指定大小的檔案
dd if=/dev/zero of=/root/data/date-&amp;#34;\$filename&amp;#34; bs=1024 count=\$size &amp;amp;&amp;gt; /dev/null
dd if=/dev/zero of=/root/share/share-&amp;#34;\$filename&amp;#34; bs=1024 count=\$size &amp;amp;&amp;gt; /dev/null
# 等待 5 秒
sleep 5
done
EOF
# 10. 賦予執行權限
$ chmod &amp;#43;x test.sh
# 11. 在背景執行程式
$ ./test.sh &amp;amp;
[1] 1813
# 12. 確認檔案都有產生
$ ls -l data/ share/
data/:
total 4
-rw-r--r-- 1 root root 1024 May 15 15:08 date-file_20240515150800.txt
share/:
total 4
-rw-r--r-- 1 root root 1024 May 15 15:08 share-file_20240515150800.txt
# 13. 此時 extend vgdata
$ vgextend vgdata /dev/sde /dev/sdf /dev/sdg
Volume group &amp;#34;vgdata&amp;#34; successfully extended
# 14. 創建 mirror
$ lvconvert -m 1 /dev/vgdata/data /dev/sde /dev/sdf /dev/sdg
Are you sure you want to convert linear LV vgdata/data to raid1 with 2 images enhancing resilience? [y/n]: y
Logical volume vgdata/data successfully converted.
$ lvconvert -m 1 /dev/vgdata/share /dev/sdg
Are you sure you want to convert linear LV vgdata/share to raid1 with 2 images enhancing resilience? [y/n]: y
Logical volume vgdata/share successfully converted.
# 15. 創建完成後，等待同步狀態完成
$ watch -n 0.1 lvs -o name,copy_percent
LV Cpy%Sync
root
data 100.00
share 100.00
# 16. 拆掉 mirror
$ lvconvert -m 0 /dev/vgdata/share /dev/sdd
Are you sure you want to convert raid1 LV vgdata/share to type linear losing all resilience? [y/n]: y
Logical volume vgdata/share successfully converted.
$ lvconvert -m 0 /dev/vgdata/data /dev/sdb /dev/sdc /dev/sdd
Are you sure you want to convert raid1 LV vgdata/data to type linear losing all resilience? [y/n]: y
Logical volume vgdata/data successfully converted.
# 17. 查看 lv 使用的裝置是否成功更換
$ lvs -o lv_name,lv_size,devices
LV LSize Devices
root 99.99g /dev/sda2(0)
data 25.00g /dev/sde(1)
data 25.00g /dev/sdf(0)
data 25.00g /dev/sdg(0)
share 4.00g /dev/sdg(1284)
&amp;gt; 確保都已經遷移完成。
# 18. 移除不需要的 3 個 PV
$ vgreduce vgdata /dev/sdb /dev/sdc /dev/sdd
Removed &amp;#34;/dev/sdb&amp;#34; from volume group &amp;#34;vgdata&amp;#34;
Removed &amp;#34;/dev/sdc&amp;#34; from volume group &amp;#34;vgdata&amp;#34;
Removed &amp;#34;/dev/sdd&amp;#34; from volume group &amp;#34;vgdata&amp;#34;
# 19. Kill process
$ kill -9 1813
## 忘記 Pid 的話
$ jobs -l
[1]&amp;#43; 1813 Running ./test.sh &amp;amp;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Clean up ENV&lt;span class="hx:absolute hx:-mt-20" id="clean-up-env"&gt;&lt;/span&gt;
&lt;a href="#clean-up-env" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ rm -rf ~/data/* ~/share/* &amp;amp;&amp;amp; \
umount ~/data ~/share &amp;amp;&amp;amp; \
rmdir ~/{data,share} &amp;amp;&amp;amp; \
lvremove -y /dev/vgdata/{data,share} &amp;amp;&amp;amp; \
vgremove vgdata &amp;amp;&amp;amp; \
pvremove /dev/{sdb,sdc,sdd,sde,sdf,sdg}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; Logical volume &amp;#34;data&amp;#34; successfully removed.
Logical volume &amp;#34;share&amp;#34; successfully removed.
Volume group &amp;#34;vgdata&amp;#34; successfully removed
Labels on physical volume &amp;#34;/dev/sdb&amp;#34; successfully wiped.
Labels on physical volume &amp;#34;/dev/sdc&amp;#34; successfully wiped.
Labels on physical volume &amp;#34;/dev/sdd&amp;#34; successfully wiped.
Labels on physical volume &amp;#34;/dev/sde&amp;#34; successfully wiped.
Labels on physical volume &amp;#34;/dev/sdf&amp;#34; successfully wiped.
Labels on physical volume &amp;#34;/dev/sdg&amp;#34; successfully wiped.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;目標 2&lt;span class="hx:absolute hx:-mt-20" id="目標-2"&gt;&lt;/span&gt;
&lt;a href="#%e7%9b%ae%e6%a8%99-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 1. 模擬資料佔用 data 這個 LV 的總空間的 60%
$ dd if=/dev/zero of=/root/data/date-15g bs=1024M count=15 status=progress
16106127360 bytes (16 GB, 15 GiB) copied, 313 s, 51.5 MB/s
15&amp;#43;0 records in
15&amp;#43;0 records out
16106127360 bytes (16 GB, 15 GiB) copied, 312.856 s, 51.5 MB/s
# 2. 模擬資料佔用 share 這個 LV 的總空間的 60%
$ dd if=/dev/zero of=/root/share/date-3g bs=1024M count=3 status=progress
3221225472 bytes (3.2 GB, 3.0 GiB) copied, 68 s, 47.5 MB/s
3&amp;#43;0 records in
3&amp;#43;0 records out
3221225472 bytes (3.2 GB, 3.0 GiB) copied, 67.861 s, 47.5 MB/s
# 3. 檢查是否符合預期
$ du -sh ~/{data,share}
15G /root/data
3.0G /root/share
# 4. 把 PV 加進來
$ vgextend vgdata /dev/sde /dev/sdf /dev/sdg
Volume group &amp;#34;vgdata&amp;#34; successfully extended
# 5. Data LV 做 Mirror
$ lvconvert -m 1 /dev/vgdata/data /dev/sde /dev/sdf /dev/sdg
Are you sure you want to convert linear LV vgdata/data to raid1 with 2 images enhancing resilience? [y/n]: y
Logical volume vgdata/data successfully converted.
# 6. 檢查 PE Free 的空間是否耗盡
$ pvs /dev/{sde,sdf,sdg}
PV VG Fmt Attr PSize PFree
/dev/sde vgdata lvm2 a-- 10.00g 0
/dev/sdf vgdata lvm2 a-- 10.00g 0
/dev/sdg vgdata lvm2 a-- 10.00g 4.98g
# 7. share LV 做 Mirror
$ lvconvert -m 1 /dev/vgdata/share /dev/sde /dev/sdf /dev/sdg
Are you sure you want to convert linear LV vgdata/share to raid1 with 2 images enhancing resilience? [y/n]: y
Logical volume vgdata/share successfully converted.
# 6. 檢查 LV 裝置
$ lvs -o lv_name,lv_size,devices
LV LSize Devices
root 99.99g /dev/sda2(0)
data 25.00g data_rimage_0(0),data_rimage_1(0)
share 4.00g share_rimage_0(0),share_rimage_1(0)
# 7. 檢查 share_rimage 實際上在哪顆 Disk 之下
### 因 sde 和 sdf 這兩個 PV 的 PE 用盡，所以 share 的 LV 只會同步到 sdg 上
$ lsblk
...
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdd 8:48 0 10G 0 disk
├─vgdata-data_rmeta_0 254:3 0 4M 0 lvm
│ └─vgdata-data 254:1 0 25G 0 lvm /root/data
├─vgdata-data_rimage_0 254:4 0 25G 0 lvm
│ └─vgdata-data 254:1 0 25G 0 lvm /root/data
├─vgdata-share_rmeta_0 254:7 0 4M 0 lvm
│ └─vgdata-share 254:2 0 4G 0 lvm /root/share
└─vgdata-share_rimage_0 254:8 0 4G 0 lvm
└─vgdata-share 254:2 0 4G 0 lvm /root/share
...
sdg 8:96 0 10G 0 disk
├─vgdata-data_rimage_1 254:6 0 25G 0 lvm
│ └─vgdata-data 254:1 0 25G 0 lvm /root/data
├─vgdata-share_rmeta_1 254:9 0 4M 0 lvm
│ └─vgdata-share 254:2 0 4G 0 lvm /root/share
└─vgdata-share_rimage_1 254:10 0 4G 0 lvm
└─vgdata-share 254:2 0 4G 0 lvm /root/share
# 8. 確認同步完成
$ lvs -o name,copy_percent
LV Cpy%Sync
root
data 100.00
share 100.00
# 9. 拆 Mirror
$ lvconvert -m 0 /dev/vgdata/share /dev/sdd
Are you sure you want to convert raid1 LV vgdata/share to type linear losing all resilience? [y/n]: y
Logical volume vgdata/share successfully converted.
$ lvconvert -m 0 /dev/vgdata/data /dev/sdb /dev/sdc /dev/sdd
Are you sure you want to convert raid1 LV vgdata/data to type linear losing all resilience? [y/n]: y
Logical volume vgdata/data successfully converted.
# 10. 查看 lv 使用的裝置是否成功更換
$ lvs -o lv_name,lv_size,devices
LV LSize Devices
root 99.99g /dev/sda2(0)
data 25.00g /dev/sde(1)
data 25.00g /dev/sdf(0)
data 25.00g /dev/sdg(0)
share 4.00g /dev/sdg(1284)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;參考資料&lt;span class="hx:absolute hx:-mt-20" id="參考資料"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%83%e8%80%83%e8%b3%87%e6%96%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a
href="https://unix.stackexchange.com/questions/697364/in-what-cases-will-type-mirror-continue-to-be-a-good-choice-is-not-depre"target="_blank" rel="noopener"&gt;In what case(s) will &lt;code&gt;--type mirror&lt;/code&gt; continue to be a good choice / is not deprecated?&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Rancher Backup and Restore RKE2 DownStream Cluster with Minio</title><link>https://blog.kubeantony.com/archive/data-platform/rancher-backup-and-restore-rke2-downstream-cluster-with-minio/</link><pubDate>Fri, 19 Apr 2024 07:17:44 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/rancher-backup-and-restore-rke2-downstream-cluster-with-minio/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h1&gt;Preface&lt;/h1&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會介紹&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如何透過 Rancher 將下游叢集的 RKE2 Cluster 中的 ETCD 資料備份至 MinIO 的 Bucket&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以透過點擊展開以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Prerequest&lt;span class="hx:absolute hx:-mt-20" id="prerequest"&gt;&lt;/span&gt;
&lt;a href="#prerequest" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;一座由 Rancher 建立的 RKE2 Cluster&lt;/li&gt;
&lt;li&gt;已建立好 MinIO
&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://hackmd.io/@QI-AN/Podman-Deploy-MinIO-SNSD"target="_blank" rel="noopener"&gt;建立 MinIO 筆記連結&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;1. 透過 CLI 在 Minio 中建立 Bucket&lt;span class="hx:absolute hx:-mt-20" id="1-透過-cli-在-minio-中建立-bucket"&gt;&lt;/span&gt;
&lt;a href="#1-%e9%80%8f%e9%81%8e-cli-%e5%9c%a8-minio-%e4%b8%ad%e5%bb%ba%e7%ab%8b-bucket" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Step1: 下載管理 MinIO 的工具，並賦予執行權限&lt;span class="hx:absolute hx:-mt-20" id="step1-下載管理-minio-的工具並賦予執行權限"&gt;&lt;/span&gt;
&lt;a href="#step1-%e4%b8%8b%e8%bc%89%e7%ae%a1%e7%90%86-minio-%e7%9a%84%e5%b7%a5%e5%85%b7%e4%b8%a6%e8%b3%a6%e4%ba%88%e5%9f%b7%e8%a1%8c%e6%ac%8a%e9%99%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo curl -o /usr/local/bin/mc https://dl.min.io/client/mc/release/linux-amd64/mc \
&amp;amp;&amp;amp; sudo chmod &amp;#43;x /usr/local/bin/mc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step2: 新增要管理的 MinIO server&lt;span class="hx:absolute hx:-mt-20" id="step2-新增要管理的-minio-server"&gt;&lt;/span&gt;
&lt;a href="#step2-%e6%96%b0%e5%a2%9e%e8%a6%81%e7%ae%a1%e7%90%86%e7%9a%84-minio-server" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mc alias set myminio https://minio.example.com:9000 admin admin123&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;myminio&lt;/code&gt;，可自定義的 Minio Server 名稱&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://minio.example.com:9000&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;MinIO server 的位置 9000 Port 給 API 用的&lt;/li&gt;
&lt;li&gt;9090 Port 給 Web Console&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;admin&lt;/code&gt;，帳號&lt;/li&gt;
&lt;li&gt;&lt;code&gt;admin123&lt;/code&gt;，密碼&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: 需要 DNS 能解析到 MinIO Server 的 Domain Name ( &lt;code&gt;minio.example.com&lt;/code&gt; )，不能直接用本機名稱解析&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Added `myminio` successfully.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step3: create a new bucket for RKE2 Backup&lt;span class="hx:absolute hx:-mt-20" id="step3-create-a-new-bucket-for-rke2-backup"&gt;&lt;/span&gt;
&lt;a href="#step3-create-a-new-bucket-for-rke2-backup" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mc mb myminio/rke2/backup&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mc mb&lt;/code&gt;，creates a new bucket or directory at the specified path.
&lt;ul&gt;
&lt;li&gt;可以把 &lt;code&gt;mc mb&lt;/code&gt; 想像成 &lt;code&gt;mkdir -p&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;myminio/rke2/backup&lt;/code&gt;，在 Minio 儲存 Data 的目錄區下建立 &lt;code&gt;rke2&lt;/code&gt; bucket (其實就是一個目錄)，這個目錄下再建立一個 &lt;code&gt;backup&lt;/code&gt; 目錄&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3&gt;Step4: Upload File to the Bucket&lt;span class="hx:absolute hx:-mt-20" id="step4-upload-file-to-the-bucket"&gt;&lt;/span&gt;
&lt;a href="#step4-upload-file-to-the-bucket" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;建立一個測試檔案&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ touch test&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;upload the file to the rke2 Bucket&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mc cp test myminio/rke2/backup&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查是否 upload 成功&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mc ls data/rke2/backup&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;螢幕輸出 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[2023-08-11 14:36:26 CST] 14B test/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 刪 bucket
$ mc rb --force --dangerous myminio/rke2backup
# 刪 bucket 的所有內容
$ sudo mc rm --recursive --force data/rke2backup/
# 刪除特定時間點的 bucket 裡面的 object
## 把 --dry-run 拿掉就會真的刪除檔案
$ mc version enable myminio/test
$ mc rm --dry-run --recursive --force --versions --rewind &amp;#34;2023.11.15T17:46&amp;#34; myminio/test&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. Rancher 設定 DownStream Cluster 的 ETCD Backup 到 Minio&lt;span class="hx:absolute hx:-mt-20" id="2-rancher-設定-downstream-cluster-的-etcd-backup-到-minio"&gt;&lt;/span&gt;
&lt;a href="#2-rancher-%e8%a8%ad%e5%ae%9a-downstream-cluster-%e7%9a%84-etcd-backup-%e5%88%b0-minio" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;點 &amp;ldquo;Cluster Management&amp;rdquo;&lt;/li&gt;
&lt;li&gt;在要備份的叢集最左邊點選 &amp;ldquo;3 個點菜單&amp;rdquo;&lt;/li&gt;
&lt;li&gt;點 &amp;ldquo;Edit Config&amp;rdquo;&lt;/li&gt;
&lt;li&gt;在 Cluster Configuration 項目下點 &amp;ldquo;Etcd&amp;rdquo;&lt;/li&gt;
&lt;li&gt;點擊 &amp;ldquo;Enable&amp;rdquo; Backup Snapshots to S3&lt;/li&gt;
&lt;li&gt;點擊 &amp;ldquo;Authentication&amp;rdquo; 展開，選擇 &amp;ldquo;Create a S3-Compatible Auth Secret&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Access Key 填入 &lt;code&gt;admin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Secret Key 填入 &lt;code&gt;admin123&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Bucket 輸入 &lt;code&gt;rke2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Folder 輸入 &lt;code&gt;backup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Region 輸入 &lt;code&gt;us-west-2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Endpoint 輸入 &lt;code&gt;minio.example.com:9000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Endpoint CA Cert ，將簽發 MinIO 的 CA 憑證複製貼上 ( Example: &lt;code&gt;cacerts.pem&lt;/code&gt; )&lt;/li&gt;
&lt;li&gt;點擊 &amp;ldquo;Save&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;範例示意圖 :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryK-Yu72n.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Take SnapShot&lt;span class="hx:absolute hx:-mt-20" id="take-snapshot"&gt;&lt;/span&gt;
&lt;a href="#take-snapshot" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;點 &amp;ldquo;Cluster Management&amp;rdquo;&lt;/li&gt;
&lt;li&gt;點擊要備份的 K8S 叢集名稱&lt;/li&gt;
&lt;li&gt;點 &amp;ldquo;Snapshots&amp;rdquo;&lt;/li&gt;
&lt;li&gt;點 &amp;ldquo;SnapShot Now&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;成功畫面&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1DAt_mh3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;Recover a RKE2 cluster (DownStream Cluster) when all control plane nodes have failed&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;關閉 Control plane node (模擬災難)&lt;/li&gt;
&lt;li&gt;在 Rancher UI 刪除 DownStream Cluster 的所有 Control plane 和 etcd node (
Cluster Management &amp;gt; machine &amp;gt; delete)
&lt;blockquote&gt;
&lt;p&gt;如果刪不掉，在 Upstream Cluster 中刪除以下是 對應節點的 object &lt;code&gt;kubectl -n c-m-ksb7fgl9 get nodes.management.cattle.io&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;複製註冊指令 (Role: all)&lt;/li&gt;
&lt;li&gt;在新節點 Run 註冊指令 (IP 跟 Hostname 可不一樣)&lt;/li&gt;
&lt;li&gt;在 Rancher UI 選擇 Snapshot 點擊 Restore&lt;/li&gt;
&lt;li&gt;將 &lt;code&gt;/opt/rke2/bin&lt;/code&gt; 目錄底下 &lt;code&gt;rke2&lt;/code&gt;、&lt;code&gt;rke2-killall.sh&lt;/code&gt; 和 &lt;code&gt;rke2-uninstall.sh&lt;/code&gt; 指令複製到 &lt;code&gt;/usr/local/bin&lt;/code&gt;: &lt;code&gt;sudo cp /opt/rke2/bin/* /usr/local/bin/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;啟動 rke2-server 服務: &lt;code&gt;sudo systemctl enable --now rke2-server.service&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;等 rke2 叢集建好後，做以下設定&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Copy kubectl and other commands, Copy rke2 Command, Setup kubeconfig&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo cp /var/lib/rancher/rke2/bin/* /usr/local/bin/ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp /opt/rke2/bin/* /usr/local/bin/ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp /etc/rancher/rke2/rke2.yaml &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chown &lt;span class="k"&gt;$(&lt;/span&gt;id -u&lt;span class="k"&gt;)&lt;/span&gt;:&lt;span class="k"&gt;$(&lt;/span&gt;id -g&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="13"&gt;
&lt;li&gt;在 Rancher UI Restore&lt;/li&gt;
&lt;li&gt;要記得換 &lt;code&gt;kubeconfig&lt;/code&gt;
&lt;blockquote&gt;
&lt;p&gt;如果 restore 後，沒有錯誤訊息，但 kubectl get node 之後發現還有舊的節點，請執行以下命令刪除 secret:
&lt;code&gt;kubectl -n kube-system delete secret k3m1.node-password.rke2&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Minio Erasure Coding</title><link>https://blog.kubeantony.com/archive/data-platform/minio-erasure-coding/</link><pubDate>Sat, 02 Mar 2024 11:58:16 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/minio-erasure-coding/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;p&gt;MinIO 將 Erasure Coding ( 擦除編碼 ) 作為提供資料 redundancy ( 冗餘 ) 和可用性的核心元件。&lt;/p&gt;
&lt;h2&gt;Erasure Coding Basics&lt;span class="hx:absolute hx:-mt-20" id="erasure-coding-basics"&gt;&lt;/span&gt;
&lt;a href="#erasure-coding-basics" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;MinIO 將同一組 Minio Server 中的硬碟分組為一個或多個大小相同的 &lt;strong&gt;Erasure Sets&lt;/strong&gt; ( 擦除集 )。&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Sy5Exyyaa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;上述部署範例包括 4 個節點，每個節點有 4 個硬碟。 MinIO 初始化時使用由所有 4 個節點的全部 16 個硬碟組成的單一擦除集。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p&gt;MinIO 會在初始化所有 minio server 的時後，決定 &lt;strong&gt;Erasure Sets&lt;/strong&gt; 的最佳數量和大小。 &lt;strong&gt;初始設定後，就不能修改這些設定了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;對於每次寫入操作，MinIO 都會將物件分割成資料碎片和 parity shards ( 奇偶校驗碎片 )。&lt;/p&gt;
&lt;p&gt;Erasure set stripe 大小決定了部署的最大奇偶校驗可能。決定要產生的資料分片和奇偶校驗分片數量的公式是&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;N (ERASURE SET SIZE) = K (DATA) &amp;#43; M (PARITY)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BkM6P1JTp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;上述部署範例具有 16 個硬碟的一個 erasure set，parity 的數量可以支援設定 0 個 ~ 8 個 ( 1/2 的 Erasure Set size )。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p&gt;可以將 parity value ( 奇偶校驗值 ) 設定在 0 到 1/2 個 Erasure Set size 之間。&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryBQJlypa.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;MinIO 使用 Reed-Solomon erasure code 實現，並將 object 分割成多個部分，以分散儲存在 erasure set 上。上面的範例部署使用了 16 顆硬碟的 erasure set，並使用了 &lt;code&gt;EC:4&lt;/code&gt; 的奇偶性檢查。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;使用特定的 parity 設定將物件寫入 MinIO，那麼在更改 parity 值之後，這些物件不會自動更新。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;MinIO 要求至少有 &lt;code&gt;K&lt;/code&gt; 個任何類型的碎片才能&lt;strong&gt;讀取&lt;/strong&gt;一個物件。&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;此處的 K 值構成部署的讀取法定人數。 因此，erasure set 中必須至少有 K 個健康的硬碟才能支援讀取操作。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/HkznHe1pT.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;此部署有一個離線節點，因此僅剩下 12 個健康的硬碟。 物件以 &lt;code&gt;EC:4&lt;/code&gt; 寫入，讀取法定人數為 &lt;code&gt;K=12&lt;/code&gt;。 因此，該物件保持了讀取法定人數，MinIO 可以對其進行讀取操作重建。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MinIO 無法重建失去讀取法定人數的 Object。 此類物件可透過複製重新同步等其他方式復原。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;MinIO 至少需要 &lt;code&gt;K&lt;/code&gt; 個 erasure set 硬碟才能寫入一個物件。&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;此處的 K 值構成部署的寫入法定人數。 因此，erasure set 必須至少有 &lt;code&gt;K&lt;/code&gt; 個可用硬碟上線，以支援寫入操作。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BkbrOeJpp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;此部署有一個離線節點，因此只剩下 12 個健康硬碟。 用戶端使用 &lt;code&gt;EC:4&lt;/code&gt; 奇偶校驗設定寫入一個 Object，其中 erasure set 的寫法定人數為 &lt;code&gt;K=12&lt;/code&gt;。 此 erasure set 維護寫入法定人數，MinIO 可以使用它進行寫入操作。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p&gt;如果奇偶校驗 &lt;code&gt;EC:M&lt;/code&gt; 恰好是 erasure set 大小的 1/2，則寫入法定人數為 &lt;code&gt;K+1&lt;/code&gt;&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;這樣就能防止出現 &amp;ldquo;大腦分裂&amp;rdquo; 的情況，例如網路問題恰好將一半的 erasure set 硬碟與其他硬碟隔離開來。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/S1azol16T.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由於瞬時網路故障，該部署有兩個節點離線。 客戶端以 &lt;code&gt;EC:8&lt;/code&gt; 奇偶校驗設定寫入一個 Object，其中 erasure set 的寫法定人數為 &lt;code&gt;K=9&lt;/code&gt;。 該 erasure set 已失去寫入法定人數，MinIO 無法使用它進行寫入操作。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;K+1&lt;/code&gt; 邏輯確保客戶端不可能兩次寫入同一個物件，每 &amp;ldquo;半 &amp;quot; 個 erasure set 一次。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;對於保持&lt;strong&gt;讀取法定人數&lt;/strong&gt;的 Object，MinIO 可以使用任何資料碎片或奇偶校驗碎片來修復損壞的碎片。&lt;/p&gt;
&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJRfe-kTp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由於硬碟故障，&lt;code&gt;EC:4&lt;/code&gt; 物件遺失了 12 個資料碎片中的 4 個。 由於該物件保持了讀取法定人數，因此 MinIO 可以使用可用的奇偶校驗碎片來修復這些遺失的資料碎片。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p&gt;使用 &lt;a
href="https://min.io/product/erasure-code-calculator"target="_blank" rel="noopener"&gt;MinIO Erasure Coding 計算器&lt;/a&gt; 可以幫你算硬碟和 Minio Server 的容錯。 盡可能使用偶數節點和每個節點的硬碟數量，以簡化拓撲規劃和硬碟/擦除集分佈的概念化。&lt;/p&gt;
&lt;h2&gt;Erasure Parity and Storage Efficiency&lt;span class="hx:absolute hx:-mt-20" id="erasure-parity-and-storage-efficiency"&gt;&lt;/span&gt;
&lt;a href="#erasure-parity-and-storage-efficiency" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;為部署設定奇偶校驗是可用性和總可用儲存之間的平衡。 奇偶校驗值越高，對硬碟或節點故障的復原能力就越強，但可用儲存空間就會減少；而奇偶校驗值越低，儲存空間就會越大，但對硬碟/節點故障的容錯 能力就會降低。 使用 MinIO Erasure Code Calculator 來探討奇偶校驗對計畫群集部署的影響。&lt;/p&gt;
&lt;p&gt;下表列出了由 1 個節點和 16 個 1TB 硬碟組成的 MinIO 部署中不同擦除碼奇偶校驗層級的結果：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parity&lt;/th&gt;
&lt;th&gt;Total Storage&lt;/th&gt;
&lt;th&gt;Storage Ratio&lt;/th&gt;
&lt;th&gt;Minimum Drives for Read Operations&lt;/th&gt;
&lt;th&gt;Minimum Drives for Write Operations&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;EC: 4 (Default)&lt;/td&gt;
&lt;td&gt;12 Tebibytes&lt;/td&gt;
&lt;td&gt;0.750&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EC: 6&lt;/td&gt;
&lt;td&gt;10 Tebibytes&lt;/td&gt;
&lt;td&gt;0.625&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EC: 8&lt;/td&gt;
&lt;td&gt;8 Tebibytes&lt;/td&gt;
&lt;td&gt;0.500&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Bitrot Protection&lt;span class="hx:absolute hx:-mt-20" id="bitrot-protection"&gt;&lt;/span&gt;
&lt;a href="#bitrot-protection" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Bit rot ( 位元腐爛 ) 是硬碟隨機變化造成的無聲資料損壞。 對於數據驅動器來說，它通常是代表數據的電荷或磁性方向衰減的結果。 這些來源可能是停電時的小電流尖峰，也可能是導致位元翻轉的隨機宇宙射線。 由此產生的 &amp;ldquo;位元旋轉&amp;rdquo; 會在資料媒體上造成微妙的錯誤或損壞，而不會觸發監控工具或硬體。&lt;/p&gt;
&lt;p&gt;MinIO 透過優化的 HighwayHash 算法實作，確保它可以即時捕捉並修復損壞的物件。透過在讀取時計算雜湊值，並在寫入時從應用程式、網路到記憶體或硬碟驗證這個雜湊值，從頭到尾保證了資料的完整性。這個實作是為了速度設計的，能夠在單核的 Intel CPU 上達到每秒超過 10 GB 的哈希運算速度。&lt;/p&gt;
&lt;h2&gt;Demo&lt;span class="hx:absolute hx:-mt-20" id="demo"&gt;&lt;/span&gt;
&lt;a href="#demo" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# SSH 連線至 kube-kadm
$ ssh bigred@172.22.1.11 -p 22100
# 測試與 tk8s 連接
$ mc ready tk8s
The cluster is ready
# 檢視 Erasure sets size
$ mc admin info tk8s
● minio-0.minio.kube-system.svc.k1.org:9000
Uptime: 1 hour
Version: 2024-02-26T09:33:48Z
Network: 2/2 OK
Drives: 2/2 OK
Pool: 1
● minio-1.minio.kube-system.svc.k1.org:9000
Uptime: 1 hour
Version: 2024-02-26T09:33:48Z
Network: 2/2 OK
Drives: 2/2 OK
Pool: 1
Pools:
1st, Erasure sets: 1, Drives per erasure set: 4
512 MiB Used, 5 Buckets, 1 Object
4 drives online, 0 drives offline
# 檢視 Minio Erasure code 設定值
$ mc admin config get tk8s storage_class
storage_class standard= rrs=EC:1
&amp;gt; standard (string) set the parity count for default standard storage class e.g. &amp;#34;EC:4&amp;#34;
&amp;gt; rrs (string) set the parity count for reduced redundancy storage class e.g. &amp;#34;EC:2&amp;#34;
# 產生一個 32 MB 的檔案
$ dd if=/dev/zero of=./512MB_File bs=1M count=32
# 匯入 Minio
$ mc cp --storage-class REDUCED_REDUNDANCY 32MB_File tk8s/mysql/
# 確認檔案已匯入
$ mc ls tk8s/mysql
mc ls tk8s/mysql
[2024-03-02 18:32:11 CST] 32MiB REDUCED_REDUNDANCY 32MB_File
# SSH 連線至 tkadm 虛擬主機
$ ssh bigred@192.168.61.128
# 檢視在 k1w1 上 Minio 的檔案
$ talosctl --nodes 172.22.1.15 --talosconfig=/home/bigred/k1/v1.6.5/talosconfig list -l /opt/m0data0/mysql
NODE MODE UID GID SIZE(B) LASTMOD NAME
172.22.1.15 drwxr-xr-x 0 0 24 Mar 1 17:12:30 .
172.22.1.15 drwxr-xr-x 0 0 65 Mar 2 18:32:11 32MB_File
$ talosctl --nodes 172.22.1.15 --talosconfig=/home/bigred/k1/v1.6.5/talosconfig list -l /opt/m0data0/mysql/32MB_File/
NODE MODE UID GID SIZE(B) LASTMOD NAME
172.22.1.15 drwxr-xr-x 0 0 65 Mar 2 18:32:11 .
172.22.1.15 drwxr-xr-x 0 0 34 Mar 2 18:32:11 6dfa0b95-1f51-4a7a-87f4-03a9d23dcd01
172.22.1.15 -rw-r--r-- 0 0 457 Mar 2 18:32:11 xl.meta
$ talosctl --nodes 172.22.1.15 --talosconfig=/home/bigred/k1/v1.6.5/talosconfig list -lH /opt/m0data0/mysql/32MB_File/6dfa0b95-1f51-4a7a-87f4-03a9d23dcd01
NODE MODE UID GID SIZE(B) LASTMOD NAME
172.22.1.15 drwxr-xr-x 0 0 34 B 6 minutes ago .
172.22.1.15 -rw-r--r-- 0 0 5.6 MB 6 minutes ago part.1
172.22.1.15 -rw-r--r-- 0 0 5.6 MB 6 minutes ago part.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Getting started with MinIO storage classes&lt;span class="hx:absolute hx:-mt-20" id="getting-started-with-minio-storage-classes"&gt;&lt;/span&gt;
&lt;a href="#getting-started-with-minio-storage-classes" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;There are two storage classes supported currently, Standard and Reduced Redundancy.&lt;/p&gt;
&lt;h3&gt;Standard storage class&lt;span class="hx:absolute hx:-mt-20" id="standard-storage-class"&gt;&lt;/span&gt;
&lt;a href="#standard-storage-class" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Standard storage class is the default storage class storage class of your deployment. Once set, all the PutObject requests by default will adhere to the data/parity configuration set under standard storage class.&lt;/p&gt;
&lt;h3&gt;Reduced redundancy storage class&lt;span class="hx:absolute hx:-mt-20" id="reduced-redundancy-storage-class"&gt;&lt;/span&gt;
&lt;a href="#reduced-redundancy-storage-class" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Reduced redundancy storage class can be applied to objects of a less critical nature, requiring less replication. To apply this class, set object metadata as X-Amz-Storage-Class:REDUCED_REDUNDANCY in a PutObject (or multi-part) request. This indicates MinIO server to store the corresponding object with data and parity as defined by the reduced redundancy class.&lt;/p&gt;
&lt;h2&gt;參考文件&lt;span class="hx:absolute hx:-mt-20" id="參考文件"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%83%e8%80%83%e6%96%87%e4%bb%b6" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://min.io/docs/minio/linux/operations/concepts/erasure-coding.html"target="_blank" rel="noopener"&gt; Erasure Coding - Minio Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://blog.min.io/configurable-data-and-parity-drives-on-minio-server/"target="_blank" rel="noopener"&gt;Configurable data and parity drives on MinIO server - Minio Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Learning Ceph</title><link>https://blog.kubeantony.com/archive/data-platform/learning-ceph/</link><pubDate>Mon, 15 Jan 2024 13:56:00 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/learning-ceph/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會主要會先認識 Ceph，並介紹 Ceph 如何儲存/讀取資料和管理 Metadata&lt;/p&gt;
&lt;p&gt;可以透過點擊以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;An overview of Ceph&lt;/h1&gt;&lt;h2&gt;What is Ceph?&lt;span class="hx:absolute hx:-mt-20" id="what-is-ceph"&gt;&lt;/span&gt;
&lt;a href="#what-is-ceph" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Ceph 是個由軟體定義的分散式儲存系統有以下幾個特點：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在同一平台下可同時提供 Object Storgae、Block Storage 和 file Storage 等三種不同的服務。&lt;/li&gt;
&lt;li&gt;強大的擴展能力，能提供 PB 甚至 EB 級的資料。&lt;/li&gt;
&lt;li&gt;不受限於任何硬體規格的限制，no vendor lock-in !&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ceph 不像傳統的存儲系統那樣管理區塊 ( block ) 和檔案，而是管理物件（objects），並在此基礎上支援區塊和檔案型存儲。在傳統的檔案型存儲系統中，檔案是透過檔案路徑來定位的；同樣地，在 Ceph 中，物件透過唯一標識符來定位，並儲存在一個 flat addressed space ( 平面地址空間 ) 。物件透過消除元數據操作，提供了無限的擴展性和提升的性能。Ceph 使用一種演算法來動態計算物件應該儲存和檢索的位置。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Ceph 如何管理 Metadata&lt;span class="hx:absolute hx:-mt-20" id="ceph-如何管理-metadata"&gt;&lt;/span&gt;
&lt;a href="#ceph-%e5%a6%82%e4%bd%95%e7%ae%a1%e7%90%86-metadata" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;認識 Metadata&lt;span class="hx:absolute hx:-mt-20" id="認識-metadata"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%8d%e8%ad%98-metadata" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;一個檔案的 Metadata 就是用來 &lt;font color=red&gt;&lt;strong&gt;描述檔案本身的資料，決定了檔案的寫入和讀取位置&lt;/strong&gt;&lt;/font&gt;。如果在傳統的檔案系統中，Metadata 指的就是檔案的存取權限、檔案擁有者或是檔案大小&amp;hellip;等資訊。&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;傳統集中式管理 Metadata&lt;span class="hx:absolute hx:-mt-20" id="傳統集中式管理-metadata"&gt;&lt;/span&gt;
&lt;a href="#%e5%82%b3%e7%b5%b1%e9%9b%86%e4%b8%ad%e5%bc%8f%e7%ae%a1%e7%90%86-metadata" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;在系統中有一個節點專門擔任 Metadata 的管理員，所有 Metadata 都儲存在該節點的儲存設備上，所有客戶端對檔案的請求前，都要先對該 Metadata 管理器請求 Metadata。&lt;/p&gt;
&lt;p&gt;因為集中式管理實作簡單，一致性維護容易，在一定的操作頻繁內可以提供較滿意的效能。缺點是單一失效的問題，若該伺服器失效，整個系統將無法正常運作。而且，當 Metadata 的操作過於頻繁時，集中的 Metadata 管理會成為整個系統的效能瓶頸。&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Ceph 管理 Metadata&lt;span class="hx:absolute hx:-mt-20" id="ceph-管理-metadata"&gt;&lt;/span&gt;
&lt;a href="#ceph-%e7%ae%a1%e7%90%86-metadata" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Ceph 並非遵循傳統的儲存架構來儲存和操作 Metadata，而是引入了一種更新的方式，即 CRUSH 演算法。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CRUSH is stands for Controlled Replication Under Scalable Hashing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;CRUSH 演算法不需要為每個客戶端請求在 Metadata 表中執行查找，而是&lt;font color=red&gt;&lt;strong&gt;依照需求計算資料應寫入的位置或讀取的位置&lt;/strong&gt;&lt;/font&gt;。 透過計算 Metadata，無需管理集中的 Metadata 表。 現代電腦的運算速度快得驚人，可以快速執行 CRUSH 查找；此外，較小的運算負載可以分佈在叢集節點上，充分利用分散式儲存的強大功能。 CRUSH 對元資料進行了清潔管理，這是比傳統儲存系統更好的方式。&lt;/p&gt;
&lt;p&gt;除此之外，CRUSH 還具有獨特的基礎架構感知特性，它&lt;font color=red&gt;&lt;strong&gt;了解基礎設施各組成部分之間的關係，從系統硬碟、pool、node、機架、電源板、switch 和 data center row，到資料中心機房，甚至更遠，這些都是任何基礎設施的 failure zones ( 故障區域 )&lt;/strong&gt;&lt;/font&gt;。 CRUSH 以這樣一種方式儲存資料的主副本及其副本，即使故障區中的幾個元件發生故障，資料也將可用。 使用者可以完全控制在 Ceph 的 CRUSH MAP 中為其基礎架構定義這些故障區，這賦予了 Ceph 管理員高效管理自己環境資料的權力。&lt;/p&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;CRUSH 可使 Ceph 實現資料的自我管理和自我修復&lt;/strong&gt;&lt;/font&gt;。 當故障區中的組件發生故障時，CRUSH 會感知哪個組件發生故障，並確定故障對群集的影響。 不需要任何管理幹預，CRUSH 就能透過對因故障而遺失的資料執行復原操作來實現自我管理和自我修復。 CRUSH 從叢集維護的副本中重新產生資料。 在每個時間點，群集都會有一個以上的資料副本，這些副本將分佈在整個群集中。&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Ceph 設計理念&lt;span class="hx:absolute hx:-mt-20" id="ceph-設計理念"&gt;&lt;/span&gt;
&lt;a href="#ceph-%e8%a8%ad%e8%a8%88%e7%90%86%e5%bf%b5" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Ceph 是在一種架構理念的薰陶下成長起來的，這種理念包括以下特徵：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每個 component 都必須是可擴展的&lt;/li&gt;
&lt;li&gt;不能有單點故障&lt;/li&gt;
&lt;li&gt;解決方案必須以軟體為基礎、開源且適應性強&lt;/li&gt;
&lt;li&gt;Ceph 軟體應在現成的商品硬體上運行&lt;/li&gt;
&lt;li&gt;一切都必須盡可能實現自我管理&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2&gt;Ceph block storage&lt;span class="hx:absolute hx:-mt-20" id="ceph-block-storage"&gt;&lt;/span&gt;
&lt;a href="#ceph-block-storage" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;block storage ( 區塊儲存 ) 是儲存區域網路中使用的一類資料儲存。在這種類型中，資料以 ( blocks ) 區塊的形式儲存在節點上，這就提供了應用程式所需的更大儲存容量，並具有更高的可靠性和效能。 這些作為磁碟區的區塊被映射到作業系統，並受其檔案系統佈局的控制。&lt;/p&gt;
&lt;p&gt;Ceph 引入了一個新協定 RBD，現在稱為 Ceph Block Device。 &lt;strong&gt;RBD 為 Client 端提供可靠、分散式且高效能的區塊儲存硬碟&lt;/strong&gt;。 RBD 區塊在眾多物件上進行條帶化 ( striped ) 處理，這些物件內部分散在整個 Ceph 叢集中，從而為客戶提供了資料可靠性和效能。 RBD 本身支援 Linux 核心。 換句話說，自過去幾年以來，RBD 驅動程式已與 Linux 核心很好地整合在一起。 幾乎所有的 Linux 作業系統都支援 RBD。 除了可靠性和效能，RBD 還提供了企業級功能，如完整和增量快照、精簡配置、寫入時複製複製等。 RBD 還支援記憶體緩存，從而大大提高了效能。&lt;/p&gt;
&lt;p&gt;Ceph RBD 支援最大達 16 exabytes 大小的影像。這些影像可以映射成硬碟，供給裸金屬機器、虛擬機器，或一般主機使用。領先業界的開源虛擬化軟體，如 KVM 和 Zen，完全支援 RBD 並善用其特性供應虛擬機器。其他專有虛擬化軟體，如 VMware 和 Microsoft HyperV，將很快支援。社群中一直有很多工作在進行，以支援這些虛擬化&lt;/p&gt;
&lt;h1&gt;Ceph Architecture&lt;/h1&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryl9o5bJB6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;RADOS&lt;span class="hx:absolute hx:-mt-20" id="rados"&gt;&lt;/span&gt;
&lt;a href="#rados" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;是 Ceph Storage Cluster 的基礎，這一層本身就是一個完整的分散式物件儲存系統。Ceph 的高可靠、高可擴展、高效能、高自動化等等特性本質上也都是由這一層所提供的。&lt;/p&gt;
&lt;p&gt;在 Ceph 中，所有無論什麼類型的資料都以 &lt;strong&gt;RADOS Object&lt;/strong&gt; 的形式存儲。&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Librados&lt;span class="hx:absolute hx:-mt-20" id="librados"&gt;&lt;/span&gt;
&lt;a href="#librados" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;它是一個 Library，應用程式透過它可以直接跟 RADOS 存取資料。&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;RADOS GW&lt;span class="hx:absolute hx:-mt-20" id="rados-gw"&gt;&lt;/span&gt;
&lt;a href="#rados-gw" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;RADOS GW（簡稱 RGW）提供 Object Storage 的服務，透過這個 RESTful gateway 能夠讓 Application 以 Object 的方式儲存資料&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一個是RGW中的對象存儲；一個是Ceph 的後端存儲的對象，這兩個需要區分：
第一個對象面向用戶，是用戶接口能訪問到的對象；
第二個對像是ceph 服務端操作的物件
eg：使用RGW接口，存放一個1G的檔案，在使用者介面看到的就是存放了一個物件（1）；而後透過RGW 分片成多個物件（2）後最終儲存到硬碟上；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h3&gt;RBD&lt;span class="hx:absolute hx:-mt-20" id="rbd"&gt;&lt;/span&gt;
&lt;a href="#rbd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;於 LIBRADOS 之上，RBD ( RADOS Block Device ) 提供區塊設備，主要以虛擬機器為基礎提供虛擬磁碟，可以被映射、格式化，像磁碟一樣掛載到伺服器使用。&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Ceph FS&lt;span class="hx:absolute hx:-mt-20" id="ceph-fs"&gt;&lt;/span&gt;
&lt;a href="#ceph-fs" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;於 LIBRADOS 之上，Ceph FS 提供檔案系統，會透過 Metadata Server 來管理檔案的 Metadata&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ceph Object Storage &amp;amp; Ceph Block Device 不會使用到 Metadata Server。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;h2&gt;Storing Data&lt;span class="hx:absolute hx:-mt-20" id="storing-data"&gt;&lt;/span&gt;
&lt;a href="#storing-data" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;Ceph Storage Cluster 從 Ceph Client 端接收資料，無論是透過 Ceph block storage、Ceph object storage、 Ceph Filesystem 或使用 librados，Ceph Storage Cluster 接收的資料都會儲存為 &lt;strong&gt;RADOS Object&lt;/strong&gt;。每個物件都儲存在 Object Storage Device 之上。Ceph OSD Daemons 控制儲存磁碟機上的讀取、寫入和複製操作。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Object Storage Device”, which refers to a physical or logical storage unit (for example: LUN)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/ryjCI7kHp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Ceph OSD 背景程序將資料儲存為在平面的 Namespace 中的物件。 這意味著物件不儲存在某個目錄底下。 一個物件有一個識別符、二進位資料和由 key/value 組成的 Metadata。&lt;/p&gt;
&lt;p&gt;Ceph Client 端決定物件的 Metadata。 例如，CephFS 使用 metadata 來儲存檔案屬性，例如檔案擁有者、建立日期和最後修改日期。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/r1_zCQyS6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;為了避免使用集中式的方式管理檔案的 Metadata ，Ceph 使用了一種叫做 CRUSH 演算法來完成這點。&lt;/p&gt;
&lt;p&gt;The default object size is 4 MB&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;CRUSH 演算法&lt;span class="hx:absolute hx:-mt-20" id="crush-演算法"&gt;&lt;/span&gt;
&lt;a href="#crush-%e6%bc%94%e7%ae%97%e6%b3%95" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;讓 Client 端和 Ceph OSD Daemon 可以計算出要把 Object 放在哪一台 Node 的哪一顆硬碟上，Client 端可以自行決定要如何處理資料或從哪裡取得。&lt;/p&gt;
&lt;p&gt;更準確的定義 :&lt;/p&gt;
&lt;p&gt;只要給定整個 Ceph Storage Cluster 的結構資訊和 CRUSH Map，Client 端就可以計算出 Object 要到哪個儲存節點來儲存或讀取資料。&lt;/p&gt;
&lt;p&gt;整個 Ceph Storage Cluster 的結構資訊在 Ceph 中的術語，被稱為 Cluster map。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Ceph 正常 IO 流程&lt;span class="hx:absolute hx:-mt-20" id="ceph-正常-io-流程"&gt;&lt;/span&gt;
&lt;a href="#ceph-%e6%ad%a3%e5%b8%b8-io-%e6%b5%81%e7%a8%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/SJ9iqIyB6.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;client 連接上 monitor，取得 Cluster map 資訊。&lt;/li&gt;
&lt;li&gt;client 讀寫 io 根據 crshmap 演算法請求對應的主osd資料節點。&lt;/li&gt;
&lt;li&gt;主osd資料節點同時寫入另外兩個副本節點資料。&lt;/li&gt;
&lt;li&gt;等待主節點以及另外兩個副本節點寫完資料狀態。&lt;/li&gt;
&lt;li&gt;主節點及副本節點寫入狀態都成功後，回傳給client，io寫入完成。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Ceph RBD IO 流程&lt;span class="hx:absolute hx:-mt-20" id="ceph-rbd-io-流程"&gt;&lt;/span&gt;
&lt;a href="#ceph-rbd-io-%e6%b5%81%e7%a8%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/BJH4WLJHp.png" alt="image" loading="lazy" /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Client 端建立一個 pool，需要為這個 pool 指定 pg 的數量。&lt;/li&gt;
&lt;li&gt;建立 pool/image rbd 設備進行掛載。&lt;/li&gt;
&lt;li&gt;使用者寫入的資料進行切塊，每個區塊的大小預設為 4MB。&lt;/li&gt;
&lt;li&gt;跟將每個 object 透過 pg 進行副本位置的分配。&lt;/li&gt;
&lt;li&gt;pg 根據 CRUSH 演算法會找 3 個 osd，把這個 object 分別保存在這三個 osd 上。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h3&gt;實作&lt;span class="hx:absolute hx:-mt-20" id="實作"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="indent-title-1"&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## list objects in CPA pool
$ rados -p CPA ls
## 查看 Object 的大小
$ rados -p CPA stat rbd_data.3f9c67cf08a29.00000000000000de
## List rbd images.
$ rbd ls CPA
## 查看 RBD Image 的詳細資訊
$ rbd info CPA/vm-100-disk-0
## 算 vm-100-disk-0 被切成幾個 object
$ rados -p CPA ls | grep &amp;#39;rbd_data.3fe346edd0fa9*&amp;#39; | wc -l&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;12/09&lt;span class="hx:absolute hx:-mt-20" id="1209"&gt;&lt;/span&gt;
&lt;a href="#1209" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ceph fs ls
$ ceph fs set testfs down true
$ ceph fs status
$ ceph fs rm testfs --yes-i-really-mean-it
$ ceph osd pool ls
$ ceph osd pool rm testfs_data testfs_data --yes-i-really-really-mean-it
$ ceph osd pool rm testfs_metadata testfs_metadata --yes-i-really-really-mean-it&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Oracle MySQL NDB 實作</title><link>https://blog.kubeantony.com/archive/data-platform/oracle-mysql-ndb-%E5%AF%A6%E4%BD%9C/</link><pubDate>Sun, 22 Oct 2023 03:21:02 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/oracle-mysql-ndb-%E5%AF%A6%E4%BD%9C/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;h2&gt;Preface&lt;span class="hx:absolute hx:-mt-20" id="preface"&gt;&lt;/span&gt;
&lt;a href="#preface" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="indent-title-1"&gt;
&lt;p&gt;本篇文章會主要會介紹如何，&lt;/p&gt;
&lt;p&gt;可以透過點擊以下目錄，選擇想看的內容，跳轉至特定章節&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Oracle MySQL NDB 運作架構圖&lt;span class="hx:absolute hx:-mt-20" id="oracle-mysql-ndb-運作架構圖"&gt;&lt;/span&gt;
&lt;a href="#oracle-mysql-ndb-%e9%81%8b%e4%bd%9c%e6%9e%b6%e6%a7%8b%e5%9c%96" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://hackmd.io/_uploads/ByWmSzfGp.png" alt="" loading="lazy" /&gt;&lt;/p&gt;</description></item><item><title>MySQL_CDC (Change Data Capture)</title><link>https://blog.kubeantony.com/archive/data-platform/mysql-cdc-change-data-capture/</link><pubDate>Thu, 24 Aug 2023 07:35:04 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/mysql-cdc-change-data-capture/</guid><description>
&lt;hr&gt;
&lt;h2&gt;在 Alpine Linux 安裝 MySQL 本尊&lt;span class="hx:absolute hx:-mt-20" id="在-alpine-linux-安裝-mysql-本尊"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-alpine-linux-%e5%ae%89%e8%a3%9d-mysql-%e6%9c%ac%e5%b0%8a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo apk update
$ sudo apk upgrade
$ sudo apk add mysql mysql-client&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;修改 bash script: mysql_install_db&lt;span class="hx:absolute hx:-mt-20" id="修改-bash-script-mysql_install_db"&gt;&lt;/span&gt;
&lt;a href="#%e4%bf%ae%e6%94%b9-bash-script-mysql_install_db" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;
## 確認 mysql_install_db 的位置
$ which mysql_install_db
/usr/bin/mysql_install_db
$ echo $PATH
/home/bigred/bin:/home/bigred/dt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
前面的權限是777
$ ls -al /usr/bin/mysql_install_db
lrwxrwxrwx 1 root root 18 Jun 1 20:45 /usr/bin/mysql_install_db -&amp;gt; mariadb-install-db
$ which mariadb-install-db
/usr/bin/mariadb-install-db
$ ls -al /usr/bin/mariadb-install-db
-rwxr-xr-x 1 root root 22030 May 21 23:35 /usr/bin/mariadb-install-db
$ sudo nano /usr/bin/mysql_install_db
…
if false
# if test -n &amp;#34;$user“
then
if test -z &amp;#34;$srcdir&amp;#34; -a &amp;#34;$in_rpm&amp;#34; -eq 0
…
第 492 行&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;注意&lt;code&gt;/usr/bin/mysql_install_db&lt;/code&gt;它是軟連結，不能亂改它的名字&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;在 Alpine Linux 創建一般使用者帳號&lt;span class="hx:absolute hx:-mt-20" id="在-alpine-linux-創建一般使用者帳號"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-alpine-linux-%e5%89%b5%e5%bb%ba%e4%b8%80%e8%88%ac%e4%bd%bf%e7%94%a8%e8%80%85%e5%b8%b3%e8%99%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo adduser -s /bin/bash -h /home/rbean -D rbean
$ echo -e &amp;#34;rbean\nrbean\n&amp;#34; | sudo passwd rbean
$ exit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;建立 MySQL 分身&lt;span class="hx:absolute hx:-mt-20" id="建立-mysql-分身"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-mysql-%e5%88%86%e8%ba%ab" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 登入使用帳號 rbean
$ mkdir /home/rbean/{lib,my.cnf.d,mysqld}
$ mkdir ~/lib/mysqla
$ tree .
.
├── lib
│   └── mysqla
├── my.cnf.d
└── mysqld
$ cp /etc/my.cnf.d/mariadb-server.cnf ~/my.cnf.d/mariadb-servera.cnf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;編輯MySQL 分身設定檔&lt;span class="hx:absolute hx:-mt-20" id="編輯mysql-分身設定檔"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%a8%e8%bc%afmysql-%e5%88%86%e8%ba%ab%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano ~/my.cnf.d/mariadb-servera.cnf
......
[mysqld]
skip-networking=0
user=rbean
pid-file=/home/rbean/mysqld/mysqlda.pid
socket=/home/rbean/mysqld/mysqlda.sock
port=3311
datadir=/home/rbean/lib/mysqla
character-set-client-handshake=FALSE
collation-server=utf8mb4_unicode_ci
init-connect=&amp;#39;SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci&amp;#39;
character-set-server=utf8mb4
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
......&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;skip-networking=0&lt;/code&gt; ，允許使用者透過 Internet Domain Socket 登入，其實就是遠端連線&lt;/li&gt;
&lt;li&gt;&lt;code&gt;user=rbean&lt;/code&gt; ，指定 mysql 的使用者 rbean&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pid-file=/home/rbean/mysqld/mysqlda.pid&lt;/code&gt; ，避免重複啟用 mysql&lt;/li&gt;
&lt;li&gt;&lt;code&gt;socket=/home/rbean/mysqld/mysqlda.sock&lt;/code&gt; ，設定分身的 Unix Domain Socket 的位置&lt;/li&gt;
&lt;li&gt;&lt;code&gt;port=3311&lt;/code&gt; ， 本尊 port 號：3306 ，分身 port 號：3311 ，其他分身 3312 ，依此類推&lt;/li&gt;
&lt;li&gt;&lt;code&gt;datadir=/home/rbean/lib/mysqla&lt;/code&gt; ， mysql 運作儲存的目錄&lt;/li&gt;
&lt;li&gt;&lt;code&gt;character-set-client-handshake=FALSE&lt;/code&gt; ，不使用系統預設編碼 utf8mb4_general_ci&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collation-server=utf8mb4_unicode_ci&lt;/code&gt; ，使用指定的編碼 utf8mb4_unicode_ci&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;建立 MySQL 分身&lt;span class="hx:absolute hx:-mt-20" id="建立-mysql-分身-1"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-mysql-%e5%88%86%e8%ba%ab-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql_install_db --user=rbean --datadir=/home/rbean/lib/mysqla/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Installing MariaDB/MySQL system tables in &amp;#39;/home/rbean/lib/mysqla/&amp;#39; ...
OK
...以下省略&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;啟用 MySQL 分身&lt;span class="hx:absolute hx:-mt-20" id="啟用-mysql-分身"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e7%94%a8-mysql-%e5%88%86%e8%ba%ab" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;命令：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysqld_safe --defaults-file=/home/rbean/my.cnf.d/mariadb-servera.cnf &amp;amp;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[1] 8267
rbean@alp:~$ 220602 10:34:54 mysqld_safe Logging to &amp;#39;/home/rbean/lib/mysqla/alp.err&amp;#39;.
220602 10:34:54 mysqld_safe Starting mariadbd daemon with databases from /home/rbean/lib/mysqla&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果爆錯可以檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 成功的話，mysqld 目錄下會有 mysqla.pid 和 mysqlda.sock 兩個檔案
$ tree -L 2
.
├── lib
│ └── mysqla
├── my.cnf.d
│ └── mariadb-servera.cnf
└── mysqld
├── mysqlda.pid
└── mysqlda.sock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;使用 MySQL 分身&lt;span class="hx:absolute hx:-mt-20" id="使用-mysql-分身"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%bf%e7%94%a8-mysql-%e5%88%86%e8%ba%ab" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql -S ~/mysqld/mysqlda.sock
MariaDB [(none)]&amp;gt; grant all on *.* to &amp;#39;root&amp;#39;@&amp;#39;localhost&amp;#39; identified by &amp;#39;rbean&amp;#39; with grant option;
MariaDB [(none)]&amp;gt; flush privileges;
MariaDB [(none)]&amp;gt; exit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;設定 MySQL 分身安全性&lt;span class="hx:absolute hx:-mt-20" id="設定-mysql-分身安全性"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a-mysql-%e5%88%86%e8%ba%ab%e5%ae%89%e5%85%a8%e6%80%a7" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql_secure_installation -S ~/mysqld/mysqlda.sock
出現以下問題：
1、Enter current password for root (enter for none):
（輸入密碼）
2、Switch to unix_socket authentication [Y/n]
（ n，不切換到 unix_socket 身份驗證）
3、Change the root password? [Y/n]
（ n，不更換 root 密碼）
4、Remove anonymous users? [Y/n]
（ Y，移除匿名登入）
5、Disallow root login remotely? [Y/n]
（ Y，移除遠端 root 登入權限）
6、Remove test database and access to it? [Y/n]
（ Y，移除測試資料庫及帳號）
7、Reload privilege tables now? [Y/n]
（ Y，重新載入權限表）&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢查 MySQL 分身套件版本與服務運行狀態&lt;span class="hx:absolute hx:-mt-20" id="檢查-mysql-分身套件版本與服務運行狀態"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%9f%a5-mysql-%e5%88%86%e8%ba%ab%e5%a5%97%e4%bb%b6%e7%89%88%e6%9c%ac%e8%88%87%e6%9c%8d%e5%8b%99%e9%81%8b%e8%a1%8c%e7%8b%80%e6%85%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;命令：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysqladmin version -p -S ~/mysqld/mysqlda.sock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Enter password: rbean
mysqladmin Ver 9.1 Distrib 10.6.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Server version 10.6.8-MariaDB
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /home/rbean/mysqld/mysqlda.sock
Uptime: 43 min 13 sec
Threads: 1 Questions: 19 Slow queries: 0 Opens: 21 Open tables: 14 Queries per second avg: 0.007&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;登入 MySQL 分身&lt;span class="hx:absolute hx:-mt-20" id="登入-mysql-分身"&gt;&lt;/span&gt;
&lt;a href="#%e7%99%bb%e5%85%a5-mysql-%e5%88%86%e8%ba%ab" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql -u root -prbean -h 127.0.0.1 -P 3311&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;注意 &lt;code&gt;-P&lt;/code&gt; ，的 P 要大寫&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;查看當前使用者
MariaDB [(none)]&amp;gt; select current_user();
&amp;#43;----------------&amp;#43;
| current_user() |
&amp;#43;----------------&amp;#43;
| root@localhost |
&amp;#43;----------------&amp;#43;
查看所有 Database
MariaDB [(none)]&amp;gt; show databases;
&amp;#43;--------------------&amp;#43;
| Database |
&amp;#43;--------------------&amp;#43;
| information_schema |
| mysql |
| performance_schema |
| sys |
&amp;#43;--------------------&amp;#43;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢視 MySQL 分身相關使用資訊&lt;span class="hx:absolute hx:-mt-20" id="檢視-mysql-分身相關使用資訊"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-mysql-%e5%88%86%e8%ba%ab%e7%9b%b8%e9%97%9c%e4%bd%bf%e7%94%a8%e8%b3%87%e8%a8%8a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; select user,host,select_priv,insert_priv from mysql.user;
&amp;#43;-------------&amp;#43;-----------&amp;#43;-------------&amp;#43;-------------&amp;#43;
| User | Host | Select_priv | Insert_priv |
&amp;#43;-------------&amp;#43;-----------&amp;#43;-------------&amp;#43;-------------&amp;#43;
| mariadb.sys | localhost | N | N |
| root | localhost | Y | Y |
| rbean | localhost | Y | Y |
&amp;#43;-------------&amp;#43;-----------&amp;#43;-------------&amp;#43;-------------&amp;#43;
3 rows in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;What’s transaction?&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;transaction
&lt;ul&gt;
&lt;li&gt;是資料庫執行過程中的一個「邏輯單位」&lt;/li&gt;
&lt;li&gt;一個交易：多個對資料庫操作的行為&lt;/li&gt;
&lt;li&gt;一個交易有兩種可能的結局：
&lt;ul&gt;
&lt;li&gt;全部執行成功 - &amp;gt; &lt;code&gt;commit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;全部不執行 - &amp;gt; &lt;code&gt;rollback&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Transaction ACID
&lt;ul&gt;
&lt;li&gt;原子性（Atomicity）： 整個交易（transaction）若有其中一個操作沒有完成，就會回滾（Rollback）到交易開始前的狀態，如同從未執行過。&lt;/li&gt;
&lt;li&gt;一致性（Consistency）： 資料庫從一個有效狀態，經過交易後變成另一個有效狀態。&lt;/li&gt;
&lt;li&gt;隔離性（Isolation）： 確保所有交易在進行時，是互不干擾的。&lt;/li&gt;
&lt;li&gt;持續性（Durability）： 交易處理結束後，對數據的修改就是永久的，即便系統故障也不會丟失。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Transaction 實作&lt;span class="hx:absolute hx:-mt-20" id="transaction-實作"&gt;&lt;/span&gt;
&lt;a href="#transaction-%e5%af%a6%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; create database bank;
MariaDB [(none)]&amp;gt; use bank;
MariaDB [bank]&amp;gt; create table if not exists account(
ID int auto_increment not null,
customer_name varchar(200) not null,
current_money decimal(7,2) not null,
primary key(ID)
);
MariaDB [bank]&amp;gt; show create table account;
&amp;#43;---------&amp;#43;--------------------------------------------------------&amp;#43;
| Table | Create Table |
&amp;#43;---------&amp;#43;--------------------------------------------------------&amp;#43;
| account | CREATE TABLE `account` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`customer_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`current_money` decimal(7,2) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
&amp;#43;---------&amp;#43;--------------------------------------------------------&amp;#43;
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;新增規則：&lt;code&gt;constraint check_current_money check(current_money &amp;gt;= 1)&lt;/code&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [bank]&amp;gt; alter table account add constraint check_current_money check(current_money &amp;gt;= 1);
MariaDB [bank]&amp;gt; show create table account;
&amp;#43;---------&amp;#43;--------------------------------------------------------&amp;#43;
| Table | Create Table |
&amp;#43;---------&amp;#43;--------------------------------------------------------&amp;#43;
| account | CREATE TABLE `account` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`customer_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
`current_money` decimal(7,2) NOT NULL,
PRIMARY KEY (`ID`),
CONSTRAINT `check_current_money` CHECK (`current_money` &amp;gt;= 1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
&amp;#43;---------&amp;#43;--------------------------------------------------------&amp;#43;
1 row in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;測試新增資料是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [bank]&amp;gt; insert into account(customer_name, current_money) values (&amp;#39;Mike&amp;#39;, 1500),(&amp;#39;Amber&amp;#39;, 1);
Query OK, 2 rows affected (0.001 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [bank]&amp;gt; update account set current_money = current_money - 1500 where customer_name = &amp;#39;Mike&amp;#39;;
ERROR 4025 (23000): CONSTRAINT `check_current_money` failed for `bank`.`account`
MariaDB [bank]&amp;gt; insert into account(customer_name, current_money) values (&amp;#39;Amber2&amp;#39;, 0.55);
ERROR 4025 (23000): CONSTRAINT `check_current_money` failed for `bank`.`account`&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;Transaction 實作2&lt;span class="hx:absolute hx:-mt-20" id="transaction-實作2"&gt;&lt;/span&gt;
&lt;a href="#transaction-%e5%af%a6%e4%bd%9c2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano tranfer.sql
DELIMITER //
CREATE PROCEDURE transfer(IN name_a VARCHAR(200), IN name_b VARCHAR(200), IN total DECIMAL(7,2))
BEGIN
DECLARE exit handler for sqlexception BEGIN ROLLBACK; END;
DECLARE exit handler for sqlwarning BEGIN ROLLBACK; END;
START TRANSACTION;
update account set current_money = current_money &amp;#43; total
where customer_name = name_b;
update account set current_money = current_money - total
where customer_name = name_a;
COMMIT;
END //
DELIMITER ;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;DELIMITER //
CREATE PROCEDURE transfer_test(IN name_a VARCHAR(200), IN name_b VARCHAR(200), IN total DECIMAL(7,2))
BEGIN
START TRANSACTION;
update account set current_money = current_money &amp;#43; total
where customer_name = name_b;
update account set current_money = current_money - total
where customer_name = name_a;
COMMIT;
END //
DELIMITER ;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;WHAT’S BINLOG&lt;/h1&gt;&lt;p&gt;Binary log :&lt;font color=red&gt; &lt;strong&gt;存放資料庫更改的事件，例如創建資料表或修改資料表的資料。&lt;/strong&gt;&lt;/font&gt;
DML (Data Manipulation Language): INSERT / UPDATE / DELETE
DDL (Data Definition Language): CREATE / ALTER / DROP&lt;/p&gt;
&lt;p&gt;兩個重要用途&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;資料庫備援（高可用性）Replication&lt;/li&gt;
&lt;li&gt;某個時間的資料還原 Certain data recovery operations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;BINLOG TYPE&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Statement-based logging (SBL)
&lt;ul&gt;
&lt;li&gt;基於 SQL 語句紀錄&lt;/li&gt;
&lt;li&gt;資料量小&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Row-based logging (RBL)
&lt;ul&gt;
&lt;li&gt;基於資料行紀錄，紀錄每個值的變動&lt;/li&gt;
&lt;li&gt;資料量大&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mixed-format logging
&lt;ul&gt;
&lt;li&gt;混合模式&lt;/li&gt;
&lt;li&gt;會對每一個 SQL 語句判斷，做合適的紀錄方式 (SBL or RBL)&lt;/li&gt;
&lt;li&gt;資料量適中&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;啟用 BINLOG&lt;span class="hx:absolute hx:-mt-20" id="啟用-binlog"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e7%94%a8-binlog" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;檢查 BINLOG 設定&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show variables like &amp;#39;%bin%&amp;#39;;
&amp;#43;-----------------------------------------&amp;#43;----------------------&amp;#43;
| Variable_name | Value |
&amp;#43;-----------------------------------------&amp;#43;----------------------&amp;#43;
| bind_address | |
| ... | |
| binlog_format | MIXED |
| ... | |
| log_bin | OFF |
&amp;#43;-----------------------------------------&amp;#43;----------------------&amp;#43;
30 rows in set (0.001 sec)
MariaDB [(none)]&amp;gt; exit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;停用 MySQL 分身&lt;/p&gt;
&lt;p&gt;命令：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysqladmin -S /home/rbean/mysqld/mysqlda.sock shutdown&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令結果：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[1]&amp;#43; Done mysqld_safe --defaults-file=/home/rbean/my.cnf.d/mariadb-servera.cnf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 MySQL server 設定檔，啟用 Binlog&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano /home/rbean/my.cnf.d/mariadb-servera.cnf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新增以下 6 行命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;……
skip-bind-address
server_id=1
log_bin=/home/rbean/lib/mysqla/bin-log
log_bin_index=/home/rbean/lib/mysqla/mysql-bin.index
binlog_format=row
expire_logs_days=0
……&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;skip-bind-address&lt;/code&gt; ， mariadb 預設會把服務綁到127.0.0.1 上。 所以我們需要設定不綁定。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;server_id = 0001 &lt;/code&gt;， 指定一個叢集內的 MySQL 伺服器 ID，如果做資料庫叢集那麼必須全域性唯一，一般來說不推薦 指定server_id 等於 1。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log_bin = /home/rbean/lib/mysqla/bin-log&lt;/code&gt;， 開啟 Binlog 並寫明存放日誌的位置與檔案名稱以bin-log 開頭。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log_bin_index = /var/lib/mysql/mysql-bin.index&lt;/code&gt; ， 指定索引檔案的位置。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;binlog_format = ROW&lt;/code&gt; ，設定方面提到過的三種 Binlog 的日誌模式。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expire_logs_days = 0 ，Default 0 &lt;/code&gt;, 不自動刪除；刪除超出這個變數保留期之前的全部日誌被刪除&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;再次啟動 MySQL 分身&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysqld_safe --defaults-file=/home/rbean/my.cnf.d/mariadb-servera.cnf &amp;amp;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[mysqld]
skip-networking=0
user=rbean
pid-file=/home/rbean/mysqld/mysqlda.pid
socket=/home/rbean/mysqld/mysqlda.sock
port=3311
datadir=/home/rbean/lib/mysqla
character-set-client-handshake=FALSE
collation-server=utf8mb4_unicode_ci
init-connect=&amp;#39;SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci&amp;#39;
character-set-server=utf8mb4
skip-bind-address
server_id=1
log_bin=/home/rbean/lib/mysqla/bin-log
log_bin_index=/home/rbean/lib/mysqla/mysql-bin.index
binlog_format=row
expire_logs_days=0
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;查看 BINLOG&lt;span class="hx:absolute hx:-mt-20" id="查看-binlog"&gt;&lt;/span&gt;
&lt;a href="#%e6%9f%a5%e7%9c%8b-binlog" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql -uroot -prbean -h 127.0.0.1 -P 3311 -e &amp;#34;show variables like &amp;#39;%bin%&amp;#39;;&amp;#34;
&amp;#43;-----------------------------------------&amp;#43;----------------------&amp;#43;
| Variable_name | Value |
&amp;#43;-----------------------------------------&amp;#43;----------------------&amp;#43;
| bind_address | |
| ... | |
| binlog_format | MIXED |
| ... | |
| log_bin | ON |
&amp;#43;-----------------------------------------&amp;#43;----------------------&amp;#43;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查目前儲存的 Binlog 檔案以及 Postion&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql -uroot -prbean -h 127.0.0.1 -P 3311 -e &amp;#34;show master status;&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;Change Data Capture (Master-Slave Replication)&lt;/h1&gt;&lt;h2&gt;Master-Slave Replication（主從複製）&lt;span class="hx:absolute hx:-mt-20" id="master-slave-replication主從複製"&gt;&lt;/span&gt;
&lt;a href="#master-slave-replication%e4%b8%bb%e5%be%9e%e8%a4%87%e8%a3%bd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://lh4.googleusercontent.com/UCGsPfERIT4KfIdHoMT99LIf81dCEBVZOmRCAkFvl8haL0jhOul43Of2OLRMkJ1gUgc0xTDrqmmqlEkazN9vkzZp-OEc7gh7vlkxJ5g40ILKtOhaMwC0gNFnDz7aJ-51dFRL9clRyr6If-chYQ" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What&amp;rsquo;s 主從複製：藉由將 Master 執行的交易複製到多台 Slave 達到主從資料一致性與高可用性&lt;/li&gt;
&lt;li&gt;Why 主從複製：因為在這個框架下，主從資料是一致性的，所以 Slave 可以當備用系統或唯獨資料庫&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;CDC Master-Slave 流程圖&lt;span class="hx:absolute hx:-mt-20" id="cdc-master-slave-流程圖"&gt;&lt;/span&gt;
&lt;a href="#cdc-master-slave-%e6%b5%81%e7%a8%8b%e5%9c%96" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://lh4.googleusercontent.com/pvekf5MX4JlT2m3MBj3dkcwsuh5PZteHafSml8oP5ztL8FycZwuestRt_lgkj_GPbLjc8DIQ3JjQwPZ1kP5FNkjWZnd2hT2LszqY5L9mojQWqLO6cThfpzfrdqt5cmSj_t3SKInrnkneTJiGSA" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主從的時間同步很重要！！！&lt;/strong&gt;
哦吼&lt;/p&gt;
&lt;p&gt;Master-Slave 機制共會啟動三個 Thread&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Master - 產生 binlog 紀錄&lt;/li&gt;
&lt;li&gt;Slave - I/O thread 作用：向 Binlog dump thread 抓取資料，放到 Relay log&lt;/li&gt;
&lt;li&gt;Slave - SQL thread 作用：向 Relay log 讀取資料，寫入 Slave 資料庫&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a
href="https://mirai.tw/2020/01/05/mariadbmysql-replication-%E5%90%8C%E6%AD%A5%E8%A8%AD%E5%AE%9A-master-master%E4%B8%BB%E4%B8%BB%E5%90%8C%E6%AD%A52/"target="_blank" rel="noopener"&gt; master master ??? 連結&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;練習&lt;/h1&gt;&lt;p&gt;題目：
啟動第二個 MySQL Instance，指定 port number 為 3312，相關的目錄和檔案名稱請由 a 改為 b&lt;/p&gt;
&lt;p&gt;答案：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;
# 建分身 b 的目錄
$ mkdir ~/lib/mysqlb
# 拷貝設定檔
$ cp /etc/my.cnf.d/mariadb-server.cnf ~/my.cnf.d/mariadb-serverb.cnf
# 編輯設定檔
$ nano ~/my.cnf.d/mariadb-serverb.cnf
[mysqld]
skip-networking=0
user=rbean
pid-file=/home/rbean/mysqld/mysqldb.pid
socket=/home/rbean/mysqld/mysqldb.sock
port=3312
datadir=/home/rbean/lib/mysqlb
character-set-client-handshake=FALSE
collation-server=utf8mb4_unicode_ci
init-connect=&amp;#39;SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci&amp;#39;
character-set-server=utf8mb4
skip-bind-address
server_id = 2
relay-log = /home/rbean/lib/mysqlb/slave-relay-bin
read_only = 1
relay-log-recovery = 1
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
# 建立 MySQL 分身 b
$ mysql_install_db --user=rbean --datadir=/home/rbean/lib/mysqlb/
# 啟用 MySQL 分身 b
$ mysqld_safe --defaults-file=/home/rbean/my.cnf.d/mariadb-serverb.cnf &amp;amp;
# 使用 MySQL 分身 b
$ mysql -S ~/mysqld/mysqldb.sock
# 建 root 帳號
MariaDB [(none)]&amp;gt; grant all on *.* to &amp;#39;root&amp;#39;@&amp;#39;localhost&amp;#39; identified by &amp;#39;rbean&amp;#39; with grant option;
# 刷新權限
MariaDB [(none)]&amp;gt; flush privileges;
# 離開 mysql
MariaDB [(none)]&amp;gt; exit
# 設定 MySQL 分身安全性
$ mysql_secure_installation -S ~/mysqld/mysqlda.sock
## 檢查
$ mysqladmin version -p -S ~/mysqld/mysqlda.sock
$ mysqladmin version -p -S ~/mysqld/mysqldb.sock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;MySQL&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-mysql"&gt;&lt;/span&gt;
&lt;a href="#tags-mysql" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>了解 Btrfs Filesystem 運作</title><link>https://blog.kubeantony.com/archive/data-platform/%E4%BA%86%E8%A7%A3-btrfs-filesystem-%E9%81%8B%E4%BD%9C/</link><pubDate>Thu, 08 Jun 2023 06:34:28 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E4%BA%86%E8%A7%A3-btrfs-filesystem-%E9%81%8B%E4%BD%9C/</guid><description>
&lt;h2&gt;What is Copy-on-Write (CoW) and How does it work?&lt;span class="hx:absolute hx:-mt-20" id="what-is-copy-on-write-cow-and-how-does-it-work"&gt;&lt;/span&gt;
&lt;a href="#what-is-copy-on-write-cow-and-how-does-it-work" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Btrfs 檔案系統的所有寫入操作都會使用「Copy on Write（CoW）的機制」&lt;/li&gt;
&lt;li&gt;如果你只是寫入一個之前不存在的檔案，那麼資料就會被寫入到空的空間中，並且組成檔案系統的一些 metadata blocks 會被「CoWed」（寫時複製）。&lt;/li&gt;
&lt;li&gt;在「一般」的檔案系統中，如果你回頭覆蓋該檔案的一部分，那麼你正在寫入的那部分會直接覆蓋掉它所替換的資料。&lt;/li&gt;
&lt;li&gt;在「CoW」檔案系統中，新的資料會被寫入到磁碟上的一個空閒空間，然後才會將檔案的 metadata 更改為指向新的資料。在那個時候，被替換的舊資料可以被釋放，因為沒有任何東西再指向它了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.kubeantony.com/images/hackmd-uploads/Bk7z2UT83.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;實作 Copy-on-Write&lt;span class="hx:absolute hx:-mt-20" id="實作-copy-on-write"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c-copy-on-write" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Create a Btrfs filesystem on a single drive&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;~&amp;gt; mkfs.btrfs /dev/sdb
btrfs-progs v5.14
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: b2a83758-9bfd-4e48-b079-a988f4cc7cbe
Node size: 16384
Sector size: 4096
Filesystem size: 50.00GiB
Block group profiles:
Data: single 8.00MiB
Metadata: DUP 256.00MiB
System: DUP 8.00MiB
SSD detected: no
Zoned device: no
Incompat features: extref, skinny-metadata
Runtime features:
Checksum: crc32c
Number of devices: 1
Devices:
ID SIZE PATH
1 50.00GiB /dev/sdb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;將一個 sdb 這顆硬碟 mount 到 /mnt/pool1 目錄上&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mkdir /mnt/pool1
$ mount -t btrfs /dev/sdb /mnt/pool1
$ df -h | egrep &amp;#34;Filesystem|pool1&amp;#34;
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 50G 3.5M 50G 1% /mnt/pool1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 檢視根目錄之檔案系統類型
~&amp;gt; df -hT /
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/system-root btrfs 32G 2.4G 30G 8% /
# 建立並切換工作目錄
~&amp;gt; mkdir cow/ &amp;amp;&amp;amp; cd cow
# 產生 1 G 大小之檔案
~&amp;gt; fallocate -l 1G one
# 使用 copy on write 的方式複製檔案
~&amp;gt; cp --reflink=always one two
# 不使用 copy on write 複製檔案
~&amp;gt; cp --reflink=never one three
# 顯示 btrfs 檔案系統中當前目錄下每個檔案的硬碟使用量
~&amp;gt; btrfs filesystem du .
Total Exclusive Set shared Filename
1.00GiB 0.00B - ./one
1.00GiB 0.00B - ./two
991.38MiB 991.38MiB - ./three
2.97GiB 991.38MiB 1.00GiB .
# 檢視 one、two 和 three 三個檔案 在 儲存裝置上的絕對位置
~&amp;gt; filefrag -v one two three
Filesystem type is: 9123683e
File size of one is 1073741824 (262144 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 131071: 684781.. 815852: 131072: unwritten,shared
1: 131072.. 262143: 859392.. 990463: 131072: 815853: last,unwritten,shared,eof
one: 2 extents found
File size of two is 4 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 4095: 0.. 4095: 4096: last,not_aligned,inline,eof
two: 1 extent found
File size of three is 1073741824 (262144 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 815853.. 848620: 32768:
1: 32768.. 262143: 990464.. 1219839: 229376: 848621: last,eof
three: 2 extents found&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;what is subvolume&lt;span class="hx:absolute hx:-mt-20" id="what-is-subvolume"&gt;&lt;/span&gt;
&lt;a href="#what-is-subvolume" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;A BTRFS subvolume is a part of filesystem with its own independent file/directory hierarchy and inode number namespace.&lt;/li&gt;
&lt;li&gt;Btrfs 的 subvolume 就像是獨立的 POSIX 檔案命名空間一樣。每個 subvolume 可以掛載到獨立的掛載點。&lt;/li&gt;
&lt;li&gt;subvolume 具有彈性，可以在檔案系統的任何位置建立，也可以建立在其他 subvolume 之內。由於它們的階層性質，包含其他子 subvolume 的 subvolume 在刪除前無法被刪除。&lt;/li&gt;
&lt;li&gt;每個 Btrfs 的實作都會包含一個父/主 subvolume 。這是預設掛載的最上層 subvolume 。對於使用者來說， subvolume 看起來就像是目錄和子目錄。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Hadoop ha</title><link>https://blog.kubeantony.com/archive/data-platform/hadoop-ha/</link><pubDate>Sun, 19 Feb 2023 08:07:02 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/hadoop-ha/</guid><description>
&lt;h2&gt;目標&lt;span class="hx:absolute hx:-mt-20" id="目標"&gt;&lt;/span&gt;
&lt;a href="#%e7%9b%ae%e6%a8%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;m1, m2 都會有 Name Node, 和 Resource Manager&lt;/p&gt;
&lt;h2&gt;修改 Hadoop 設定檔&lt;span class="hx:absolute hx:-mt-20" id="修改-hadoop-設定檔"&gt;&lt;/span&gt;
&lt;a href="#%e4%bf%ae%e6%94%b9-hadoop-%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;core-site.xml&lt;span class="hx:absolute hx:-mt-20" id="core-sitexml"&gt;&lt;/span&gt;
&lt;a href="#core-sitexml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;編輯設定檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano ~/vmusdt/hdp33/ha/core-site.xml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;fs.defaultFS&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hdfs://hdfsha&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;fs.default.name&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hdfs://hdfsha&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;hadoop.proxyuser.root.groups&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;bigred&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;hadoop.proxyuser.root.users&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;bigred&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;!-- HA --&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;ha.zookeeper.quorum&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;hdfs-site.xml&lt;span class="hx:absolute hx:-mt-20" id="hdfs-sitexml"&gt;&lt;/span&gt;
&lt;a href="#hdfs-sitexml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;編輯設定檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano ~/vmusdt/hdp33/ha/hdfs-site.xml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.name.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/home/bigred/nn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.checkpoint.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/home/bigred/sn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.datanode.data.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/home/bigred/dn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.permissions.enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.acls.enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;!-- HA --&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.nameservices&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hdfsha&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.ha.namenodes.hdfsha&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m1,d9m2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.rpc-address.hdfsha.d9m1&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m1:8020&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.rpc-address.hdfsha.d9m2&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m2:8020&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.http-address.hdfsha.d9m1&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m1:9870&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.http-address.hdfsha.d9m2&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m2:9870&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.shared.edits.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;qjournal://d9m1:8485;d9m2:8485;/hdfsha&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.journalnode.edits.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/home/bigred/journal&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.ha.automatic-failover.enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.client.failover.proxy.provider.hdfsha&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.ha.fencing.methods&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;shell(/bin/true)&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.ha.fencing.ssh.private-key-files&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/home/bigred/.ssh/id_rsa&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.ha.fencing.ssh.connect-timeout&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;30000&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;yarn-site.xml&lt;span class="hx:absolute hx:-mt-20" id="yarn-sitexml"&gt;&lt;/span&gt;
&lt;a href="#yarn-sitexml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;編輯設定檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano ~/vmusdt/hdp33/ha/yarn-site.xml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;!-- Site specific YARN configuration properties --&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.scheduler.class&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.hostname&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.aux-services&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;mapreduce_shuffle&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.aux-services.mapreduce.shuffle.class&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;org.apache.hadoop.mapred.ShuffleHandler&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.local-dirs&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/home/bigred/nm&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.pmem-check-enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.vmem-check-enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;!-- HA --&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.store.class&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.ha.enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.cluster-id&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;yarnha&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.ha.rm-ids&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m1,d9m2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.hostname.d9m1&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.hostname.d9m2&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.webapp.address.d9m1&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m1:8088&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.webapp.address.d9m2&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m2:8088&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.zk-address&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;d9m2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;派送設定檔&lt;span class="hx:absolute hx:-mt-20" id="派送設定檔"&gt;&lt;/span&gt;
&lt;a href="#%e6%b4%be%e9%80%81%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ dthaconf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;清除目錄&lt;span class="hx:absolute hx:-mt-20" id="清除目錄"&gt;&lt;/span&gt;
&lt;a href="#%e6%b8%85%e9%99%a4%e7%9b%ae%e9%8c%84" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh d9m1 rm -r /home/bigred/journal; ssh d9m2 rm -r /home/bigred/journal
$ ssh d9m1 sudo rm -r /home/bigred/nn; ssh d9m2 rm -r /home/bigred/nn
$ ssh d9w1 sudo rm -r /home/bigred/dn; ssh d9w2 rm -r /home/bigred/dn; ssh d9w3 sudo rm -r /home/bigred/dn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;啟動 Journal Node&lt;span class="hx:absolute hx:-mt-20" id="啟動-journal-node"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-journal-node" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh d9m1 hdfs --daemon start journalnode; ssh d9m2 hdfs --daemon start journalnode&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh d9m1 jps; ssh d9m2 jps&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;啟動 ZooKepper Failover Controller&lt;span class="hx:absolute hx:-mt-20" id="啟動-zookepper-failover-controller"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-zookepper-failover-controller" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh d9m2 zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
$ ssh d9m2 hdfs zkfc -formatZK -force
$ ssh d9m1 hdfs --daemon start zkfc
$ ssh d9m2 hdfs --daemon start zkfc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Apache Spark</title><link>https://blog.kubeantony.com/archive/data-platform/apache-spark/</link><pubDate>Sun, 19 Feb 2023 03:53:32 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/apache-spark/</guid><description>
&lt;hr&gt;
&lt;h2&gt;Spark 簡介&lt;span class="hx:absolute hx:-mt-20" id="spark-簡介"&gt;&lt;/span&gt;
&lt;a href="#spark-%e7%b0%a1%e4%bb%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 2014 年的資料排序基準競賽（Sort Benchmark Competition）中，Databricks 公司使用 Spark，在 207 台的叢集中，以 23 分鐘完成 100 TB 的資料排序，刷新了2013年由 Yahoo 創下的記錄 (在2,100台的叢集中使用MapReduce，花費了72分鐘完成)。&lt;/p&gt;
&lt;p&gt;Spark 在資料處理速度上贏過MapReduce是因為他使用了「記憶體內運算技術」（In-Memory Computing)這項技術，現在的硬碟換裝成SSD之後，在速度上就不會差距那麼大，但可能還是差了兩三倍。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Spark 原創公司 - Databricks&lt;span class="hx:absolute hx:-mt-20" id="spark-原創公司---databricks"&gt;&lt;/span&gt;
&lt;a href="#spark-%e5%8e%9f%e5%89%b5%e5%85%ac%e5%8f%b8---databricks" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;如同 Hadoop 的主導公司 Cloudera 一樣，專案內容開源，但花心思進行完整包裝成產品&lt;/li&gt;
&lt;li&gt;Spark 是由 Databricks 所創立的，也是開源專案，也擁有自己的產品
&lt;blockquote&gt;
&lt;p&gt;&lt;a
href="https://spark.apache.org/"target="_blank" rel="noopener"&gt;Spark的官網&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;spark 相關書籍：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://www.tenlong.com.tw/products/9781491912218?list_name=trs-f"target="_blank" rel="noopener"&gt;Spark: The Definitive Guide: Big Data Processing Made Simple
&lt;/a&gt;(英文版)&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://www.tenlong.com.tw/products/9789865022990?list_name=trs-t"target="_blank" rel="noopener"&gt;Spark 技術手冊｜輕鬆寫意處理大數據&lt;/a&gt; （繁體中文）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Spark is Not a Programming Language&lt;span class="hx:absolute hx:-mt-20" id="spark-is-not-a-programming-language"&gt;&lt;/span&gt;
&lt;a href="#spark-is-not-a-programming-language" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;One thing to remember is that Spark is not a programming language like Python or Java. &lt;strong&gt;It is a general-purpose distributed data processing engine&lt;/strong&gt;, suitable for use in a wide range of circumstances. It is particularly useful for big data processing both at scale and with high speed.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;系統架構&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="系統架構"&gt;&lt;/span&gt;
&lt;a href="#%e7%b3%bb%e7%b5%b1%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/D3M9J9E.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RDD，資料處理引擎
&lt;ul&gt;
&lt;li&gt;這顆引擎可以由 Spark Standalone 執行（Spark 內建），執行方式是 FIFO（First in First out），第一個程式執行完，第二個程式才能執行，Java 語言寫的，效能表現差&lt;/li&gt;
&lt;li&gt;這顆引擎的第二個選擇，Hadoop YARN，他的執行策略是 Fair(公平)，也就是說會盡量平均分配運算資源，Java語言寫的，&lt;strong&gt;朋友最多&lt;/strong&gt;; JVM 裡 heap 區的記憶體使用量，沒辦法做到要多少給多少。&lt;/li&gt;
&lt;li&gt;最後一個選擇，Mesos，他會用 thread 的方法，來執行 RDD 資料處理引擎，他全部用 Ｃ 語言寫的，代表運算速度快，資源運作的浪費率降的很低，但&lt;strong&gt;朋友較少&lt;/strong&gt;，無法配合 pig 和 hive&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;資料處理引擎要運作必須寫程式進去，要執行時才會啟動，執行完畢才會關閉。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Spark SQL，第一個應用，將傳統 IT 的資料丟到 RDD 資料處理引擎，再丟到 hdfs 檔案系統，這時候 pig 與 hive 就可以上來就行分析&lt;/li&gt;
&lt;li&gt;Streaming，處理資料串流( 高速、中速和慢速 )，物聯網的資料&lt;/li&gt;
&lt;li&gt;MLlib，Machine learning ，推薦系統（其中一種應用）&lt;/li&gt;
&lt;li&gt;GraphX，處理關係，系統面的最佳路徑，router a 跑到 router b 的最快路徑，&lt;strong&gt;物件與物件之間的關係&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;PySpark 設定檔&lt;span class="hx:absolute hx:-mt-20" id="pyspark-設定檔"&gt;&lt;/span&gt;
&lt;a href="#pyspark-%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ cat /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-defaults.conf
spark.master yarn ## spark 用 yarn 來 run
spark.yarn.am.memory 512M ## 相當於 mrappmaster
spark.executor.memory 512m ## 真正在處理我們資料的 program，相當於 map 或 reduce，代表資料處理就是它在做
spark.driver.memory 512m ## 內定會在 a1 機器上執行，將 spark 分析完的資料，輸出在 a1 的螢幕上，如果最後分析完的結果太大，可以把這個項目丟到後端的 hdfs 分散式檔案系統中處理。
spark.yarn.submit.waitAppCompletion false ## false ，可以不用等命令分析完，才能操作終端機
#Turns on logging for applications submitted from this machine
## Spark 運行的 log 檔儲存在 HDFS 檔案系統中的 /tmp/spark-events
spark.eventLog.enabled true
## 指令執行回傳錯誤 log 放這個檔案裡
spark.eventLog.dir hdfs://dtm1:8020/tmp/spark-events
## 指令執行回傳沒有錯誤 log 放這個檔案裡
spark.history.fs.logDirectory hdfs://dtm1:8020/tmp/spark-events&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;這個設定檔來自&lt;code&gt;~/vmusdt/hdp33/conf/spark-3.2.1-bin-hadoop3.2/&lt;/code&gt;，如有修改 spark-defult.xml ，改完後一樣要 &lt;code&gt;dtconf 33&lt;/code&gt; 去分發&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -ls /tmp
Found 3 items
drwxrwxrwx - bigred bigboss 0 2022-05-12 14:54 /tmp/hadoop-yarn
drwx-wx-wx - bigred bigboss 0 2022-05-13 01:17 /tmp/hive
drwxrwxrwx - bigred bigboss 0 2022-05-13 01:13 /tmp/spark-events&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;指定 pyspark 使用那個 python 版本&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat /opt/spark-3.2.1-bin-hadoop3.2/conf/spark-env.sh
export SPARK_LOG_DIR=/tmp
## PYSPARK 要用的 Python 程式所在的目錄
export PYSPARK_PYTHON=/usr/bin/python3
## 這裡的 DRIVER 跟 spark.driver.memory 指的是相同的程式
export PYSPARK_DRIVER_PYTHON=/usr/bin/python3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;啟動 pyspark&lt;span class="hx:absolute hx:-mt-20" id="啟動-pyspark"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-pyspark" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ pyspark --master yarn --num-executors 1 --executor-memory 512m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type &amp;#34;help&amp;#34;, &amp;#34;copyright&amp;#34;, &amp;#34;credits&amp;#34; or &amp;#34;license&amp;#34; for more information.
Setting default log level to &amp;#34;WARN&amp;#34;.
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ &amp;#39;_/
/__ / .__/\_,_/_/ /_/\_\ version 3.2.1
/_/
Using Python version 3.8.10 (default, Mar 15 2022 12:22:08)
Spark context Web UI available at http://dta1:4040
Spark context available as &amp;#39;sc&amp;#39; (master = yarn, app id = application_1652367294907_0018).
SparkSession available as &amp;#39;spark&amp;#39;.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;--master yarn&lt;/code&gt;和&lt;code&gt;--executor-memory 512m&lt;/code&gt;這兩個參數其實可以不用打，因為~/vmusdt/hdp33/conf/spark-3.2.1-bin-hadoop3.2/裡面有宣告過，如果命令與預設不一樣，以命令為主
&lt;code&gt;--num-executors 1&lt;/code&gt; ，不管資料量有多大，就是一支程式來跑
&lt;code&gt;--executor-memory 512m&lt;/code&gt; ，一支程式最大用 512 m 記憶體，必須落在 YARN 的運算資源內&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;開另一個CMD，用bigred登入dta1&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ who
bigred tty1 2022-05-12 14:43
bigred pts/0 2022-05-13 01:09 (120.96.143.13)
bigred pts/1 2022-05-13 05:45 (120.96.143.13)
gbean pts/2 2022-05-12 15:11 (120.96.143.13)
bigred@dta1:~$ hls
[dtm1]
3257 NameNode
3482 SecondaryNameNode
[dtm2]
3637 JobHistoryServer
3485 ResourceManager
[dtw1]
3104 DataNode
168976 ExecutorLauncher ## 相當於 mrappmaster，用來啟動
3947 NodeManager
[dtw2]
3649 NodeManager
2890 DataNode
[dtw3]
## Executor 苦命人，因為上面有宣告Executor的數量：1
## CoarseGrained，代表會浪費一定的硬體資源，因 yarn 用的是 JVM ，heap 區要求的是一口價
170641 YarnCoarseGrainedExecutorBackend
3780 NodeManager
3006 DataNode&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;==&lt;strong&gt;如果不給&amp;ndash;num-executors 1，系統預設兩個&lt;/strong&gt;==&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;到對應使用者的 ~/.bashrc 追加 alias 給予不同的運算資源配置&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;gbean@dta1:~$ nano .bashrc
...
alias pyspark=&amp;#39;pyspark --num-executors 4 --executor-memory 512m&amp;#39;
...
登出再登入
gbean@dta1:~$ pyspark
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type &amp;#34;help&amp;#34;, &amp;#34;copyright&amp;#34;, &amp;#34;credits&amp;#34; or &amp;#34;license&amp;#34; for more information.
Setting default log level to &amp;#34;WARN&amp;#34;.
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ &amp;#39;_/
/__ / .__/\_,_/_/ /_/\_\ version 3.2.1
/_/
Using Python version 3.8.10 (default, Mar 15 2022 12:22:08)
Spark context Web UI available at http://dta1:4040
Spark context available as &amp;#39;sc&amp;#39; (master = yarn, app id = application_1652367294907_0022).
SparkSession available as &amp;#39;spark&amp;#39;.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;回到 bigred，下 hls 看有幾支 YarnCoarseGrainedExecutorBackend&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hls
[dtm1]
3257 NameNode
3482 SecondaryNameNode
[dtm2]
3637 JobHistoryServer
3485 ResourceManager
[dtw1]
181426 YarnCoarseGrainedExecutorBackend
3104 DataNode
3947 NodeManager
[dtw2]
3649 NodeManager
2890 DataNode
181544 YarnCoarseGrainedExecutorBackend
[dtw3]
183523 YarnCoarseGrainedExecutorBackend
183446 ExecutorLauncher
3780 NodeManager
183557 YarnCoarseGrainedExecutorBackend
3006 DataNode&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;pyspark 交談模式 - Pi Estimation&lt;span class="hx:absolute hx:-mt-20" id="pyspark---交談模式---pi-estimation"&gt;&lt;/span&gt;
&lt;a href="#pyspark---%e4%ba%a4%e8%ab%87%e6%a8%a1%e5%bc%8f---pi-estimation" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# Spark 的路口，宣告後面的程式會用 YARN 來 run
&amp;gt;&amp;gt;&amp;gt; print(sc)
&amp;lt;SparkContext master=yarn appName=PySparkShell&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;一般測試時才會使用，在外面做案子較常使用交付模式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;將以下程式段, 複製到 pyspark 交談模式
from random import *
def sample(p):
x, y = random(), random()
return 1 if x*x &amp;#43; y*y &amp;lt; 1 else 0
count = sc.parallelize(range(0,100000000)).map(sample).reduce(lambda a, b: a &amp;#43; b)
print (&amp;#34;Pi is roughly&amp;#34;,(4.0 * count / 100000000))
Pi is roughly 3.14146024
&amp;gt;&amp;gt;&amp;gt; quit()&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;count = sc.parallelize(range(0,100000000)).map(sample).reduce(lambda a, b: a + b)&lt;/code&gt; ，這段程式會在 YarnCoarseGrainedExecutorBackend 跑&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sc.parallelize&lt;/code&gt;，spark 的 function，負責產生 100000 筆資料&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;以交付模式執行 Python 應用程式 &lt;span class="hx:absolute hx:-mt-20" id="以交付模式執行-python---應用程式"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%a5%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c-python---%e6%87%89%e7%94%a8%e7%a8%8b%e5%bc%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $&amp;#39;from pyspark import SparkConf
from pyspark import SparkContext
# 宣告等等的程式由YARN做執行
conf = SparkConf()
conf.setAppName(\&amp;#39;spark-basic\&amp;#39;)
sc = SparkContext(conf=conf) ## sc代表python的物件變數，全名是SparkContext，
Context中文為“路口”，
意即Spark資料在處理的路口（YARN）
# 由YarnCoarseGrainedExecutorBackend執行
# 從 0-1,000 取十個值，除與二求餘數，並將前10個運算結果
# 開頭sc代表，等等後台的YARN在執行時，會幫我們產生1000筆資料（數字），經過mod取餘數，
最後取出前10個運算結果
# print 印出最後的結果
def mod(x):
import numpy as np
return (x, np.mod(x, 2))
rdd = sc.parallelize(range(1000)).map(mod).take(10)
print (rdd)&amp;#39; &amp;gt; spark-basic.py
[註] 上式的 $ 會將 \&amp;#39; 轉換成 &amp;#39;
$ spark-submit --master yarn --driver-memory 512m --executor-memory 512m spark-basic.py 2&amp;gt;/dev/null
ModuleNotFoundError: No module named &amp;#39;numpy&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;補充：numpy
重點觀念：每一種語言環境安裝好以後，不代表可以使用全部功能，部分功能需要額外安裝套件才能使用&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh dta1 &amp;#39;sudo apt install python3-numpy&amp;#39;
$ ssh dtw1 &amp;#39;sudo apt install python3-numpy&amp;#39;
$ ssh dtw2 &amp;#39;sudo apt install python3-numpy&amp;#39;
$ ssh dtw3 &amp;#39;sudo apt install python3-numpy&amp;#39;
rbean@dta1:~$ spark-submit --master yarn --driver-memory 512m --executor-memory 512m spark-basic.py
[(0, 0), (1, 1), (2, 0), (3, 1), (4, 0), (5, 1), (6, 0), (7, 1), (8, 0), (9, 1)]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Spark on YARN 客戶端佈署模式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="spark-on-yarn-客戶端佈署模式"&gt;&lt;/span&gt;
&lt;a href="#spark-on-yarn-%e5%ae%a2%e6%88%b6%e7%ab%af%e4%bd%88%e7%bd%b2%e6%a8%a1%e5%bc%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/TiQLfX0.png" alt="" loading="lazy" /&gt;
Client Machine是在我們的dta1，當我們在client端下達指令(spark-submit)時，會有一個程式叫driver，他會一直在前端的機器跑，還會去找Resource Manager，然後Resource Manager馬上去找Application Master，完了後，會管理後端的Executor做管理和分析，Executor會把執行完的結果，透過網路傳給driver，讓driver顯示出來。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Spark Excution Model&lt;span class="hx:absolute hx:-mt-20" id="spark-excution-model"&gt;&lt;/span&gt;
&lt;a href="#spark-excution-model" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/GADyTES.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cluster Manager | Resource Manager&lt;/li&gt;
&lt;li&gt;我們可以設定一個 Executor 使用多少個 CPU ，Executor 會請多個 Task 幫我們對 Partition (資料區塊) 做處理&lt;/li&gt;
&lt;li&gt;Executor 可以請多少個 Task 做事，由資源限制上做決定&lt;/li&gt;
&lt;li&gt;Task 也可以做資源上的限制&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;檢視 YARN 運作資訊&lt;span class="hx:absolute hx:-mt-20" id="檢視-yarn-運作資訊"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-yarn-%e9%81%8b%e4%bd%9c%e8%b3%87%e8%a8%8a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 rbean 終端機執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 把rnage改成20000，take改成20
rbean@dta1:~$ nano spark-basic.py
from pyspark import SparkConf
from pyspark import SparkContext
conf = SparkConf()
conf.setAppName(&amp;#39;spark-basic&amp;#39;)
sc = SparkContext(conf=conf)
def mod(x):
import numpy as np
return (x, np.mod(x, 2))
rdd = sc.parallelize(range(20000)).map(mod).take(20)
print (rdd)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 bigred 終端機執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ which hls
/opt/bin/hls
## 讓hls也抓得到dta1的主機
bigred@dta1:~$ sudo nano /opt/bin/hls
#!/bin/bash
nn=&amp;#34;dtm1&amp;#34;
rs=&amp;#34;dtm2&amp;#34;
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
nc -w 1 -z $nn 8020 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;pls start HDFS first or fomathdfs&amp;#34; &amp;amp;&amp;amp; exit 1
for n in $nn $rs $w dta1 ## 新增dta1
do
nc -w 1 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
j=$(ssh -q bigred@$n sudo jps 2&amp;gt;/dev/null | grep -v Jps)
if [ &amp;#34;$j&amp;#34; != &amp;#34;&amp;#34; ]; then
echo -e &amp;#34;[$n]\n$j&amp;#34;
echo &amp;#34;&amp;#34;
fi
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 rbean 終端機執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rbean@dta1:~$ spark-submit --master yarn --driver-memory 512m --executor-memory 512m spark-basic.py 2&amp;gt;/dev/null
[(0, 0), (1, 1), (2, 0), (3, 1), (4, 0), (5, 1), (6, 0), (7, 1), (8, 0), (9, 1), (10, 0), (11, 1), (12, 0), (13, 1), (14, 0), (15, 1), (16, 0), (17, 1), (18, 0), (19, 1)]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 bigred 終端機執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hls
[dtm1]
159402 SecondaryNameNode
159037 NameNode
[dtm2]
1828 ResourceManager
1966 JobHistoryServer
[dtw1]
159299 NodeManager
159094 DataNode
164372 ExecutorLauncher ## (就是 ApplicationMaster)
164538 YarnCoarseGrainedExecutorBackend
[dtw2]
7973 YarnCoarseGrainedExecutorBackend
1943 DataNode
2152 NodeManager
[dtw3]
2067 NodeManager
1861 DataNode
[dta1]
162115 SparkSubmit ## (內含 Driver)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Spark on YARN 叢集佈署模式&lt;span class="hx:absolute hx:-mt-20" id="spark-on-yarn-叢集佈署模式"&gt;&lt;/span&gt;
&lt;a href="#spark-on-yarn-%e5%8f%a2%e9%9b%86%e4%bd%88%e7%bd%b2%e6%a8%a1%e5%bc%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/4Gji9Y5.png" alt="" loading="lazy" /&gt;
把pyspark要執行的程式都往後台丟，所以我的Spark-submit的命令往後送&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;YARN 是由 dtm2、dtw1、dtw2、dtw3 所組成&lt;/li&gt;
&lt;li&gt;其中 resource manager 是在 dtm2 上執行 其餘程式會在 dtw1、2、3 上面執行&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;傳統的大型主機系統會使用的運作架構&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;實作cluster mode&lt;span class="hx:absolute hx:-mt-20" id="實作cluster-mode"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9ccluster-mode" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;將spark.yarn.submit.waitAppCompletion改成false，如果以後要等待就改成true&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ nano vmusdt/hdp33/conf/spark-3.2.1-bin-hadoop3.2/spark-defaults.conf
spark.master yarn
spark.yarn.am.memory 512M
spark.executor.memory 512m
spark.driver.memory 512m
spark.yarn.submit.waitAppCompletion false
#Turns on logging for applications submitted from this machine
spark.eventLog.enabled true
spark.eventLog.dir hdfs://dtm1:8020/tmp/spark-events
spark.history.fs.logDirectory hdfs://dtm1:8020/tmp/spark-events&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果原本是true，就要重新部署設定檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ dtconf 33&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;上載資料集&lt;span class="hx:absolute hx:-mt-20" id="上載資料集"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%8a%e8%bc%89%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 下載老師的網站裡的talks.txt檔
bigred@dta1:~$ wget &amp;#34;http://www.oc99.org/dt/dataset/talks.txt&amp;#34; &amp;amp;&amp;gt;/dev/null
## 檢查
bigred@dta1:~$ dir talks.txt
-rw-rw-r-- 1 bigred bigred 1.6M Apr 2 2015 talks.txt
bigred@dta1:~$ cat talks.txt | head -n 10
The Project Gutenberg EBook of Ulysses, by James Joyce
This eBook is for the use of anyone anywhere at no cost and with
almost no restrictions whatsoever. You may copy it, give it away or
re-use it under the terms of the Project Gutenberg License included
with this eBook or online at www.gutenberg.org
Title: Ulysses
## 將talks.txt 上傳到hdfs檔案系統中
bigred@dta1:~$ hdfs dfs -put -f talks.txt mydataset/
## 檢查
bigred@dta1:~$ hdfs dfs -ls mydataset
Found 1 items
-rw-r--r-- 2 bigred bigboss 1573044 2022-05-16 02:43 mydataset/talks.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;撰寫 &lt;code&gt;wordcount.py&lt;/code&gt; 程式&lt;span class="hx:absolute hx:-mt-20" id="撰寫-wordcountpy-程式"&gt;&lt;/span&gt;
&lt;a href="#%e6%92%b0%e5%af%ab-wordcountpy-%e7%a8%8b%e5%bc%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ nano wordcount.py
from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.setAppName(&amp;#39;wordcount&amp;#39;)
sc = SparkContext(conf=conf) ## 指到YARN的RDD資料處理引擎
## textFile 指定要讀取的檔案，檔案會被丟到 excutor 所在的機器
## flatMap 將每個字用空格做切割，相當於linux的cut，（Map程式會做擷取和過濾）
words = sc.textFile(&amp;#34;/user/bigred/mydataset/talks.txt&amp;#34;).flatMap(lambda line: line.split(&amp;#34; &amp;#34;))
# count the occurrence of each word
## 只要出現一個字就會就會在字後面寫, 1
## reduce程式會將同樣的字後面出現幾個1，把它加總起來
wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a,b:a&amp;#43;b)
## 最後的結果回存在/user/bigred/mydataset/wordcount的目錄裡面
## 如果將wordcount改成wordcount.txt，系統也會把它當作目錄的名字
wordCounts.saveAsTextFile(&amp;#34;/user/bigred/mydataset/wordcount&amp;#34;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;==&lt;strong&gt;資料科技平台，只要講資料處理引擎，最後的結果會存在一個資料夾裡面&lt;/strong&gt;==&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;&lt;strong&gt;使用叢集佈署模式, 執行 &lt;code&gt;wordcount.py&lt;/code&gt;&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="使用叢集佈署模式-執行"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%bf%e7%94%a8%e5%8f%a2%e9%9b%86%e4%bd%88%e7%bd%b2%e6%a8%a1%e5%bc%8f-%e5%9f%b7%e8%a1%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;只要動用到cluster mode，通常都會把結果儲存到Hdfs檔案系統中&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ spark-submit --deploy-mode cluster wordcount.py
bigred@dta1:~$ yarn application -list
WARNING: YARN_LOG_DIR has been replaced by HADOOP_LOG_DIR. Using value of YARN_LOG_DIR.
Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):1
Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL
application_1652665976731_0011 wordcount.py SPARK bigred root.bigred RUNNING UNDEFINED 10% http://dtw3:33687
## pig的cat可以把目錄裡面的所有檔案內容都顯示出來
bigred@dta1:~$ pig -e &amp;#34;cat mydataset/wordcount&amp;#34; 2&amp;gt;/dev/null | head -n 4
(&amp;#34;Doyle&amp;#39;s&amp;#34;, 3)
(&amp;#39;cockles&amp;#39;, 5)
(&amp;#39;periwinkles.&amp;#39;, 1)
(&amp;#39;Then&amp;#39;, 130)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;RDD Partition&lt;span class="hx:absolute hx:-mt-20" id="rdd---partition"&gt;&lt;/span&gt;
&lt;a href="#rdd---partition" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;運作架構&lt;span class="hx:absolute hx:-mt-20" id="運作架構"&gt;&lt;/span&gt;
&lt;a href="#%e9%81%8b%e4%bd%9c%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/YdRaPKk.png" alt="" loading="lazy" /&gt;
client 在dta1 ，執行的命令叫做&lt;code&gt;spark-submit&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;cluster Manager就是resource manager&lt;/p&gt;
&lt;p&gt;系統預設兩個Excutor，每個Excuter最多可以用多少記憶體和多少CPU?
遵照 yarn-site.xml 配置，最多 1CPU/896MB 記憶體&lt;/p&gt;
&lt;p&gt;Excuter的數量由我們決定，每個Excuter裡面可以執行多個Task，一個 Block 會由一個 task 來處理，一個Task要用一個Core，有幾個Task就會需要幾個Core。&lt;/p&gt;
&lt;p&gt;我們目前的配置，每個 Executor 只會跑一個 task
因為上限是 1 CPU&lt;/p&gt;
&lt;p&gt;更改上限2cpu&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ nano vmusdt/hdp33/conf/hadoop-3.3.2/yarn-site.xml
&amp;lt;name&amp;gt;yarn.scheduler.minimum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.maximum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt; ## 天花板改成2
&amp;lt;/property&amp;gt;
bigred@dta1:~$ stopyarn ; stophdfs
dtw1: Node Manager stoped
dtw2: Node Manager stoped
dtw3: Node Manager stoped
dtm2: Job History Server stoped
dtm2: Resource Manager stoped
dtw1: Data Node stoped
dtw2: Data Node stoped
dtw3: Data Node stoped
dtm1: Secondary Name Node stoped
dtm1: Name Node stoped
bigred@dta1:~$ dtconf 33
bigred@dta1:~$ starthdfs ; startyarn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;檢測 YARN 運算單元的記憶體資源&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="檢測-yarn-運算單元的記憶體資源"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%b8%ac-yarn-%e9%81%8b%e7%ae%97%e5%96%ae%e5%85%83%e7%9a%84%e8%a8%98%e6%86%b6%e9%ab%94%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;未更改cpu上限為2，就叫系統跑兩個Task的話，系統會罵你
系統會需要我們要的1024mb + 384mb的記憶體&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ spark-submit --master yarn --executor-memory 1024m /opt/spark-3.2.1-bin-hadoop3.2/examples/src/main/python/pi.py 10
java.lang.IllegalArgumentException: Required executor memory (1024 MB), offHeap memory (0) MB, overhead (384 MB), and PySpark memory (0 MB) is above the max threshold (896 MB) of this cluster!&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;指定 Executor 數量及 Executor Memory 大小&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="指定-executor-數量及-executor-memory-大小"&gt;&lt;/span&gt;
&lt;a href="#%e6%8c%87%e5%ae%9a-executor-%e6%95%b8%e9%87%8f%e5%8f%8a-executor-memory-%e5%a4%a7%e5%b0%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;系統規定Excuter的記憶體大小最少要有為450mb&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ spark-submit --num-executors 1 --executor-memory 384m --master yarn /opt/spark-3.2.1-bin-hadoop3.2/examples/src/main/python/pi.py 10
Error initializing SparkContext.
java.lang.IllegalArgumentException: Executor memory 402653184 must be at least 471859200. Please increase executor memory using the --executor-memory option or spark.executor.memory in Spark configuration.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;再次執行 &lt;code&gt;pi.py&lt;/code&gt;&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="再次執行"&gt;&lt;/span&gt;
&lt;a href="#%e5%86%8d%e6%ac%a1%e5%9f%b7%e8%a1%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用系統預設Excuter的記憶體大小
spark-defaults.conf使用的是預設的512MB，加上YARN設置的底線384MB&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ spark-submit --num-executors 1 /opt/spark-3.2.1-bin-hadoop3.2/examples/src/main/python/pi.py 500
Pi is roughly 3.135280&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;CPU 硬體規格&lt;span class="hx:absolute hx:-mt-20" id="cpu-硬體規格"&gt;&lt;/span&gt;
&lt;a href="#cpu-%e7%a1%ac%e9%ab%94%e8%a6%8f%e6%a0%bc" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/zswdf9m.png" alt="" loading="lazy" /&gt;
邏輯處理器：8，代表是硬體規格，超執行緒 Hyper-Threading : 8
只要是Java的程式，軟體上有啟動thread，在硬體上就會去飆超執行緒&lt;/p&gt;
&lt;p&gt;VMware 在核心上使用的是Core還是HT?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/iz4z5G1.png" alt="" loading="lazy" /&gt;
我們在實體電腦上的CPU硬體規格為4C 8HT，當我們建立3台虛擬機它的cpu設定為2C時，除了3台加起來用了6C以外，還有剩的是作業系統的服務會需要用到一整顆CPU。&lt;/p&gt;
&lt;p&gt;我們將3台虛擬機器設定為2顆cpu，事實上真正在系統裡面，他無法用到2顆核心的所有時間，因為還有一大堆的服務在使用，所以要讓我們的虛擬電腦在使用CPU上接近兩顆，代表作業系統裡面的服務越少越好。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/olSdcSi.png" alt="" loading="lazy" /&gt;
YARN的單一台機器CPU總量設為8核，每一支程式只能跑1核，YARN在一台機器會跑8個程式出來，每個程式會去分虛擬機器設定的2核的時間，虛擬機器設定的2核又會去分實體機器那顆CPU的時間，代表YARN所分到的時間會很少，這時候就要看CPU的規格，如果夠強，就可以在同樣的時間跑處理更多的運算。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;3台虛擬機器分時8個HT，不見得會完整使用到其中的6個HT，要看程式怎麼寫。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Spark的一個Executor設定CPU上限兩核，代表在一台虛擬機器可以同時跑4個Executor，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;提問：Executor總共可以處理的資料量有多大？&lt;/p&gt;
&lt;p&gt;答：設定一支程式可以使用 2CPU（代表每隻 Executor 可以跑兩個 task） 一台虛擬機一次跑四隻 Executor 等於有八隻 task（使用到 yarn CPU 配置的上限） 三台都跑滿等於有 24 隻 task，同時處理 24 筆資料 假設資料量皆為最大值：128MB * 24 = 3072MB 等於同時可以處理 3GB 的資料量 但還需要考量配置的程式數量，有沒有影響單支程式的性能&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;設定CPU為以下圖的規格
&lt;img src="https://i.imgur.com/alimzYd.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ nano vmusdt/hdp33/conf/hadoop-3.3.2/yarn-site.xml
&amp;lt;name&amp;gt;yarn.nodemanager.resource.cpu-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;4&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.minimum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.maximum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
bigred@dta1:~$ stopyarn
bigred@dta1:~$ dtconf 33
bigred@dta1:~$ startyarn
dtm2: Resource Manager started
dtm2: Job History Server started
dtw1: Node Manager started
dtw2: Node Manager started
dtw3: Node Manager started
bigred@dta1:~$ curl -s http://dtm2:8088/ws/v1/cluster/metrics | jq | grep -E &amp;#34;totalMB|totalVirtualCores&amp;#34;
&amp;#34;totalMB&amp;#34;: 24576,
&amp;#34;totalVirtualCores&amp;#34;: 12,
pyspark --num-executors 1 --executor-cores 2
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type &amp;#34;help&amp;#34;, &amp;#34;copyright&amp;#34;, &amp;#34;credits&amp;#34; or &amp;#34;license&amp;#34; for more information.
Setting default log level to &amp;#34;WARN&amp;#34;.
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ &amp;#39;_/
/__ / .__/\_,_/_/ /_/\_\ version 3.2.1
/_/
Using Python version 3.8.10 (default, Mar 15 2022 12:22:08)
Spark context Web UI available at http://dta1:4040
Spark context available as &amp;#39;sc&amp;#39; (master = yarn, app id = application_1652682234623_0001).
SparkSession available as &amp;#39;spark&amp;#39;.
&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>Hive 資料倉儲工具</title><link>https://blog.kubeantony.com/archive/data-platform/hive-%E8%B3%87%E6%96%99%E5%80%89%E5%84%B2%E5%B7%A5%E5%85%B7/</link><pubDate>Sun, 19 Feb 2023 02:29:18 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/hive-%E8%B3%87%E6%96%99%E5%80%89%E5%84%B2%E5%B7%A5%E5%85%B7/</guid><description>
&lt;hr&gt;
&lt;h2&gt;現在的資料科技世代&lt;span class="hx:absolute hx:-mt-20" id="現在的資料科技世代"&gt;&lt;/span&gt;
&lt;a href="#%e7%8f%be%e5%9c%a8%e7%9a%84%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e4%b8%96%e4%bb%a3" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Schema on Read&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;資料庫本身沒有定義schema結構，寫入資料時不受schema限制，只有在讀取資料(Raw Data)時，由使用者做Code to schema的動作&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;補充傳統ＩＴ世代：Schema on Write
先產生Database及Table，才能做後續的資料儲存及分析&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;認識Hive&lt;span class="hx:absolute hx:-mt-20" id="認識hive"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%8d%e8%ad%98hive" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Apache Hive 是Hadoop 生態系統中的第一個 SQL 框架。Facebook 的工程師在2007年介紹了Hive，並在2008年將代碼捐獻給Apache 軟體基金會。2010年9月，Hive 畢業成為Apache 頂級項目。Hadoop 生態系統中的每個主要參與者都發布和支持Hive，包括Cloudera、MapR、Hortonworks 和IBM。Amazon Web Services 在Elastic MapReduce（EMR）中提供了Hive 的修改版作為雲服務。&lt;/p&gt;
&lt;p&gt;早期發布的Hive 使用MapReduce 運行查詢。複雜查詢需要多次傳遞數據，這會降低性能。所以Hive 不適合交互式分析。由Hortonworks 領導的Stinger 明顯的提高了Hive 的性能，尤其是通過使用Apache Tez，一個精簡MapReduce 代碼的應用框架。Tez 和ORCfile，一種新的存儲格式，對Hive 的查詢產生了明顯的提速。&lt;/p&gt;
&lt;p&gt;Cloudera 實驗室帶領一個並行項目重新設計Hive 的後端，使其運行在Apache Spark 上。經過長期測試後，Cloudera 在2016年初發布了Hive-on-Spark 的正式版本。&lt;/p&gt;
&lt;p&gt;在2016年，Hive 有100多人的貢獻者。該團隊在2月份發布了Hive 2.0，並在6月份發布了Hive 2.1。Hive 2.0 的改進包括了對Hive-on-Spark 的多個改進，以及性能、可用性、可支持性和穩定性增強。Hive 2.1 包括了Hive LLAP（Live Long and Process），它結合持久化的查詢伺服器和優化後的內存緩存，來實現高性能。該團隊聲稱提高了25倍。&lt;/p&gt;
&lt;p&gt;9月，Hivemall 項目進入了Apache 孵化器，正如我在我的機器學習年度總結的第二部分中指出的。Hivemall 最初由Treasure Data 開發並捐獻給Apache 軟體基金會，它是一個可擴展的機器學習庫，通過一系列的Hive UDF 來實現，設計用於在Hive、Pig 和Spark SQL 上運行MapReduce。該團隊計劃在2017年第一季度發布了第一個版本。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Apache Hive 運作架構圖&lt;span class="hx:absolute hx:-mt-20" id="apache-hive-運作架構圖"&gt;&lt;/span&gt;
&lt;a href="#apache-hive-%e9%81%8b%e4%bd%9c%e6%9e%b6%e6%a7%8b%e5%9c%96" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/CwFC3tN.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hive CLI，全名：Hive Command Line Interface
&lt;ul&gt;
&lt;li&gt;在這個命令操作介面裡面，我們執行Hive的命令檔，有 &lt;code&gt;create&lt;/code&gt;、&lt;code&gt;select&lt;/code&gt;、&lt;code&gt;drop&lt;/code&gt;、&lt;code&gt;show table&lt;/code&gt; 和 &lt;code&gt;show database&lt;/code&gt;&amp;hellip;等，這些指令通通會交給 Driver&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Driver ， parser ( 解析器 )
&lt;ul&gt;
&lt;li&gt;會先做 Optomizer（最佳化），分析這個命令，底層要怎麼做，看是否會用到 MapReduce 來做，還是用 HDFS 的功能來做就可以了。&lt;/li&gt;
&lt;li&gt;Optomier 做完後，會做 Compiler，把原本的 Hive 命令翻譯成 Java 的 Map 跟 Reduce 程式。&lt;/li&gt;
&lt;li&gt;翻譯好後再做 Exector （執行），執行翻譯好的 Map 和 Reduce 程式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MapReduce
&lt;ul&gt;
&lt;li&gt;hive 內建的資料處理引擎。&lt;/li&gt;
&lt;li&gt;disk killer 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tez
&lt;ul&gt;
&lt;li&gt;我們可以改裝 Hadoop 的資料處理引擎：Tez ( 渦輪增壓引擎 )，它的速度可以比原廠的 MapReduce 快一級到兩級。或是整顆 MapReduce 換掉，變成 Spark，但是 Spqrk 需要有一定檔次的設備。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Spark
&lt;ul&gt;
&lt;li&gt;昂貴的資料處理引擎。&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://blog.kubeantony.com/data-platform/apache-spark/"&gt;Apache Spark 筆記連結&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;memory killer 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Metastore
&lt;ul&gt;
&lt;li&gt;他的名字叫做 &lt;a
href="https://db.apache.org/derby/"target="_blank" rel="noopener"&gt;derby&lt;/a&gt;，一個關連式資料庫（資訊界第一個用 Java 語言寫出來的資料庫），這個資料庫負責儲存 schema 。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hive -f *.hsql&lt;/code&gt; 產生出來的 table ，像是內部資料表、外部資料表、分割表，最後再加 parquet 的 九宮格資料表，這些表格都有 schema 的宣告。&lt;/li&gt;
&lt;li&gt;schema ，資料表的名字、有幾個欄位、資料表有沒有分割，資料表有沒有 parquet 、外部資料表指定的資料來源目錄區。&lt;/li&gt;
&lt;li&gt;資料表的內容一樣會存放在 hdfs 檔案系統中。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;hdfs 檔案系統的檔名存在哪裡？ 檔案存在哪裡？
hdfs 目錄資料存 fsimage（Name Node 的 nn 目錄區）
hdfs 資料 block 存 dtw1、dtw2、dtw3 ( Data Node 的 dn 目錄區 )&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;如果在 bigred 產生一個資料表叫 a，那麼 rbean 和 gbean 可不可以也產生一個資料表叫 a ？
答：可以，因為儲存的位置不一樣&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Web UI
&lt;ul&gt;
&lt;li&gt;透過瀏覽器的介面對 hive 進行操作，點點選選 or 有文字框可以打命令進去。&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://zeppelin.apache.org/"target="_blank" rel="noopener"&gt;Apache Zeppelin&lt;/a&gt; ，它可以幫我們把分析的結果透過圖形表達出來，在上面操作一樣適用上圖的運作。&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://ambari.apache.org/"target="_blank" rel="noopener"&gt;Apache Ambari&lt;/a&gt; ，吃的資源較 Zeppelin 多&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Thrift Server，他有另外一個名稱：Hive Server 2，他的 Server 可以連接 OBDC 和 JDBC ( 傳統 Relation Database 的程式介面 )
&lt;ul&gt;
&lt;li&gt;JDBC ，Java 語言連接 Relation Database 的標準介面&lt;/li&gt;
&lt;li&gt;OBDC ，C# 語言連接 Relation Database 的標準介面&lt;/li&gt;
&lt;li&gt;國內目前在推的是 Microsoft Power BI，可以連接到 Hive Server 2，來使用 Hive 的分析能力&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://db.apache.org/derby/"target="_blank" rel="noopener"&gt;Metastore_db&lt;/a&gt; | apache derby
&lt;ul&gt;
&lt;li&gt;Java 語言的資料庫，由 sybase 公司開發，用來儲存 hive 產生 table 的 schema 資料，地位相當於 name node&lt;/li&gt;
&lt;li&gt;hive 建完 table 的資料會存在 hdfs 分散式檔案系統&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sybase SQL Server | msSQL 的資料引擎&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;啟動 Hive 並建立資料表&lt;span class="hx:absolute hx:-mt-20" id="啟動-hive-並建立資料表"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-hive-%e4%b8%a6%e5%bb%ba%e7%ab%8b%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 Windows 系統的 cmd.exe 視窗, 執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh rbean@&amp;lt;dta1 ip&amp;gt;
rbean@172.16.119.3 s password: rbean &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# -S，代表等等進入 hive 交談模式時，螢幕上的訊息會比較少，但還是會有很多話
rbean@dta1:~$ hive -S
# default 是預設的 database ，預設的資料庫名稱
hive (default)&amp;gt;
# 建立 table
# x為欄位名稱
# string = varvher 資料型態 ( Java 的影子 )
hive (default)&amp;gt; create table dummy (x string);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;第一次建立表格, Hive 會在 HDFS 建立 /user/帳號/hive 目錄, 用來儲存資料表的資料, 檢視命令如下&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;hive (default)&amp;gt; dfs -ls /user/rbean/hive;
Found 1 items
drwxr-xr-x - rbean rbean 0 2022-05-05 17:53 /user/rbean/hive/dummy
顯示目前所有表格名稱
hive&amp;gt; show tables;
dummy &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;==&lt;strong&gt;只要在hive產生一個表格(table)，Hdfs分散式檔案系統裡面就會有一個同名的目錄，這個目錄會存放table的資料&lt;/strong&gt;==&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Hive 基本命令&lt;span class="hx:absolute hx:-mt-20" id="hive-基本命令"&gt;&lt;/span&gt;
&lt;a href="#hive-%e5%9f%ba%e6%9c%ac%e5%91%bd%e4%bb%a4" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hive -S 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hive &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;2 ，警告和錯誤的輸出裝置&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;增加資料&lt;span class="hx:absolute hx:-mt-20" id="增加資料"&gt;&lt;/span&gt;
&lt;a href="#%e5%a2%9e%e5%8a%a0%e8%b3%87%e6%96%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;雖然是用SQL語法新增資料，真正執行的人還是Map和Reduce&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;hive (default)&amp;gt; insert into dummy values(&amp;#39;abc&amp;#39;);
hive (default)&amp;gt; insert into dummy values(&amp;#39;xyz&amp;#39;); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在hive裡面看Hdfs檔案系統的目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;hive (default)&amp;gt; dfs -ls /user/rbean/hive/dummy;
Found 2 items
-rw-r--r-- 2 rbean rbean 4 2020-09-27 01:40 /user/rbean/hive/dummy/000000_0
-rw-r--r-- 2 rbean rbean 4 2020-09-27 01:41 /user/rbean/hive/dummy/000000\_0\_copy_1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;嚇死人了！！！在hive裡面執行insert into一筆資料，在hive工具裡面他是一個檔案，一筆資料一個檔案，假如有1000萬筆資料insert into，就代表會有1000萬個檔案，所以Hadoop處理小檔案是他的致命傷，==&lt;strong&gt;&lt;font color=red&gt;在外面使用 Hive 建 table，不會使用 insert into 來增加資料。&lt;/font&gt;&lt;/strong&gt;==&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;查詢 dummy 表格資料&lt;span class="hx:absolute hx:-mt-20" id="查詢-dummy-表格資料"&gt;&lt;/span&gt;
&lt;a href="#%e6%9f%a5%e8%a9%a2-dummy-%e8%a1%a8%e6%a0%bc%e8%b3%87%e6%96%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;hive&amp;gt; select * from dummy;
abc
xyz
hive (default)&amp;gt; select * from dummy where x = &amp;#39;abc&amp;#39;;
abc
hive (default)&amp;gt; select * from dummy where x = &amp;#39;xyz&amp;#39;;
xyz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;上面的 SQL Command ，會被轉成 map 和 reduce 程式，再丟給 Resource manager ，它會看 map 和 reduce 的程式需要的運算資源是否符合標準，再丟給 MRappmaster ，它會看資料有幾個 block ，最後再丟給 Container ，也就是 YarnChild&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;刪除 dummy 表格&lt;span class="hx:absolute hx:-mt-20" id="刪除-dummy-表格"&gt;&lt;/span&gt;
&lt;a href="#%e5%88%aa%e9%99%a4-dummy-%e8%a1%a8%e6%a0%bc" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;hive (default)&amp;gt; drop table dummy;
hive (default)&amp;gt; dfs -ls /user/rbean/hive/dummy;
ls: `/user/rbean/hive/dummy`: No such file or directory
...........
hive&amp;gt; quit;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;建立 Hive Customers 資料表&lt;span class="hx:absolute hx:-mt-20" id="建立-hive-customers-資料表"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-hive-customers-%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;題目：&lt;span class="hx:absolute hx:-mt-20" id="題目"&gt;&lt;/span&gt;
&lt;a href="#%e9%a1%8c%e7%9b%ae" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;#43;----&amp;#43;----------&amp;#43;-----&amp;#43;-----------&amp;#43;----------&amp;#43;
| ID | NAME | AGE | ADDRESS | SALARY |
&amp;#43;----&amp;#43;----------&amp;#43;-----&amp;#43;-----------&amp;#43;----------&amp;#43;
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
&amp;#43;----&amp;#43;----------&amp;#43;-----&amp;#43;-----------&amp;#43;----------&amp;#43;
# 傳統關連式資料庫的運作流程
# 先建立好資料庫及表格的欄位及屬性，才能將資料放進去
mysql -&amp;gt; create db/table(schema) -&amp;gt; insert data
* schema on write (IT)
# 資料科技世代
# 先將資料寫入後，當有需要分析需求時，才去定義schema，建立資料庫/資料表
hive -&amp;gt; insert data (hdfs dfs -put) -&amp;gt; create db/table
* schema on read (Big Data)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;答案：&lt;span class="hx:absolute hx:-mt-20" id="答案"&gt;&lt;/span&gt;
&lt;a href="#%e7%ad%94%e6%a1%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 匯入資料
rbean@dta1:~$ echo &amp;#39;1,Ramesh,32,Ahmedabad,2000.00
2,Khilan,25,Delhi,1500.00
3,kaushik,23,Kota,2000.00
4,Chaitali,25,Mumbai,6500.00
5,Hardik,27,Bhopal,8500.00
6,Komal,22,MP,4500.00
7,Muffy,24,Indore,10000.00&amp;#39; &amp;gt; customers.csv
# 在 HDFS 檔案系統裡建立目錄
rbean@dta1:~$ hdfs dfs -mkdir -p mydataset/customers
# 把在 linux 檔案系統的檔案上傳到 HDFS 檔案系統
rbean@dta1:~$ hdfs dfs -put customers.csv mydataset/customers
# 產生一個 hsql 檔（h 是 Hive 的意思），也就是說產生一個 Hive 的 SQL 命令檔，
# 這個檔案名稱為：customers.hsql
# 檔案內容為，產生一個叫做 customers 的 table，
# 裡面有五個欄位，對應剛才輸入的資料。
rbean@dta1:~$ echo $&amp;#39;CREATE TABLE customers (
&amp;gt; id int,
&amp;gt; name string,
&amp;gt; age int,
&amp;gt; address string,
&amp;gt; salary float
&amp;gt; )
&amp;gt; ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;
&amp;gt; STORED AS TEXTFILE LOCATION \&amp;#39;/user/$USER/mydataset/customers\&amp;#39; ; &amp;#39; | envsubst &amp;gt; customers.hsql
# ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;，
這行是說在 table 裡面的每一筆資料用逗號做切割，相當於 cut -d 指定的分隔符號
# STORED AS TEXTFILE LOCATION \&amp;#39;/user/$USER/mydataset/customers\&amp;#39;，
這行是在宣告 table 的資料會在 HDFS 檔案系統的家目錄裡面的 mydataset/customers/ 目錄裡面
# envsubst | 會幫我們把前面文字的 $USER 替換成當前登入的帳號
# 以上從 CREATE TABLE 開始，到最後宣告資料來源的目錄在哪，都會記錄在 ~/metastore_db 裡面
# 執行 hive 的 SQL 命令檔，來產生 customers 這個 table
rbean@dta1:~$ hive -S -f customers.hsql
# -f &amp;lt;filename&amp;gt; | SQL from files
# -S,--silent | Silent mode in interactive shell
# 檢查
rbean@dta1:~$ hive -S -e &amp;#34;show tables&amp;#34; 2&amp;gt;/dev/null
customers
# 利用 linux 的二號裝置，也就是警告和錯誤訊息的資訊，全部丟到黑洞，只看正常的資訊
# -e &amp;lt;quoted-query-string&amp;gt; | SQL from command line
# 練習，新增一筆資料進去
$ nano 20220721.txt
9,Mffy,4,Idore,1000.00
# 將檔案 append 到 hdfs
$ hdfs dfs -appendToFile 20220721.txt mydataset/customers/customers.csv
# 檢查是否符合預期
$ hive -e &amp;#34;select * from customers&amp;#34; 2&amp;gt;/dev/null
1 Ramesh 32 Ahmedabad 2000.0
2 Khilan 25 Delhi 1500.0
3 kaushik 23 Kota 2000.0
4 Chaitali 25 Mumbai 6500.0
5 Hardik 27 Bhopal 8500.0
6 Komal 22 MP 4500.0
7 Muffy 24 Indore 10000.0
8 hehe 25 taiwan 50000.0
9 Mffy 4 Idore 1000.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;==&lt;strong&gt;只要是 Hive 的 table 一定有一個對應的資料夾&lt;/strong&gt;==&lt;/li&gt;
&lt;li&gt;hadoop 被設計出來是處理 RAW data ，所以不能在 hive 下達 &lt;code&gt;update&lt;/code&gt; 或 &lt;code&gt;delete&lt;/code&gt; 的命令，
硬要下，你會得到以下錯誤訊息 : &lt;code&gt; Attempt to do update or delete using transaction manager that does not support these operations.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果要對 hdfs 檔案系統的資料做局部的修改，要動用到 HBase ，他可以對 hdfs 系統的檔案，進行 新增、刪除、修改和查詢檔案。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;查詢與刪除 Customers 資料表&lt;span class="hx:absolute hx:-mt-20" id="查詢與刪除-customers-資料表"&gt;&lt;/span&gt;
&lt;a href="#%e6%9f%a5%e8%a9%a2%e8%88%87%e5%88%aa%e9%99%a4-customers-%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用簡易的SQL語法分析Hive裡面的資料
查看customers這個table裡面有幾筆資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rbean@dta1:~$ hive -S -e &amp;#34;select count(*) from customers&amp;#34; 2&amp;gt;/dev/null
7&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查看薪水 &amp;gt; 4500 的id,姓名和薪資的資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rbean@dta1:~$ hive -S -e &amp;#34;select id,name,salary from customers where salary &amp;gt;= 4500&amp;#34; 2&amp;gt;/dev/null
4 Chaitali 6500.0
5 Hardik 8500.0
6 Komal 4500.0
7 Muffy 10000.0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;刪除table&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rbean@dta1:~$ hive -e &amp;#34;drop table customers&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;因是內部資料表, 所以 mydataset/customers 資料夾會被刪除&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rbean@dta1:~$ hdfs dfs -ls mydataset/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;分析102 年~ 110 年各鄉鎮市區人口密度資料集&lt;span class="hx:absolute hx:-mt-20" id="分析102-年-110-年各鄉鎮市區人口密度資料集"&gt;&lt;/span&gt;
&lt;a href="#%e5%88%86%e6%9e%90102-%e5%b9%b4-110-%e5%b9%b4%e5%90%84%e9%84%89%e9%8e%ae%e5%b8%82%e5%8d%80%e4%ba%ba%e5%8f%a3%e5%af%86%e5%ba%a6%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;下載資料
bigred@dta1$ nano dt.sh
#!/bin/bash
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=C76A7B39-5BE7-4D6B-B797-0D52AACE11EB&amp;#39; | grep -e &amp;#39;^102&amp;#39; &amp;gt; p102.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p102.csv ok&amp;#34;
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=37AB8547-043D-4F53-9ADB-594EAE4358F4&amp;#39; | grep -e &amp;#39;^103&amp;#39; &amp;gt; p103.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p103.csv ok&amp;#34;
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=EC708E79-7160-4148-AB36-C055F4D55CC5&amp;#39; | grep -e &amp;#39;^104&amp;#39; &amp;gt; p104.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p104.csv ok&amp;#34;
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=5B23A53B-C25A-4288-B24C-C8E65F76FDBB&amp;#39; | grep -e &amp;#39;^105&amp;#39; &amp;gt; p105.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p105.csv ok&amp;#34;
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=E7CE3815-30E1-4B92-A337-9C026EBC017F&amp;#39; | grep -e &amp;#39;^106&amp;#39; &amp;gt; p106.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p106.csv ok&amp;#34;
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=B54BD944-50DE-4618-8DB0-FC66EE5B64C1&amp;#39; | grep -e &amp;#39;^107&amp;#39; &amp;gt; p107.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p107.csv ok&amp;#34;
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=47072428-5C8F-4897-8535-DBF583572597&amp;#39; | grep -e &amp;#39;^108&amp;#39; &amp;gt; p108.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p108.csv ok&amp;#34;
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=F6DC3228-CA65-4F0C-A2B1-39D18D6D29DA&amp;#39; | grep -e &amp;#39;^109&amp;#39; &amp;gt; p109.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p109.csv ok&amp;#34;
wget --no-check-certificate -q -O - &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=C45AD94C-ED23-4381-8F3E-359CD5C276F0&amp;#39; | grep -e &amp;#39;^110&amp;#39; &amp;gt; p110.csv
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;p110.csv ok&amp;#34;
[ ! -d opendata/p ] &amp;amp;&amp;amp; mkdir -p opendata/p
mv p*.csv opendata/p
bigred@dta1:~$ sudo chmod &amp;#43;x dt.sh
bigred@dta1:~$ ./dt.sh
p102.csv ok
p103.csv ok
p104.csv ok
p105.csv ok
p106.csv ok
p107.csv ok
p108.csv ok
p109.csv ok
p110.csv ok
bigred@dta1:~$ tree -L 1 opendata
opendata
└── p
1 directory, 0 files
bigred@dta1:~$ hdfs dfs -mkdir /dataset/opendata
bigred@dta1:~$ hdfs dfs -put opendata/* /dataset/opendata
bigred@dta1:~$ hdfs dfs -ls /dataset/opendata
Found 1 items
drwxr-xr-x - bigred bigboss 0 2022-05-05 22:17 /dataset/opendata/p&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;建立外部人口密度資料表&lt;span class="hx:absolute hx:-mt-20" id="建立外部人口密度資料表"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b%e5%a4%96%e9%83%a8%e4%ba%ba%e5%8f%a3%e5%af%86%e5%ba%a6%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;外部資料表 EXTERNAL TABLE | 標料表被 drop 掉，資料還會存在&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;宣告和執行hive的SQL檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 宣告
bigred@dta1:~$ echo $&amp;#39;CREATE EXTERNAL TABLE twpop (
&amp;gt; year int,
&amp;gt; id string,
&amp;gt; total float,
&amp;gt; area float,
&amp;gt; density int
&amp;gt; )
&amp;gt; ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;
&amp;gt; STORED AS TEXTFILE LOCATION \&amp;#39;/dataset/opendata/p\&amp;#39;;&amp;#39; &amp;gt; twpop.hsql
## 執行
bigred@dta1:~$ hive -f twpop.hsql 2&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;分析102年~110年台灣人口密度的變化&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;igred@dta1:~$ hive -e &amp;#39;select year,sum(total)/10000 from twpop group by year order by year&amp;#39; 2&amp;gt;/dev/null
102 2337.3517
103 2343.3753
104 2349.2074
105 2353.9816
106 2357.1227
107 2358.8932
108 2360.3121
109 2356.1236
110 2337.5314&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;協同作業範例&lt;span class="hx:absolute hx:-mt-20" id="協同作業範例"&gt;&lt;/span&gt;
&lt;a href="#%e5%8d%94%e5%90%8c%e4%bd%9c%e6%a5%ad%e7%af%84%e4%be%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;人在rbean，讀取的資料與bigred是同一份&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rbean@dta1:~$ nano twpop.hsql
CREATE EXTERNAL TABLE twpop (
a int,
b string,
c float,
d float,
e int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY &amp;#39;,&amp;#39;
STORED AS TEXTFILE LOCATION &amp;#39;/dataset/opendata/p&amp;#39;;
rbean@dta1:~$ hive -f twpop.hsql 2&amp;gt;/dev/null
rbean@dta1:~$ hive -e &amp;#39;select a,sum(c)/10000 from twpop group by a order by a&amp;#39; 2&amp;gt;/dev/null
102 2337.3517
103 2343.3753
104 2349.2074
105 2353.9816
106 2357.1227
107 2358.8932
108 2360.3121
109 2356.1236
110 2337.5314&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/g6Khlmk.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;==大數據平台觀念==&lt;span class="hx:absolute hx:-mt-20" id="大數據平台觀念"&gt;&lt;/span&gt;
&lt;a href="#%e5%a4%a7%e6%95%b8%e6%93%9a%e5%b9%b3%e5%8f%b0%e8%a7%80%e5%bf%b5" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;很少有現成的大量資料，隨著時間的推移，持續更新資料與擴充來源，不是一口氣突然出現的&lt;/li&gt;
&lt;li&gt;並且資料需要經過一定的整理，不是直接使用&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;刪除twpop table&lt;span class="hx:absolute hx:-mt-20" id="刪除twpop-table"&gt;&lt;/span&gt;
&lt;a href="#%e5%88%aa%e9%99%a4twpop-table" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rbean@dta1:~$ hive -e &amp;#34;drop table twpop&amp;#34; 2&amp;gt;/dev/null
rbean@dta1:~$ hive -e &amp;#34;show tables&amp;#34; 2&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;問題：HDFS檔案系統裡的資料夾還在嗎？&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;rbean@dta1:~$ hdfs dfs -ls /dataset/opendata/p
Found 9 items
-rw-r--r-- 3 bigred bigboss 16677 2022-05-05 22:17 /dataset/opendata/p/p102.csv
-rw-r--r-- 3 bigred bigboss 15604 2022-05-05 22:17 /dataset/opendata/p/p103.csv
-rw-r--r-- 3 bigred bigboss 15603 2022-05-05 22:17 /dataset/opendata/p/p104.csv
-rw-r--r-- 3 bigred bigboss 15601 2022-05-05 22:17 /dataset/opendata/p/p105.csv
-rw-r--r-- 3 bigred bigboss 15604 2022-05-05 22:17 /dataset/opendata/p/p106.csv
-rw-r--r-- 3 bigred bigboss 15598 2022-05-05 22:17 /dataset/opendata/p/p107.csv
-rw-r--r-- 3 bigred bigboss 15597 2022-05-05 22:17 /dataset/opendata/p/p108.csv
-rw-r--r-- 3 bigred bigboss 15596 2022-05-05 22:17 /dataset/opendata/p/p109.csv
-rw-r--r-- 3 bigred bigboss 15594 2022-05-05 22:17 /dataset/opendata/p/p110.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;答案：在，這就是外部資料表（EXTERNAL TABLE），他在HDFS檔案系統裡面的資料不會因為資料表被刪除而被刪除，會保留著，這種運作模式，在傳統關連式資料庫叫做view。&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;==如果在*.hsql檔案裡面，沒有宣告EXTERNAL TABLE，那麼資料表被刪除，在HDFS檔案系統裡面的資料夾以及裡面存放的檔案都會被刪掉。==&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Hive 分割資料表 (Partition)&lt;span class="hx:absolute hx:-mt-20" id="hive-分割資料表-partition"&gt;&lt;/span&gt;
&lt;a href="#hive-%e5%88%86%e5%89%b2%e8%b3%87%e6%96%99%e8%a1%a8-partition" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在傳統關連式資料庫中，把重複的資料用最精簡的辦法來處理，就叫做正規化，而在Hive我們們叫做&lt;strong&gt;Partition&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;建立以年分割的人口密度外部資料表&lt;span class="hx:absolute hx:-mt-20" id="建立以年分割的人口密度外部資料表"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b%e4%bb%a5%e5%b9%b4%e5%88%86%e5%89%b2%e7%9a%84%e4%ba%ba%e5%8f%a3%e5%af%86%e5%ba%a6%e5%a4%96%e9%83%a8%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -mkdir mydataset
bigred@dta1:~$ echo $&amp;#39;CREATE EXTERNAL TABLE twpop_yp (
&amp;gt; id string,
&amp;gt; total int,
&amp;gt; area float,
&amp;gt; density int
&amp;gt; )
&amp;gt; PARTITIONED BY (year string)
&amp;gt; ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;
&amp;gt; STORED AS TEXTFILE LOCATION \&amp;#39;/user/$USER/mydataset/twpop_yp\&amp;#39;;&amp;#39; | envsubst &amp;gt; twpop_yp.hsql
## PARTITIONED BY (year string)，這行是宣告，等等用年來做切割，
## 因為我們是用年來收集和產生資料
## 上面命令會自動建立 mydataset/twpop_yp 目錄
bigred@dta1:~$ hive -f twpop_yp.hsql 2&amp;gt;/dev/null
# 查看外部資料表對應的資料夾
bigred@dta1:~$ hdfs dfs -ls mydataset/twpop_yp
bigred@dta1:~$ hive -e &amp;#39;show tables&amp;#39; 2&amp;gt;/dev/null
twpop
twpop_yp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;手動建立 twpop_yp 資料表的分割目錄&lt;span class="hx:absolute hx:-mt-20" id="手動建立-twpop_yp-資料表的分割目錄"&gt;&lt;/span&gt;
&lt;a href="#%e6%89%8b%e5%8b%95%e5%bb%ba%e7%ab%8b-twpop_yp-%e8%b3%87%e6%96%99%e8%a1%a8%e7%9a%84%e5%88%86%e5%89%b2%e7%9b%ae%e9%8c%84" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hive -S -e &amp;#34;alter table twpop_yp add if not exists partition (year=&amp;#39;102&amp;#39;)&amp;#34;
## 因為已經有宣告這個table可以做partition，所以這邊可以手動建立，
## 條件是如果year=102這個partition不存在，就建立year=102這個目錄。
bigred@dta1:~$ hdfs dfs -ls mydataset/twpop_yp
Found 1 items
drwxr-xr-x - bigred bigboss 0 2022-05-05 23:53 mydataset/twpop_yp/year=102&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;==所謂的資料表切割，就是在twpop_yp目錄下，再產生一個目錄，名字就是欄位(year=102)，也就代表，以後只要打SQL指令，後面加where year=102，系統就會對到year=102的資料夾==&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# -cp的指令，事實上是dtw系列的工作機在作業
# 不用 hdfs dfs -put 的原因是，因為如果檔案很大的話，只有 a1 一台電腦在奮鬥，可是用 -cp 的話，是全部的 work 虛擬主機在一起做事
$ hdfs dfs -cp /dataset/opendata/p/p102.csv mydataset/twpop_yp/year=102
$ hive -e &amp;#39;select * from twpop_yp where year=102 limit 2&amp;#39; 2&amp;gt;/dev/null
102 NULL 556920.0 23 102
102 NULL 389813.0 16 102
# year=102，事實上對應的是mydataset/twpop_yp/year=102這個資料夾，
# 所以等等只會讀這個資料夾的內容，如果有其他年份的資料夾，
# 就不會再浪費時間和運算資源去讀取不需要的檔案
# 移除 第一個 year 欄位
$ hdfs dfs -cat /dataset/opendata/p/p102.csv | cut -d &amp;#39;,&amp;#39; -f2- &amp;gt; pp102.csv
# 重新上傳處理好的檔案到hdfs檔案系統，並且刪除舊的檔案
$ hdfs dfs -put pp102.csv mydataset/twpop_yp/year=102/; hdfs dfs -rm mydataset/twpop_yp/year=102/p102.csv
Deleted mydataset/twpop_yp/year=102/p102.csv
$ hive -e &amp;#39;select * from twpop_yp where year=102&amp;#39; 2&amp;gt;/dev/null | tail -n 4
連江縣莒光鄉　 1438 4.7 306 102
連江縣東引鄉　 1171 3.8 308 102
東沙群島 NULL 2.38 NULL 102
南沙群島 NULL 0.4896 NULL 102
* 上面最後二筆資料的 第二個欄位資料 (people_total) 無法解析, 以至出現 NULL 值, 只要有一筆資料有欄位是 NULL 值, select count(*) from twpop_yp 這命令執行結果會出現 0
$ hive -e &amp;#39;select count(*) from twpop_yp where year=102 and total IS NOT NULL&amp;#39; 2&amp;gt;/dev/null
368&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;自動產生 twpop_yp 資料表分割目錄&lt;span class="hx:absolute hx:-mt-20" id="自動產生-twpop_yp-資料表分割目錄"&gt;&lt;/span&gt;
&lt;a href="#%e8%87%aa%e5%8b%95%e7%94%a2%e7%94%9f-twpop_yp-%e8%b3%87%e6%96%99%e8%a1%a8%e5%88%86%e5%89%b2%e7%9b%ae%e9%8c%84" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo &amp;#39;SET hive.exec.dynamic.partition.mode = nonstrict;
&amp;gt; INSERT OVERWRITE TABLE twpop_yp
&amp;gt; PARTITION (year)
&amp;gt; SELECT id,total,area,density,year
&amp;gt; FROM twpop; &amp;#39; &amp;gt; pp_insert.hsql
## 先看select的欄位排序，year的欄位一定要放最後，
## FROM twpop ，從twpop資料夾抓取資料，用年切割
## INSERT OVERWRITE TABLE twpop_yp，把SELECT出來的資料放到twpop_yp 資料表中
bigred@dta1:~$ hive -f pp_insert.hsql 2&amp;gt;/dev/null
bigred@dta1:~$ hdfs dfs -ls mydataset/twpop_yp
Found 9 items
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=102
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=103
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=104
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=105
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=106
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=107
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=108
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=109
drwxr-xr-x - bigred bigboss 0 2022-05-06 09:10 mydataset/twpop_yp/year=110
bigred@dta1:~$ hdfs dfs -ls mydataset/twpop_yp/year=102
Found 1 items
-rw-r--r-- 3 bigred bigboss 14821 2022-05-06 09:10
mydataset/twpop_yp/year=102/000000_0
bigred@dta1:~$ hdfs dfs -cat mydataset/twpop_yp/year=102/000000_0 | head -n 5
新北市板橋區　,556920,23.1373,24070
新北市三重區　,389813,16.317,23890
新北市中和區　,415742,20.144,20639
新北市永和區　,229062,5.7138,40089
新北市新莊區　,409760,19.7383,20760
cat: Unable to write to output stream.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;分析人口密度資料集&lt;span class="hx:absolute hx:-mt-20" id="分析人口密度資料集"&gt;&lt;/span&gt;
&lt;a href="#%e5%88%86%e6%9e%90%e4%ba%ba%e5%8f%a3%e5%af%86%e5%ba%a6%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ for i in {1..3}; do (echo &amp;#34;&amp;#34;; time hive -e &amp;#39;select sum(total)/10000 from twpop_yp where year=107&amp;#39; 2&amp;gt;/dev/null); done
2358.8932
real 0m29.999s
user 0m14.639s
sys 0m6.207s
2358.8932
real 0m30.437s
user 0m15.290s
sys 0m5.645s
2358.8932
real 0m29.259s
user 0m15.578s
sys 0m5.606s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;雖然是用Hive的SQL指令去執行，但實際上在跑的仍然是Map和Reduce&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ startjps
bigred@dta1:~$ hive -e &amp;#39;select sum(total)/10000 from twpop_yp where year=107&amp;#39; 2&amp;gt;/dev/null
2358.8932
bigred@dta1:~$ stopjps
[dtw1]
09:43:07
17018 MRAppMaster 256m ## MRAppMaster會先上線
[dtw2]
[dtw3]
09:43:15
19458 YarnChild 256m ## Map在抓資料
09:43:22
20083 YarnChild 384m ## Reduce在分析
bigred@dta1:~$ startjps
bigred@dta1:~$ hive -e &amp;#39;select * from twpop_yp limit 2&amp;#39; 2&amp;gt;/dev/null
新北市板橋區　 556920 23.1373 24070 102
新北市三重區　 389813 16.317 23890 102
## hive事實上有一個解析器叫做parser，他會分析指用者下的指令，且他知道twpop_yp的整個結構和內容，所以一看到這行指令
#就判斷只需要在HDFS上跑，不需要動到YARN和ＭapReduce的功能
bigred@dta1:~$ stopjps
[dtw1]
## 空的代表沒有動用MapReduce
[dtw2]
## 空的代表沒有動用MapReduce
[dtw3]
## 空的代表沒有動用MapReduce&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;==&lt;strong&gt;如果多人同時協同作業，要確定YARN運算系統的總作戰力&lt;/strong&gt;==&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Apache Parquet&lt;span class="hx:absolute hx:-mt-20" id="apache-parquet"&gt;&lt;/span&gt;
&lt;a href="#apache-parquet" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/TR6Ok3u.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a
href="https://parquet.apache.org/"target="_blank" rel="noopener"&gt;Parquet網站連結&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Column Storage&lt;span class="hx:absolute hx:-mt-20" id="column-storage"&gt;&lt;/span&gt;
&lt;a href="#column-storage" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Vertica stores data in a column format so it can be queried for best performance. Compared to row-based storage, column storage reduces disk I/O making it ideal for read-intensive workloads. VERTICA reads only the columns needed to answer the query. For example:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tickstore&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;AAPL&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;5/31/13&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/bUvQIkm.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;傳統的資料庫在執行上面那段SQL command時，會去讀取所有欄位的資料&lt;/p&gt;
&lt;p&gt;==Parquet 可以只讀取目標、篩選欄位(price、symbol 和 date 三個)，要用到的才讀，其他的不讀==&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Apache Parquet Format&lt;span class="hx:absolute hx:-mt-20" id="apache-parquet-format"&gt;&lt;/span&gt;
&lt;a href="#apache-parquet-format" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/U1nwwUi.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;傳統資料庫儲存資料 &amp;raquo;&amp;gt; 一筆一筆資料做儲存&lt;/li&gt;
&lt;li&gt;Parquet
&lt;ul&gt;
&lt;li&gt;&lt;font color=red&gt;&lt;strong&gt;相同欄位的資料存在一起，並且壓縮&lt;/strong&gt;&lt;/font&gt;，因為是這種儲存模式，所以才能讀取一個目標&lt;/li&gt;
&lt;li&gt;對資料做垂直切割。&lt;/li&gt;
&lt;li&gt;snappy 壓縮的演算法，特質:壓縮速度特快，犧牲壓縮比，但還是能到 1/10 的壓縮比&lt;/li&gt;
&lt;li&gt;企業備份資料，壓縮比最少 1/10&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;建立九宮格的人口密度資料表&lt;span class="hx:absolute hx:-mt-20" id="建立九宮格的人口密度資料表"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b%e4%b9%9d%e5%ae%ae%e6%a0%bc%e7%9a%84%e4%ba%ba%e5%8f%a3%e5%af%86%e5%ba%a6%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;宣告hive的SQL命令檔
bigred@dta1:~$ echo $&amp;#39;drop table if exists twpop_pp;
&amp;gt; CREATE EXTERNAL TABLE twpop_pp (
&amp;gt; id string,
&amp;gt; total int,
&amp;gt; area float,
&amp;gt; density int
&amp;gt; )
&amp;gt; PARTITIONED BY (year string)
&amp;gt; ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;
&amp;gt; STORED AS Parquet LOCATION \&amp;#39;/user/$USER/mydataset/twpop_pp\&amp;#39;; &amp;#39; | envsubst &amp;gt; twpop_pp.hsql
## PARTITIONED BY (year string)，用年做切割（水平切割）
## STORED AS Parquet，用Parquet的方式儲存資料（垂直切割）
## 上面命令會自動建立 mydataset/twpop_pp 目錄
執行hive的SQL命令檔
bigred@dta1:~$ hive -f twpop_pp.hsql 2&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;匯入人口密度資料&lt;span class="hx:absolute hx:-mt-20" id="匯入人口密度資料"&gt;&lt;/span&gt;
&lt;a href="#%e5%8c%af%e5%85%a5%e4%ba%ba%e5%8f%a3%e5%af%86%e5%ba%a6%e8%b3%87%e6%96%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo &amp;#39;SET hive.exec.dynamic.partition.mode = nonstrict;
&amp;gt; INSERT OVERWRITE TABLE twpop_pp
&amp;gt; PARTITION (year)
&amp;gt; SELECT id,total,area,density,year
&amp;gt; FROM twpop; &amp;#39; &amp;gt; ppp_insert.hsql
bigred@dta1:~$ hive -f ppp_insert.hsql 2&amp;gt;/dev/null
bigred@dta1:~$ hdfs dfs -ls mydataset/twpop_pp
Found 9 items
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=102
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=103
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=104
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=105
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=106
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=107
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=108
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=109
drwxr-xr-x - bigred bigboss 0 2022-05-06 10:50 mydataset/twpop_pp/year=110
bigred@dta1:~$ hdfs dfs -cat mydataset/twpop_pp/year=102/000000_0 | head -c 36
PAR1 , 6( 高雄cat: Unable to write to output stream.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;parquet會將資料做壓縮&lt;span class="hx:absolute hx:-mt-20" id="parquet會將資料做壓縮"&gt;&lt;/span&gt;
&lt;a href="#parquet%e6%9c%83%e5%b0%87%e8%b3%87%e6%96%99%e5%81%9a%e5%a3%93%e7%b8%ae" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;檢查Partition &amp;#43; Parquet儲存完的資料大小
bigred@dta1:~$ hdfs dfs -ls -h mydataset/twpop_pp/year=102/000000_0
-rw-r--r-- 3 bigred bigboss 14.0 K 2022-05-06 10:50 mydataset/twpop_pp/year=102/000000_0
檢查只用Partition儲存完的資料大小
bigred@dta1:~$ hdfs dfs -ls -h mydataset/twpop_yp/year=102/000000_0
-rw-r--r-- 3 bigred bigboss 14.5 K 2022-05-06 09:10 mydataset/twpop_yp/year=102/000000_0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;這裡只差0.5kb是因為目前的資料量比較小，所以差異不大&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;實名制口罩 1.0 - Hive (Extract-Load-Transform)&lt;span class="hx:absolute hx:-mt-20" id="實名制口罩-10---hive-extract-load-transform"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e5%90%8d%e5%88%b6%e5%8f%a3%e7%bd%a9-10---hive-extract-load-transform" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h4&gt;下載口罩 1.0 資料集&lt;span class="hx:absolute hx:-mt-20" id="下載口罩-10-資料集"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%8b%e8%bc%89%e5%8f%a3%e7%bd%a9-10-%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## wget下載壓縮檔
bigred@dta1:~$ wget http://www.oc99.org/dt/dataset/twmask.zip
--2022-05-06 13:02:26-- http://www.oc99.org/dt/dataset/twmask.zip
Resolving www.oc99.org (www.oc99.org)... 104.131.160.22
Connecting to www.oc99.org (www.oc99.org)|104.131.160.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 860260408 (820M)
Saving to: &amp;#39;twmask.zip&amp;#39;
twmask.zip 100%[====================================================================&amp;gt;] 820.41M 5.21MB/s in 2m 16s
2022-05-06 13:04:42 (6.05 MB/s) - &amp;#39;twmask.zip&amp;#39; saved [860260408/860260408]
bigred@dta1:~$ ls -alh twmask.zip
-rw-r--r-- 1 bigred bigred 821M Jul 11 2021 twmask.zip
bigred@dta1:~$ unzip twmask.zip
bigred@dta1:~$ dir twmask | wc -l
5585
bigred@dta1:~$ hdfs dfs -mkdir -p /dataset/twmask
bigred@dta1:~$ time hdfs dfs -put -f twmask/* /dataset/twmask/
real 4m51.668s
user 0m10.768s
sys 0m33.188s
bigred@dta1:~$ hdfs dfs -ls /dataset/twmask | wc -l
5583
## 少兩筆是因為在hdfs檔案系統裡面沒有.和..的目錄&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4&gt;檢視口罩 1.0 資料集&lt;span class="hx:absolute hx:-mt-20" id="檢視口罩-10-資料集"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96%e5%8f%a3%e7%bd%a9-10-%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 由檔名可以得知2020/03/12日開始每一小時會抓一次資料
bigred@dta1:~$ hdfs dfs -ls /dataset/twmask | grep &amp;#39;/12-03&amp;#39; | head -n 5
-rw-r--r-- 3 bigred bigboss 733586 2022-05-06 13:25 /dataset/twmask/12-03-2020-00-29.csv
-rw-r--r-- 3 bigred bigboss 733586 2022-05-06 13:25 /dataset/twmask/12-03-2020-01-29.csv
-rw-r--r-- 3 bigred bigboss 733586 2022-05-06 13:25 /dataset/twmask/12-03-2020-02-29.csv
-rw-r--r-- 3 bigred bigboss 733586 2022-05-06 13:25 /dataset/twmask/12-03-2020-03-29.csv
-rw-r--r-- 3 bigred bigboss 733586 2022-05-06 13:25 /dataset/twmask/12-03-2020-04-29.csv
## 2020/03/28日開始每半小時會抓一次資料
bigred@dta1:~$ hdfs dfs -ls /dataset/twmask | grep &amp;#39;/28-03&amp;#39; | head -n 3
-rw-r--r-- 3 bigred bigboss 574469 2022-05-06 13:28 /dataset/twmask/28-03-2020-00-09.csv
-rw-r--r-- 3 bigred bigboss 574469 2022-05-06 13:28 /dataset/twmask/28-03-2020-00-39.csv
-rw-r--r-- 3 bigred bigboss 574469 2022-05-06 13:28 /dataset/twmask/28-03-2020-01-09.csv
## 2020/04/18日開始每15分鐘會抓一次資料
bigred@dta1:~$ hdfs dfs -ls /dataset/twmask | grep &amp;#39;/18-04&amp;#39; | head -n 2
-rw-r--r-- 3 bigred bigboss 622556 2022-05-06 13:26 /dataset/twmask/18-04-2020-00-02.csv
-rw-r--r-- 3 bigred bigboss 633774 2022-05-06 13:26 /dataset/twmask/18-04-2020-00-17.csv
## 一直收集到2020/05/31日晚上11點57分
bigred@dta1:~$ dir twmask | tail -n 5
-rw-r--r-- 1 bigred bigred 36K Jun 1 2020 31-05-2020-22-57.csv
-rw-r--r-- 1 bigred bigred 36K Jun 1 2020 31-05-2020-23-12.csv
-rw-r--r-- 1 bigred bigred 36K Jun 1 2020 31-05-2020-23-27.csv
-rw-r--r-- 1 bigred bigred 36K Jun 1 2020 31-05-2020-23-42.csv
-rw-r--r-- 1 bigred bigred 36K Jun 1 2020 31-05-2020-23-57.csv
## 看欄位名稱
bigred@dta1:~$ hdfs dfs -cat /dataset/twmask/12-03-2020-23-14.csv | head -n 3
﻿醫事機構代碼,醫事機構名稱,醫事機構地址,醫事機構電話,成人口罩剩餘數,兒童口罩剩餘數,來源資料時間
0145080011,衛生福利部花蓮醫院豐濱原住民分院,花蓮縣豐濱鄉豐濱村光豐路４１號,(03)8358141,3652,2287,2020/03/12 23:13:58
0291010010,連江縣立醫院,連江縣南竿鄉復興村２１７號,(083)623995,0,274,2020/03/12 23:13:58
cat: Unable to write to output stream.
bigred@dta1:~$ hdfs dfs -cat /dataset/twmask/12-03-2020-23-14.csv | grep &amp;#39;金門縣&amp;#39;
2390010010,金門縣金城鎮衛生所,金門縣金城鎮民權路１４７號,(082)325059,0,1468,2020/03/12 23:13:58
2390020016,金門縣金沙鎮衛生所,金門縣金沙鎮三民路１６號,(082)333597,597,1678,2020/03/12 23:13:58
2390030030,金門縣金湖鎮衛生所,金門縣金湖鎮正義里成功７號之１,(082)336662,431,884,2020/03/12 23:13:58
2390040518,金門縣金寧鄉衛生所,金門縣金寧鄉盤山村仁愛新屯２之１號,(082)325735,2,66,2020/03/12 23:13:58
2390050032,金門縣烈嶼鄉衛生所,金門縣烈嶼鄉西口村西方６－５號,(082)362078,1305,1360,2020/03/12 23:13:58
5990010515,大賀藥局,金門縣金城鎮北門里民生路３號,(082)327678,1,8,2020/03/12 23:13:58
5990010542,大愛藥局,金門縣金城鎮東門里民族路１６號,(082)312266,1,0,2020/03/12 23:13:58
5990010631,大森藥局,金門縣金城鎮民生路２８、３０號１、２樓,(82)325100,6,0,2020/03/12 23:13:58
5990010668,百泰藥局,金門縣金城鎮西海路１段１號,(082)312832,303,453,2020/03/12 23:13:58
5990030062,大山藥局,金門縣金湖鎮新市里中正路２號、２－２號,(082)333290,1,0,2020/03/12 23:13:58&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4&gt;認識口罩 1.0 資料集&lt;span class="hx:absolute hx:-mt-20" id="認識口罩-10-資料集"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%8d%e8%ad%98%e5%8f%a3%e7%bd%a9-10-%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;2020/03/19 有發口罩的藥局總數
bigred@dta1:~$ hdfs dfs -cat /dataset/twmask/19-03-2020-14-06.csv | grep -e &amp;#34;^5&amp;#34; | wc -l
5946
2020/03/19 有發口罩的區公所總數
bigred@dta1:~$ hdfs dfs -cat /dataset/twmask/19-03-2020-14-06.csv | grep -e &amp;#34;^2&amp;#34; | wc -l
335
2020/04/19 有發口罩的藥局總數
bigred@dta1:~$ hdfs dfs -cat /dataset/twmask/19-04-2020-09-18.csv | grep -e &amp;#34;^5&amp;#34; | wc -l
387
## 因爲星期日藥局休息, 所以數字變少&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h4&gt;產生 口罩 1.0 資料表&lt;span class="hx:absolute hx:-mt-20" id="產生-口罩-10-資料表"&gt;&lt;/span&gt;
&lt;a href="#%e7%94%a2%e7%94%9f-%e5%8f%a3%e7%bd%a9-10-%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo $&amp;#39;DROP TABLE IF EXISTS daily_mask;
&amp;gt; CREATE EXTERNAL TABLE daily_mask (
&amp;gt; code string,
&amp;gt; name string,
&amp;gt; address string,
&amp;gt; tel string,
&amp;gt; adult INT,
&amp;gt; child INT,
&amp;gt; dt string
&amp;gt; )
&amp;gt; ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;
&amp;gt; STORED AS TEXTFILE LOCATION \&amp;#39;/dataset/twmask\&amp;#39;; &amp;#39; &amp;gt; daily_mask.hsql
bigred@dta1:~$ hive -S -f daily_mask.hsql
bigred@dta1:~$ hive -S -e &amp;#39;show tables&amp;#39; 2&amp;gt;/dev/null
daily_mask
twpop
twpop_pp
twpop_yp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;檢視 口罩 1.0 資料表&lt;span class="hx:absolute hx:-mt-20" id="檢視-口罩-10-資料表"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-%e5%8f%a3%e7%bd%a9-10-%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h4&gt;口罩 1.0 分析 - 單一健康服務中心&lt;span class="hx:absolute hx:-mt-20" id="口罩-10-分析---單一健康服務中心"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%a3%e7%bd%a9-10-%e5%88%86%e6%9e%90---%e5%96%ae%e4%b8%80%e5%81%a5%e5%ba%b7%e6%9c%8d%e5%8b%99%e4%b8%ad%e5%bf%83" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h4&gt;口罩 1.0 分析 - 單一藥局&lt;span class="hx:absolute hx:-mt-20" id="口罩-10-分析---單一藥局"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%a3%e7%bd%a9-10-%e5%88%86%e6%9e%90---%e5%96%ae%e4%b8%80%e8%97%a5%e5%b1%80" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h3&gt;提升分析效能&lt;span class="hx:absolute hx:-mt-20" id="提升分析效能"&gt;&lt;/span&gt;
&lt;a href="#%e6%8f%90%e5%8d%87%e5%88%86%e6%9e%90%e6%95%88%e8%83%bd" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h4&gt;顯示單日每一個小時的總量 (5 千多個檔)&lt;span class="hx:absolute hx:-mt-20" id="顯示單日每一個小時的總量-5-千多個檔"&gt;&lt;/span&gt;
&lt;a href="#%e9%a1%af%e7%a4%ba%e5%96%ae%e6%97%a5%e6%af%8f%e4%b8%80%e5%80%8b%e5%b0%8f%e6%99%82%e7%9a%84%e7%b8%bd%e9%87%8f-5-%e5%8d%83%e5%a4%9a%e5%80%8b%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h4&gt;建立 twmask 資料集壓密目錄&lt;span class="hx:absolute hx:-mt-20" id="建立-twmask-資料集壓密目錄"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-twmask-%e8%b3%87%e6%96%99%e9%9b%86%e5%a3%93%e5%af%86%e7%9b%ae%e9%8c%84" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nano twmcompact.pig
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; load &lt;span class="s1"&gt;&amp;#39;/dataset/twmask&amp;#39;&lt;/span&gt; using PigStorage&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; filter a by &lt;span class="nv"&gt;$0&lt;/span&gt;!&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;醫事機構代碼&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rmf /dataset/twmcompact&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;store b into &lt;span class="s1"&gt;&amp;#39;/dataset/twmcompact&amp;#39;&lt;/span&gt; using PigStorage&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pig twmcompact.pig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;在 pig 的語法中，&lt;code&gt;$0,1,2..&lt;/code&gt;，代表第一個, 第二個，第三個欄位&amp;hellip;依此類推&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filter a by $0!='醫事機構代碼'&lt;/code&gt;，代表要擷取第一欄位不等於 &lt;code&gt;醫事機構代碼&lt;/code&gt;，的所有資料&lt;/li&gt;
&lt;li&gt;pig 會將資料壓密，意思就是將 5000多個檔案，壓扁成 20 幾個檔案，並不是將資料壓縮&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;建立 twmask 資料集壓密目錄&lt;span class="hx:absolute hx:-mt-20" id="建立-twmask-資料集壓密目錄-1"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-twmask-%e8%b3%87%e6%96%99%e9%9b%86%e5%a3%93%e5%af%86%e7%9b%ae%e9%8c%84-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -ls -h /dataset/twmcompact
Found 27 items
-rw-r--r-- 2 bigred bigboss 0 2023-02-19 01:53 /dataset/twmcompact/_SUCCESS
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00000
-rw-r--r-- 2 bigred bigboss 126.8 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00001
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00002
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00003
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00004
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00005
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00006
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00007
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00008
-rw-r--r-- 2 bigred bigboss 126.8 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00009
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00010
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00011
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:52 /dataset/twmcompact/part-m-00012
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00013
-rw-r--r-- 2 bigred bigboss 126.8 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00014
-rw-r--r-- 2 bigred bigboss 126.8 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00015
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00016
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00017
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00018
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00019
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00020
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00021
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00022
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00023
-rw-r--r-- 2 bigred bigboss 126.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00024
-rw-r--r-- 2 bigred bigboss 11.9 M 2023-02-19 01:53 /dataset/twmcompact/part-m-00025&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;建立 twmcompact 資料表&lt;span class="hx:absolute hx:-mt-20" id="建立-twmcompact-資料表"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-twmcompact-%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $&amp;#39;DROP TABLE IF EXISTS twmcompact;
CREATE EXTERNAL TABLE twmcompact (
code string,
name string,
address string,
tel string,
adult INT,
child INT,
dt string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;
STORED AS TEXTFILE LOCATION \&amp;#39;/dataset/twmcompact\&amp;#39;; &amp;#39; &amp;gt; twmcompact.hsql
$ hive -S -f twmcompact.hsql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;顯示單日每一個小時的總量 (25 個檔)&lt;span class="hx:absolute hx:-mt-20" id="顯示單日每一個小時的總量-25-個檔"&gt;&lt;/span&gt;
&lt;a href="#%e9%a1%af%e7%a4%ba%e5%96%ae%e6%97%a5%e6%af%8f%e4%b8%80%e5%80%8b%e5%b0%8f%e6%99%82%e7%9a%84%e7%b8%bd%e9%87%8f-25-%e5%80%8b%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from twmcompact where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; group by substring(dt,12,8) order by t&amp;#34; 2&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;建立 Parquet 資料集檔&lt;span class="hx:absolute hx:-mt-20" id="建立-parquet-資料集檔"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-parquet-%e8%b3%87%e6%96%99%e9%9b%86%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;How to Set Reducers in Pig, Hive And MapReduce
https://hadoopjournal.wordpress.com/2015/05/30/set-reducers-in-pig-hive-and-mapreduce/
# 因 pig 內定不會處理 parquet 的資料，所以下載一個 *.jar 檔，讓 pig 可以處理 parquet 的資料。
$ wget http://www.oc99.org/dt/parquet-pig-bundle-1.6.0.jar
$ sudo mv parquet-pig-bundle-1.6.0.jar /opt/pig-0.17.0/lib/
# 第一行宣告 parquet 的資料用 snappy 壓縮法壓縮
# parquet.pig.ParquetStorer() ，請 pig 將資料用 parquet 的方式儲存資料
$ nano twmparquet.pig
SET parquet.compression snappy;
a = load &amp;#39;/dataset/twmcompact&amp;#39; using PigStorage(&amp;#39;,&amp;#39;) as (code:chararray, name:chararray, address: chararray, tel:chararray, adult:int, child:int, dt:chararray);
rmf /dataset/twmparquet;
store a into &amp;#39;/dataset/twmparquet&amp;#39; using parquet.pig.ParquetStorer();
$ pig twmparquet.pig
$ hdfs dfs -ls -h /dataset/twmparquet
Found 29 items
-rw-r--r-- 2 bigred bigboss 0 2023-02-19 02:20 /dataset/twmparquet/_SUCCESS
-rw-r--r-- 2 bigred bigboss 318 2023-02-19 02:20 /dataset/twmparquet/_common_metadata
-rw-r--r-- 2 bigred bigboss 19.9 K 2023-02-19 02:20 /dataset/twmparquet/_metadata
-rw-r--r-- 2 bigred bigboss 10.0 M 2023-02-19 02:20 /dataset/twmparquet/part-m-00000.snappy.parquet
-rw-r--r-- 2 bigred bigboss 11.1 M 2023-02-19 02:20 /dataset/twmparquet/part-m-00001.snappy.parquet
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;chararray | 同 SQL 的 varcher 、 hive 的 string&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;建立可讀取 Parquet 資料集的外部資料表&lt;span class="hx:absolute hx:-mt-20" id="建立可讀取-parquet-資料集的外部資料表"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b%e5%8f%af%e8%ae%80%e5%8f%96-parquet-%e8%b3%87%e6%96%99%e9%9b%86%e7%9a%84%e5%a4%96%e9%83%a8%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $&amp;#39;DROP TABLE IF EXISTS twmparquet;
CREATE EXTERNAL TABLE twmparquet (
code string,
name string,
address string,
tel string,
adult INT,
child INT,
dt string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;
STORED AS Parquet LOCATION \&amp;#39;/dataset/twmparquet\&amp;#39;
TBLPROPERTIES (\&amp;#39;parquet.compress\&amp;#39;=\&amp;#39;snappy\&amp;#39;); &amp;#39; &amp;gt; twmparquet.hsql
$ hive -S -f twmparquet.hsql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;STORED AS Parquet LOCATION \'/dataset/twmparquet\'&lt;/code&gt; | 用 pqrqet 儲存的資料來源&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TBLPROPERTIES (\'parquet.compress\'=\'snappy\')&lt;/code&gt; | 告訴 hive ，parquet 的壓縮法用 snappy&lt;/li&gt;
&lt;li&gt;zip 與 rar 的壓縮技術，pig 和 hive 不支援&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;顯示單日每一個小時的總量&lt;span class="hx:absolute hx:-mt-20" id="顯示單日每一個小時的總量"&gt;&lt;/span&gt;
&lt;a href="#%e9%a1%af%e7%a4%ba%e5%96%ae%e6%97%a5%e6%af%8f%e4%b8%80%e5%80%8b%e5%b0%8f%e6%99%82%e7%9a%84%e7%b8%bd%e9%87%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from twmparquet where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; group by substring(dt,12,8) order by t&amp;#34; 2&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;建立 &amp;ldquo;九宮格&amp;rdquo; 資料表&lt;span class="hx:absolute hx:-mt-20" id="建立-九宮格-資料表"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-%e4%b9%9d%e5%ae%ae%e6%a0%bc-%e8%b3%87%e6%96%99%e8%a1%a8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $&amp;#39;DROP TABLE IF EXISTS twmpp;
CREATE TABLE twmpp (
code string,
name string,
address string,
tel string,
adult INT,
child INT,
dt string
)
PARTITIONED BY (month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY \&amp;#39;,\&amp;#39;
STORED AS Parquet
TBLPROPERTIES (\&amp;#39;parquet.compress\&amp;#39;=\&amp;#39;snappy\&amp;#39;);&amp;#39; &amp;gt; twmpp.hsql
$ hive -S -f twmpp.hsql
[重要] twmpp 是內部資料表, 所以它的 資料 存儲目錄在 /user/$USER/hive/twmpp &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;內部資料表，標準動作 &amp;mdash;&amp;gt; 在 hdfs 產生資料夾&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $&amp;#39;SET hive.exec.dynamic.partition.mode = nonstrict;
INSERT OVERWRITE TABLE twmpp
PARTITION (month)
SELECT code,name,address,tel,adult,child,dt,substring(dt,6,2)
FROM twmcompact;&amp;#39; &amp;gt; insertpp.hsql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SELECT code,name,address,tel,adult,child,dt,substring(dt,6,2) FROM twmcompact;&lt;/code&gt; ，從壓密資料表，選擇各個欄位的資料，多了一個月份的欄位 &lt;code&gt;substring(dt,6,2)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;INSERT OVERWRITE TABLE twmpp&lt;/code&gt; ，九宮格資料表&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PARTITION (month)&lt;/code&gt;，Partition 會根據資料的最後一個欄位做切割，以本例子為例，用月做切割，對應在 hdfs 終究是一個資料夾的名字&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hive.exec.dynamic.partition.mode = nonstrict&lt;/code&gt; ，動態產生 Partition 的資料夾&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;顯示單日每一個小時的總量&lt;span class="hx:absolute hx:-mt-20" id="顯示單日每一個小時的總量-1"&gt;&lt;/span&gt;
&lt;a href="#%e9%a1%af%e7%a4%ba%e5%96%ae%e6%97%a5%e6%af%8f%e4%b8%80%e5%80%8b%e5%b0%8f%e6%99%82%e7%9a%84%e7%b8%bd%e9%87%8f-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h4&gt;檢視 原始, 壓扁, Parquet 及 九宮格 目錄&lt;span class="hx:absolute hx:-mt-20" id="檢視-原始-壓扁-parquet-及-九宮格-目錄"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-%e5%8e%9f%e5%a7%8b-%e5%a3%93%e6%89%81-parquet-%e5%8f%8a-%e4%b9%9d%e5%ae%ae%e6%a0%bc-%e7%9b%ae%e9%8c%84" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>dt*_script 簡介</title><link>https://blog.kubeantony.com/archive/data-platform/dt-script-%E7%B0%A1%E4%BB%8B/</link><pubDate>Tue, 14 Feb 2023 02:11:40 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/dt-script-%E7%B0%A1%E4%BB%8B/</guid><description>
&lt;h2&gt;dtwget&lt;span class="hx:absolute hx:-mt-20" id="dtwget"&gt;&lt;/span&gt;
&lt;a href="#dtwget" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/tUFs5ui.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;當我們透過 &lt;code&gt;dtwget 33&lt;/code&gt; 到 &lt;code&gt;apache.org&lt;/code&gt; 網站下載資料，要先確定 套件是否有更新，再執行 &lt;code&gt;dtwget 33&lt;/code&gt; 這個命令&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
[ &amp;#34;$#&amp;#34; != 1 ] &amp;amp;&amp;amp; echo &amp;#34;dtwget version&amp;#34; &amp;amp;&amp;amp; exit 1
[ ! -d ~/vmalpdt/hdp${1} ] &amp;amp;&amp;amp; echo &amp;#34;~/vmalpdt/hdp${1} not found&amp;#34; &amp;amp;&amp;amp; exit 1
[ ! -f ~/vmalpdt/hdp${1}/dlist ] &amp;amp;&amp;amp; echo &amp;#34;~/vmalpdt/hdp${1}/dlist not found&amp;#34; &amp;amp;&amp;amp; exit 1
read -p &amp;#34;下載資科套件 ? (YES/NO) &amp;#34; ans
if [ &amp;#34;$ans&amp;#34; == &amp;#34;YES&amp;#34; ]; then
[ -d ~/vmalpdt/hdp${1}/opt ] &amp;amp;&amp;amp; rm -r ~/vmalpdt/hdp${1}/opt &amp;amp;&amp;gt;/dev/null
mkdir -p ~/vmalpdt/hdp${1}/opt
while read line; do
wget $line &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
n=${line##*/}
tar xvfz $n -C ~/vmalpdt/hdp${1}/opt &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n ok&amp;#34;
rm $n
else
n=${line##*/}
echo &amp;#34;$n failed&amp;#34;
fi
done &amp;lt; ~/vmalpdt/hdp${1}/dlist
fi
if [ -f ~/vmalpdt/hdp${1}/hadoop-2.10.1.zip ]; then
cd ~/vmalpdt/hdp${1}/opt/
unzip ~/vmalpdt/hdp${1}/hadoop-2.10.1.zip &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;Hadoop-2.10.1 ok&amp;#34;
fi
sudo chown -R bigred:bigred ~/vmalpdt/hdp${1}/opt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/tTF44TE.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果不想一直到 &lt;code&gt;apache.org&lt;/code&gt; 下載套件，可以先把套件載進本機，再自己寫一支程式 &lt;code&gt;dttar&lt;/code&gt;，一樣解壓縮到 &lt;code&gt;~/vmusdt/hdp33/opt/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;dtcopy&lt;span class="hx:absolute hx:-mt-20" id="dtcopy"&gt;&lt;/span&gt;
&lt;a href="#dtcopy" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/qhTo9B3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;dtconf&lt;span class="hx:absolute hx:-mt-20" id="dtconf"&gt;&lt;/span&gt;
&lt;a href="#dtconf" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h2&gt;/etc/profile&lt;span class="hx:absolute hx:-mt-20" id="etcprofile"&gt;&lt;/span&gt;
&lt;a href="#etcprofile" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;gw=$(/sbin/route -n | grep -e &amp;#34;^0.0.0.0 &amp;#34; | head -n 1)
export GWIF=${gw##* }
ips=$(/sbin/ifconfig $GWIF | grep &amp;#39;inet &amp;#39;)
export IP=$(echo $ips | cut -d&amp;#39; &amp;#39; -f2 | cut -d&amp;#39;:&amp;#39; -f2)
export NETID=${IP%.*}
export GW=$(/sbin/route -n | grep -e &amp;#39;^0.0.0.0&amp;#39; | tr -s \ - | cut -d &amp;#39; &amp;#39; -f2)
export PATH=/home/bigboss/bin:/home/bigboss/vmusdt/bin:$PATH
clear; sleep 3
v=$(cat /etc/os-release | grep &amp;#39;PRETTY_NAME&amp;#39; | cut -d &amp;#39;=&amp;#39; -f 2)
echo &amp;#34;Welcome to DT Platform V 22.07 ($v)&amp;#34;
[ &amp;#34;$IP&amp;#34; != &amp;#34;&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;IP : $IP&amp;#34;
echo &amp;#34;&amp;#34;
alias ping=&amp;#39;ping -c 4 &amp;#39;
alias dir=&amp;#39;ls -alh &amp;#39;
alias poweroff=&amp;#39;sudo poweroff&amp;#39;
alias reboot=&amp;#39;sudo reboot&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/profile&lt;/code&gt; | 使用者登入後，第一支 run 的程式 ( 注意，不是開機後，是登入後 )&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source /home/bigboss/us.bash&lt;/code&gt; | 會執行 us.bash 這支程式，且程式裡的變數，會全部保留在 bigboss 使用者的環境裡面。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;us.bash&lt;span class="hx:absolute hx:-mt-20" id="usbash"&gt;&lt;/span&gt;
&lt;a href="#usbash" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/&lt;/code&gt; | Java 的家，他的變數一定要大寫的 JAVA_HOME&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export HADOOP_HOME=/opt/hadoop-3.3.3&lt;/code&gt; | hadoop 的家&lt;/li&gt;
&lt;li&gt;&lt;code&gt;us.bash&lt;/code&gt; 會將 PATH 環境變數 重新設定，有了這個設定，可以讓我們順利的 run { &lt;code&gt;dtcopy&lt;/code&gt;, &lt;code&gt;dtconf&lt;/code&gt;, &lt;code&gt;dtwget&lt;/code&gt;, &lt;code&gt;dthdpchk&lt;/code&gt;}&lt;/li&gt;
&lt;li&gt;任何作業系統，裡面都會有 PATH 環境變數，裡面記了一堆目錄，只要把程式塞在其中一個目錄裡面，就可以在任何目錄 run 這支程式 。&lt;/li&gt;
&lt;li&gt;要給 /home/bigboss 775 的權限，us.bash 也要&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
adminuser=bigboss
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export HADOOP_HOME=/opt/hadoop-3.3.3
export HADOOP_LOG_DIR=/tmp
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=&amp;#34;-Djava.library.path=$HADOOP_HOME/lib/native&amp;#34;
# export HADOOP_USER_CLASSPATH_FIRST=true
[ -z $HADOOP_USER_NAME ] &amp;amp;&amp;amp; [ $SHELL == &amp;#39;/bin/bash&amp;#39; ] &amp;amp;&amp;amp; declare -r HADOOP_USER_NAME=$USER
# JobHistory log file path, 會自動產生目錄
# export HADOOP_MAPRED_LOG_DIR=&amp;#34;/home/bigboss/jhslog&amp;#34;
export YARN_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export YARN_LOG_DIR=/tmp
# hadoop 3.2.1 及 3.1.3 這二個版本只要執行檔案傳送命令就會出現以下訊息
# hadoop fs -put -f /etc/passwd /tmp
# SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
export HADOOP_ROOT_LOGGER=&amp;#34;WARN,console&amp;#34;
export PIG_HOME=/opt/pig-0.17.0
export PIG_HEAPSIZE=512
export HIVE_HOME=/opt/apache-hive-3.1.3-bin
export PATH=/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH=/home/bigboss/vmusdt/bin:$PATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PIG_HOME/bin:$HIVE_HOME/bin
export HBASE_HOME=/opt/hbase-2.4.13
export HBASE_CONF_DIR=/opt/hbase-2.4.13/conf
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.6.3-bin
export ZOO_LOG_DIR=/tmp/logs
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin
#export ZEPPELIN_HOME=/opt/zeppelin-0.9.0-bin-all
#export PATH=$PATH:$ZEPPELIN_HOME/bin
export SPARK_HOME=/opt/spark-3.2.2-bin-hadoop3.2
export SPARK_CONF_DIR=$SPARK_HOME/conf
export PYSPARK_PYTHON=/usr/bin/python3
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
if [ -d /opt/jupyter/miniconda3/bin ];then
export ANACONDA_ROOT=/opt/jupyter/miniconda3
export PATH=$ANACONDA_ROOT/bin:$PATH
export PYSPARK_PYTHON=$ANACONDA_ROOT/bin/python
fi
if [ &amp;#34;$USER&amp;#34; != &amp;#34;&amp;#34; ]; then
[ -f /home/$USER/dkc.env ] &amp;amp;&amp;amp; source /home/$USER/dkc.env
if [ ! -d metastore_db ]; then
#hn=$(hostname)
#if [ ${hn:0:3} == &amp;#34;adm&amp;#34; ] || [ ${hn:0:2} == &amp;#34;ds&amp;#34; ] || [ ${hn:0:8} == &amp;#34;zeppelin&amp;#34; ]; then
echo -n &amp;#34;build derby database ...&amp;#34;
schematool -initSchema -dbType derby &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34; ok&amp;#34;
echo &amp;#34;set hive.cli.print.current.db=true;&amp;#34; &amp;gt; .hiverc
echo &amp;#34;set hive.metastore.warehouse.dir=/user/$USER/hive;&amp;#34; &amp;gt;&amp;gt; .hiverc
echo &amp;#34;set hive.exec.scratchdir=/user/$USER/tmp;&amp;#34; &amp;gt;&amp;gt; .hiverc
fi
fi
alias nano=&amp;#39;nano -Ynone&amp;#39;
alias dir=&amp;#39;ls -alh&amp;#39;
alias ssh=&amp;#39;ssh -q&amp;#39;
fi
[ -d ~/.ssh ] &amp;amp;&amp;amp; env &amp;gt; ~/.ssh/environment&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;ssh 遠端執行&lt;span class="hx:absolute hx:-mt-20" id="ssh-遠端執行"&gt;&lt;/span&gt;
&lt;a href="#ssh-%e9%81%a0%e7%ab%af%e5%9f%b7%e8%a1%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;當我們 run 以下的命令，執行者會是 ssh 這支程式
命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh &amp;lt; 主機名稱 &amp;gt; &amp;lt; command &amp;gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;以下命令執行時的環境變數，與本機的環境變數不同&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh dtw1 env&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;SHELL=/bin/bash
HBASE_CONF_DIR=/opt/hbase-2.4.13/conf
YARN_LOG_DIR=/tmp
YARN_HOME=/opt/hadoop-3.3.3
HBASE_LOG_DIR=/tmp
HADOOP_OPTS=-Djava.library.path=/opt/hadoop-3.3.3/lib/native
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
PWD=/home/bigboss
LOGNAME=bigboss
XDG_SESSION_TYPE=tty
HADOOP_MAPRED_LOG_DIR=/home/bigboss/jhslog
PIG_HOME=/opt/pig-0.17.0/
HIVE_HOME=/opt/apache-hive-3.1.3-bin
MOTD_SHOWN=pam
HOME=/home/bigboss
LANG=en_US.UTF-8
SSH_CONNECTION=192.168.23.135 44470 192.168.23.170 22
XDG_SESSION_CLASS=user
HADOOP_HOME=/opt/hadoop-3.3.3
USER=bigboss
PIG_HEAPSIZE=512
SHLVL=0
SPARK_HOME=/opt/spark-3.2.2-bin-hadoop3.2
XDG_SESSION_ID=8
LD_LIBRARY_PATH=/opt/hadoop-3.3.3/lib/native/
HBASE_HOME=/opt/hbase-2.4.13
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.23.135 44470 22
HADOOP_COMMON_LIB_NATIVE_DIR=/opt/hadoop-3.3.3/lib/native
PATH=/root/bin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/hadoop-3.3.3/bin:/opt/hadoop-3.3.3/sbin:/opt/pig-0.17.0/bin:/opt/apache-hive-3.1.3-bin/bin:/opt/spark-3.2.2-bin-hadoop3.2/bin:/opt/spark-3.2.2-bin-hadoop3.2/sbin:/opt/hbase-2.4.13/bin:/opt/apache-zookeeper-3.6.3-bin/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
HADOOP_LOG_DIR=/tmp
ZOO_LOG_DIR=/tmp/logs
_=/usr/bin/env&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;實作&lt;span class="hx:absolute hx:-mt-20" id="實作"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 dtw1 修改 .ssh/envirment 名稱，再 &lt;code&gt;ssh dtw1 env&lt;/code&gt;
可以發現， output 結果變了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要到人家家 run 他的命令，一定要在他家的 &lt;code&gt;.ssh/envirment&lt;/code&gt; 這個檔案裡面加 PATH 環境變數，因為他絕對不會讀取 /etc/profile&lt;/li&gt;
&lt;li&gt;這命令要成功，需要開啟公鑰憑證登入。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1&gt;HDFS 設定檔&lt;/h1&gt;&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>看見 HDFS 底層運作</title><link>https://blog.kubeantony.com/archive/data-platform/%E7%9C%8B%E8%A6%8B-hdfs-%E5%BA%95%E5%B1%A4%E9%81%8B%E4%BD%9C/</link><pubDate>Tue, 07 Feb 2023 11:26:26 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E7%9C%8B%E8%A6%8B-hdfs-%E5%BA%95%E5%B1%A4%E9%81%8B%E4%BD%9C/</guid><description>
&lt;style&gt;
.indent-title-1{
margin-left: 1em;
}
.indent-title-2{
margin-left: 2em;
}
.indent-title-3{
margin-left: 3em;
}
&lt;/style&gt;
&lt;hr&gt;
&lt;h2&gt;HDFS 分散檔案系統 - 寫入檔案&lt;span class="hx:absolute hx:-mt-20" id="hdfs-分散檔案系統---寫入檔案"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e5%88%86%e6%95%a3%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1---%e5%af%ab%e5%85%a5%e6%aa%94%e6%a1%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/ZO9Xrgr.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Client&lt;/code&gt;
在 dta1 虛擬主機，使用者為資料管理師 or 資料分析師 or 資料科學家&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wget File.txt&lt;/code&gt;
上網要分析的資料集，檔名為 &lt;code&gt;File.txt&lt;/code&gt; ，由 client 端的使用者下載&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hdfs dfs -put File.txt mydataset/&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;當檔案寫入 hdfs 時，會先在 client 所在的本機 (dta1)，將檔案切割成好幾個 block ( 資料區塊 )&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;切割方法 : &lt;strong&gt;128 mb 為一個單位&lt;/strong&gt; ( hadoop 內定預設值 )，只要超過 1 個 byte ，就會被多切一個 block 出來。&lt;/li&gt;
&lt;li&gt;以圖為例 : File.txt 有 3 個 block ，所以它的檔案大小在 256 mb &amp;lt; x &amp;lt;= 384 mb&lt;/li&gt;
&lt;li&gt;sector ， 硬碟最小儲存物理量，約 512 bytes。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;切割後，會去找 dtm1 的 Name Node ( a Java program )，跟它說我這個檔案有 3 個 block 要儲存在 HDFS 檔案系統中&lt;/li&gt;
&lt;li&gt;Client 端得到 Name Node 同意後，會依照 Name Node 的一份清單，將檔案分別存在不同的 Data Node，
&lt;ul&gt;
&lt;li&gt;Name Node 儲存規則 : &lt;strong&gt;每一個 block 會找不同的 3 台 Data Node 主機儲存&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;所以檔案有可能會存在 3 ~ 9 台機器&lt;/li&gt;
&lt;li&gt;以圖為例，block A 存在 Data Node 1 和 Data Node 5 以及 Data Node 6&lt;/li&gt;
&lt;li&gt;Rack ，機櫃的意思&lt;/li&gt;
&lt;li&gt;Data node 分別存在一台 Server 裡面，在我們的環境裡，就是 dtw1, dtw2, dtw3 這三台 VM&lt;/li&gt;
&lt;li&gt;在 client 端的 &lt;code&gt;/opt/hadoop-3.3.4/etc/hadoop/hdfs-site.xml&lt;/code&gt; 中 &lt;code&gt;dfs.replication&lt;/code&gt; 項目裡可設定一個 block 要複製幾份。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;資料傳遞的方法&lt;/strong&gt; : Client 所在的主機會透過網路傳資料給 Data Node 1 後，當 Data Node 1 收到 64 kb 的資料後，就會在接收資料的同時，將檔案同步再傳給 Data Node 5，當 Data Node 5 收到 64 kb 後，又會在接收資料的同時，再將資料傳給 Data Node 6 。&lt;/li&gt;
&lt;li&gt;這種資料傳遞的方法可以在最短時間內讓 3 台 Data Node 都擁有資料。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;以上儲存資料的方式是 Replication 不是 back up ，兩者最大的差別在於 Replication 的資料在正常運作中也會被使用，而 back up 的資料是放著等運作中的資料掛了，才會拿來用。&lt;/li&gt;
&lt;li&gt;Hadoop 的容錯機制 : 當其中一台 Data node 掛了， hadoop 會自動幫我們修復，允許我們一個 block 壞兩台 Data node，如果 3 台 Data node 掛了，就真的沒了，所以 hadoop 的資料也要備份。
&lt;ul&gt;
&lt;li&gt;hadoop 的資料備份，將原始未被切割的檔案壓縮，壓縮比 10 : 1 ，進行備份。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Name Node ，負責儲存 檔案的 MetaData，其中包含檔案的權限，檔案的屬性，檔案的名字 ( File name ) &amp;hellip;等，所以檔案的 metadata 會存在 dtm1 這台機器中。&lt;/li&gt;
&lt;li&gt;檔案的資料，分散儲存在不同的 Data Node 所在的主機。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;提問 : 要處理 20 T 的資料，只能買 4 台 Server ，請問一台 Server 硬碟多大 ?
需考慮&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;hdfs 檔案系統，一個 block 存 3 分 &amp;mdash;&amp;gt; 20*3 = 60&lt;/li&gt;
&lt;li&gt;分析檔案所需的分析空間，且因 Hadoop 支援協同作業，所以須看幾個人且分析的資料量來決定&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a
href="https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html"target="_blank" rel="noopener"&gt;HDFS Architecture 官網連結&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;HDFS 分散檔案系統 - 讀取檔案&lt;span class="hx:absolute hx:-mt-20" id="hdfs-分散檔案系統---讀取檔案"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e5%88%86%e6%95%a3%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1---%e8%ae%80%e5%8f%96%e6%aa%94%e6%a1%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/28BnDm3.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;當 Client 端 ( dta1 ) 要讀取 HDFS 分散式檔案系統的資料時 ( &lt;code&gt;hdfs dfs -get mydataset/Result.txt&lt;/code&gt; )&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Client 端會問 Name Node ，我的 Results.txt 資料存在哪 ?&lt;/li&gt;
&lt;li&gt;Name Node 會回報一個清單，每個 Block 分別存在哪幾台機器
&lt;ul&gt;
&lt;li&gt;以圖的清單為例 :&lt;/li&gt;
&lt;li&gt;block A = 1, 5, 6&lt;/li&gt;
&lt;li&gt;block B = 8, 1, 2&lt;/li&gt;
&lt;li&gt;block C = 5, 8, 9&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Client 端會根據清單的第一順位，將檔案讀取回來
&lt;ul&gt;
&lt;li&gt;以圖為例 : client 端會去 &lt;code&gt;Data Node 1&lt;/code&gt; 找 block A ， &lt;code&gt;Data Node 8&lt;/code&gt; 找 Block B ，
&lt;code&gt;Data Node 5&lt;/code&gt; 找 Block C ，最後得到 Results.txt&lt;/li&gt;
&lt;li&gt;如果第一順位的電腦掛了，會再自動根據清單的第二順位讀取&lt;/li&gt;
&lt;li&gt;當&lt;strong&gt;多人同時讀取同一個檔案時，後者得到的清單第一順位，為前者的第二順位&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;以上的功能就是 round-robin scheduling 來達到 平衡附載 load balancing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;HDFS 檔案系統的重點功能&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支援協同作業。&lt;/li&gt;
&lt;li&gt;容錯機制 : 因檔案分散存在不同 Data Node&lt;/li&gt;
&lt;li&gt;多人讀取資料，多台電腦同時出來服務，使用的技術 : round-robin scheduling&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;HDFS 系統資訊&lt;span class="hx:absolute hx:-mt-20" id="hdfs-系統資訊"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e7%b3%bb%e7%b5%b1%e8%b3%87%e8%a8%8a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;VMware 的硬碟，超用實體 Host 主機的硬碟 ok，但記憶體超用，不行 !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;NAT 的功能，封包偽裝，封包偽裝可以偽裝很多次，但速度就會變慢&lt;/p&gt;
&lt;p&gt;檢視hdfs 的資訊，以及每一台 DataNode 的狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfsadmin -report&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Configured Capacity: 1578555604992 (1.44 TB) ---&amp;gt; 總量可存 1.44 TB
Present Capacity: 1485476061184 (1.35 TB)
DFS Remaining: 1485474889728 (1.35 TB)
DFS Used: 1171456 (1.12 MB)
DFS Used%: 0.00%
Replicated Blocks:
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Low redundancy block groups: 0
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (3): ---&amp;gt; 活著的 Data node 有 3 台
Name: 192.168.61.6:9866 (dtw1)
Hostname: dtw1
Decommission Status : Normal
Configured Capacity: 526185201664 (490.05 GB)
DFS Used: 540672 (528 KB)
Non DFS Used: 4222566400 (3.93 GB)
DFS Remaining: 495158132736 (461.15 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.10%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Thu Jul 14 10:15:23 CST 2022
Last Block Report: Thu Jul 14 09:00:55 CST 2022
Num of Blocks: 8
Name: 192.168.61.7:9866 (dtw2)
Hostname: dtw2
Decommission Status : Normal
Configured Capacity: 526185201664 (490.05 GB)
DFS Used: 413696 (404 KB)
Non DFS Used: 4222566400 (3.93 GB)
DFS Remaining: 495158259712 (461.15 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.10%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Thu Jul 14 10:15:22 CST 2022
Last Block Report: Thu Jul 14 09:41:04 CST 2022
Num of Blocks: 7
Name: 192.168.61.8:9866 (dtw3)
Hostname: dtw3
Decommission Status : Normal
Configured Capacity: 526185201664 (490.05 GB)
DFS Used: 217088 (212 KB)
Non DFS Used: 4222525440 (3.93 GB)
DFS Remaining: 495158497280 (461.15 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.10%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Thu Jul 14 10:15:22 CST 2022
Last Block Report: Thu Jul 14 07:27:37 CST 2022
Num of Blocks: 7&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Name Node 目錄內容&lt;span class="hx:absolute hx:-mt-20" id="name-node-目錄內容"&gt;&lt;/span&gt;
&lt;a href="#name-node-%e7%9b%ae%e9%8c%84%e5%85%a7%e5%ae%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh dtm1 tree nn
nn
├── current
│ ├── VERSION
│ ├── edits_0000000000000000001-0000000000000000009
│ ├── edits_0000000000000000010-0000000000000000011
│ ├── edits_inprogress_0000000000000000012
│ ├── fsimage_0000000000000000000
│ ├── fsimage_0000000000000000000.md5
│ └── seen_txid
└── in_use.lock
1 directory, 10 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;edits&lt;/code&gt; | 存放對 Hadoop 下達過的命令，例 :　&lt;code&gt;hdfs dfs -put, -cat, ...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fsimage&lt;/code&gt; | 紀錄 metadata ( 檔案、目錄的資訊，檔名, 權限資訊&amp;hellip;等 )&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fsimage*.md5&lt;/code&gt; | 每筆 metadata 的身分證字號，防止 metadata 被串改&lt;/li&gt;
&lt;li&gt;所有 block 的清單存在 memory，沒有存在目錄裡。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SecondaryNameNode&lt;/code&gt; | 會按時根據 &lt;code&gt;edits_inprogress&lt;/code&gt; 的內容，更新到下一個 &lt;code&gt;fsimage&lt;/code&gt; ，這個動作稱為 checkpoint (舊版的關聯式資料庫都會有這種動作)&lt;/li&gt;
&lt;li&gt;以上結果可以得知，Hdfs 分散式檔案系統是建構在 Linux ext4 檔案系統之上&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh dtm1 cat nn/current/VERSION
#Wed Jul 13 10:13:08 CST 2022
namespaceID=1746295848
clusterID=cute
cTime=1657592975551
storageType=NAME_NODE
blockpoolID=BP-1975272387-192.168.61.4-1657592975551
layoutVersion=-66&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;當我們 formathdfs 時，就會在 namenode 重新產生一個 VERSION&lt;/li&gt;
&lt;li&gt;&lt;code&gt;namespaceID&lt;/code&gt; | hadoop 系統的識別代號&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clusterID&lt;/code&gt; | hadoop Cluster 的名稱，一般以公司的簡稱命名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blockpoolID&lt;/code&gt; | namenode 的識別代號，DataNode 會根據這個名稱來幫 namenode 服務&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;DataNode 目錄內容&lt;span class="hx:absolute hx:-mt-20" id="datanode-目錄內容"&gt;&lt;/span&gt;
&lt;a href="#datanode-%e7%9b%ae%e9%8c%84%e5%85%a7%e5%ae%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh dtw1 tree dn
dn
├── current
│   ├── BP-1975272387-192.168.61.4-1657592975551
│   │   ├── current
│   │   │   ├── VERSION
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   │   └── subdir0
│   │   │   │   └── subdir0
│   │   │   │   ├── blk_1073741836
│   │   │   │   ├── blk_1073741836_1012.meta
│   │   │   │   ├── blk_1073741837
│   │   │   │   ├── blk_1073741837_1013.meta
│   │   │   │   ├── blk_1073741844
│   │   │   │   ├── blk_1073741844_1020.meta
│   │   │   │   ├── blk_1073741846
│   │   │   │   ├── blk_1073741846_1022.meta
│   │   │   │   ├── blk_1073741847
│   │   │   │   ├── blk_1073741847_1023.meta
│   │   │   │   ├── blk_1073741849
│   │   │   │   ├── blk_1073741849_1025.meta
│   │   │   │   ├── blk_1073741850
│   │   │   │   ├── blk_1073741850_1026.meta
│   │   │   │   ├── blk_1073741853
│   │   │   │   └── blk_1073741853_1029.meta
│   │   │   └── rbw
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock
8 directories, 21 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dn&lt;/code&gt; | linux 系統中的目錄，存放 Data Node 的資料&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BP-1975272387-192.168.61.4-1657592975551&lt;/code&gt; | NameNode 的識別碼，目前這台 Data Node 為這個 NameNode 服務&lt;/li&gt;
&lt;li&gt;一個 block 存三份，他們的代號一樣&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blk_XXX.meta&lt;/code&gt; | 有一個演算法會得出一個值，由這個值我們可以得知檔案是否被修改&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;HDFS 容錯處理 - 遺失資料區塊&lt;span class="hx:absolute hx:-mt-20" id="hdfs-容錯處理---遺失資料區塊"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e5%ae%b9%e9%8c%af%e8%99%95%e7%90%86---%e9%81%ba%e5%a4%b1%e8%b3%87%e6%96%99%e5%8d%80%e5%a1%8a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 檢查 hdfs 檔案系統有無 /tmp 目錄
$ hdfs dfs -ls /
Found 8 items
drwxr-xr-x - bigred bigboss 0 2022-07-13 15:07 /app
drwxrwxr-x&amp;#43; - bigred bigboss 0 2022-07-13 16:25 /apps
drwxr-xr-x - bigred bigboss 0 2022-07-13 15:50 /dataset
drwxr-xr-x - bigred bigboss 0 2022-07-13 16:07 /elt
drwxr-xr-x - bigred bigboss 0 2022-07-13 16:07 /metadata
drwxr-xr-x - bigred bigboss 0 2022-07-13 16:06 /raw
drwxrwxrwx - bigred bigboss 0 2022-07-13 16:07 /tmp
drwxr-xr-x - bigred bigboss 0 2022-07-13 14:54 /user
# 將 /etc/passwd 丟到 hdfs 檔案系統的 /tmp 目錄下
$ hdfs dfs -put /etc/passwd /tmp/
# 檢查是否符合預期
# /tmp/passwd 檔案大小 1744 byte ---&amp;gt; 只有一個 block
$ hdfs dfs -ls /tmp/
Found 4 items
drwxrwxrwx - bigred bigboss 0 2022-07-12 10:30 /tmp/hadoop-yarn
drwxrwxrwx - bigred bigboss 0 2022-07-13 16:07 /tmp/hive
-rw-r--r-- 2 bigred bigboss 1744 2022-07-14 11:22 /tmp/passwd
drwxrwxrwx - bigred bigboss 0 2022-07-12 10:41 /tmp/spark-events&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;跟 name node 要 /tmp/passwd 的 metadata&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs fsck /tmp/passwd -files -blocks -locations&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fsck&lt;/code&gt; ，file system check&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-files -blocks -locations&lt;/code&gt; ， print out locations for every block&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;...
BP-1975272387-192.168.61.4-1657592975551:blk_1073741856_1032 len=1744 Live_repl=2 [DatanodeInfoWithStorage[192.168.61.8:9866,DS-32e4459d-a2f0-4885-be2d-43814c5aeac3,DISK], DatanodeInfoWithStorage[192.168.61.7:9866,DS-980b49ce-18f7-4283-b202-753842be315b,DISK]]
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blk_1073741856_1032&lt;/code&gt; | 可以看到 block 的代號 1856&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Live_repl=2&lt;/code&gt; | 活著的 block 有 2 份&lt;/li&gt;
&lt;li&gt;block 存在哪一台 Data Node&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh dtw3 tree dn
dn
├── current
│   ├── BP-1975272387-192.168.61.4-1657592975551
│   │   ├── current
│   │   │   ├── VERSION
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   │   └── subdir0
│   │   │   │   └── subdir0
...中間省略
│   │   │   │   ├── blk_1073741856 --- &amp;gt; /tmp/passwd 的 blk 代號
│   │   │   │   └── blk_1073741856_1032.meta
│   │   │   └── rbw
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock
8 directories, 21 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;連線到 dtw3 ，將以上這個 blk 刪除&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ rm dn/current/BP-1975272387-192.168.61.4-1657592975551/current/finalized/subdir0/subdir0/blk_1073741856*&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查是否符合預期，1856 的 blk 代號已刪除&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tree dn
dn
├── current
│   ├── BP-1975272387-192.168.61.4-1657592975551
│   │   ├── current
│   │   │   ├── VERSION
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   │   └── subdir0
│   │   │   │   └── subdir0
│   │   │   │   ├── blk_1073741844
│   │   │   │   ├── blk_1073741844_1020.meta
│   │   │   │   ├── blk_1073741845
│   │   │   │   ├── blk_1073741845_1021.meta
│   │   │   │   ├── blk_1073741849
│   │   │   │   ├── blk_1073741849_1025.meta
│   │   │   │   ├── blk_1073741850
│   │   │   │   ├── blk_1073741850_1026.meta
│   │   │   │   ├── blk_1073741851
│   │   │   │   ├── blk_1073741851_1027.meta
│   │   │   │   ├── blk_1073741853
│   │   │   │   ├── blk_1073741853_1029.meta
│   │   │   │   ├── blk_1073741855
│   │   │   │   └── blk_1073741855_1031.meta
│   │   │   └── rbw
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock
8 directories, 19 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在原地看 /tmp/passwd&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -cat /tmp/passwd
root:x:0:0:root:/root:/bin/ash
bin:x:1:1:bin:/bin:/sbin/nologin
...以下省略&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在檢查 dn 目錄，blk 是否有還原&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tree dn
dn
├── current
│   ├── BP-1975272387-192.168.61.4-1657592975551
│   │   ├── current
│   │   │   ├── VERSION
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   │   └── subdir0
│   │   │   │   └── subdir0
│   │   │   │   ├── blk_1073741844
│   │   │   │   ├── blk_1073741844_1020.meta
│   │   │   │   ├── blk_1073741845
│   │   │   │   ├── blk_1073741845_1021.meta
│   │   │   │   ├── blk_1073741849
│   │   │   │   ├── blk_1073741849_1025.meta
│   │   │   │   ├── blk_1073741850
│   │   │   │   ├── blk_1073741850_1026.meta
│   │   │   │   ├── blk_1073741851
│   │   │   │   ├── blk_1073741851_1027.meta
│   │   │   │   ├── blk_1073741853
│   │   │   │   ├── blk_1073741853_1029.meta
│   │   │   │   ├── blk_1073741855
│   │   │   │   └── blk_1073741855_1031.meta
│   │   │   └── rbw
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果在原地發現沒還原，可能的情況有 :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;block 還原到其他 Datanode&lt;/li&gt;
&lt;li&gt;清單的第一順位已讀取到，故不會還原&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 bigred 再次詢問 namenode&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs fsck /tmp/passwd -files -blocks -locations&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;BP-1975272387-192.168.61.4-1657592975551:blk_1073741856_1032 len=1744 Live_repl=2 [DatanodeInfoWithStorage[192.168.61.7:9866,DS-980b49ce-18f7-4283-b202-753842be315b,DISK], DatanodeInfoWithStorage[192.168.61.6:9866,DS-4742e5e8-949e-4c34-89fb-8afdef10b61c,DISK]]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;可以發現備份到其他 data node 了&lt;/p&gt;
&lt;p&gt;如果將 blk 存的兩份都刪除呢?&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 刪除在 dtw2 的 block
$ ssh dtw2 rm ~/dn/current/BP-1975272387-192.168.61.4-1657592975551/current/finalized/subdir0/subdir0/blk_1073741856*
# 刪除在 dtw1 的 block
$ ssh dtw1 rm ~/dn/current/BP-1975272387-192.168.61.4-1657592975551/current/finalized/subdir0/subdir0/blk_1073741856*
# 檢查是否真的刪除 dtw2 上的 block
$ ssh dtw2 tree dn
dn
├── current
│   ├── BP-1975272387-192.168.61.4-1657592975551
│   │   ├── current
│   │   │   ├── VERSION
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   │   └── subdir0
│   │   │   │   └── subdir0
│   │   │   │   ├── blk_1073741836
│   │   │   │   ├── blk_1073741836_1012.meta
│   │   │   │   ├── blk_1073741837
│   │   │   │   ├── blk_1073741837_1013.meta
│   │   │   │   ├── blk_1073741845
│   │   │   │   ├── blk_1073741845_1021.meta
│   │   │   │   ├── blk_1073741846
│   │   │   │   ├── blk_1073741846_1022.meta
│   │   │   │   ├── blk_1073741847
│   │   │   │   ├── blk_1073741847_1023.meta
│   │   │   │   ├── blk_1073741851
│   │   │   │   ├── blk_1073741851_1027.meta
│   │   │   │   ├── blk_1073741855
│   │   │   │   └── blk_1073741855_1031.meta
│   │   │   └── rbw
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock
8 directories, 19 files
# 檢查是否真的刪除 dtw1 上的 block
$ ssh dtw1 tree dn
dn
├── current
│   ├── BP-1975272387-192.168.61.4-1657592975551
│   │   ├── current
│   │   │   ├── VERSION
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   │   └── subdir0
│   │   │   │   └── subdir0
│   │   │   │   ├── blk_1073741836
│   │   │   │   ├── blk_1073741836_1012.meta
│   │   │   │   ├── blk_1073741837
│   │   │   │   ├── blk_1073741837_1013.meta
│   │   │   │   ├── blk_1073741844
│   │   │   │   ├── blk_1073741844_1020.meta
│   │   │   │   ├── blk_1073741846
│   │   │   │   ├── blk_1073741846_1022.meta
│   │   │   │   ├── blk_1073741847
│   │   │   │   ├── blk_1073741847_1023.meta
│   │   │   │   ├── blk_1073741849
│   │   │   │   ├── blk_1073741849_1025.meta
│   │   │   │   ├── blk_1073741850
│   │   │   │   ├── blk_1073741850_1026.meta
│   │   │   │   ├── blk_1073741853
│   │   │   │   └── blk_1073741853_1029.meta
│   │   │   └── rbw
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock
8 directories, 21 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;確認都刪除後，再看一次 hdfs 檔案系統中的 /tmp/passswd 檔案的內容&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -cat /tmp/passwd
cat: Could not obtain block: BP-1975272387-192.168.61.4-1657592975551:blk_1073741856_1032 file=/tmp/passwd No live nodes contain current block Block locations: Dead nodes:&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;可以看到 /tmp/passwd 的 檔案內容已被刪除，所以我們看不到&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;找 namenode 再要一次 /tmp/passwd 的資訊&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs fsck /tmp/passwd -files -blocks -locations&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;...以上省略
The filesystem under path &amp;#39;/tmp/passwd&amp;#39; is CORRUPT&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;/tmp/passwd 檔案毀損&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;唯一的補救做法，刪除 /tmp/passwd 的 metadata&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -rm /tmp/passwd
Deleted /tmp/passwd&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;檢視 NameNode MetaData&lt;span class="hx:absolute hx:-mt-20" id="檢視-namenode-metadata"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-namenode-metadata" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;請 name node 進入 安全模式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfsadmin -safemode enter &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;safemode&lt;/code&gt; 安全模式 : 不提供 新增、刪除、新改 檔案或目錄 的狀態，但允許讀取資料&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;檢查是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -mkdir /tmp/zzz
mkdir: Cannot create directory /tmp/zzz. Name node is in safe mode.
$ hdfs dfs -cat mydataset/customer.csv
4000001,Kristina,Chung,55,Pilot
4000002,Paige,Chen,74,Teacher
4000003,Sherri,Melton,34,Firefighter
...以下省略&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;如果沒有按照正常程序關機，重開機後 hadoop 可能會自動進入安全模式，讓 Data node 做資料的更新。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfsadmin -saveNamespace
Save namespace successful&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;會立即將記憶體中的資料寫入一個新的 &lt;code&gt;fsimage&lt;/code&gt; 檔中，寫入的動作一樣會記錄在 &lt;code&gt;edits&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;離開安全模式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfsadmin -safemode leave &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;從 dtm1 取出 fsimage 檔, 並將之轉換成 csv 格式檔，最後透過網路拷貝到 dta1 的 /tmp 目錄中&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfsadmin -fetchImage /tmp/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ dir /tmp
total 396K
...
-rw-r--r-- 1 bigred bigred 3.4K Jul 14 13:51 fsimage_0000000000000000847
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將 &lt;code&gt;fsimage_*&lt;/code&gt; 這個檔案轉成 csv 檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# HDFS Offline Image Viewer
$ hdfs oiv -i /tmp/fsimage_0000000000000000847 -o /tmp/fsimage.csv -p Delimited -delimiter &amp;#34;,&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt; ，指定 fsimage 或 xml 檔&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o&lt;/code&gt; ，要輸出的檔名&lt;/li&gt;
&lt;li&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; -p,--processor &amp;lt;arg&amp;gt; Select which type of processor to apply
against image file. (XML|FileDistribution|
ReverseXML|Web|Delimited|DetectCorruption)
The default is Web.
-delimiter &amp;lt;arg&amp;gt; Delimiting string to use with Delimited or
DetectCorruption processor.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;看檔案內容&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat /tmp/fsimage.csv &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Path,Replication,ModificationTime,AccessTime,PreferredBlockSize,BlocksCount,FileSize,NSQUOTA,DSQUOTA,Permission,UserName,GroupName
/,0,2022-07-13 16:07,1970-01-01 08:00,0,0,0,9223372036854775807,-1,drwxr-xr-x,bigred,bigboss
/tmp,0,2022-07-14 13:31,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn,0,2022-07-12 10:30,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging,0,2022-07-12 10:40,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history,0,2022-07-12 10:30,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done,0,2022-07-12 10:42,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done_intermediate,0,2022-07-12 10:40,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/user,0,2022-07-13 14:54,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/user/bigred,0,2022-07-13 10:32,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/tmp/hadoop-yarn/staging/bigred,0,2022-07-12 10:40,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/bigred/.staging,0,2022-07-12 10:40,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done_intermediate/bigred,0,2022-07-12 10:42,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done/2022/07/12/000000/job_1657593022842_0001-1657593622915-bigred-QuasiMonteCarlo-1657593635730-2-1-SUCCEEDED-root.bigred-1657593627728.jhist,2,2022-07-12 10:40,2022-07-12 10:40,134217728,1,26266,0,0,-rwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done/2022/07/12/000000/job_1657593022842_0001_conf.xml,2,2022-07-12 10:40,2022-07-12 10:40,134217728,1,274268,0,0,-rwxrwxrwx,bigred,bigboss
/tmp/spark-events,0,2022-07-12 10:41,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/user/bigred/.sparkStaging,0,2022-07-12 10:41,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/tmp/spark-events/application_1657593022842_0002,2,2022-07-12 10:41,2022-07-12 10:40,134217728,1,119259,0,0,-rwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done/2022,0,2022-07-12 10:42,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done/2022/07,0,2022-07-12 10:42,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done/2022/07/12,0,2022-07-12 10:42,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done/2022/07/12/000000,0,2022-07-12 10:42,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/user/bigred/mydataset,0,2022-07-13 11:31,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/user/bigred/mydataset/customer.csv,2,2022-07-13 10:36,2022-07-13 10:36,134217728,1,695,0,0,-rw-r--r--,bigred,bigboss
/user/bigred/mydataset/US,0,2022-07-13 10:47,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/user/bigred/mydataset/TW,0,2022-07-13 11:44,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/user/bigred/mydataset/TW/hosts,2,2022-07-13 10:49,2022-07-13 10:49,134217728,1,216,0,0,-rw-r--r--,bigred,bigboss
/user/bigred/mydataset/103u.txt,2,2022-07-13 11:31,2022-07-13 11:31,134217728,1,20807,0,0,-rw-r--r--,bigred,bigboss
/user/bigred/mydataset/TW/radio.txt,2,2022-07-13 11:44,2022-07-13 11:44,134217728,1,31,0,0,-rw-r--r--,bigred,bigboss
/user/rbean,0,2022-07-13 15:51,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,rbean,rbean
/user/gbean,0,2022-07-13 14:54,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,gbean,gbean
/user/ybean,0,2022-07-13 14:54,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,ybean,ybean
/app,0,2022-07-13 15:07,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/app/mkuser,2,2022-07-13 15:07,2022-07-13 15:07,134217728,1,568,0,0,-rw-r--r--,bigred,bigboss
/app/rmuser,2,2022-07-13 15:07,2022-07-13 15:07,134217728,1,471,0,0,-rw-r--r--,bigred,bigboss
/dataset,0,2022-07-13 15:50,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/dataset/customer.csv,2,2022-07-13 15:50,2022-07-13 15:50,134217728,1,695,0,0,-rw-r--r--,bigred,bigboss
/user/rbean/mydata,0,2022-07-13 16:05,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,rbean,rbean
/raw,0,2022-07-13 16:06,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/elt,0,2022-07-13 16:07,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/apps,0,2022-07-13 16:25,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxr-x&amp;#43;,bigred,bigboss
/metadata,0,2022-07-13 16:07,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/tmp/hive,0,2022-07-13 16:07,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/apps/sh,0,2022-07-13 16:23,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,rbean,bigboss
/apps/sysinfo,2,2022-07-13 16:25,2022-07-13 16:25,134217728,1,264,0,0,-rw-r--r--,rbean,bigboss&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;重新設定 HDFS Replication ( 一個檔案存幾個 block )&lt;span class="hx:absolute hx:-mt-20" id="重新設定-hdfs-replication--一個檔案存幾個-block-"&gt;&lt;/span&gt;
&lt;a href="#%e9%87%8d%e6%96%b0%e8%a8%ad%e5%ae%9a-hdfs-replication--%e4%b8%80%e5%80%8b%e6%aa%94%e6%a1%88%e5%ad%98%e5%b9%be%e5%80%8b-block-" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Replication | 備份的資料不是躺在硬碟哩，也會出來作戰&lt;/p&gt;
&lt;p&gt;在 dta1 主機, 執行以下命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo nano /opt/hadoop-3.3.3/etc/hadoop/hdfs-site.xml &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;xml 檔 | 標籤比內容多，現已被新的系統工程被淘汰，注意 xml 的內容，多一個&amp;quot;空格&amp;quot;或 &amp;ldquo;?&amp;rdquo; 就會導致系統 run 不起來&lt;/li&gt;
&lt;li&gt;yaml 檔 | 新的系統工程專用的設定檔, 全名 : &amp;ldquo;Yet Another Markup Language&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如何證明一個 block 可以存 3 份 ?&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs fsck /tmp/group -files -blocks -locations
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
.........
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;3&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
...........
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;BP-1975272387-192.168.61.4-1657592975551:blk_1073741857_1033 len=905 Live_repl=3 [DatanodeInfoWithStorage[192.168.61.8:9866,DS-32e4459d-a2f0-4885-be2d-43814c5aeac3,DISK], DatanodeInfoWithStorage[192.168.61.7:9866,DS-980b49ce-18f7-4283-b202-753842be315b,DISK], DatanodeInfoWithStorage[192.168.61.6:9866,DS-4742e5e8-949e-4c34-89fb-8afdef10b61c,DISK]]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;在 client 端 (dta1) 修改 dfs.replication 數值後, 不需重新啟動 HDFS 分散檔案系統, 設定值直接生效&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hdfs 的檔案系統，由多台 linux ext4 的檔案系統 + Java program 組成&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>MYSQL 的 資料庫引擎 有兩個 都是單機版</title><link>https://blog.kubeantony.com/archive/data-platform/mysql-%E7%9A%84-%E8%B3%87%E6%96%99%E5%BA%AB%E5%BC%95%E6%93%8E-%E6%9C%89%E5%85%A9%E5%80%8B-%E9%83%BD%E6%98%AF%E5%96%AE%E6%A9%9F%E7%89%88/</link><pubDate>Fri, 06 Jan 2023 10:37:04 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/mysql-%E7%9A%84-%E8%B3%87%E6%96%99%E5%BA%AB%E5%BC%95%E6%93%8E-%E6%9C%89%E5%85%A9%E5%80%8B-%E9%83%BD%E6%98%AF%E5%96%AE%E6%A9%9F%E7%89%88/</guid><description>
&lt;p&gt;優點 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;innodb 強在交易 ( 新增 修改 刪除 &amp;hellip;等)&lt;/li&gt;
&lt;li&gt;myissam 強在搜尋&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺點 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;無容錯&lt;/li&gt;
&lt;li&gt;無法處理巨量資料&lt;/li&gt;
&lt;li&gt;無附載平衡&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;mdash;&amp;gt; 對於企業所需的數位永續，MYSQL 無法滿足需求&lt;/p&gt;
&lt;p&gt;我們選擇 NDB
它是 MYSQL Cluster 所用的引擎，可以達到數位永續
補足以上兩個單機版資料引擎的缺點。&lt;/p&gt;
&lt;p&gt;它的運作&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多台 Data Nodes 就代表分散式儲存，來達到容錯&lt;/li&gt;
&lt;li&gt;是多台電腦同時運作來儲存資料方面的平衡附載&lt;/li&gt;
&lt;li&gt;可以藉由新增 Data Nodes 來擴大儲存上限&lt;/li&gt;
&lt;li&gt;還有多台電腦可以接收前端下達的命令&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺點 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;由於多台電腦在接收前端下達的命令，但是&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Operater : 虛擬工程師
幫忙建置整個叢集&lt;/p&gt;</description></item><item><title>Linux Data Process</title><link>https://blog.kubeantony.com/archive/data-platform/linux-data-process/</link><pubDate>Thu, 08 Sep 2022 06:39:04 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/linux-data-process/</guid><description>
&lt;h2&gt;上課補充&lt;span class="hx:absolute hx:-mt-20" id="上課補充"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%8a%e8%aa%b2%e8%a3%9c%e5%85%85" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a
href="https://zh.m.wikipedia.org/zh-tw/RAID"target="_blank" rel="noopener"&gt;RAID 5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a
href="https://zh.m.wikipedia.org/zh-tw/ExFAT"target="_blank" rel="noopener"&gt;ExFAT 檔案系統&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;formathdfs 程式解析&lt;span class="hx:absolute hx:-mt-20" id="formathdfs-程式解析"&gt;&lt;/span&gt;
&lt;a href="#formathdfs-%e7%a8%8b%e5%bc%8f%e8%a7%a3%e6%9e%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat /opt/bin/formathdfs
#!/bin/bash
m=&amp;#34;dtm1&amp;#34;
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f3)
read -p &amp;#34;Are you sure ? (YES/NO) &amp;#34; ans
[ $ans != &amp;#34;YES&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;abort format HDFS&amp;#34; &amp;amp;&amp;amp; exit 1
ssh &amp;#34;$m&amp;#34; rm -r nn/* sn/* &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$m rm ok&amp;#34;
for n in $w
do
nc -w 1 -z $n 22 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; ssh $n rm -r dn/* &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; echo &amp;#34;$n rm ok&amp;#34;
done
ssh $m &amp;#39;hdfs namenode -format -clusterID cute&amp;#39; &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;formathdfs failure&amp;#34; &amp;amp;&amp;amp; exit 1
echo &amp;#34;formathdfs ok&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;第一行 | 宣告下面的程式用 &lt;code&gt;/bin/bash&lt;/code&gt; 貝殼程式執行，這行如果是 &lt;code&gt;#!/bin/pyton3&lt;/code&gt; ，那麼下面的程式就會用 python3 執行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/hosts&lt;/code&gt; 5 顆星重點，hacker 可能會偷改一個名稱對應的 ip ，所以要注意。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nn/&lt;/code&gt; namenode 的 metadata&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nc&lt;/code&gt; | netcat
&lt;code&gt;-w 1&lt;/code&gt; | 等待一秒
&lt;code&gt;22&lt;/code&gt; | port 號
&lt;code&gt;-z&lt;/code&gt; | 不要回應資訊&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&amp;gt;/dev/null&lt;/code&gt; 標準輸出和錯誤輸出都丟到黑洞&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nc -w $ip 445&lt;/code&gt; ，如果有通代表對方 windows 電腦沒開防火牆&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-format&lt;/code&gt; 將 hdfs 檔案系統初始化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-clusterID&lt;/code&gt; ，聯邦制，一座 Hadoop 的名稱，在哪一間公司架 Hadoop ，就可以設該間公司的代號&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;hls hadoop list&lt;span class="hx:absolute hx:-mt-20" id="hls-hadoop-list"&gt;&lt;/span&gt;
&lt;a href="#hls-hadoop-list" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hls
[dtm1]
8208 SecondaryNameNode ----&amp;gt; pid javaprogram_name
8092 NameNode
[dtm2]
8002 ResourceManager
8083 JobHistoryServer ---&amp;gt; 秘書，yarn 運作完之後，會跟它報告自己的運作資訊，用了多少資源
[dtw1]
8584 DataNode ---- &amp;gt; 存取資料
8729 NodeManager ----&amp;gt; 負責跑 spark 和 mapreduce 的程式
[dtw2]
8553 DataNode
8698 NodeManager
[dtw3]
8535 DataNode
8681 NodeManager&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font color=red&gt;&lt;strong&gt;mapreduce 一定是 Java 語言才能跑， hive 可以讓你打 SQL 命令，將這些命令翻譯成 Mapreduce 的 Java 程式，pig 豬小弟也是&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ stopyarn; stophdfs
&amp;#34;;&amp;#34; 代表不管前面的命令是成功還是失敗，做完緊接著做後面的命令
&amp;#34;&amp;amp;&amp;amp;&amp;#34; 前面的命令執行成功，後面的命令才會執行&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;關機如果很久一定要等他做完，才能將電腦關機&lt;/li&gt;
&lt;li&gt;重要的系統資訊一定要備份&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;echo 命令解析&lt;span class="hx:absolute hx:-mt-20" id="echo-命令解析"&gt;&lt;/span&gt;
&lt;a href="#echo-%e5%91%bd%e4%bb%a4%e8%a7%a3%e6%9e%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo -n No new line
No new linebigred@dta1:~$&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt; ，字串顯示不會換行&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo -e &amp;#34;A line with an escaped\nreturn&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-e&lt;/code&gt; ，可以轉義，使 &amp;ldquo;&lt;code&gt;\n&lt;/code&gt;&amp;rdquo; 生效，變成換行符號&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/E58J8ot.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;字串變大小寫&lt;span class="hx:absolute hx:-mt-20" id="字串變大小寫"&gt;&lt;/span&gt;
&lt;a href="#%e5%ad%97%e4%b8%b2%e8%ae%8a%e5%a4%a7%e5%b0%8f%e5%af%ab" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ a=&amp;#34;aBc&amp;#34;
$ echo ${a^^}
ABC
$ echo ${a,,}
abc
$ echo $a
aBc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a
href="https://wiki.bash-hackers.org/syntax/pe"target="_blank" rel="noopener"&gt;補充連結&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo &amp;#39;#!/bin/sh
echo &amp;#34;let me go&amp;#34; &amp;#39; &amp;gt; myecho.sh
&amp;#34;&amp;gt;&amp;#34; | 重導 ( redirection )，將原本輸出在螢幕上的字串，重導到 myecho.sh 這個檔案&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;練習&lt;span class="hx:absolute hx:-mt-20" id="練習"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;請撰寫程式 &lt;code&gt;myart.sh&lt;/code&gt; 將以下文字圖列印出來 :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/dPlu2WJ.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano art.txt
(\(\
( -.-)
o_(&amp;#39;&amp;#39;)(&amp;#39;&amp;#39;)
$ nano myart.sh
#!/bin/bash
cat ~/art.txt
$ ./myart.sh
(\(
( -.-)
o_(&amp;#39;&amp;#39;)(&amp;#39;&amp;#39;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;注意，盡量不要把變數寫死! 優點 : 方便交接，且阿罵來也會寫&lt;/strong&gt;&lt;/font&gt;
如果用以下方法寫，難交接。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat myart.sh
#!/bin/bash
echo -e &amp;#34;(\(\\\\\n( -.-)\no_(&amp;#39;&amp;#39;)(&amp;#39;&amp;#39;)&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;操作範例 - 顯示記憶體大小&lt;span class="hx:absolute hx:-mt-20" id="操作範例---顯示記憶體大小"&gt;&lt;/span&gt;
&lt;a href="#%e6%93%8d%e4%bd%9c%e7%af%84%e4%be%8b---%e9%a1%af%e7%a4%ba%e8%a8%98%e6%86%b6%e9%ab%94%e5%a4%a7%e5%b0%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ free -mh | grep &amp;#34;Mem&amp;#34;
Mem: 2.9Gi 98Mi 2.7Gi 0.0Ki 122Mi 2.8Gi
$ free -mh | grep &amp;#34;Mem&amp;#34; | tr -s &amp;#34; &amp;#34;
Mem: 2.9Gi 98Mi 2.7Gi 0.0Ki 122Mi 2.8Gi
$ free -mh | grep &amp;#34;Mem&amp;#34; | tr -s &amp;#39; &amp;#39; | cut -d &amp;#34; &amp;#34; -f 2
2.9Gi
# 利用 $() 把命令寫到一個變數裡面
$ m=$(free -mh | grep &amp;#34;Mem&amp;#34; | tr -s &amp;#34; &amp;#34; | cut -d &amp;#34; &amp;#34; -f 2)
$ echo &amp;#34;Memory : ${m}&amp;#34;
Memory : 2.9Gi
# 將我們寫的 program 加到 PATH 環境變數裡面的目錄
$ sudo cp sysinfo /usr/bin/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;操作範例 - 取出 CPU 型號&lt;span class="hx:absolute hx:-mt-20" id="操作範例---取出-cpu-型號"&gt;&lt;/span&gt;
&lt;a href="#%e6%93%8d%e4%bd%9c%e7%af%84%e4%be%8b---%e5%8f%96%e5%87%ba-cpu-%e5%9e%8b%e8%99%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;此命令可以得知 cpu 型號，幾行代表幾核&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat /proc/cpuinfo | grep &amp;#39;model name&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;model name : Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
model name : Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;做一些處理&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat /proc/cpuinfo | grep &amp;#39;model name&amp;#39; | head -n 1 | cut -d &amp;#34;:&amp;#34; -f 2
Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;丟到變數 c 裡面&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ c=$(cat /proc/cpuinfo | grep &amp;#39;model name&amp;#39; | head -n 1 | cut -d &amp;#34;:&amp;#34; -f 2)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;排版後，透過 echo 命令印出&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo &amp;#34;CPU:${c}&amp;#34;
CPU: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;練習 得出 cpu 幾核心&lt;span class="hx:absolute hx:-mt-20" id="練習-得出-cpu-幾核心"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92-%e5%be%97%e5%87%ba-cpu-%e5%b9%be%e6%a0%b8%e5%bf%83" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ n=$(cat /proc/cpuinfo | grep &amp;#39;model name&amp;#39; | wc -l)
$ echo &amp;#34;CPU:${c} ($n)&amp;#34; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;丟到 /user/bin/ 目錄裡面&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano sysinfo
#!/bin/bash
m=$(free -mh | grep &amp;#34;Mem&amp;#34; | tr -s &amp;#34; &amp;#34; | cut -d &amp;#34; &amp;#34; -f 2)
echo &amp;#34;Memory : ${m}&amp;#34;
c=$(cat /proc/cpuinfo | grep &amp;#39;model name&amp;#39; | head -n 1 | cut -d &amp;#34;:&amp;#34; -f 2)
n=$(cat /proc/cpuinfo | grep &amp;#39;model name&amp;#39; | wc -l)
echo &amp;#34;CPU :${c} (${n})&amp;#34;
$ sudo cp ./sysinfo /usr/bin/sysinfo
$ sysinfo
Memory : 2.9Gi
CPU : Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz (2)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;操作範例 - 取出硬碟大小&lt;span class="hx:absolute hx:-mt-20" id="操作範例---取出硬碟大小"&gt;&lt;/span&gt;
&lt;a href="#%e6%93%8d%e4%bd%9c%e7%af%84%e4%be%8b---%e5%8f%96%e5%87%ba%e7%a1%ac%e7%a2%9f%e5%a4%a7%e5%b0%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ df -h | grep /dev/sda
/dev/sda2 1.9T 78G 1.7T 5% /opt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;答 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ df -h | grep /dev/sda | tr -s &amp;#34; &amp;#34; | cut -d &amp;#34; &amp;#34; -f 2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget -qO - https://www.oc99.org/sys/sysinfo | bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-q&lt;/code&gt; 代表靜音模式（不顯示指令輸出）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-O&lt;/code&gt; 將檔案輸出（大寫的 O）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-&lt;/code&gt; 標準輸出裝置（利用螢幕作為輸出目標），Linux 的 1 號裝置&lt;/li&gt;
&lt;li&gt;&lt;code&gt;| bash&lt;/code&gt; 把左邊命令輸出的內容丟給 bash 執行&lt;/li&gt;
&lt;li&gt;結果：在螢幕裝置輸出，丟給 bash 執行，不會把程式下載下來，與顯示指令輸出&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Host : dta1
Memory : 2.9Gi
CPU : Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz (core: 2)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
echo &amp;#34;Host : `hostname`&amp;#34;
m=$(free -mh | grep Mem:)
echo -n &amp;#34;Memory : &amp;#34;
echo $m | cut -d&amp;#39; &amp;#39; -f2
cn=$(cat /proc/cpuinfo | grep &amp;#39;model name&amp;#39; | head -n 1 | cut -d &amp;#39;:&amp;#39; -f2)
echo -n &amp;#34;CPU : $cn (core: &amp;#34;
cn=$(cat /proc/cpuinfo | grep &amp;#39;model name&amp;#39; | wc -l)
echo &amp;#34;$cn)&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;DT-ELT-HDFS&lt;/h1&gt;&lt;p&gt;dataset ( 資料集 )&lt;/p&gt;
&lt;p&gt;hadoop -&amp;gt; Schema on read
傳統 IT -&amp;gt; Schema on write&lt;/p&gt;
&lt;h2&gt;取得藥局基本資料集&lt;span class="hx:absolute hx:-mt-20" id="取得藥局基本資料集"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%96%e5%be%97%e8%97%a5%e5%b1%80%e5%9f%ba%e6%9c%ac%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 下載資料
$ wget &amp;#39;https://quality.data.gov.tw/dq_download_csv.php?nid=6134&amp;amp;md5_url=03c3b7e3b7f5433d15b92b8f7af15b49&amp;#39; -O drugstore.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 認識資料
$ head -n 3 drugstore.csv
機構狀態,機構名稱,地址縣市別,地址鄉鎮市區,地址街道巷弄號,負責人姓名,負責人性別,電話,是否為健保特約藥局
開業,活力健康藥妝藥局,臺北市,中正區,中華路二段315巷1號,蕭聖鈞,男,23392625,Y
開業,建祥武昌藥局,臺北市,中正區,武昌街1段29號1樓,黃盟婷,女,2381-5229,Y&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;要對資料的每一個欄位有些想法&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat drugstore.csv | grep &amp;#39;臺北市&amp;#39;
.......
&amp;#34;開業&amp;#34;,&amp;#34;忠孝藥局&amp;#34;,&amp;#34;臺北市&amp;#34;,&amp;#34;南港區&amp;#34;,&amp;#34;成福路16號&amp;#34;,&amp;#34;黃雅惠&amp;#34;,&amp;#34;女&amp;#34;,&amp;#34;(02)2786-2829&amp;#34;,&amp;#34;Y&amp;#34;
&amp;#34;開業&amp;#34;,&amp;#34;躍獅京華藥局&amp;#34;,&amp;#34;臺北市&amp;#34;,&amp;#34;松山區&amp;#34;,&amp;#34;南京東路五段71號&amp;#34;,&amp;#34;賴煌濱&amp;#34;,&amp;#34;男&amp;#34;,&amp;#34;(02)2766-6508&amp;#34;,&amp;#34;Y&amp;#34;
&amp;#34;開業&amp;#34;,&amp;#34;農安盛康藥局&amp;#34;,&amp;#34;臺北市&amp;#34;,&amp;#34;中山區&amp;#34;,&amp;#34;農安街267號&amp;#34;,&amp;#34;葉惠茹&amp;#34;,&amp;#34;女&amp;#34;,&amp;#34;(02)25038205&amp;#34;,&amp;#34;Y&amp;#34;
.......&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;台北市有多少家藥局 ?&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat drugstore.csv | grep &amp;#39;臺北市&amp;#39; | wc -l
754&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;多少縣市有藥局 ?&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat drugstore.csv | cut -d&amp;#39;,&amp;#39; -f3 &amp;gt; drugstore.tmp
......
澎湖縣
澎湖縣
# tail -n &amp;#43;2 ，從第二行開始顯示到最後一行 --&amp;gt; 移除第一行
# tr -d \&amp;#34; | delete &amp;#34;&amp;#34;
$ tail -n &amp;#43;2 drugstore.csv &amp;gt; drugstore.tmp
# sort | 將資料重新排序
# uniq | 命令是把連續相同資料, 變為一筆資料, 不連續的相同資料則各別處理
$ cat drugstore.tmp | cut -d&amp;#39;,&amp;#39; -f3 | sort | uniq &amp;gt; drugcity.tmp
$ head -n 2 drugcity.tmp
南投縣
嘉義市&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;sort 命令解析&lt;span class="hx:absolute hx:-mt-20" id="sort-命令解析"&gt;&lt;/span&gt;
&lt;a href="#sort-%e5%91%bd%e4%bb%a4%e8%a7%a3%e6%9e%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;描述 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;對文本文件進行排序。&lt;/li&gt;
&lt;li&gt;對給定文件（或標準輸入）中的所有行進行排序、合併或比較。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sort [ options ] [ file ...] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;sort 指令&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;預設 ( no options )
&lt;ul&gt;
&lt;li&gt;目前找到的規律有以下，並不完整 :&lt;/li&gt;
&lt;li&gt;英文字母 a ~ z 排序 每一行資料 ( 不分大小寫 )&lt;/li&gt;
&lt;li&gt;數字 由小到大 排序每一行&lt;/li&gt;
&lt;li&gt;如果數字和英文在同一行比，數字優先&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt; 按數值大小排序&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-r&lt;/code&gt; 倒轉排序, 即從大至小排序&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-R&lt;/code&gt; 隨機的方式重新排序，但相同值的排序還是會排在一起&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt; 指定欄位分隔的字符, 預設是 空白 或 tab&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-k&lt;/code&gt; 要排序的欄位，指定欄位時輸入的兩個數字代表「起始位置」與「結束位置」，而如果將結束位置省略的話，預設的結束位置就是整行的結尾。&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://www.baeldung.com/linux/sort-uniq-vs-sort-u"target="_blank" rel="noopener"&gt;what is difference between &amp;ldquo;sort -u&amp;rdquo; and &amp;ldquo;sort | uniq&amp;rdquo; ( 連結 )&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下載老師的資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget http://www.oc99.org/dt/dataset/mycsv.zip
$ unzip mycsv.zip (A 覆蓋)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;取得完整縣市名冊&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat tw.103.zipcode.csv | cut -d &amp;#39;,&amp;#39; -f 1 | sort | uniq &amp;gt; zipcode&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;顯示沒有藥局的縣市&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ join -v 2 drugcity.tmp zipcode&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;-v 2 用 zipcode 去比對 drugcity.tmp，顯示沒有對到的資訊&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;南海諸島
連江縣
釣魚臺&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;旅行社會需要這種資訊&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;全臺灣大專校院科系別概況(含學生數,畢業生數,教師數)&lt;span class="hx:absolute hx:-mt-20" id="全臺灣大專校院科系別概況含學生數畢業生數教師數"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%a8%e8%87%ba%e7%81%a3%e5%a4%a7%e5%b0%88%e6%a0%a1%e9%99%a2%e7%a7%91%e7%b3%bb%e5%88%a5%e6%a6%82%e6%b3%81%e5%90%ab%e5%ad%b8%e7%94%9f%e6%95%b8%e7%95%a2%e6%a5%ad%e7%94%9f%e6%95%b8%e6%95%99%e5%b8%ab%e6%95%b8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;透過 &lt;code&gt;wget&lt;/code&gt; 抓取 103 年全臺灣大專校院科系別資料集&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;wget &amp;#39;http://stats.moe.gov.tw/files/detail/103/103_sdata.csv&amp;#39; -O 103_sdata.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢視資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ head -n 3 103_sdata.csv
學校代碼,學校名稱,科系代碼,科系名稱,日間∕進修別,等級別,學生數,教師數,上學年度畢業生數,縣市名稱,體系別
0001,國立政治大學,140101,教育學系,D 日,D 博士,93,0,16,30 臺北市,1 一般
0001,國立政治大學,140101,教育學系,D 日,M 碩士,34,0,10,30 臺北市,1 一般&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;得知政大為台灣第一所大學&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;查詢有數學系的大學&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat 103_sdata.csv | grep &amp;#34;數學系&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查詢全台灣的大學有數學系的有幾間&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat 103_sdata.csv | grep &amp;#39;數學系&amp;#39; | cut -d &amp;#39;,&amp;#39; -f 2 | sort | uniq | wc -l
31&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;wc | word count&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;答 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget &amp;#39;http://stats.moe.gov.tw/files/detail/104/104_sdata.csv&amp;#39; -O 104_sdata.csv
$ wget &amp;#39;http://stats.moe.gov.tw/files/detail/105/105_sdata.csv&amp;#39; -O 105_sdata.csv
$ cat 104_sdata.csv | grep &amp;#39;數學系&amp;#39; | cut -d &amp;#39;,&amp;#39; -f 2 | sort | uniq | wc -l
31
$ cat 105_sdata.csv | grep &amp;#39;數學系&amp;#39; | cut -d &amp;#39;,&amp;#39; -f 2 | sort | uniq | wc -l
30&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat getsdata.sh
#!/bin/bash
declare -i y
for ((y=103;y&amp;lt;=110;y=y&amp;#43;1))
do
[ -f s${y}.csv ] &amp;amp;&amp;amp; rm s${y}.csv
wget &amp;#34;http://stats.moe.gov.tw/files/detail/${y}/${y}_sdata.csv&amp;#34; -O s${y}.csv &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;download s${y}.csv failure&amp;#34; &amp;amp;&amp;amp; continue
echo &amp;#34;s${y} ok&amp;#34;
done
[ ! -d opendata/s ] &amp;amp;&amp;amp; mkdir -p opendata/s
mv s*.csv opendata/s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;HDFS 基本操作命令&lt;/h1&gt;&lt;h2&gt;操作命令 (一)&lt;span class="hx:absolute hx:-mt-20" id="操作命令-一"&gt;&lt;/span&gt;
&lt;a href="#%e6%93%8d%e4%bd%9c%e5%91%bd%e4%bb%a4-%e4%b8%80" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget -qO - http://www.oc99.org/dt/getcsv.sh | bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;下載好的資料會放在&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -l | grep mycsv
drwxr-sr-x 2 bigred bigred 4096 Jul 13 10:15 mycsv
-rw-r--r-- 1 bigred bigred 348134 Jul 11 2021 mycsv.zip&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;老師的程式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
wget http://www.oc99.org/dt/dataset/mycsv.zip -O /tmp/mycsv.zip &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;get mycsv.zip failure&amp;#34; &amp;amp;&amp;amp; exit 1
[ ! -d ~/mycsv ] &amp;amp;&amp;amp; mkdir ~/mycsv/
cd ~/mycsv; unzip -o /tmp/mycsv.zip &amp;amp;&amp;gt;/dev/null
tree -L 1 ~/mycsv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;從這個階段開始 bigred 使用者會有兩個家&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/home/bigred&lt;/code&gt; &amp;ndash; &amp;gt; linux ext4 檔案系統的家
&lt;code&gt;/user/bigred&lt;/code&gt; &amp;ndash; &amp;gt; 別墅區，放大數據的家 ( hdfs 分散式檔案系統的家 )&lt;/p&gt;
&lt;p&gt;顯示使用者 HDFS 家目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pig -e &lt;span class="s2"&gt;&amp;#34;pwd&amp;#34;&lt;/span&gt; 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hdfs://dtm1:8020/user/bigred&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-e&lt;/code&gt;, -execute - Commands to execute ( within quotes 在引號內 )&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2&lt;/code&gt; ，錯誤訊息裝置&lt;/li&gt;
&lt;li&gt;dtm1 的 namenode 程式，打開 TCP/IP 的一個 8020 port&lt;/li&gt;
&lt;li&gt;neamenode 紀錄 hdfs 的 metadata&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 HDFS 上面建立目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hdfs dfs -mkdir mydataset&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hdfs&lt;/code&gt;，&lt;code&gt;Usage: hdfs [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dfs&lt;/code&gt; ，hdfs 的子命令， run a filesystem command on the file system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;檢查是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hdfs dfs -ls
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Found &lt;span class="m"&gt;2&lt;/span&gt; items
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x - bigred bigboss &lt;span class="m"&gt;0&lt;/span&gt; 2022-07-12 10:41 .sparkStaging
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x - bigred bigboss &lt;span class="m"&gt;0&lt;/span&gt; 2022-07-13 10:32 mydataset&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢視 客戶資訊 的前兩行 ( 注意，此時在 linux 的 ext4 檔案系統 )&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ head -n 2 ~/mycsv/customer.csv
4000001,Kristina,Chung,55,Pilot
4000002,Paige,Chen,74,Teacher&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將 客戶資訊 搬到 hdfs 分散式檔案系統中的 mydataset 目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -put ~/mycsv/customer.csv mydataset/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;[重要] 管理目錄, 記得目錄名稱最後要加上 &amp;ldquo;/&amp;rdquo;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;hdfs 的語法與 linux 的命令結合
看&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -cat mydataset/customer.csv | head -n 3
4000001,Kristina,Chung,55,Pilot
4000002,Paige,Chen,74,Teacher
4000003,Sherri,Melton,34,Firefighter&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;練習 :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;請在 HDFS 建立以下目錄架構 ?
mydataset
|&amp;ndash;US
|&amp;ndash;TW&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -mkdir -p mydataset/{US,TW}
bigred@dta1:~$ hdfs dfs -ls mydataset
Found 3 items
drwxr-xr-x - bigred bigboss 0 2022-07-13 10:47 mydataset/TW
drwxr-xr-x - bigred bigboss 0 2022-07-13 10:47 mydataset/US
-rw-r--r-- 2 bigred bigboss 695 2022-07-13 10:36 mydataset/customer.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;請將 Linux 的 /etc/hosts 檔案上傳至 HDFS 檔案系統的 mydataset/TW 目錄中&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -put /etc/hosts mydataset/TW/
$ hdfs dfs -ls mydataset/TW/
Found 1 items
-rw-r--r-- 2 bigred bigboss 216 2022-07-13 10:49 mydataset/TW/hosts
$ hdfs dfs -cat mydataset/TW/hosts
127.0.0.1 localhost alp
192.168.61.0 x1
192.168.61.1 x2 www.microsoft.com
192.168.61.2 x3
192.168.61.3 dta1
192.168.61.4 dtm1
192.168.61.5 dtm2
192.168.61.6 dtw1
192.168.61.7 dtw2
192.168.61.8 dtw3
192.168.61.9 dtw4&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;為何不能用 &lt;code&gt;hdfs dfs -cp /etc/hosts mydataset/TW/&lt;/code&gt; ?
因為 &lt;code&gt;hdfs dfs -cp&lt;/code&gt; 不能跨檔案系統複製，只能在 hdfs 內自己拷貝&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;103 年大專校院名錄檔&lt;span class="hx:absolute hx:-mt-20" id="103-年大專校院名錄檔"&gt;&lt;/span&gt;
&lt;a href="#103-%e5%b9%b4%e5%a4%a7%e5%b0%88%e6%a0%a1%e9%99%a2%e5%90%8d%e9%8c%84%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;++下載資料++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget --no-check-certificate https://stats.moe.gov.tw/files/school/103/u1_new.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--no-check-certificate &lt;/code&gt; don&amp;rsquo;t validate the server&amp;rsquo;s certificate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;++看 u1_new.txt 的內容++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ head -n 3 u1_new.txt
T 3x[t^^&amp;#39;\!hb
T1z 0W@W q }@W Ԛ|%R&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;跨簍謀 ? ? ?&lt;/p&gt;
&lt;p&gt;++看檔案編碼++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ file -bi u1_new.txt
text/plain; charset=utf-16le&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$ file -bi [filename]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;描述 : 檢查文件中使用的編碼&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-b, --brief&lt;/code&gt; | 不打印文件名（簡要模式）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-i, --mime&lt;/code&gt; | 打印文件類型和編碼&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://www.shellhacks.com/linux-check-change-file-encoding/"target="_blank" rel="noopener"&gt;參考連結&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;linux 系統大部分設定的編碼為 utf-8&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;utf-16
&lt;ul&gt;
&lt;li&gt;16 單位是 bit&lt;/li&gt;
&lt;li&gt;16 bit = 2 bytes&lt;/li&gt;
&lt;li&gt;文字的語言都用 2 個 byte 在描述，因 1 個 byte 只有 256 個不夠，兩個才有 6 萬多個&lt;/li&gt;
&lt;li&gt;如果用 2 個 byte 去描述英文，會浪費太多&lt;/li&gt;
&lt;li&gt;適合儲存東方語系的中文&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;utf-8
&lt;ul&gt;
&lt;li&gt;存中文為 3 個 byte&lt;/li&gt;
&lt;li&gt;不適合存中文的文字&lt;/li&gt;
&lt;li&gt;適合英文語系的系統&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;++轉換資料格式 ( &lt;font color=red&gt;&lt;strong&gt;在做資料處理時，不要動到原始檔&lt;/strong&gt;&lt;/font&gt; )++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ iconv -f utf-16le -t utf8 u1_new.txt &amp;gt;103u.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;iconv 命令解析
&lt;ul&gt;
&lt;li&gt;功能描述 : 將文本從一種字符編碼轉換為另一種&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-f&lt;/code&gt; from-encoding | 檔案原本的編碼&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt; to-encoding | 要轉換的編碼&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt; | 從輸出中省略無效字符&lt;/li&gt;
&lt;li&gt;範例 : &lt;code&gt;iconv -f utf-16le -t utf8 u1_new.txt&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;描述 : 將 u1_new.txt 這個檔案從 utf-16le 編碼 轉換為 utf8 編碼&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://man7.org/linux/man-pages/man1/iconv.1.html"target="_blank" rel="noopener"&gt;參考文件連結&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;++&lt;strong&gt;看轉碼後的檔案前四列&lt;/strong&gt;++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ head -n 4 103u.txt
103學年度大專校院名錄
代碼 學校名稱 縣市名稱 地址 電話 網址 體系別
0001 國立政治大學 [38]臺北市 [116]臺北市文山區指南路二段64號 (02)29393091 http://www.nccu.edu.tw [1]一般&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;++將資料丟到 hdfs 分散式檔案系統中++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -put 103u.txt mydataset/
# 檢查是否符合預期
$ hdfs dfs -ls mydataset
Found 4 items
-rw-r--r-- 2 bigred bigboss 20807 2022-07-13 11:31 mydataset/103u.txt
drwxr-xr-x - bigred bigboss 0 2022-07-13 10:49 mydataset/TW
drwxr-xr-x - bigred bigboss 0 2022-07-13 10:47 mydataset/US
-rw-r--r-- 2 bigred bigboss 695 2022-07-13 10:36 mydataset/customer.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;++下載 108 年的資料++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget --no-check-certificate https://stats.moe.gov.tw/files/school/108/u1_new.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;++查看資料++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ file -bi u1_new.csv
text/csv; charset=utf-8
$ head -n 3 u1_new.csv
代碼,學校名稱,公/私立,縣市名稱,地址,電話,網址,體系別
0001,國立政治大學,公立,[38]臺北市,[116]臺北市文山區指南路二段64號,(02)29393091,http://www.nccu.edu.tw,[1]一般
0002,國立清華大學,公立,[18]新竹市,[300]新竹市東區光復路二段101號,(03)5715131,http://www.nthu.edu.tw,[1]一般&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;++題目 :++&lt;/p&gt;
&lt;p&gt;1.先建立以下文字檔並上載至 HDFS 檔案系統&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo &amp;#34;224.2.2.2 ICRT&amp;#34; &amp;gt; radio.txt
$ hdfs dfs -put radio.txt mydataset/TW/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;請將 &amp;ldquo;224.1.1.1 FM989&amp;rdquo; 這行字串增加到 &lt;code&gt;mydataset/TW/radio.txt&lt;/code&gt; 檔案的開頭&lt;/p&gt;
&lt;p&gt;++答 :++&lt;/p&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;一定要先在外面修改完，才能丟到 hdfs 分散式檔案系統中，因為 hadoop 被設計出來就是要處理 raw data ，即不能更改資料內容，只能從後面新增資料&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 編輯檔案
$ nano radio.txt
224.2.2.2 ICRT
224.1.1.1 FM989
# -f 強制覆蓋 radio.txt 到原本的檔案
$ hdfs dfs -put -f radio.txt mydataset/TW/
# 檢查是否符合預期
$ hdfs dfs -cat mydataset/TW/radio.txt
224.2.2.2 ICRT
224.1.1.1 FM989&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;注意 ! hive 的命令一樣不支援 SQL 語法的 update 和 delete 的命令 ! 如果硬要處理，底層要有一個專門處理資料的 system 來支援。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hdfs dfs -appendToFile&lt;/code&gt; 只支援從本地端的檔案系統中的資料 append 到 hdfs 檔案系統中的資料&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a
href="https://www.qnap.com/zh-tw"target="_blank" rel="noopener"&gt;網路硬碟&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Network ? Server&lt;/li&gt;
&lt;li&gt;大家可以透過網路一起存取硬碟&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1&gt;HDFS 協同作業系統&lt;/h1&gt;&lt;h2&gt;建立 Linux 帳號&lt;span class="hx:absolute hx:-mt-20" id="建立-linux-帳號"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-linux-%e5%b8%b3%e8%99%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 在 dta1 終端機, 執行以下命令
$ echo -e &amp;#34;rbean\nrbean&amp;#34; | sudo adduser -h /home/rbean -s /bin/bash rbean
Changing password for rbean
New password:
Bad password: similar to username
Retype password:
passwd: password for rbean is unchanged
$ echo -e &amp;#34;gbean\ngbean&amp;#34; | sudo adduser -h /home/gbean -s /bin/bash gbean
Changing password for gbean
New password:
Bad password: similar to username
Retype password:
passwd: password for gbean is unchanged&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;六個空白，hacker 也很難破解，越多空白越難破解&lt;/li&gt;
&lt;li&gt;參數前面如果只有一個 &amp;ldquo;&lt;code&gt;-&lt;/code&gt;&amp;quot;，後面的英文大多都是簡寫&lt;/li&gt;
&lt;li&gt;參數前面如果只有一個 &amp;ldquo;&lt;code&gt;--&lt;/code&gt;&amp;quot;，後面的英文大多都是完整的英文單字&lt;/li&gt;
&lt;li&gt;刪除使用者須借用最高的管理員權限 &amp;ndash;&amp;gt; sudo | super user do&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;++刪除 rbean 和 gbean 使用者++&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo deluser --remove-home rbean
deluser: can&amp;#39;t find rbean in /etc/group
$ sudo deluser --remove-home gbean
deluser: can&amp;#39;t find gbean in /etc/group&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;建立資料分析師家目錄&lt;span class="hx:absolute hx:-mt-20" id="建立資料分析師家目錄"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b%e8%b3%87%e6%96%99%e5%88%86%e6%9e%90%e5%b8%ab%e5%ae%b6%e7%9b%ae%e9%8c%84" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;建立 rbean、gbean 和 bigred 在 hdfs 檔案系統中的家目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -mkdir -p /user/{rbean,gbean,bigred}
# 檢查是否符合預期
$ hdfs dfs -ls /user
Found 3 items
drwxr-xr-x - bigred bigboss 0 2022-07-13 10:32 /user/bigred
drwxr-xr-x - bigred bigboss 0 2022-07-13 14:01 /user/gbean
drwxr-xr-x - bigred bigboss 0 2022-07-13 14:01 /user/rbean&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;更改 rbean 和 gbean 使用者在 hdfs 家目錄的權限&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -chown rbean:rbean /user/rbean
$ hdfs dfs -chown gbean:gbean /user/gbean
# 檢查是否符合預期
$ hdfs dfs -ls /user
Found 3 items
drwxr-xr-x - bigred bigboss 0 2022-07-13 10:32 /user/bigred
drwxr-xr-x - gbean gbean 0 2022-07-13 14:01 /user/gbean
drwxr-xr-x - rbean rbean 0 2022-07-13 14:01 /user/rbean&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;刪除 rbean 和 gbean 使用者在 hdfs 家目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -rm -r /user/rbean
Deleted /user/rbean&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;寫一隻 mkuser 和 rmuser&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat mkuser
#!/bin/bash
clear
u=(rbean gbean ybean)
for n in ${u[@]}
do
cat /etc/passwd | grep &amp;#34;^$n&amp;#34; &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34;linux ${n} user 已存在&amp;#34;
else
echo -e &amp;#34;${n}\n${n}&amp;#34; | sudo adduser -h /home/${n} -s /bin/bash $n &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;linux ${n} user ok&amp;#34;
fi
hdfs dfs -ls /user | grep &amp;#34;$n&amp;#34; &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34;hdfs ${n} user 已存在&amp;#34;
else
hdfs dfs -mkdir /user/${n} &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; hdfs dfs -chown ${n}:${n} /user/${n}
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;hdfs ${n} user ok&amp;#34;
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat rmuser
#!/bin/bash
u=(rbean gbean ybean)
for n in ${u[@]}
do
hdfs dfs -ls /user | grep &amp;#34;$n&amp;#34; &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
hdfs dfs -rm -r /user/${n} &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; echo &amp;#34;hdfs ${n} user 刪除成功 !&amp;#34;
else
echo &amp;#34;hdfs ${n} user 不存在&amp;#34;
fi
cat /etc/passwd | grep &amp;#34;^$n&amp;#34; &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
sudo deluser --remove-home ${n} &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; &amp;#34;linux ${n} user 刪除成功 !&amp;#34;
else
echo &amp;#34;linux ${n} user 不存在&amp;#34;
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/YlwrsKE.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;第二題 批次建 linux user 帳號，帳號名稱要拉出程式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;clear
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;please give me a file, thx !&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt; ! -f &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;No such file, if file name is correct, pls check path, thx !&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nb"&gt;read&lt;/span&gt; line
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$line&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; cut -d &lt;span class="s2"&gt;&amp;#34;,&amp;#34;&lt;/span&gt; -f 1&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cat /etc/passwd &lt;span class="p"&gt;|&lt;/span&gt; grep -w &lt;span class="s2"&gt;&amp;#34;^&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$?&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; user exist&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$line&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; cut -d &lt;span class="s2"&gt;&amp;#34;,&amp;#34;&lt;/span&gt; -f 2&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; -e &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;p&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;p&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; sudo adduser -s /bin/bash &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$?&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; user created&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;create &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; user error!&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt; &amp;lt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sleep &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;執行結束&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -mkdir /app
$ hdfs dfs -ls /
Found 3 items
drwxr-xr-x - bigred bigboss 0 2022-07-13 15:01 /app
drwxrwxrwx - bigred bigboss 0 2022-07-12 10:40 /tmp
drwxr-xr-x - bigred bigboss 0 2022-07-13 14:54 /user&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;為何 bigred 使用者 可以在 hdfs 檔案系統的根目錄上建立目錄 ?
因為當初是 bigred 使用者 formathdfs 檔案系統，所以 bigred 使用者為 hdfs 的管理者
結論 : 哪個使用者 formathdfs ，誰就是 hdfs 檔案系統的管理員&lt;/p&gt;
&lt;p&gt;將 mkuser 和 rmuser 丟到 hdfs 的 /app 目錄中&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -put mkuser /app/
$ hdfs dfs -put rmuser /app/
# 檢查是否符合預期
$ hdfs dfs -ls /app/
Found 2 items
-rw-r--r-- 2 bigred bigboss 568 2022-07-13 15:07 /app/mkuser
-rw-r--r-- 2 bigred bigboss 471 2022-07-13 15:07 /app/rmuser&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 透過 ssh 命令，連線到 dtm1 機器
$ ssh dtm1
# 看 hdfs 的 /app 目錄
$ hdfs dfs -ls /app
Found 2 items
-rw-r--r-- 2 bigred bigboss 568 2022-07-13 15:07 /app/mkuser
-rw-r--r-- 2 bigred bigboss 471 2022-07-13 15:07 /app/rmuser&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;使用者如何執行剛剛丟到 hdfs 的 /app 目錄中的程式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 執行
$ hdfs dfs -cat /app/mkuser | bash
# 檢查是否符合預期
$ tail -n 3 /etc/passwd
rbean:x:1002:1002:Linux User,,,:/home/rbean:/bin/bash
gbean:x:1003:1003:Linux User,,,:/home/gbean:/bin/bash
ybean:x:1004:1004:Linux User,,,:/home/ybean:/bin/bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -mkdir /dataset
$ hdfs dfs -rm -r /dataset
Deleted /dataset
$ hdfs dfs -put mycsv/customer.csv /dataset
$ hdfs dfs -ls /
Found 4 items
drwxr-xr-x - bigred bigboss 0 2022-07-13 15:07 /app
-rw-r--r-- 2 bigred bigboss 695 2022-07-13 15:42 /dataset
drwxrwxrwx - bigred bigboss 0 2022-07-12 10:40 /tmp
drwxr-xr-x - bigred bigboss 0 2022-07-13 14:54 /user
$ hdfs dfs -rm /dataset
Deleted /dataset
$ hdfs dfs -put mycsv/customer.csv /dataset/
put: `/dataset/&amp;#39;: No such file or directory: `hdfs://dtm1:8020/dataset&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;連線到 dta1 的 rbean 使用者&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -mkdir mydata/
$ hdfs dfs -cp /dataset/customer.csv mydata/
$ hdfs dfs -rm mydata/customer.csv
Deleted mydata/customer.csv
$ exit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;lake.sehema 設計協同作業目錄架構&lt;span class="hx:absolute hx:-mt-20" id="lakesehema-設計協同作業目錄架構"&gt;&lt;/span&gt;
&lt;a href="#lakesehema-%e8%a8%ad%e8%a8%88%e5%8d%94%e5%90%8c%e4%bd%9c%e6%a5%ad%e7%9b%ae%e9%8c%84%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;描述 : 這支程式在建立 協同作業的環境&lt;/p&gt;
&lt;p&gt;以下命令回到 bigred&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ lake.schema
/raw/ (bigred:bigboss,755)
/elt/ (bigred:bigboss,755)
/dataset/ existed
/apps/ (bigred:bigboss,755)
/metadata/ (bigred:bigboss,755)
/tmp/hive created (Jupyter)
/tmp (777)
執行完成&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/raw/&lt;/code&gt; | 放 raw data&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/elt/&lt;/code&gt; | 放一堆處理資料的程式，不論是 python 或是 bash script 都可以&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dataset/&lt;/code&gt; | 放 elt 目錄下程式執行完，處理後的資料&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/apps/&lt;/code&gt; | 放 system 維運的程式， 像是 mkuser ,rmuser&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/metadata/&lt;/code&gt; | 放 hive 工具要用的 schema ，因為 SQL 命令要跑會需要資料的 schema
&lt;ul&gt;
&lt;li&gt;schema | 資料的欄位 and 欄位屬性&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;設定 HDFS Access Control List ( 簡稱 : ACL )&lt;span class="hx:absolute hx:-mt-20" id="設定-hdfs-access-control-list--簡稱--acl-"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a-hdfs-access-control-list--%e7%b0%a1%e7%a8%b1--acl-" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;linux 檔案系統也有這種機制&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs getconf -confKey dfs.namenode.acls.enabled
true
$ hdfs dfs -setfacl -m user:rbean:rwx /apps/
$ hdfs dfs -getfacl /apps
# file: /apps
# owner: bigred
# group: bigboss
user::rwx
user:rbean:rwx
group::r-x
mask::rwx
other::r-x&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;自製 sysinfo 系統命令, 上載至 /apps&lt;span class="hx:absolute hx:-mt-20" id="自製-sysinfo-系統命令-上載至-apps"&gt;&lt;/span&gt;
&lt;a href="#%e8%87%aa%e8%a3%bd-sysinfo-%e7%b3%bb%e7%b5%b1%e5%91%bd%e4%bb%a4-%e4%b8%8a%e8%bc%89%e8%87%b3-apps" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 在 rbean 終端機執行以下命令
$ echo $&amp;#39;echo &amp;#34;SRE Linux 22.04&amp;#34;
m=$(free -mh | grep Mem:)
echo -n &amp;#34;Memory : &amp;#34;
echo $m | cut -d\&amp;#39; \&amp;#39; -f2
cn=$(cat /proc/cpuinfo | grep \&amp;#39;model name\&amp;#39; | head -n 1 | cut -d \&amp;#39;:\&amp;#39; -f2)
echo -n &amp;#34;CPU : &amp;#34;
echo $cn
m=$(df -h | grep /dev/sda)
echo -n &amp;#34;Disk : &amp;#34;
echo $m | cut -d \&amp;#39; \&amp;#39; -f2&amp;#39; &amp;gt; sysinfo
$ hdfs dfs -put sysinfo /apps
$ hdfs dfs -cat /apps/sysinfo | bash
SRE Linux 22.04
Memory : 7.8G
CPU : Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
Disk : 492G&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;連線到 gbean&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -ls /apps
Found 2 items
drwxr-xr-x - rbean bigboss 0 2022-07-13 16:23 /apps/sh
-rw-r--r-- 2 rbean bigboss 264 2022-07-13 16:25 /apps/sysinfo&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;gbean 刪除 /apps/sysinfo&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -rm /apps/sysinfo
rm: Permission denied: user=gbean, access=WRITE, inode=&amp;#34;/apps&amp;#34;:bigred:bigboss:drwxrwxr-x&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注意 ! 不可刪除 ! 因未授權刪除的權限給 gbean 使用者&lt;/p&gt;
&lt;p&gt;執行 hdfs 檔案系統的 /apps/sysinfo&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -cat /apps/sysinfo | bash
SRE Linux 22.04
Memory : 2.9Gi
CPU : Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz
Disk : 491G&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>建置 Apache Hadoop 3.3.3</title><link>https://blog.kubeantony.com/archive/data-platform/%E5%BB%BA%E7%BD%AE-apache-hadoop-3.3.3/</link><pubDate>Tue, 16 Aug 2022 05:51:10 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E5%BB%BA%E7%BD%AE-apache-hadoop-3.3.3/</guid><description>
&lt;hr&gt;
&lt;h2&gt;Create VM-US2204&lt;span class="hx:absolute hx:-mt-20" id="create-vm-us2204"&gt;&lt;/span&gt;
&lt;a href="#create-vm-us2204" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a
href="https://blog.kubeantony.com/y4k5LN8sTY-3TY2u9CM37w"&gt;Create VM-US2204 連結&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Create VM-US2204 Cluster&lt;/h1&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;C:\Users\bigred&amp;gt;ssh bigboss@192.168.61.110
bigboss@192.168.61.110s password:
# 系統更新
$ sudo apt update; sudo apt upgrade; sudo apt autoremove
#　安裝套件以及 Hadoop 所需的套件
$ sudo apt-get install tree unzip net-tools openjdk-8-jdk libisal-dev libsnappy-dev libz-dev
# 允許 ssh process 的環境變數，會去讀取 ~/.ssh/environment
$ sudo nano /etc/ssh/sshd_config
.......
PermitUserEnvironment yes
# 當我們第一次 ssh 連到別台機器時，直接收公鑰，不要再問我 yes 或 no
$ sudo nano /etc/ssh/ssh_config
.........
StrictHostKeyChecking no
# 產生公私鑰
$ ssh-keygen -t rsa -P &amp;#39;&amp;#39;
Enter file in which to save the key (/home/bigred/.ssh/id_rsa): 按 Enter
# 複製公鑰成 authorized_keys
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# 設定 /etc/hosts
$ sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 cvn80
192.168.66.110 dta1
192.168.66.111 dts1
192.168.66.112 dts2
192.168.66.113 dts3
192.168.66.114 dtm1
192.168.66.115 dtm2
192.168.66.120 dtw1
192.168.66.121 dtw2
192.168.66.122 dtw3
192.168.66.123 dtw4
192.168.66.124 dtw5
192.168.66.125 dtw6
# 設定 sudo 群組執行 sudo 免密碼
# 因 bigboss 在 sudo 群組裡，在第 50 行
$ sudo nano -l /etc/sudoers
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
# 設定 bigboss 帳號自動登入 ( 在第 40 行 )
$ sudo nano -l /lib/systemd/system/getty@.service
ExecStart=-/sbin/agetty --autologin bigboss --keep-baud 115200,38400,9600 %I $TERM
# 編輯 /etc/profile，新增以下 55 行~ 71 行的內容
$ sudo nano /etc/profile
gw=$(/sbin/route -n | grep -e &amp;#34;^0.0.0.0 &amp;#34; | head -n 1)
export GWIF=${gw##* }
ips=$(/sbin/ifconfig $GWIF | grep &amp;#39;inet &amp;#39;)
export IP=$(echo $ips | cut -d&amp;#39; &amp;#39; -f2 | cut -d&amp;#39;:&amp;#39; -f2)
export NETID=${IP%.*}
export GW=$(/sbin/route -n | grep -e &amp;#39;^0.0.0.0&amp;#39; | tr -s \ - | cut -d &amp;#39; &amp;#39; -f2)
export PATH=/home/bigboss/bin:/home/bigboss/vmusdt/bin:$PATH
clear; sleep 3
v=$(cat /etc/os-release | grep &amp;#39;PRETTY_NAME&amp;#39; | cut -d &amp;#39;=&amp;#39; -f 2)
echo &amp;#34;Welcome to DT Platform V 22.07 ($v)&amp;#34;
[ &amp;#34;$IP&amp;#34; != &amp;#34;&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;IP : $IP&amp;#34;
echo &amp;#34;&amp;#34;
alias ping=&amp;#39;ping -c 4 &amp;#39;
alias dir=&amp;#39;ls -alh &amp;#39;
alias poweroff=&amp;#39;sudo poweroff&amp;#39;
alias reboot=&amp;#39;sudo reboot&amp;#39;
# uninstall cloud-init
## Disable all services (uncheck everything except &amp;#34;None&amp;#34;):
$ sudo dpkg-reconfigure cloud-init
## Uninstall the package and delete the folders
$ sudo dpkg-reconfigure cloud-init
$ sudo apt-get purge cloud-init
$ sudo rm -rf /etc/cloud/ &amp;amp;&amp;amp; sudo rm -rf /var/lib/cloud/
## Restart the computer
$ sudo reboot
# 關閉 ipv6
## 雙引號裡新增 ipv6.disable=1 , 在第 10, 11 行
$ sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;ipv6.disable=1&amp;#34;
GRUB_CMDLINE_LINUX=&amp;#34;ipv6.disable=1&amp;#34;
# Now update the GRUB bootloader configuration files for the changes to take effect with the following command:
$ sudo update-grub2
## Restart the computer
$ sudo reboot
## 檢查是否符合預期
$ test -f /proc/net/if_inet6 &amp;amp;&amp;amp; echo &amp;#34;IPv6 is enabled.&amp;#34; || echo &amp;#34;IPv6 is disabled.&amp;#34;
IPv6 is disabled.
# 檢查 java 版本
$ java -version check
openjdk version &amp;#34;1.8.0_312&amp;#34;
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
## 關機
$ sudo poweroff&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a
href="https://askubuntu.com/questions/527410/what-is-the-advantage-of-using-sudo-apt-get-autoremove-over-a-cleaner-app"target="_blank" rel="noopener"&gt;sudo apt autoremove 解釋&lt;/a&gt;
&lt;a
href="https://www.freebsd.org/cgi/man.cgi?sshd_config%285%29"target="_blank" rel="noopener"&gt;sshd_config 詳細說明連結&lt;/a&gt;
&lt;a
href="https://www.freebsd.org/cgi/man.cgi?query=ssh_config&amp;amp;apropos=0&amp;amp;sektion=5&amp;amp;manpath=FreeBSD&amp;#43;13.1-RELEASE&amp;#43;and&amp;#43;Ports&amp;amp;arch=default&amp;amp;format=html"target="_blank" rel="noopener"&gt;ssh_config 詳細說明連結&lt;/a&gt;
&lt;a
href="https://blog.kubeantony.com/5Tq_CVAuTCaxMqeqteXsTQ"&gt;Ubuntu Server 設定帳號自動登入&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;參考圖片
&lt;img src="https://i.imgur.com/72dMk62.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; 設定 虛擬主機 名稱
dta1, dtm1, dtm2, dts1..dts3,dtw1..6
設定 虛擬主機 記憶體
dta1 -&amp;gt; 6G ( 6144 mb )
dts1 -&amp;gt; 6G
dts2 -&amp;gt; 6G
dts3 -&amp;gt; 6G
dtm1 -&amp;gt; 4G ( 4096 mb )
dtm2 -&amp;gt; 4G
dtw1 -&amp;gt; 10G ( 10240 mb )
dtw2 -&amp;gt; 10G
dtw3 -&amp;gt; 10G
dtw4 -&amp;gt; 10G
dtw5 -&amp;gt; 10G
dtw6 -&amp;gt; 10G
設定 虛擬主機 網卡
Network Adapter -&amp;gt; Bridge&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;在 Windows 命令提示字元 視窗, 執行以下命令, 登入虛擬主機
c:\&amp;gt;ssh bigboss@192.168.66.xx
設定固定 IP
$ sudo nano /etc/netplan/00-installer-config.yaml
network:
version: 2
renderer: networkd
ethernets:
ens32:
dhcp4: no
addresses:
- 192.168.66.xx/24
routes:
- to: default
via: 192.168.66.2
nameservers:
addresses: [8.8.8.8, 168.95.1.1]
測試網路
$ sudo netplan apply
設定電腦名稱
$ sudo nano /etc/hostname
dta1
$ sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;資科平台系統建置&lt;/h1&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;在 Windows 系統的 cmd 視窗, 執行以下命令
$ ssh bigboss@&amp;lt;dta1 IP&amp;gt;
$ cd; wget http://www.oc99.org/zip/vmusdt2022.zip; unzip vmusdt2022.zip
$ dir vmusdt ## vmusdt (Virtual Machine Ubuntu Server Data technology)
total 20K
drwxr-xr-x 5 bigboss bigboss 4.0K Jul 4 02:45 .
drwxr-x--- 9 bigboss bigboss 4.0K Jul 5 11:35 ..
drwxr-xr-x 2 bigboss bigboss 4.0K Jul 5 11:34 bin
drwxr-xr-x 5 bigboss bigboss 4.0K May 9 18:57 hdp210
drwxr-xr-x 5 bigboss bigboss 4.0K Jul 6 03:36 hdp33
$ dir vmusdt/bin
total 28K
drwxr-xr-x 2 bigboss bigboss 4.0K Jul 5 11:34 .
drwxr-xr-x 5 bigboss bigboss 4.0K Jul 4 02:45 ..
-rwxr-xr-x 1 bigboss bigboss 1.2K Jul 5 03:21 dtconf
-rwxr-xr-x 1 bigboss bigboss 974 Jul 4 05:06 dtcopy
-rwxr-xr-x 1 bigboss bigboss 280 Jul 4 08:49 dthdpchk
-rwxr-xr-x 1 bigboss bigboss 472 Jul 4 09:08 dtsyschk
-rwxr-xr-x 1 bigboss bigboss 771 Jul 4 13:38 dtwget
# 因為有把/home/bigboss/vmusdt/bin加到PATH環境變數，所以才可以直接執行vmusdt/bin目錄裡面的命令
$ echo $PATH
/home/bigboss/bin:/home/bigboss/vmusdt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bi
$ cd ~/vmusdt; dir hdp33
total 32K
drwxr-xr-x 5 bigboss bigboss 4.0K Jul 6 03:36 .
drwxr-xr-x 5 bigboss bigboss 4.0K Jul 4 02:45 ..
drwxr-xr-x 2 bigboss bigboss 4.0K Jul 6 07:09 bin
drwxr-xr-x 7 bigboss bigboss 4.0K Jul 4 07:22 conf
-rw-r--r-- 1 bigboss bigboss 420 Jul 4 02:32 dlist
-rw-r--r-- 1 bigboss bigboss 889 Jul 4 07:35 environment
drwxrwxr-x 7 bigboss bigboss 4.0K Jul 4 02:45 opt
-rwxr-xr-x 1 bigboss bigboss 2.6K Jul 4 07:33 us.bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;us.bash &amp;ndash;&amp;gt; 設定資科平台所需的環境變數
opt &amp;ndash;&amp;gt; 資科平台套件的存放目錄
bin &amp;ndash;&amp;gt; 存放部署或建制資科平台所需的命令
conf &amp;ndash;&amp;gt; 存放資科平台套件設定檔的目錄
dlist &amp;ndash;&amp;gt; 資科平台套件下載連結清單
environment &amp;ndash;&amp;gt; 設定 ssh 直接執行指令時的環境變數&lt;/p&gt;
&lt;h2&gt;修改 資科平台 程式 ( ~/vmusdt/bin/ )&lt;span class="hx:absolute hx:-mt-20" id="修改-資科平台-程式--vmusdtbin-"&gt;&lt;/span&gt;
&lt;a href="#%e4%bf%ae%e6%94%b9-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e7%a8%8b%e5%bc%8f--vmusdtbin-" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/bin/dtwget&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 5 行，更改為 [ ! -d ~/vmusdt/hdp${1} ] &amp;amp;&amp;amp; echo &amp;#34;~/vmusdt/hdp${1} not found&amp;#34; &amp;amp;&amp;amp; exit 1
第 6 行，更改為 [ ! -f ~/vmusdt/hdp${1}/dlist ] &amp;amp;&amp;amp; echo &amp;#34;~/vmusdt/hdp${1}/dlist not found&amp;#34; &amp;amp;&amp;amp; exit 1
第 27 行，更改為 sudo chown -R bigboss:bigboss ~/vmusdt/hdp${1}/opt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
[ &amp;#34;$#&amp;#34; != 1 ] &amp;amp;&amp;amp; echo &amp;#34;dtwget version&amp;#34; &amp;amp;&amp;amp; exit 1
[ ! -d ~/vmusdt/hdp${1} ] &amp;amp;&amp;amp; echo &amp;#34;~/vmusdt/hdp${1} not found&amp;#34; &amp;amp;&amp;amp; exit 1
[ ! -f ~/vmusdt/hdp${1}/dlist ] &amp;amp;&amp;amp; echo &amp;#34;~/vmusdt/hdp${1}/dlist not found&amp;#34; &amp;amp;&amp;amp; exit 1
read -p &amp;#34;download DT packages ? (YES/NO) &amp;#34; ans
if [ &amp;#34;$ans&amp;#34; == &amp;#34;YES&amp;#34; ]; then
[ -d ~/vmusdt/hdp${1}/opt ] &amp;amp;&amp;amp; rm -r ~/vmusdt/hdp${1}/opt &amp;amp;&amp;gt;/dev/null
mkdir -p ~/vmusdt/hdp${1}/opt
while read line; do
wget $line &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
n=${line##*/}
tar xvfz $n -C ~/vmusdt/hdp${1}/opt &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n ok&amp;#34;
rm $n
else
n=${line##*/}
echo &amp;#34;$n failed&amp;#34;
fi
done &amp;lt; ~/vmusdt/hdp${1}/dlist
fi
sudo chown -R bigboss:bigboss ~/vmusdt/hdp${1}/opt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/bin/dtcopy&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 3 行 刪除 dta2 ，新增 dts1 dts2 dts3 dtw5 dtw6
第 25 行 bigred -- &amp;gt; bigboss
第 28 行 bigred -- &amp;gt; bigboss&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano ~/vmusdt/bin/dtcopy
#!/bin/bash
w=&amp;#34;dta1 dts1 dts2 dts3 dtm1 dtm2 dtw1 dtw2 dtw3 dtw4 dtw5 dtw6&amp;#34;
[ &amp;#34;$#&amp;#34; != 1 ] &amp;amp;&amp;amp; echo &amp;#34;dtcopy version&amp;#34; &amp;amp;&amp;amp; exit 1
[ ! -d ~/vmusdt/hdp${1}/opt ] &amp;amp;&amp;amp; echo &amp;#34;~/vmusdt/hdp${1}/opt not found&amp;#34; &amp;amp;&amp;amp; exit 1
for x in $w
do
nc -w 1 -z $x 22 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; continue
ssh $x sudo mkdir -p /opt/bin &amp;amp;&amp;gt;/dev/null
ssh $x sudo chmod -R 777 /opt &amp;amp;&amp;gt;/dev/null
n=$(ssh $x ls /opt)
for y in $n
do
([ &amp;#34;$y&amp;#34; == &amp;#34;cni&amp;#34; ] || [ &amp;#34;$y&amp;#34; == &amp;#34;bin&amp;#34; ] || [ &amp;#34;$y&amp;#34; == &amp;#34;nfs&amp;#34; ]) &amp;amp;&amp;amp; continue
ssh $x sudo rm -r /opt/$y
done
scp -r ~/vmusdt/hdp${1}/opt/* bigboss@$x:/opt/ &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x /opt/ ok&amp;#34;
scp ~/vmusdt/hdp${1}/bin/* bigboss@$x:/opt/bin &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x /opt/bin ok&amp;#34;
scp /etc/hosts $x:~ &amp;amp;&amp;gt;/dev/null
ssh $x &amp;#39;sudo mv hosts /etc/hosts&amp;#39;
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x /etc/hosts ok&amp;#34;
ssh $x sudo chown -R root:root /opt
ssh $x sudo chmod -R 0777 /opt
echo &amp;#34;&amp;#34;
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;nano -l ~/vmusdt/bin/dtconf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 3 行 ，更改為 w=&amp;#34;dta1 dts1 dts2 sts3 dtm1 dtm2 dtw1 dtw2 dtw3 dtw4 dtw5 dtw6&amp;#34;
第 19 行，更改為 [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; scp ~/vmusdt/hdp${1}/conf/$y/* bigboss@$x:/opt/$y/etc/hadoop/ &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; echo &amp;#34;$x $y config ok&amp;#34; &amp;amp;&amp;amp; continue
第 20 行，更改為 [ -d ~/vmusdt/hdp${1}/conf/$y ] &amp;amp;&amp;amp; scp ~/vmusdt/hdp${1}/conf/$y/* bigboss@$x:/opt/$y/conf/ &amp;amp;&amp;gt;/dev/null
第 25 行，更改為 scp -r ~/vmusdt/hdp${1}/environment bigboss@$x:~/.ssh/environment &amp;amp;&amp;gt;/dev/null
第 28 行，更改為 scp -r ~/vmusdt/hdp${1}/us.bash bigboss@$x:~/us.bash &amp;amp;&amp;gt;/dev/null
第 31 行，更改為 ssh $x &amp;#39;cat /etc/profile | grep &amp;#39;/home/bigboss/us.bash&amp;#39; &amp;amp;&amp;gt;/dev/null&amp;#39;
第 32 行，更改為 [ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; ssh $x &amp;#39;echo source /home/bigboss/us.bash | sudo tee -a /etc/profile &amp;amp;&amp;gt;/dev/null&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
w=&amp;#34;dta1 dts1 dts2 dts3 dtm1 dtm2 dtw1 dtw2 dtw3 dtw4 dtw5 dtw6&amp;#34;
[ &amp;#34;$#&amp;#34; != 1 ] &amp;amp;&amp;amp; echo &amp;#34;dtconf version&amp;#34; &amp;amp;&amp;amp; exit 1
[ ! -d ~/vmusdt/hdp${1}/opt ] &amp;amp;&amp;amp; echo &amp;#34;~/vmusdt/hdp${1}/opt not found&amp;#34; &amp;amp;&amp;amp; exit 1
n=$(ls ~/vmusdt/hdp${1}/opt)
for x in $w
do
nc -w 1 -z $x 22 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; continue
for y in $n
do
echo &amp;#34;$y&amp;#34; | grep &amp;#39;hadoop-&amp;#39; &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; scp ~/vmusdt/hdp${1}/conf/$y/* bigboss@$x:/opt/$y/etc/hadoop/ &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; echo &amp;#34;$x $y config ok&amp;#34; &amp;amp;&amp;amp; continue
[ -d ~/vmusdt/hdp${1}/conf/$y ] &amp;amp;&amp;amp; scp ~/vmusdt/hdp${1}/conf/$y/* bigboss@$x:/opt/$y/conf/ &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x $y config ok&amp;#34;
done
ssh $x &amp;#39;sudo rm /etc/environment &amp;amp;&amp;gt;/dev/null&amp;#39;
scp -r ~/vmusdt/hdp${1}/environment bigboss@$x:~/.ssh/environment &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x environment ok&amp;#34;
scp -r ~/vmusdt/hdp${1}/us.bash bigboss@$x:~/us.bash &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x us.bash ok&amp;#34;
ssh $x &amp;#39;cat /etc/profile | grep &amp;#39;/home/bigboss/us.bash&amp;#39; &amp;amp;&amp;gt;/dev/null&amp;#39;
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; ssh $x &amp;#39;echo source /home/bigboss/us.bash | sudo tee -a /etc/profile &amp;amp;&amp;gt;/dev/null&amp;#39;
echo &amp;#34;$x /etc/profile ok&amp;#34;
echo &amp;#34;&amp;#34;
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;nano bin/dthdpchk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;m=&amp;#34;dta1 dts1 dts2 dts3 dtm1 dtm2&amp;#34;
w=&amp;#34;dtw1 dtw2 dtw3 dtw4 dtw5 dtw6&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
m=&amp;#34;dta1 dts1 dts2 dts3 dtm1 dtm2&amp;#34;
w=&amp;#34;dtw1 dtw2 dtw3 dtw4 dtw5 dtw6&amp;#34;
for n in $m $w
do
nc -w 1 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34;[$n]&amp;#34;
ssh $n &amp;#39;hadoop version | head -n 1&amp;#39;
ssh $n &amp;#39;hadoop checknative&amp;#39;
echo &amp;#34;&amp;#34;
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano ~/vmusdt/bin/dtsyschk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;m=&amp;#34;dtm1 dtm2 dts1 dts2 dts3&amp;#34;
w=&amp;#34;dtw1 dtw2 dtw3 dtw4 dtw5 dtw6&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
m=&amp;#34;dtm1 dtm2 dts1 dts2 dts3&amp;#34;
w=&amp;#34;dtw1 dtw2 dtw3 dtw4 dtw5 dtw6&amp;#34;
for n in $m $w
do
nc -w 1 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
ssh $n exit &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo -n &amp;#34;$n ssh ok&amp;#34;
ssh $n &amp;#39;java -version&amp;#39; &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo -n &amp;#34;, jdk8 ok&amp;#34;
ssh $n &amp;#39;which python3&amp;#39; &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34;, python3 ok&amp;#34;
else
echo &amp;#34;&amp;#34;
fi
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;修改 環境變數 套件清單檔 ( ~/vmusdt/hdp33/ )&lt;span class="hx:absolute hx:-mt-20" id="修改-環境變數-套件清單檔--vmusdthdp33-"&gt;&lt;/span&gt;
&lt;a href="#%e4%bf%ae%e6%94%b9-%e7%92%b0%e5%a2%83%e8%ae%8a%e6%95%b8-%e5%a5%97%e4%bb%b6%e6%b8%85%e5%96%ae%e6%aa%94--vmusdthdp33-" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;pig, spark, Hive 會去讀取 &lt;code&gt;us.bash&lt;/code&gt;，hadoop 不會&lt;/p&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;nano -l ~/vmusdt/hdp33/us.bash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 2 行，更改為 adminuser=bigboss
第 3 行，確認 java-8-openjdk
第 4 行，更改為 export HADOOP_HOME=/opt/hadoop-3.3.3
第 14 行，更改為 /home/bigboss/jhslog
第 27 行，更改為 export HIVE_HOME=/opt/apache-hive-3.1.3-bin
第 30 行，更改為 export PATH=/home/bigboss/vmusdt/bin:$PATH
第 33 行，更改為 export HBASE_HOME=/opt/hbase-2.4.13
第 34 行，更改為 export HBASE_CONF_DIR=/opt/hbase-2.4.13/conf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
adminuser=bigboss
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk/jre ## 資料科技平台所跑的 Java 程式的家
export HADOOP_HOME=/opt/hadoop-3.3.3
export HADOOP_LOG_DIR=/tmp
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=&amp;#34;-Djava.library.path=$HADOOP_HOME/lib/native&amp;#34;
# export HADOOP_USER_CLASSPATH_FIRST=true
[ -z $HADOOP_USER_NAME ] &amp;amp;&amp;amp; [ $SHELL == &amp;#39;/bin/bash&amp;#39; ] &amp;amp;&amp;amp; declare -r HADOOP_USER_NAME=$USER
# JobHistory log file path, 會自動產生目錄
# export HADOOP_MAPRED_LOG_DIR=&amp;#34;/home/bigboss/jhslog&amp;#34;
export YARN_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export YARN_LOG_DIR=/tmp
# hadoop 3.2.1 及 3.1.3 這二個版本只要執行檔案傳送命令就會出現以下訊息
# hadoop fs -put -f /etc/passwd /tmp
# SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
export HADOOP_ROOT_LOGGER=&amp;#34;WARN,console&amp;#34;
export PIG_HOME=/opt/pig-0.17.0
export PIG_HEAPSIZE=512
export HIVE_HOME=/opt/apache-hive-3.1.3-bin
export PATH=/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH=/usr/lib/jvm/java-1.8-openjdk/bin:/home/bigboss/dt/bin:$PATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PIG_HOME/bin:$HIVE_HOME/bin
export HBASE_HOME=/opt/hbase-2.4.13
export HBASE_CONF_DIR=/opt/hbase-2.4.13/conf
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.6.3-bin
export ZOO_LOG_DIR=/tmp/logs
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin
#export ZEPPELIN_HOME=/opt/zeppelin-0.9.0-bin-all
#export PATH=$PATH:$ZEPPELIN_HOME/bin
export SPARK_HOME=/opt/spark-3.2.1-bin-hadoop3.2
export SPARK_CONF_DIR=$SPARK_HOME/conf
export PYSPARK_PYTHON=/usr/bin/python3
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
if [ -d /opt/jupyter/miniconda3/bin ];then
export ANACONDA_ROOT=/opt/jupyter/miniconda3
export PATH=$ANACONDA_ROOT/bin:$PATH
export PYSPARK_PYTHON=$ANACONDA_ROOT/bin/python
fi
if [ &amp;#34;$USER&amp;#34; != &amp;#34;&amp;#34; ]; then
[ -f /home/$USER/dkc.env ] &amp;amp;&amp;amp; source /home/$USER/dkc.env
if [ ! -d metastore_db ]; then
#hn=$(hostname)
#if [ ${hn:0:3} == &amp;#34;adm&amp;#34; ] || [ ${hn:0:2} == &amp;#34;ds&amp;#34; ] || [ ${hn:0:8} == &amp;#34;zeppelin&amp;#34; ]; then
echo -n &amp;#34;build derby database ...&amp;#34;
schematool -initSchema -dbType derby &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34; ok&amp;#34;
echo &amp;#34;set hive.cli.print.current.db=true;&amp;#34; &amp;gt; .hiverc
echo &amp;#34;set hive.metastore.warehouse.dir=/user/$USER/hive;&amp;#34; &amp;gt;&amp;gt; .hiverc
echo &amp;#34;set hive.exec.scratchdir=/user/$USER/tmp;&amp;#34; &amp;gt;&amp;gt; .hiverc
fi
fi
alias nano=&amp;#39;nano -Ynone&amp;#39;
alias dir=&amp;#39;ls -alh&amp;#39;
alias ssh=&amp;#39;ssh -q&amp;#39;
fi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;nano -l ~/vmusdt/hdp33/environment&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 1 行，更改為 JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
第 2 行，更改為 HADOOP_HOME=/opt/hadoop-3.3.3
第 4 行，更改為 LD_LIBRARY_PATH=/opt/hadoop-3.3.3/lib/native/
第 5 行，更改為 HADOOP_COMMON_LIB_NATIVE_DIR=/opt/hadoop-3.3.3/lib/native
第 6 行，更改為 HADOOP_OPTS=-Djava.library.path=/opt/hadoop-3.3.3/lib/native
第 7 行，更改為 HADOOP_MAPRED_LOG_DIR=/home/bigboss/jhslog
第 8 行，更改為 YARN_HOME=/opt/hadoop-3.3.3
第 14 行，更改為 HBASE_HOME=/opt/hbase-2.4.13
第 15 行，更改為 HBASE_CONF_DIR=/opt/hbase-2.4.13/conf
第 17 行，更改為
PATH=/root/bin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/hadoop-3.3.3/bin:/opt/hadoop-3.3.3/sbin:/opt/pig-0.17.0/bin:/opt/apache-hive-3.1.3-bin/bin:/opt/spark-3.2.1-bin-hadoop3.2/bin:/opt/spark-3.2.1-bin-hadoop3.2/sbin:/opt/hbase-2.4.13/bin:/opt/apache-zookeeper-3.6.3-bin/bin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
HADOOP_HOME=/opt/hadoop-3.3.3
HADOOP_LOG_DIR=/tmp
LD_LIBRARY_PATH=/opt/hadoop-3.3.3/lib/native/
HADOOP_COMMON_LIB_NATIVE_DIR=/opt/hadoop-3.3.3/lib/native
HADOOP_OPTS=-Djava.library.path=/opt/hadoop-3.3.3/lib/native
HADOOP_MAPRED_LOG_DIR=/home/bigboss/jhslog
YARN_HOME=/opt/hadoop-3.3.3
YARN_LOG_DIR=/tmp
PIG_HOME=/opt/pig-0.17.0/
PIG_HEAPSIZE=512
SPARK_HOME=/opt/spark-3.2.1-bin-hadoop3.2
HIVE_HOME=/opt/apache-hive-3.1.3-bin
HBASE_HOME=/opt/hbase-2.4.11
HBASE_CONF_DIR=/opt/hbase-2.4.11/conf
HBASE_LOG_DIR=/tmp
ZOO_LOG_DIR=/tmp/logs
PATH=/root/bin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/hadoop-3.3.3/bin:/opt/hadoop-3.3.3/sbin:/opt/pig-0.17.0/bin:/opt/apache-hive-3.1.3-bin/bin:/opt/spark-3.2.1-bin-hadoop3.2/bin:/opt/spark-3.2.1-bin-hadoop3.2/sbin:/opt/hbase-2.4.11/bin:/opt/apache-zookeeper-3.6.3-bin/bin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano ~/vmusdt/hdp33/dlist&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 1 行，更改為
https://dlcdn.apache.org/hadoop/common/hadoop-3.3.3/hadoop-3.3.3.tar.gz
第 5 行，更改為
https://dlcdn.apache.org/hbase/2.4.13/hbase-2.4.13-bin.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;https://dlcdn.apache.org/hadoop/common/hadoop-3.3.3/hadoop-3.3.3.tar.gz
https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
https://dlcdn.apache.org/pig/pig-0.17.0/pig-0.17.0.tar.gz
https://dlcdn.apache.org/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz
https://dlcdn.apache.org/hbase/2.4.13/hbase-2.4.13-bin.tar.gz
https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;修改 hadoop 設定檔 ( ~/vmusdt/hdp33/conf/hadoop-3.3.3/ )&lt;span class="hx:absolute hx:-mt-20" id="修改-hadoop-設定檔--vmusdthdp33confhadoop-333-"&gt;&lt;/span&gt;
&lt;a href="#%e4%bf%ae%e6%94%b9-hadoop-%e8%a8%ad%e5%ae%9a%e6%aa%94--vmusdthdp33confhadoop-333-" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mv ~/vmusdt/hdp33/conf/hadoop-3.3.2/ ~/vmusdt/hdp33/conf/hadoop-3.3.3/
$ mv ~/vmusdt/hdp33/conf/apache-hive-3.1.2-bin/ ~/vmusdt/hdp33/conf/apache-hive-3.1.3-bin/
$ mv ~/vmusdt/hdp33/conf/hbase-2.4.12 ~/vmusdt/hdp33/conf/hbase-2.4.13&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查設定檔和套件檔的目錄名稱要一致&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigboss@dta1:~/vmusdt$ dir hdp33/conf
total 28K
drwxr-xr-x 7 bigboss bigboss 4.0K Jul 8 12:51 .
drwxr-xr-x 5 bigboss bigboss 4.0K Jul 8 13:04 ..
drwxr-xr-x 2 bigboss bigboss 4.0K Jul 8 12:59 apache-hive-3.1.3-bin
drwxr-xr-x 2 bigboss bigboss 4.0K Feb 6 16:00 apache-zookeeper-3.6.3-bin
drwxr-xr-x 2 bigboss bigboss 4.0K Jul 8 12:28 hadoop-3.3.3
drwxr-xr-x 2 bigboss bigboss 4.0K Jul 8 12:55 hbase-2.4.13
drwxr-xr-x 2 bigboss bigboss 4.0K May 9 18:54 spark-3.2.1-bin-hadoop3.2
bigboss@dta1:~/vmusdt$ dir /opt
total 32K
drwxrwxrwx 8 root root 4.0K Jul 4 05:28 .
drwxr-xr-x 18 root root 4.0K Jul 3 05:46 ..
drwxrwxrwx 10 root root 4.0K Jul 4 05:27 apache-hive-3.1.3-bin
drwxrwxrwx 6 root root 4.0K Jul 4 05:27 apache-zookeeper-3.6.3-bin
drwxrwxrwx 2 root root 4.0K Jul 4 05:28 bin
drwxrwxrwx 10 root root 4.0K Jul 4 05:28 hadoop-3.3.3
drwxrwxrwx 16 root root 4.0K Jul 4 05:28 pig-0.17.0
drwxrwxrwx 13 root root 4.0K Jul 4 05:28 spark-3.2.1-bin-hadoop3.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;nano -l ~/vmusdt/hdp33/conf/hadoop-3.3.3/hadoop-env.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改第 54 行，&lt;code&gt;java-11-openjdk-amd64&lt;/code&gt; &amp;ndash;&amp;gt; &lt;code&gt;java-8-openjdk-amd64&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Hadoop的程式，會到 &lt;code&gt;hadoop-env.sh&lt;/code&gt; 這個檔案來讀取設定檔&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/conf/hadoop-3.3.3/hdfs-site.xml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 10 行，更改為 &amp;lt;value&amp;gt;file:/home/bigboss/nn&amp;lt;/value&amp;gt;
第 14 行，更改為 &amp;lt;value&amp;gt;file:/home/bigboss/dn&amp;lt;/value&amp;gt;
第 80 行，更改為 &amp;lt;value&amp;gt;/opt/hadoop-3.3.3/etc/hadoop/hdfs.allow&amp;lt;/value&amp;gt;
第 84 行，更改為 &amp;lt;value&amp;gt;/opt/hadoop-3.3.3/etc/hadoop/hdfs.decommission&amp;lt;/value&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&amp;lt;?xml-stylesheet type=&amp;#34;text/xsl&amp;#34; href=&amp;#34;configuration.xsl&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.name.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;file:/home/bigboss/nn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.datanode.data.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;file:/home/bigboss/dn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.permissions.superusergroup&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;bigboss&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.acls.enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.webhdfs.enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
&amp;lt;description&amp;gt;
1. webhdfs 功能有關閉, 但 Port 50070 不會被關掉
2. NameNode 內定會啟動 WebHDFS 網站
3. webhdfs client 必須要能連接到所有 Datanode, 才能執行 HDFS 功能
&amp;lt;/description&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.accesstime.precision&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;3600000&amp;lt;/value&amp;gt;
&amp;lt;description&amp;gt;
The access time for HDFS file is precise up to this value.
The default value is 1 hour. Setting a value of 0 disables
access times for HDFS.
&amp;lt;/description&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.nfs3.dump.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/tmp/.hdfs-nfs&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.nfs.exports.allowed.hosts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;* rw&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;nfs.export.point&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/user&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.heartbeat.recheck-interval&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;100000&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;net.topology.script.file.name&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/opt/bin/rack-awareness.sh&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.hosts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/opt/hadoop-3.3.3/etc/hadoop/hdfs.allow&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.hosts.exclude&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/opt/hadoop-3.3.3/etc/hadoop/hdfs.decommission&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/conf/hadoop-3.3.3/mapred-site.xml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;第 11 行內容修改為以下 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;value&amp;gt;/opt/hadoop-3.3.3/share/hadoop/mapreduce/*,/opt/hadoop-3.3.3/share/hadoop/mapreduce/lib/*,/opt/hadoop-3.3.3/share/hadoop/common/*,/opt/hadoop-3.3.3/share/hadoop/common/lib/*,/opt/hadoop-3.3.3/share/hadoop/yarn/*,/opt/hadoop-3.3.3/share/hadoop/yarn/lib/*,/opt/hadoop-3.3.3/share/hadoop/hdfs/*,/opt/hadoop-3.3.3/share/hadoop/hdfs/lib/*&amp;lt;/value&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;
&amp;lt;?xml-stylesheet type=&amp;#34;text/xsl&amp;#34; href=&amp;#34;configuration.xsl&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.framework.name&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;yarn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.application.classpath&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/opt/hadoop-3.3.3/share/hadoop/mapreduce/*,/opt/hadoop-3.3.3/share/hadoop/mapreduce/lib/*,/opt/hadoop-3.3.3/share/hadoop/common/*,/opt/hadoop-3.3.3/share/hadoop/common/lib/*,/opt/hadoop-3.3.3/share/hadoop/yarn/*,/opt/hadoop-3.3.3/share/hadoop/yarn/lib/*,/opt/hadoop-3.3.3/share/hadoop/hdfs/*,/opt/hadoop-3.3.3/share/hadoop/hdfs/lib/*&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.app.mapreduce.am.resource.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.app.mapreduce.am.command-opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx256m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.reduce.memory.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;512&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.reduce.java.opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx384m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.map.memory.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.map.java.opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx256m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;!-- Disable Speculative Execution --&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapred.map.tasks.speculative.execution&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapred.reduce.tasks.speculative.execution&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.input.fileinputformat.split.minsize&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2048&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.input.fileinputformat.split.maxsize&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2048&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/conf/hadoop-3.3.3/yarn-site.xml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 23 行，更改為 &amp;lt;value&amp;gt;/home/bigboss/yarn&amp;lt;/value&amp;gt;
第 75 行，更改為 &amp;lt;value&amp;gt;/opt/hadoop-3.3.3/etc/hadoop/yarn.allow&amp;lt;/value&amp;gt;
第 80 行，更改為 &amp;lt;value&amp;gt;/opt/hadoop-3.3.3/etc/hadoop/yarn.decommission&amp;lt;/value&amp;gt;
第 90 行，更改為 &amp;lt;value&amp;gt;bigboss yarnadmin&amp;lt;/value&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.aux-services&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;mapreduce_shuffle&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.aux-services.mapreduce.shuffle.class&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;org.apache.hadoop.mapred.ShuffleHandler&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.webapp.address&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;dtm2:8088&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.hostname&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;dtm2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.local-dirs&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/home/bigboss/yarn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.jobhistory.address&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;dtm2:10020&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.vmem-check-enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.pmem-check-enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.memory-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;8192&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.cpu-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;8&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.minimum-allocation-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.maximum-allocation-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;896&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.minimum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.maximum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.increment-allocation-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.nodes.include-path&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/opt/hadoop-3.3.3/etc/hadoop/yarn.allow&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.nodes.exclude-path&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;/opt/hadoop-3.3.3/etc/hadoop/yarn.decommission&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;!--
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.acl.enable&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.admin.acl&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;bigboss yarnadmin&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
--&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.resourcemanager.scheduler.class&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;修改 hive 設定檔 (~/vmusdt/hdp33/conf/apache-hive-3.1.3-bin/)&lt;span class="hx:absolute hx:-mt-20" id="修改-hive-設定檔-vmusdthdp33confapache-hive-313-bin"&gt;&lt;/span&gt;
&lt;a href="#%e4%bf%ae%e6%94%b9-hive-%e8%a8%ad%e5%ae%9a%e6%aa%94-vmusdthdp33confapache-hive-313-bin" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l hdp33/conf/apache-hive-3.1.3-bin/hive-site.xml.template&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 21 行，更改為 &amp;lt;value&amp;gt;bigboss&amp;lt;/value&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34; standalone=&amp;#34;no&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;javax.jdo.option.ConnectionURL&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;jdbc:mariadb://mdb:3306/metastore&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;javax.jdo.option.ConnectionDriverName&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;org.mariadb.jdbc.Driver&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;javax.jdo.option.ConnectionUserName&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hiveuser&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;javax.jdo.option.ConnectionPassword&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hivepassword&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;hive.users.in.admin.role&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;bigboss&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;hive.server2.enable.doAs&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;hive.security.authorization.enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;修改 資科平台 系統程式 (~/vmusdt/hdp33/bin/)&lt;span class="hx:absolute hx:-mt-20" id="修改-資科平台-系統程式-vmusdthdp33bin"&gt;&lt;/span&gt;
&lt;a href="#%e4%bf%ae%e6%94%b9-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e7%b3%bb%e7%b5%b1%e7%a8%8b%e5%bc%8f-vmusdthdp33bin" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/dtest&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 21 行，更改為
hadoop jar /opt/hadoop-3.3.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar pi 2 1000 &amp;amp;&amp;gt; /tmp/out&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
echo &amp;#34;[HDFS]&amp;#34;
nc -w 1 -z dtm1 22 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#39;dtm1 exited&amp;#39; &amp;amp;&amp;amp; exit 1
ssh -q dtm1 jps | grep &amp;#39;NameNode&amp;#39; &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;HDFS exited&amp;#34; &amp;amp;&amp;amp; exit 1
hdfs dfsadmin -report &amp;amp;&amp;gt; /tmp/out
cat /tmp/out | grep &amp;#39;Live datanodes&amp;#39;
cat /tmp/out | grep &amp;#39;Name: &amp;#39;
echo &amp;#34;&amp;#34;
echo &amp;#34;[YARN]&amp;#34;
nc -w 1 -z dtm2 22 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#39;dtm2 exited&amp;#39; &amp;amp;&amp;amp; exit 1
ssh dtm2 jps | grep &amp;#39;ResourceManager&amp;#39; &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;YARN exited&amp;#34; &amp;amp;&amp;amp; exit 1
yarn node -list -all 2&amp;gt;/dev/null
echo&amp;#34;&amp;#34;
echo [MapReduce]
hadoop jar /opt/hadoop-3.3.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar pi 2 1000 &amp;amp;&amp;gt; /tmp/out
cat /tmp/out | grep &amp;#39; Pi &amp;#39;
echo&amp;#34;&amp;#34;
hdfs dfs -ls /tmp/spark-events &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; hdfs dfs -mkdir /tmp/spark-events &amp;amp;&amp;amp; hdfs dfs -chmod -R 777 /tmp
echo [Spark]
spark-submit --num-executors 1 --executor-memory 512m --master yarn \
/opt/spark-3.2.1-bin-hadoop3.2/examples/src/main/python/pi.py 10 2&amp;gt;/dev/null
echo &amp;#34;&amp;#34;
echo [HBase]
nc -w 1 -z dtm1 22 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#39;dtm1 exited&amp;#39; &amp;amp;&amp;amp; exit 1
ssh -q dtm1 jps | grep &amp;#39;HMaster&amp;#39; &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34;status&amp;#34; | hbase shell -n 2&amp;gt;/dev/null | head -n 1
fi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/hls&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 14 行，更改為
j=$(ssh -q bigboss@$n sudo jps 2&amp;gt;/dev/null | grep -v Jps)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
nn=&amp;#34;dtm1&amp;#34;
rs=&amp;#34;dtm2&amp;#34;
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
nc -w 1 -z $nn 8020 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;pls start HDFS first or fomathdfs&amp;#34; &amp;amp;&amp;amp; exit 1
for n in $nn $rs $w
do
nc -w 1 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
j=$(ssh -q bigboss@$n sudo jps 2&amp;gt;/dev/null | grep -v Jps)
if [ &amp;#34;$j&amp;#34; != &amp;#34;&amp;#34; ]; then
echo -e &amp;#34;[$n]\n$j&amp;#34;
echo &amp;#34;&amp;#34;
fi
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/lake.schema&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 2 行，更改為
owner=bigboss
第 5 行，更改為
ssh bigboss@dtm1 jps 2&amp;gt;/dev/null | grep NameNode &amp;amp;&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
owner=bigboss
group=bigboss
ssh bigboss@dtm1 jps 2&amp;gt;/dev/null | grep NameNode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;start HDFS first&amp;#34; &amp;amp;&amp;amp; exit 1
lakeschema=&amp;#34;/raw/ /elt/ /dataset/ /apps/ /metadata/&amp;#34;
for dn in $lakeschema
do
hdfs dfs -ls $dn &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ]; then
hdfs dfs -mkdir $dn
hdfs dfs -chown $owner:$group $dn
hdfs dfs -chmod 755 $dn
echo &amp;#34;$dn ($owner:$group,755)&amp;#34;
else
echo &amp;#34;$dn existed&amp;#34;
fi
done
hdfs dfs -ls /tmp/hadoop-yarn &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; hdfs dfs -mkdir -p /tmp/hadoop-yarn/staging &amp;amp;&amp;amp; echo &amp;#34;/tmp/hadoop-yarn/staging created (YARN)&amp;#34;
hdfs dfs -ls /tmp/hive &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; hdfs dfs -mkdir /tmp/hive/ &amp;amp;&amp;amp; echo &amp;#34;/tmp/hive created (Jupyter)&amp;#34;
hdfs dfs -ls /tmp/spark-events &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; hdfs dfs -mkdir /tmp/spark-events/ &amp;amp;&amp;amp; echo &amp;#34;/tmp/spark-events created (Spark)&amp;#34;
hdfs dfs -chmod -R 777 /tmp/ &amp;amp;&amp;amp; echo &amp;#34;/tmp (777)&amp;#34;
echo &amp;#34;&amp;#34;
echo &amp;#34;執行完成&amp;#34;
exit 0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/lake.users&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 3 行，更改為
ssh bigboss@dtm1 jps 2&amp;gt;/dev/null | grep NameNode &amp;amp;&amp;gt;/dev/null
第 9 行，更改為
for us in rbean gbean ybean zbean zp01 zp02 zp03 bigboss&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
ssh bigboss@dtm1 jps 2&amp;gt;/dev/null | grep NameNode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;start HDFS first&amp;#34; &amp;amp;&amp;amp; exit 1
hdfs dfs -mkdir /user/ &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo -e &amp;#34;[HDFS]\n/user created&amp;#34;
for us in rbean gbean ybean zbean zp01 zp02 zp03 bigboss
do
hdfs dfs -mkdir /user/$us/ &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
hdfs dfs -chmod 755 /user/$us/
hdfs dfs -chown $us:$us /user/$us/
echo &amp;#34;/user/$us created&amp;#34;
else
echo &amp;#34;/user/$us existed&amp;#34;
fi
done
i=101
while [ $i -le 200 ]
do
cat /etc/hosts | grep &amp;#34;ds$2&amp;#34; &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; i=$(($i&amp;#43;1)) &amp;amp;&amp;amp; continue
nc -w 1 -z &amp;#34;ds$i&amp;#34; 22
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; break
hdfs dfs -mkdir /user/ds$i/ &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
hdfs dfs -chmod 755 /user/ds$i/
hdfs dfs -chown ds$i:ds$i /user/ds$i/
echo &amp;#34;/user/ds$i created&amp;#34;
else
echo &amp;#34;/user/ds$i existed&amp;#34;
fi
i=$(($i&amp;#43;1))
done
echo &amp;#34;&amp;#34;
echo &amp;#34;執行完成&amp;#34;
exit 0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/starthba&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 9 行，更改為
ssh bigboss@dtm2 zkServer.sh start &amp;amp;&amp;gt;/dev/null
新增以下這行
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
第 17 行，更改為
for n in $w
第 21 行，更改為
ssh bigboss@$n hbase-daemon.sh start regionserver &amp;amp;&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
#n=$(hostname)
#[ ${n:0:3} != &amp;#34;adm&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;oops, pls return to admxxx&amp;#34; &amp;amp;&amp;amp; exit 1
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
nc -w 5 -z dtm1 8020 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;pls start HDFS first&amp;#34; &amp;amp;&amp;amp; exit 1
ssh bigboss@dtm2 zkServer.sh start &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;dtm3: ZooKeeper started&amp;#34;
ssh bigboss@dtm1 hbase-daemon.sh start master &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;dtm3: Hbase Master started&amp;#34;
for n in $w
do
nc -w 3 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
ssh bigboss@$n hbase-daemon.sh start regionserver &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n: Region Server started&amp;#34;
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/starthdfs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 6 行，更改為 ssh bigboss@&amp;#34;$m&amp;#34; hadoop-daemon.sh start namenode &amp;amp;&amp;gt;/dev/null
第 11 行，更改為 ssh bigboss@&amp;#34;$m&amp;#34; hadoop-daemon.sh start secondarynamenode &amp;amp;&amp;gt;/dev/null
第 18 行，更改為 ssh bigboss@&amp;#34;$n&amp;#34; hadoop-daemon.sh start datanode &amp;amp;&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
m=&amp;#34;dtm1&amp;#34;
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
ssh bigboss@&amp;#34;$m&amp;#34; hadoop-daemon.sh start namenode &amp;amp;&amp;gt;/dev/null
sleep 10; nc -w 5 -z $m 8020 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;pls formathdfs first&amp;#34; &amp;amp;&amp;amp; exit 1
echo &amp;#34;$m: Name Node Started&amp;#34;
ssh bigboss@&amp;#34;$m&amp;#34; hadoop-daemon.sh start secondarynamenode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$m: Secondary Name Node started&amp;#34;
for n in $w
do
nc -w 5 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
ssh bigboss@&amp;#34;$n&amp;#34; hadoop-daemon.sh start datanode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n: Data Node started&amp;#34;
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/startjps&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;新增以下這行
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
第 5 行，更改為
for n $w&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
for n in $w
do
ssh $n &amp;#39;nohup jpslog.sh &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;#39;
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/startmaxctn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;新增以下這行
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
第 5 行，更改為
for n in $w&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
for n in $w
do
ssh $n &amp;#39;nohup /opt/bin/maxjps.sh &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;#39;
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/startyarn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 5 行，更改為
yn=5
第 15 行，更改為
ssh bigboss@&amp;#34;$rs&amp;#34; yarn-daemon.sh start resourcemanager &amp;amp;&amp;gt;/dev/null
第 17 行，更改為
ssh bigboss@&amp;#34;$rs&amp;#34; mr-jobhistory-daemon.sh start historyserver &amp;amp;&amp;gt;/dev/null
第 24 行，更改為
ssh bigboss@$n yarn-daemon.sh start nodemanager &amp;amp;&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
nn=&amp;#34;dtm1&amp;#34;
rs=&amp;#34;dtm2&amp;#34;
yn=5
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
#n=$(hostname)
#[ ${n:0:3} != &amp;#34;adm&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;oops, pls return to admxxx&amp;#34; &amp;amp;&amp;amp; exit 1
nc -w 5 -z $nn 8020 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;pls start HDFS first&amp;#34; &amp;amp;&amp;amp; exit 1
ssh bigboss@&amp;#34;$rs&amp;#34; yarn-daemon.sh start resourcemanager &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$rs: Resource Manager started&amp;#34;
ssh bigboss@&amp;#34;$rs&amp;#34; mr-jobhistory-daemon.sh start historyserver &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$rs: Job History Server started&amp;#34;
## 多 if 判斷是因為，剩的 VM 可以給 Hbase 的程式跑
c=0
for n in $w
do
if [ &amp;#34;$c&amp;#34; -le &amp;#34;$yn&amp;#34; ]; then
ssh bigboss@$n yarn-daemon.sh start nodemanager &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n: Node Manager started&amp;#34;
c=$(( c&amp;#43;1 ))
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/stophba&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;新增以下這行
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
第 12 行，更改為
ssh bigboss@$n hbase-daemon.sh stop regionserver &amp;amp;&amp;gt;/dev/null
第 17 行，更改為
ssh bigboss@dtm2 hbase-daemon.sh stop master &amp;amp;&amp;gt;/dev/null
第 20 行，更改為
ssh bigboss@dtm1 zkServer.sh stop &amp;amp;&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
#n=$(hostname)
#[ ${n:0:3} != &amp;#34;adm&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;oops, pls return to admxxx&amp;#34; &amp;amp;&amp;amp; exit 1
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
for n in $w
do
nc -w 1 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
ssh bigboss@$n hbase-daemon.sh stop regionserver &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n: Region Server stoped&amp;#34;
fi
done
ssh bigboss@dtm2 hbase-daemon.sh stop master &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;dtm1: Hbase Master stoped&amp;#34;
ssh bigboss@dtm1 zkServer.sh stop &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;dtm2: ZooKeeper stoped&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/stophdfs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 13 行，更改為
ssh bigboss@$n hadoop-daemon.sh stop datanode &amp;amp;&amp;gt;/dev/null
第 18 行，更改為
ssh bigboss@&amp;#34;$m&amp;#34; hadoop-daemon.sh stop secondarynamenode &amp;amp;&amp;gt;/dev/null
第 20 行，更改為
ssh bigboss@&amp;#34;$m&amp;#34; hadoop-daemon.sh stop namenode &amp;amp;&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
m=&amp;#34;dtm1&amp;#34;
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
#n=$(hostname)
#[ ${n:0:3} != &amp;#34;adm&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;oops, pls return to admxxx&amp;#34; &amp;amp;&amp;amp; exit 1
for n in $w
do
nc -w 1 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
ssh bigboss@$n hadoop-daemon.sh stop datanode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n: Data Node stoped&amp;#34;
fi
done
ssh bigboss@&amp;#34;$m&amp;#34; hadoop-daemon.sh stop secondarynamenode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$m: Secondary Name Node stoped&amp;#34;
ssh bigboss@&amp;#34;$m&amp;#34; hadoop-daemon.sh stop namenode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$m: Name Node stoped&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/stopjps&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;新增以下這行
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
第 5 行，更改為
for n in $w&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
for n in $w
do
ssh $n &amp;#39;touch /tmp/jlog.stop&amp;#39;
ssh $n &amp;#34;cat /tmp/jps-$n.log&amp;#34;
echo &amp;#34;&amp;#34;
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/stopmaxctn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;新增以下這行
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
第 5 行，更改為
for n in $w&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
for n in $w
do
ssh $n &amp;#39;touch /tmp/maxjlog.stop&amp;#39;
ssh $n &amp;#34;cat /tmp/jps-$n.log | uniq&amp;#34;
echo &amp;#34;&amp;#34;
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano -l ~/vmusdt/hdp33/bin/stopyarn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改內容 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;第 5 行，更改為
yn=5
第 15 行，更改為
ssh bigboss@$n yarn-daemon.sh stop nodemanager &amp;amp;&amp;gt;/dev/null
第 21 行，更改為
ssh bigboss@&amp;#34;$rs&amp;#34; mr-jobhistory-daemon.sh stop historyserver &amp;amp;&amp;gt;/dev/null
第 23 行，更改為
ssh bigboss@&amp;#34;$rs&amp;#34; yarn-daemon.sh stop resourcemanager &amp;amp;&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
nn=&amp;#34;dtm1&amp;#34;
rs=&amp;#34;dtm2&amp;#34;
yn=5
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
#n=$(hostname)
#[ ${n:0:3} != &amp;#34;adm&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;oops, pls return to admxxx&amp;#34; &amp;amp;&amp;amp; exit 1
c=0
for n in $w
do
if [ &amp;#34;$c&amp;#34; -le &amp;#34;$yn&amp;#34; ]; then
ssh bigboss@$n yarn-daemon.sh stop nodemanager &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n: Node Manager stoped&amp;#34;
c=$(( c&amp;#43;1 ))
fi
done
ssh bigboss@&amp;#34;$rs&amp;#34; mr-jobhistory-daemon.sh stop historyserver &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$rs: Job History Server stoped&amp;#34;
ssh bigboss@&amp;#34;$rs&amp;#34; yarn-daemon.sh stop resourcemanager &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$rs: Resource Manager stoped&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;下載資科平台套件 dtwget&lt;span class="hx:absolute hx:-mt-20" id="下載資科平台套件-dtwget"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%8b%e8%bc%89%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0%e5%a5%97%e4%bb%b6-dtwget" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;dtwget 程式功能 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;下載 DT 套件檔至 ~/vmausdt/hdp33/opt 這目錄&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;下載命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ dtwget 33&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;download DT packages ? (YES/NO) YES
hadoop-3.3.3.tar.gz ok
apache-hive-3.1.3-bin.tar.gz ok
pig-0.17.0.tar.gz ok
spark-3.2.1-bin-hadoop3.2.tgz ok
hbase-2.4.13-bin.tar.gz ok
apache-zookeeper-3.6.3-bin.tar.gz ok&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;複製 資科平台 套件 dtcopy&lt;span class="hx:absolute hx:-mt-20" id="複製-資科平台-套件-dtcopy"&gt;&lt;/span&gt;
&lt;a href="#%e8%a4%87%e8%a3%bd-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e5%a5%97%e4%bb%b6-dtcopy" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;程式功能 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;主要是複製 dta1 主機 /home/bigboss/vmusdt/hdp33/opt 這目錄至 dts1, dts2, dts3, dtm1, dtm2, dtw1, dtw2, dtw3, dtw4, dtw5, dtw6 這十一部主機的 /opt 目錄&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ./bin/dtcopy 33&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;dta1 /opt/ ok
dta1 /opt/bin ok
dta1 /etc/hosts ok
dts1 /opt/ ok
dts1 /opt/bin ok
dts1 /etc/hosts ok
dts2 /opt/ ok
dts2 /opt/bin ok
dts2 /etc/hosts ok
dts3 /opt/ ok
dts3 /opt/bin ok
dts3 /etc/hosts ok
dtm1 /opt/ ok
dtm1 /opt/bin ok
dtm1 /etc/hosts ok
dtm2 /opt/ ok
dtm2 /opt/bin ok
dtm2 /etc/hosts ok
dtw1 /opt/ ok
dtw1 /opt/bin ok
dtw1 /etc/hosts ok
dtw2 /opt/ ok
dtw2 /opt/bin ok
dtw2 /etc/hosts ok
dtw3 /opt/ ok
dtw3 /opt/bin ok
dtw3 /etc/hosts ok
dtw4 /opt/ ok
dtw4 /opt/bin ok
dtw4 /etc/hosts ok
dtw5 /opt/ ok
dtw5 /opt/bin ok
dtw5 /etc/hosts ok
dtw6 /opt/ ok
dtw6 /opt/bin ok
dtw6 /etc/hosts ok&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;複製 資科平台 設定檔 dtconf&lt;span class="hx:absolute hx:-mt-20" id="複製-資科平台-設定檔-dtconf"&gt;&lt;/span&gt;
&lt;a href="#%e8%a4%87%e8%a3%bd-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e8%a8%ad%e5%ae%9a%e6%aa%94-dtconf" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ dtconf 33&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將每台電腦重新開機 ( a1 最後 )&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh dts1 sudo reboot
$ ssh dts2 sudo reboot
$ ssh dts3 sudo reboot
$ ssh dtm1 sudo reboot
$ ssh dtm2 sudo reboot
$ ssh dtw1 sudo reboot
$ ssh dtw2 sudo reboot
$ ssh dtw3 sudo reboot
$ ssh dtw4 sudo reboot
$ ssh dtw5 sudo reboot
$ ssh dtw6 sudo reboot
$ ssh dta1 sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;程式功能 :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;將所有 dt VM 重新開機&lt;/li&gt;
&lt;li&gt;將所有 dt VM 關機&lt;/li&gt;
&lt;li&gt;確認 dt 內網狀況&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
# var
an=$(cat /etc/hosts | tr -s &amp;#39; &amp;#39; | grep -E &amp;#39; dta[0-9]&amp;#39; | cut -d &amp;#34; &amp;#34; -f 2)
sn=$(cat /etc/hosts | tr -s &amp;#39; &amp;#39; | grep -E &amp;#39; dts[0-9]&amp;#39; | cut -d &amp;#34; &amp;#34; -f 2)
mn=$(cat /etc/hosts | tr -s &amp;#39; &amp;#39; | grep -E &amp;#39; dtm[0-9]&amp;#39; | cut -d &amp;#34; &amp;#34; -f 2)
wn=$(cat /etc/hosts | tr -s &amp;#39; &amp;#39; | grep -E &amp;#39; dtw[0-9]&amp;#39; | cut -d &amp;#34; &amp;#34; -f 2)
usage() {
cat&amp;lt;&amp;lt;EOF
Usage:
$(basename &amp;#34;${BASH_SOURCE[0]}&amp;#34;) [options]
Available options:
net check ssh connection
reboot reboot Hadoop Cluster
stop poweroff Hadoop Cluster
EOF
exit
}
case $1 in
net)
for n in $an $sn $mn $wn
do
if ! nc -w 1 -z &amp;#34;$n&amp;#34; 22 &amp;amp;&amp;gt;/dev/null; then
echo &amp;#34;${n} ssh Error !&amp;#34; &amp;amp;&amp;amp; contiue
else
echo &amp;#34;${n} ssh OK !&amp;#34;
fi
done
;;
reboot)
for r in $wn $mn $sn $an
do
ssh &amp;#34;$r&amp;#34; &amp;#39;sudo reboot&amp;#39;
done
;;
stop)
for p in $wn $mn $sn $an
do
ssh &amp;#34;$p&amp;#34; &amp;#39;sudo poweroff&amp;#39;
done
;;
*)
usage
;;
esac&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;檢測 資料科技 平台&lt;span class="hx:absolute hx:-mt-20" id="檢測-資料科技-平台"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%b8%ac-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80-%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;dthdpchk 檢查&lt;/p&gt;
&lt;p&gt;命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ dthdpchk&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[dta1]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dts1]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dts2]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dts3]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtm1]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtm2]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw1]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw2]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw3]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw4]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw5]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw6]
Hadoop 3.3.3
Native library checking:
hadoop: true /opt/hadoop-3.3.3/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;格式化 HDFS 分散檔案系統&lt;span class="hx:absolute hx:-mt-20" id="格式化-hdfs-分散檔案系統"&gt;&lt;/span&gt;
&lt;a href="#%e6%a0%bc%e5%bc%8f%e5%8c%96-hdfs-%e5%88%86%e6%95%a3%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ formathdfs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Are you sure ? (YES/NO) YES
formathdfs ok&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查 formathdfs&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigboss@dta1:~/vmusdt$ ssh dtm1 tree nn
nn
└── current
├── fsimage_0000000000000000000
├── fsimage_0000000000000000000.md5
├── seen_txid
└── VERSION
1 directory, 4 files
$ ssh dtm1 tree dn
dn [error opening dir]
0 directories, 0 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;啟動 資科平台&lt;/h1&gt;&lt;h2&gt;啟動 HDFS 分散式檔案系統&lt;span class="hx:absolute hx:-mt-20" id="啟動-hdfs-分散式檔案系統"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-hdfs-%e5%88%86%e6%95%a3%e5%bc%8f%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ starthdfs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;dtm1: Name Node Started
dtm1: Secondary Name Node started
dtw1: Data Node started
dtw2: Data Node started
dtw3: Data Node started
dtw4: Data Node started
dtw5: Data Node started
dtw6: Data Node started&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行 &lt;code&gt;hls&lt;/code&gt; 檢查 是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hls
[dtm1]
1155 SecondaryNameNode
996 NameNode
[dtw1]
1191 DataNode
[dtw2]
1193 DataNode
[dtw3]
1192 DataNode
[dtw4]
1186 DataNode
[dtw5]
1194 DataNode
[dtw6]
1192 DataNode&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh dtw1 tree dn
dn
├── current
│   ├── BP-1285703481-192.168.66.114-1657012142491
│   │   ├── current
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   ├── rbw
│   │   │   └── VERSION
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock
6 directories, 5 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;啟動 YARN 分散式運算系統&lt;span class="hx:absolute hx:-mt-20" id="啟動-yarn-分散式運算系統"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-yarn-%e5%88%86%e6%95%a3%e5%bc%8f%e9%81%8b%e7%ae%97%e7%b3%bb%e7%b5%b1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ startyarn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;dtm2: Resource Manager started
dtm2: Job History Server started
dtw1: Node Manager started
dtw2: Node Manager started
dtw3: Node Manager started
dtw4: Node Manager started
dtw5: Node Manager started
dtw6: Node Manager started&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行 &lt;code&gt;hls&lt;/code&gt; ，檢查 是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hls
[dtm1]
1157 SecondaryNameNode
1004 NameNode
[dtm2]
1077 ResourceManager
1199 JobHistoryServer
[dtw1]
1461 NodeManager
1191 DataNode
[dtw2]
1194 DataNode
1404 NodeManager
[dtw3]
1191 DataNode
1402 NodeManager
[dtw4]
1195 DataNode
1405 NodeManager
[dtw5]
1194 DataNode
1406 NodeManager
[dtw6]
1193 DataNode
1404 NodeManager&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;測試 資科平台&lt;span class="hx:absolute hx:-mt-20" id="測試-資科平台"&gt;&lt;/span&gt;
&lt;a href="#%e6%b8%ac%e8%a9%a6-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;命令 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ dtest&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;命令結果 :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;[HDFS]
Live datanodes (6):
Name: 192.168.66.120:9866 (dtw1)
Name: 192.168.66.121:9866 (dtw2)
Name: 192.168.66.122:9866 (dtw3)
Name: 192.168.66.123:9866 (dtw4)
Name: 192.168.66.124:9866 (dtw5)
Name: 192.168.66.125:9866 (dtw6)
[YARN]
Total Nodes:6
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
dtw6:42613 RUNNING dtw6:8042 0
dtw1:41169 RUNNING dtw1:8042 0
dtw3:36145 RUNNING dtw3:8042 0
dtw4:41433 RUNNING dtw4:8042 0
dtw5:40741 RUNNING dtw5:8042 0
dtw2:38177 RUNNING dtw2:8042 0
[MapReduce]
Estimated value of Pi is 3.14400000000000000000
[Spark]
Pi is roughly 3.140400
[HBase]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>建置靜宜大學落地雲系統</title><link>https://blog.kubeantony.com/archive/data-platform/%E5%BB%BA%E7%BD%AE%E9%9D%9C%E5%AE%9C%E5%A4%A7%E5%AD%B8%E8%90%BD%E5%9C%B0%E9%9B%B2%E7%B3%BB%E7%B5%B1/</link><pubDate>Thu, 11 Aug 2022 17:31:18 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E5%BB%BA%E7%BD%AE%E9%9D%9C%E5%AE%9C%E5%A4%A7%E5%AD%B8%E8%90%BD%E5%9C%B0%E9%9B%B2%E7%B3%BB%E7%B5%B1/</guid><description>
&lt;h2&gt;目標&lt;span class="hx:absolute hx:-mt-20" id="目標"&gt;&lt;/span&gt;
&lt;a href="#%e7%9b%ae%e6%a8%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;在靜宜大學落地雲系統，建置兩套 Hadoop 以及一座 Kubernetes Cluster&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;h2&gt;整間教室的大架構&lt;span class="hx:absolute hx:-mt-20" id="整間教室的大架構"&gt;&lt;/span&gt;
&lt;a href="#%e6%95%b4%e9%96%93%e6%95%99%e5%ae%a4%e7%9a%84%e5%a4%a7%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;總共有 28 ( 29 - 1 ) 台電腦
&lt;ul&gt;
&lt;li&gt;4 台 Gateway , 21 台 Windows 電腦 , 3 台 alp 電腦&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;一套 Hadoop ， 12 台 VM&lt;/li&gt;
&lt;li&gt;一套 Hadoop ， 11 台 VM&lt;/li&gt;
&lt;li&gt;一座 Kubernetes Cluster，11 台 VM&lt;/li&gt;
&lt;li&gt;IOT Gateway ，一台 Windows 電腦&lt;/li&gt;
&lt;li&gt;MQTT Broker ，一台 alpine 電腦&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;細項規劃&lt;span class="hx:absolute hx:-mt-20" id="細項規劃"&gt;&lt;/span&gt;
&lt;a href="#%e7%b4%b0%e9%a0%85%e8%a6%8f%e5%8a%83" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;第一件事 : 硬體交接&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;幾台電腦、Switch，網路線有沒有接，把不要的椅子搬到外面。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;大家一起確認，網路架構和硬體設備是否和網路圖一致。
網路圖
&lt;img src="https://i.imgur.com/JlnplBx.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;總共 4 台 Gateway + 24 台 windows 主機&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第二件事 : 整理系統環境&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;東軒、玟伶、淑雯、小佳和佳恩
&lt;ul&gt;
&lt;li&gt;把 S1 ( Switch ) 的兩台 Alp 主機接到 S3 ( Switch ) 上，另一台 Alp 接到 S5 ( Switch ) ，最後在把 3 台主機的作業系統都灌成 Windows 。( 注意，要關閉 Windows 更新 )&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://drive.google.com/drive/folders/1bcSzYp876xNPS7cwzrRRVGgBfTwl9bsm?usp=sharing"target="_blank" rel="noopener"&gt;參考講義連結&lt;/a&gt;
示意圖
&lt;img src="https://i.imgur.com/YJ7H9lo.jpg" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;麒安和妙賢
&lt;ul&gt;
&lt;li&gt;整理 4 台 Gateway 的系統，包括 &lt;code&gt;update&lt;/code&gt; 和 &lt;code&gt;upgrade&lt;/code&gt; ，以及刪除多餘的使用者帳號，最後啟動僅允許憑證登入。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第三件事 : 設定網路&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大家一起把所有機器的 ip 重設 ( 比照網路圖 )。&lt;/li&gt;
&lt;li&gt;要做 Default Gateway 的設定
S2 和 S3 Switch 連接的所有電腦，先設 192.168.66.2 為第一個，在設 192.168.66.5 為第二個。
S4 和 S5 Switch 連接的所有電腦，先設 192.168.66.5 為第一個，在設 192.168.66.2 為第二個。&lt;/li&gt;
&lt;li&gt;透過 Guacamole 連線測試所有 Windows 電腦 ( &lt;strong&gt;注意! rbean、gbean、ybean 和 bigred 使用者都要做連線測試。&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第四件事&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;一套 Hadoop 系統&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Administrator 與 Student&lt;/li&gt;
&lt;li&gt;規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Ubuntu Server 22.04 LTS&lt;/li&gt;
&lt;li&gt;記憶體 : 6 GB&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 400 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 所在的 Windows 主機 ip + 100&lt;/li&gt;
&lt;li&gt;Hostname : dta1,, dts( 1..3 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;dtm1, dtm2&lt;/li&gt;
&lt;li&gt;規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Ubuntu Server 22.04 LTS&lt;/li&gt;
&lt;li&gt;記憶體 : 4 G&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 400 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 所在的 Windows 主機 ip + 100&lt;/li&gt;
&lt;li&gt;Hostname : dtm( 1, 2 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;font color=blue&gt;以上 6 台 VM 分別建立在 S2 和 S4 ( Switch ) 連接的所有 Windows 電腦 &lt;/font&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data node + Node Manager&lt;/li&gt;
&lt;li&gt;VM 規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Ubuntu Server 22.04 LTS&lt;/li&gt;
&lt;li&gt;記憶體 : 10 GB&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 800 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 所在的 Windows 主機 ip + 100&lt;/li&gt;
&lt;li&gt;Hostname : dtw( 1..6 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;font color=blue&gt;以上 6 台 VM 分別建立在 S3 和 S5 ( Switch ) 連接的所有 Windows 電腦 &lt;/font&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font color=blue&gt;兩座 Hadoop 建置完成後，會剩 8 台記憶體 4 GB 的 VM，以及 4 台記憶體 6 GB 的 VM&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font color=red&gt;&lt;strong&gt;一套 Kubernetes 系統&lt;/strong&gt;&lt;/font&gt;
&lt;ul&gt;
&lt;li&gt;Worker node&lt;/li&gt;
&lt;li&gt;規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Alpine Linux 3.16&lt;/li&gt;
&lt;li&gt;記憶體 : 6 GB&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 400 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 所在的 Windows 主機 ip + 200&lt;/li&gt;
&lt;li&gt;Hostname : w( 1, 2, 5, 6 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;master node &amp;amp; worker node&lt;/li&gt;
&lt;li&gt;規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Alpine Linux 3.16&lt;/li&gt;
&lt;li&gt;記憶體 : 4 G&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 400 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 所在的 Windows 主機 ip + 200&lt;/li&gt;
&lt;li&gt;Hostname : m( 1..5 ) ,w( 3, 4 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;以上 11 台 VM 分別建立在 S2 和 S4 ( Switch ) 連接的所有 Windows 電腦 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/72dMk62.jpg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;MQTT Broker 會搬到 192.168.66.5 的機器
IOT Gateway 將會裝在距離們最近的電腦 ( 依照片推測為 .31 )&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>建置嶺東科大落地雲系統</title><link>https://blog.kubeantony.com/archive/data-platform/%E5%BB%BA%E7%BD%AE%E5%B6%BA%E6%9D%B1%E7%A7%91%E5%A4%A7%E8%90%BD%E5%9C%B0%E9%9B%B2%E7%B3%BB%E7%B5%B1/</link><pubDate>Thu, 11 Aug 2022 17:30:48 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E5%BB%BA%E7%BD%AE%E5%B6%BA%E6%9D%B1%E7%A7%91%E5%A4%A7%E8%90%BD%E5%9C%B0%E9%9B%B2%E7%B3%BB%E7%B5%B1/</guid><description>
&lt;h2&gt;目標&lt;span class="hx:absolute hx:-mt-20" id="目標"&gt;&lt;/span&gt;
&lt;a href="#%e7%9b%ae%e6%a8%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;在嶺東科大落地雲系統，建置一套 Hadoop Cluster&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;h2&gt;整間教室的大架構&lt;span class="hx:absolute hx:-mt-20" id="整間教室的大架構"&gt;&lt;/span&gt;
&lt;a href="#%e6%95%b4%e9%96%93%e6%95%99%e5%ae%a4%e7%9a%84%e5%a4%a7%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;總共有 5 台實體電腦&lt;/li&gt;
&lt;li&gt;1 台實體電腦跑 2 台 VM&lt;/li&gt;
&lt;li&gt;dtw{1~5} 會分別建立在每一台實體電腦&lt;/li&gt;
&lt;li&gt;dta1, dts1, dtm1, dtm2, 也會分別建立在每一台實體電腦&lt;/li&gt;
&lt;li&gt;Guacamole 會建立在一台 dtw3 所在的台實體電腦上&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;細項規劃&lt;span class="hx:absolute hx:-mt-20" id="細項規劃"&gt;&lt;/span&gt;
&lt;a href="#%e7%b4%b0%e9%a0%85%e8%a6%8f%e5%8a%83" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;需買與靜宜大學相同規格的 Switch ( 8 port ) 以及 網路線 Cat 6&lt;/li&gt;
&lt;li&gt;電腦硬體規格如下：
&lt;ul&gt;
&lt;li&gt;Acer Veriton M6650G&lt;/li&gt;
&lt;li&gt;作業系統 : Windows 10 企業版&lt;/li&gt;
&lt;li&gt;處理器：Intel Core i7-7700 4C/2HT&lt;/li&gt;
&lt;li&gt;記憶體：32GB&lt;/li&gt;
&lt;li&gt;SSD：512GB&lt;/li&gt;
&lt;li&gt;硬碟：1TB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;網路規格如下 :
&lt;ul&gt;
&lt;li&gt;Switch : ZyXEL GS1200-8 ( 8 port )&lt;/li&gt;
&lt;li&gt;網路線 : Cat 6&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;網路圖
&lt;img src="https://i.imgur.com/Uop4KVD.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;Hadoop VM 規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Ubuntu Server 22.04 LTS&lt;/li&gt;
&lt;li&gt;記憶體 : 12 GB&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 400 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 尚未分配&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Guacamole VM 規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Alpine Linux 3.16&lt;/li&gt;
&lt;li&gt;記憶體 : 12 GB&lt;/li&gt;
&lt;li&gt;CPU : 4 C&lt;/li&gt;
&lt;li&gt;硬碟 : 60 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 尚未分配&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>MySQL 基本語法</title><link>https://blog.kubeantony.com/archive/data-platform/mysql-%E5%9F%BA%E6%9C%AC%E8%AA%9E%E6%B3%95/</link><pubDate>Sun, 07 Aug 2022 14:56:30 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/mysql-%E5%9F%BA%E6%9C%AC%E8%AA%9E%E6%B3%95/</guid><description>
&lt;p&gt;使用者登入語法&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;hostIP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a
href="http://g2pc1.bu.edu/~qzpeng/manual/MySQL%20Commands.htm"target="_blank" rel="noopener"&gt;整理連結&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;SQLite 語法&lt;span class="hx:absolute hx:-mt-20" id="sqlite語法"&gt;&lt;/span&gt;
&lt;a href="#sqlite%e8%aa%9e%e6%b3%95" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;大小寫敏感性 ：有個重要的點值得注意，SQLite 是不區分大小寫的，但也有一些命令是大小寫敏感的，比如 GLOB 和 glob 在 SQLite 的語句中有不同的含義。&lt;/li&gt;
&lt;li&gt;注釋 ：SQL 注釋以兩個連續的 &amp;ldquo;-&amp;rdquo; ，以 &amp;ldquo;/*&amp;rdquo; 開始，並擴展至下一個 &amp;ldquo;*/&amp;rdquo; 字元對或直到輸入結束，以先到者為准。SQLite的注釋可以跨越多行。&lt;/li&gt;
&lt;li&gt;SQLite 語句： 所有的 SQLite 語句可以以任何關鍵字開始，如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等，所有的語句以分號（;）結束。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;sqlite3 資料庫名&lt;/code&gt; 直接進入該資料庫，如果沒有就直接建立
在裡面
&lt;code&gt;.quit&lt;/code&gt; 離開，注意要有點 ， &lt;code&gt;.database&lt;/code&gt; 可看目前資料庫位置
基本的 創，加，改，刪&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;-- sqlite3
.open 資料庫名.db -- 也可以直接在外面的時候直接創 sqlite3 資料庫名.db
-- 創建表格 create table TABLE_NAME (NAME , type())
create table person ( name varchar(20) , tel varchar(15) , sex varchar(1) , salary integer );
-- 加入資料 insert into TABLE_NAME (COLUMN1,COLUMN2) values (VALUE1,VALUE2)
insert into Table01 (name,email) values (&amp;#39;Jeannie&amp;#39;,&amp;#39;Jeannie@test.com&amp;#39;) ;
-- 一次加入多筆
insert into test values (&amp;#39;11&amp;#39;,&amp;#39;1111111111&amp;#39;),(&amp;#39;22&amp;#39;,&amp;#39;2222222222&amp;#39;),(&amp;#39;33&amp;#39;,&amp;#39;3333333333&amp;#39;);
-- 更新資料 update
update Table01 set name=&amp;#39;Judy&amp;#39;,email=&amp;#39;Judy@test.com&amp;#39; where id=&amp;#39;6&amp;#39; ;
update person set name=&amp;#39;john&amp;#39; where name=&amp;#39;name&amp;#39;
-- 刪除所有資料
delete from Table名 ;
-- where 加上條件
delete from person where id=&amp;#39;1&amp;#39; ;
-- 修改 schema
alter table person add nick_name varchar(10)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Select 可用來測試基本運算&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;SELECT 5&amp;#43;2;
7
SELECT 5&amp;gt;10;
0
SELECT 5 &amp;lt;&amp;gt; 10 ; -- &amp;lt;&amp;gt; = != 不等於
1
-- between 用法 ： 5 between 1 and 10
select 5 between 1 and 10 -- 1
--
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;john&amp;#39;,&amp;#39;0911000111&amp;#39;,&amp;#39;M&amp;#39;,30000);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;marry&amp;#39;,&amp;#39;0922000222&amp;#39;,&amp;#39;F&amp;#39;,25000);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;lee&amp;#39;,&amp;#39;0922000333&amp;#39;,&amp;#39;N&amp;#39;,33000);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;wang&amp;#39;,&amp;#39;0944000444&amp;#39;,&amp;#39;M&amp;#39;,50000);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;victor&amp;#39;,&amp;#39;0912345678&amp;#39;,&amp;#39;M&amp;#39;,55000);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;babe&amp;#39;,&amp;#39;0955656566&amp;#39;,&amp;#39;F&amp;#39;,46000);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;SQLite 語法：前面都會+ .&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;.quit
.open DATABASE_NAME -- 進入目前的資料庫
.database -- 顯示目前使用的資料庫
.tables -- 顯示有的表
.schema TABLE_NAME -- 顯示 Table 架構，也可以不指定名稱
.clone NEW_DATABASE_NAME -- 將目前使用的 database 複製一份 備份
.mode -- 顯示幕前的模式，有 ascii column csv html insert line list quote tabs tcl 等
-- insert mode 會顯示當初輸入的
.header {on,off}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;1.開啟 testschool.db
2.顯示目前資料庫
3.建立school table;結構為
4.. school table 新增6筆記錄如上
5.顯示 school表格所有欄位的資料
6.查詢國文(chi)及格的學生
7.查詢國文(chi)與英文(eng)都及格的學生
8.查詢數學(mat)介於 40到 66之間的學生
9.查詢國文(chi)與英文(eng)都及格 或數學(mat)介於70 到 80之間的學生
10.查詢數學(mat)為70 或 40 或66
的學生
11.查詢數學(mat)不為35 或 40 或66的學生&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;-- 1
.open testschool.db
-- 2
.database
-- 3
CREATE TABLE school (id INTEGER PRIMARY key , name text , class text , chi integer , eng integer , mat integer);
-- 4
INSERT INTO school VALUES(1,&amp;#39;a1&amp;#39;,&amp;#39;101&amp;#39;,50,80,70);
INSERT INTO school VALUES(2,&amp;#39;a2&amp;#39;,&amp;#39;101&amp;#39;,60,88,77);
INSERT INTO school VALUES(3,&amp;#39;b1&amp;#39;,&amp;#39;102&amp;#39;,65,84,35);
INSERT INTO school VALUES(4,&amp;#39;b2&amp;#39;,&amp;#39;102&amp;#39;,88,60,40);
INSERT INTO school VALUES(5,&amp;#39;c1&amp;#39;,&amp;#39;103&amp;#39;,45,80,35);
INSERT INTO school VALUES(6,&amp;#39;c2&amp;#39;,&amp;#39;103&amp;#39;,90,88,66);
INSERT INTO school VALUES(7,&amp;#39;a3&amp;#39;,&amp;#39;101&amp;#39;,100,100,100);
-- 5
select * from school ;
-- 6
select name,chi from school where chi&amp;gt;=60 ;
-- 7
select name,chi,eng from school where chi&amp;gt;=60 and eng &amp;gt;=60 ;
-- 8
select name,eng from school where eng between 40 and 66 ;
-- 9
select name,chi,eng,mat from school where (chi&amp;gt;=60 and eng &amp;gt;=60 ) or mat between 70 and 80 ;
-- 10
select name,mat from school where mat == 70 or mat == 40 or mat ==66 ;
-- 另一種比較簡潔的方式
select name,mat from school where mat in (70,40,66);
-- 11
select * from school where mat not in (35,40,66);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;另一個
1.建立data.db 其內的table名稱為 member
資料如下:
name tel email
john 0912345678 john@gmail.com
marry 0987654321 marry@gmail.com
tom 0987098765 tom@gmail.com
wang 0966684281 wang@gmail.com&lt;/p&gt;
&lt;p&gt;2.新增一sex 欄位及其資料如下
name tel email sex
john 0912345678 john@gmail.com M
marry 0987654321 marry@gmail.com F
tom 0987098765 tom@gmail.com M
wang 0966684281 wang@gmail.com M
3.新增一筆記錄如下
victor 0968765123 &lt;a
href="mailto:victor@gmail.com"&gt;victor@gmail.com&lt;/a&gt; M
4.john 的電話 改成 0986345678
5.新增一id 欄位及其資料如下
id name tel email sex
001 john 0986345678 john@gmail.com M
002 marry 0987654321 marry@gmail.com F
003 tom 0987098765 tom@gmail.com M
004 wang 0966684281 wang@gmail.com M
005 victor 0968765123 victor@gmail.comM
6.查詢總筆數
7.查詢會員為男性的筆數
8.查詢編號 003 的會員資料
9.查詢姓名victor 的電話及email
11.取出data01.db
12.刪除member內 編號003的記錄
13.刪除member內所有記錄
14.刪除名稱number的table&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;-- 1.建立data.db 其內的table名稱為 member
CREATE TABLE member ( name varchar(20) , tel varchar(10), email varchar(100) );
-- 2.新增一sex 欄位及其資料如下
ALTER TABLE member add sex varchar(5);
--3.新增一筆記錄如下
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;john&amp;#39;,&amp;#39;0912345678&amp;#39;,&amp;#39;john@gmail.com&amp;#39;,&amp;#39;M&amp;#39;);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;marry&amp;#39;,&amp;#39;0987654321&amp;#39;,&amp;#39;marry@gmail.com&amp;#39;,&amp;#39;F&amp;#39;);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;tom&amp;#39;,&amp;#39;0987098765&amp;#39;,&amp;#39;tom@gmail.com&amp;#39;,&amp;#39;M&amp;#39;);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;wang&amp;#39;,&amp;#39;0966684281&amp;#39;,&amp;#39;wang@gmail.com&amp;#39;,&amp;#39;M&amp;#39;);
INSERT INTO &amp;#34;table&amp;#34; VALUES(&amp;#39;victor&amp;#39;,&amp;#39;0968765123&amp;#39;,&amp;#39;victor@gmail.com&amp;#39;,&amp;#39;M&amp;#39;);
update member set tel=&amp;#39;0986345678&amp;#39; where name=&amp;#39;john&amp;#39; ;
ALTER TABLE member add id varchar(3);
update member set id=&amp;#34;001&amp;#34; where name=&amp;#34;john&amp;#34;;
update member set id=&amp;#34;002&amp;#34; where name=&amp;#34;marry&amp;#34;;
update member set id=&amp;#34;003&amp;#34; where name=&amp;#34;tom&amp;#34;;
update member set id=&amp;#34;004&amp;#34; where name=&amp;#34;wang&amp;#34;;
update member set id=&amp;#34;005&amp;#34; where name=&amp;#34;victor&amp;#34;;
select count(*) from member;
select count(*) from member where sex=&amp;#39;M&amp;#39;;
select * from member where id=&amp;#39;003&amp;#39;;
select tel,email from member where name=&amp;#39;victor&amp;#39;;
-- 10
.clone data01.db
--12
delete from member where id=&amp;#34;003&amp;#34; ;
-- 13&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;當從 csv 使用.import 讀入表時，記得 .mode 要切成 csv 不然欄位會怪怪&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;.mode csv
.import product.csv product
-- 有空白的欄位，就必須要使用 &amp;#34;&amp;#34; 刮起來
select &amp;#34;order id&amp;#34;,&amp;#34;order date&amp;#34; from orderlist;
select &amp;#34;order id&amp;#34;,&amp;#34;order date&amp;#34;,orderlist.&amp;#34;Customer ID&amp;#34;, customer.&amp;#34;Customer ID&amp;#34; from orderlist inner join customer on orderlist.&amp;#34;Customer ID&amp;#34;=customer.&amp;#34;Customer ID&amp;#34;;
-- 來修改 product 中 price 欄位改成 integer
CREATE TABLE product1(&amp;#34;Product ID&amp;#34; TEXT,&amp;#34;Category&amp;#34; TEXT,&amp;#34;Sub-Category&amp;#34; TEXT, &amp;#34;Product Name&amp;#34; TEXT,&amp;#34;Price&amp;#34; integer);
-- price &amp;gt; 50 這欄是會回傳結果 1或0
select price , price &amp;gt; 50 from product1;
-- 利用別張表的值 帶入新表
insert into product1 (&amp;#34;Product ID&amp;#34; ,&amp;#34;Category&amp;#34;,&amp;#34;Sub-Category&amp;#34;,&amp;#34;Product Name&amp;#34;,&amp;#34;Price&amp;#34;) select
&amp;#34;Product ID&amp;#34; ,&amp;#34;Category&amp;#34;,&amp;#34;Sub-Category&amp;#34;,&amp;#34;Product Name&amp;#34;,&amp;#34;Price&amp;#34; from product ;
-- 以下兩個顯示的會一樣，但 product1 才是正確的數字，可以拿來做邏輯運算
select price*10 from product; -- text 欄位也可以 x10
select price*10 from product1; -- 這是 integer x10
--
.output data1.csv -- 將接下來的顯示都丟進 data1.csv
select category , price from product1;
-- 畫面不會出現東西，可以打 .quit 去看 data1.csv
.output data2.csv
select category , price from product1 where price &amp;gt; 200;
select &amp;#34;Order ID&amp;#34;,&amp;#34;order date&amp;#34;,customer.&amp;#34;customer name&amp;#34;,product.&amp;#34;product name&amp;#34;, product.&amp;#34;price&amp;#34; from orderlist inner join product on orderlist.&amp;#34;product ID&amp;#34; = product.&amp;#34;product ID&amp;#34; inner join customer on orderlist.&amp;#34;customer id&amp;#34; = customer.&amp;#34;customer id&amp;#34;;
select orderlist.&amp;#34;order id&amp;#34; ,product.&amp;#34;product id&amp;#34;, sum(price) from orderlist,product where orderlist.&amp;#34;product id&amp;#34; = product.&amp;#34;product id&amp;#34; GROUP by orderlist.&amp;#34;order id&amp;#34; HAVING sum(price) &amp;gt; 180;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;-- like 用法 _ 為任意字元 % 為全部都可以
-- 以下例子：找第二個字為 a , 第四個字為 g
select * from person where name like &amp;#39;_a_g%&amp;#39;;
-- 以j 為開頭
select * FROM person where name like &amp;#39;j%&amp;#39; ;
-- 函式
abs()
coalease() ： 暫時取代 表中的 null 值
-- 把 company 欄位中若是 null 值的暫時取代成 &amp;#39;individual&amp;#39;
-- 不會改到欄位的內容 , 加上 as 把顯示的欄位變成 entity
SELECT firstname, lastname, coalesce(company, &amp;#39;Individual&amp;#39;) as entity FROM customers
instr()
length()
trim
-- 計算表內的人數
select count(*) from person
-- 加上條件
select count(*) from school where class=&amp;#39;102&amp;#39;
-- group by
select class,avg(chi) from school group by class ;
-- order by , desc 降序
select * from school where class=&amp;#39;101&amp;#39; order by chi desc;
drop TABLE customertable;
--
select orderlist.&amp;#34;order id&amp;#34; ,product.&amp;#34;product id&amp;#34;, sum(price) from orderlist,product where orderlist.&amp;#34;product id&amp;#34; = product.&amp;#34;product id&amp;#34; GROUP by orderlist.&amp;#34;order id&amp;#34; HAVING sum(price) &amp;gt; 180;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;case 用法 ： 包在 select 中，使用 case when then else end 的組合
記得不要加逗號，因為在 select 每個,就是一個欄位&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;select name,chi ,case when chi&amp;gt;=80 then &amp;#39;a grade&amp;#39; when chi&amp;gt;=60 then &amp;#39;b grade&amp;#39; else &amp;#39;c grade&amp;#39; end as gradechi from school;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;output&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;.header on
.headers on
.mode csv
.output first.csv
select * from school;
.quit
-- 使用 bash 直接輸出
sqlite3 -header -csv c:/sqlite/chinook.db &amp;#34;select * from tracks;&amp;#34; &amp;gt; tracks.csv
-- import
-- 使用 csv 匯入的資料型態會全部都是 text
.import group.csv ingroup&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;--新表 , 一樣加在 testschool.db 中
CREATE TABLE data ( no text , name text , sex text , year integer,month integer );
insert into data values (&amp;#39;10811&amp;#39;,&amp;#39;a1&amp;#39;,&amp;#39;M&amp;#39;,2010,4),(&amp;#39;10821&amp;#39;,&amp;#39;b1&amp;#39;,&amp;#39;F&amp;#39;,2011,5),(&amp;#39;10831&amp;#39;,&amp;#39;c1&amp;#39;,&amp;#39;M&amp;#39;,2012,6);
select school.name,school.class,data.name,data.sex,data.year from school inner join data on school.name=data.name;
-- 跟上面的結果會一樣的寫法
select school.name,school.class,data.name,data.sex,data.year from school,data where school.name = data.name ;
CREATE TABLE ordertable ( order_id varchar(10) PRIMARY key , pro_name text , count text);
CREATE TABLE customertable ( cus_id varchar(20) PRIMARY key , cus_name varchar(20) , cus_email varchar(100) , cus_phone varchar (20) , cus_sex varchar(5) );
CREATE TABLE producttable ( pro_id varchar(10) PRIMARY key ,pro_name varchar(20) ,pro_price integer );&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;CREATE TABLE school1 (id integer , name text , class text , chi text, eng text , mat text);
INSERT INTO school1 select * from school where class=101;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;先新增一個資料庫&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sqlite3 test.db
create table test (name text,memo text);
insert into test values (&amp;#34;aa&amp;#34;,&amp;#34;m1&amp;#34;),(&amp;#34;bb&amp;#34;,&amp;#34;m2&amp;#34;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;echo &amp;#39;select * from test;&amp;#39; &amp;gt; cmd
sqlite3 test.db &amp;lt; cmd # 把指令丟進去執行，會輸出 select 的結果
sqlite3 test.db &amp;lt; cmd &amp;gt;cmdout # 把結果再丟進新的檔案
cat cmdout
# 用這種導入的方式就是假設自己是在裡面操作
# 另外也可以直接接在 sqlite3 指令後面
#!/bin/bash
sqlite3 test.db &amp;#34;create table n (id INTEGER PRIMARY KEY,f TEXT,l TEXT);&amp;#34;
sqlite3 test.db &amp;#34;insert into n (f,l) values (&amp;#39;john&amp;#39;,&amp;#39;smith&amp;#39;);&amp;#34;
sqlite3 test.db &amp;#34;select * from n;&amp;#34;
#
#!/bin/bash
echo -e &amp;#34;
1.新增一筆資料
2.刪除一筆資料
3.修改資料
4.顯示全校資料
5.全校 各科總分 平均&amp;#34;
until [ &amp;#34;$ans&amp;#34; = &amp;#34;1&amp;#34; ] || [ &amp;#34;$ans&amp;#34; = &amp;#34;2&amp;#34; ] || [ &amp;#34;$ans&amp;#34; = &amp;#34;3&amp;#34; ] || [ &amp;#34;$ans&amp;#34; = &amp;#34;4&amp;#34; ] || [ &amp;#34;$ans&amp;#34; = &amp;#34;5&amp;#34; ]
do
read -p &amp;#34;請選擇1,2,3,4,5?&amp;#34; ans
case ${ans} in
1)
echo 1
read -p &amp;#34;請輸入姓名、班級、國文、英文、數學,5個欄位的資料,各欄位空一格 &amp;#34; name class chi eng mat
sqlite3 test.db &amp;#34;create table school (id INTEGER PRIMARY KEY,name TEXT,class TEXT,chi INTEGER,eng INTEGER,mat INTEGER);&amp;#34;
sqlite3 test.db &amp;#34;insert into school (name,class,chi,eng,mat) values (&amp;#39;${name}&amp;#39;,&amp;#39;${class}&amp;#39;,&amp;#39;${chi}&amp;#39;,&amp;#39;${eng}&amp;#39;,&amp;#39;${mat}&amp;#39;);&amp;#34;
sqlite3 test.db &amp;#34;select * from school;&amp;#34;
;;
2)
read -p &amp;#34;請輸入要刪除的 人名? &amp;#34; ans01
sqlite3 test.db &amp;#34; delete from school where name=&amp;#39;${ans01}&amp;#39;; &amp;#34;
;;
3)
read -p &amp;#34;請輸入要編輯的 人名? &amp;#34; ans03
sqlite3 test.db &amp;#34; select * from school where name=&amp;#39;${ans03}&amp;#39;; &amp;#34;
read -p &amp;#34;請輸入姓名、班級、國文、英文、數學,5個欄位的資料,各欄位空一格 &amp;#34; name class chi eng mat
sqlite3 test.db &amp;#34;update school set name=&amp;#39;${name}&amp;#39;,class=&amp;#39;${class}&amp;#39;,chi=&amp;#39;${chi}&amp;#39;,eng=&amp;#39;${eng}&amp;#39;,mat=&amp;#39;${mat}&amp;#39; where name=&amp;#39;${ans03}&amp;#39;;&amp;#34;
;;
4)
echo 4
sqlite3 test.db &amp;#34;select * from school;&amp;#34;
;;
5)
temp=$(sqlite3 test.db &amp;#34;select sum(chi),sum(eng),sum(mat),avg(chi),avg(eng),avg(mat) from school;&amp;#34;)
echo $temp
;;
*)
echo other
exit
;;
esac
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;MySQL&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-mysql"&gt;&lt;/span&gt;
&lt;a href="#tags-mysql" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>MySQL and MySQL Workbench</title><link>https://blog.kubeantony.com/archive/data-platform/mysql-and-mysql-workbench/</link><pubDate>Sun, 07 Aug 2022 14:55:22 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/mysql-and-mysql-workbench/</guid><description>
&lt;hr&gt;
&lt;h2&gt;時代的眼淚 過往的病歷表儲存&lt;span class="hx:absolute hx:-mt-20" id="時代的眼淚-過往的病歷表儲存"&gt;&lt;/span&gt;
&lt;a href="#%e6%99%82%e4%bb%a3%e7%9a%84%e7%9c%bc%e6%b7%9a-%e9%81%8e%e5%be%80%e7%9a%84%e7%97%85%e6%ad%b7%e8%a1%a8%e5%84%b2%e5%ad%98" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://lh5.googleusercontent.com/gDfFdJT64XmBAIACrpblSsnGuv8iLdyWxk4tYbz5ETaAFVTP4PzWxH9SLr1tiwJb4z8YZ6CgM1Z9A6yE4qL99dLFnUirt6MfLLdHRglhtaph5G1xDCdKM5dc_oOVLbTHCr3R8EZs8TQrYc5vsTKq9w" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://lh3.googleusercontent.com/_-b1QJTM79jS0K26jp3T2XhfkgsjV773dwigBMOqTu7sWlktXxoQ6PYoZQWIhxedxlSpp_Dysx-5IivxssntN85Y4ZD3v3SrOoPHgUR2NMfExmuDLWDtPKJA3wfTdRXuZnfwxo6wM_OCtrsZ2ZovkQ" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;傳統儲存資料的方式有哪些不方便的地方？&lt;span class="hx:absolute hx:-mt-20" id="傳統儲存資料的方式有哪些不方便的地方"&gt;&lt;/span&gt;
&lt;a href="#%e5%82%b3%e7%b5%b1%e5%84%b2%e5%ad%98%e8%b3%87%e6%96%99%e7%9a%84%e6%96%b9%e5%bc%8f%e6%9c%89%e5%93%aa%e4%ba%9b%e4%b8%8d%e6%96%b9%e4%be%bf%e7%9a%84%e5%9c%b0%e6%96%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;紙本資料的不方便：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;資料太多，浪費物理儲存空間&lt;/li&gt;
&lt;li&gt;大量資料太重，不利於轉移&lt;/li&gt;
&lt;li&gt;沒有備份，紙本資料遺失就永遠遺失了&lt;/li&gt;
&lt;li&gt;與資料處於不同地點，就無法立即取得（物理傳輸耗費時間）&lt;/li&gt;
&lt;li&gt;資料整理要耗費大量時間與人力整理&lt;/li&gt;
&lt;li&gt;人為錯誤（書寫、分類錯誤）&lt;/li&gt;
&lt;li&gt;時間久了，紙本資料會變的破舊&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;資料未正規劃&lt;span class="hx:absolute hx:-mt-20" id="資料未正規劃"&gt;&lt;/span&gt;
&lt;a href="#%e8%b3%87%e6%96%99%e6%9c%aa%e6%ad%a3%e8%a6%8f%e5%8a%83" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/hgax8sd.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;重複或缺失的資料都未整理&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;ER Model&lt;span class="hx:absolute hx:-mt-20" id="er-model"&gt;&lt;/span&gt;
&lt;a href="#er-model" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;實體 - 關係模型 (Entity-Relationship Model, 簡稱 E-R Model)&lt;/p&gt;
&lt;p&gt;陳品山 (Peter P.S. Chen) 博士於 1976 年提出的一套資料庫的設計工具, 以圖形化的方式表示儲存於資料庫內的各資料項目之間的關係。&lt;/p&gt;
&lt;p&gt;又稱為 ER Diagram (ER圖)
常用於分析師與企業內部使用者，在資訊系統設計過程中的構思及溝通討論使用&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;組成要件&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Entities 實體｜方塊圖形表示&lt;/li&gt;
&lt;li&gt;定義：通常是名詞，它可以是獨立存在的一個事物，或是一個概念上存在的 物件。（如：員工，課程，車…）
&lt;ul&gt;
&lt;li&gt;Attributes 屬性｜橢圓形表示&lt;/li&gt;
&lt;li&gt;定義：用來描述個體的特徵或屬性
&lt;ul&gt;
&lt;li&gt;型別：&lt;/li&gt;
&lt;li&gt;一般屬性 General attributes｜簡單的資訊&lt;/li&gt;
&lt;li&gt;複合屬性 Composite attributes｜可再拆解分割&lt;/li&gt;
&lt;li&gt;多值屬性 Multivalued attributes｜一個以上的值&lt;/li&gt;
&lt;li&gt;衍生屬性 Derived attributes｜透過另一屬性計算出來&lt;/li&gt;
&lt;li&gt;鍵值屬性 Key attributes｜具備值的唯一性&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Relationships 關係｜菱形表示
&lt;ul&gt;
&lt;li&gt;定義：表示兩個實體間的關聯性&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;練習1&lt;span class="hx:absolute hx:-mt-20" id="練習1"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%921" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;請解釋Country與City之間的關係
&lt;img src="https://lh3.googleusercontent.com/ndS4TTAzSZLHvHvqtJu__9IaeDljGbcUvGQTUGBQ7k_-GjX4KpxEpv8Ff7bcaG2sjQ0bOeT0hr71GZZUVJ6y6xewcy9SoLhtzjLP95yRixn872XVfYUatPXvshBcqU-7XQk72RtBPX96rPNzMBe6Eg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/3JyENkA.png" alt="" loading="lazy" /&gt;
by 程威繪製&lt;/p&gt;
&lt;h3&gt;練習2&lt;span class="hx:absolute hx:-mt-20" id="練習2"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%922" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;請解釋customer與address之間的關係&lt;/p&gt;
&lt;p&gt;&lt;img src="https://lh6.googleusercontent.com/cSEsbENQKZAsJ9f_EQ-KbgNeqCT7mUqdPkiK-dfOj_XU_zebd4lr4JQ53oYspDMJe-zziXj23BBWXiDTxSNXZCSDsHQsrNs-Zg6GlhxPPxEzHcJ61P1E5yfPK6d3agTbbvB7CXdKqscxEEJ-AH8sIA" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/uQEXFQg.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;by 程威繪製&lt;/p&gt;
&lt;h3&gt;練習3&lt;span class="hx:absolute hx:-mt-20" id="練習3"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%923" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;根據 正規劃後的轉診單(P.8-9) ，建立陳品山博士版本的ER圖&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/evV8bAl.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/rho9IQc.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/WyRe16H.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;MySQL Installation&lt;/h1&gt;&lt;h2&gt;佈署實作環境&lt;span class="hx:absolute hx:-mt-20" id="佈署實作環境"&gt;&lt;/span&gt;
&lt;a href="#%e4%bd%88%e7%bd%b2%e5%af%a6%e4%bd%9c%e7%92%b0%e5%a2%83" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a
href="https://drive.google.com/file/d/11jtz01q_y0KUouhsuEuGfCm6q3vnMy5I/view?usp=sharing"target="_blank" rel="noopener"&gt;下載CNT.2022.v4&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;在 Alpine Linux 安裝 MySQL&lt;span class="hx:absolute hx:-mt-20" id="在-alpine-linux-安裝-mysql"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-alpine-linux-%e5%ae%89%e8%a3%9d-mysql" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;安裝MySQL Server 和MySQL client端 (其實在Alpine裡安裝MySQL 就是安裝Mariadb )&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo apk add mysql mysql-client&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查mariadb的狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo rc-service mariadb status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;啟用MySQL的TCP/IP連接並綁訂服務到指定IP&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo nano /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
#skip-networking ## 將這行註解掉，代表啟用MySQL的TCP/IP連接
[galera]
bind-address=0.0.0.0 ## 取消這行的註解，代表任意IP都可以連線到我們的MySQL&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;先將mariadb初始化&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo /etc/init.d/mariadb setup&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;啟動mariadb的服務&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo rc-service mariadb start&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;進入mysql&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo mysql
ERROR 2002 (HY000): Can&amp;#39;t connect to local server through socket &amp;#39;/run/mysqld/mysqld.sock&amp;#39; (2)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font color=red&gt; &lt;strong&gt;噴錯提示：ERROR 2002 (HY000): Can&amp;rsquo;t connect to local server through socket &amp;lsquo;/run/mysqld/mysqld.sock&amp;rsquo; (2)&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls -al /run/mysqld/mysqld.sock
srwxrwxrwx 1 mysql mysql 0 May 26 11:17 /run/mysqld/mysqld.sock
&amp;gt; 檔案類型為：s，代表Socket 檔案&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Socket 分為兩大類&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internet Domain Socket
&lt;ul&gt;
&lt;li&gt;用於IP的port上&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Unix Domain Socket
&lt;ul&gt;
&lt;li&gt;用於process之間的溝通&lt;/li&gt;
&lt;li&gt;好處是不需要透過網路溝通，在速度上會比較快&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上兩種Socket會讓我們的MySQL產生兩種登入方式&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mysql -S &lt;/code&gt; ，透過Unix Domain Socket登入&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mysql -H &amp;lt;$IP&amp;gt; &lt;/code&gt; ，透過Internet Domain Socket登入&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;設定 Mariadb 開機自動啟動&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo rc-update add mariadb default
* service mariadb added to runlevel default&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ rc-update show default | grep mariadb
mariadb | default&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將VM重啟&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查 Mariadb 服務啟動狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ rc-status| grep mariadb
mariadb [ started ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;在 Alpine Linux 設定 MySQL&lt;span class="hx:absolute hx:-mt-20" id="在-alpine-linux-設定-mysql"&gt;&lt;/span&gt;
&lt;a href="#%e5%9c%a8-alpine-linux-%e8%a8%ad%e5%ae%9a-mysql" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo mysql_secure_installation
Enter current password for root (enter for none):
（輸入現有root密碼,enter）
Switch to unix_socket authentication [Y/n]
（ y，啟用unix_socket 身份驗證）
Change the root password? [Y/n]
（ y，更換 root 密碼）
New password: root
Re-enter new password: root
Remove anonymous users? [Y/n]
（ Y，移除匿名登入）
Disallow root login remotely? [Y/n]
（ Y，移除遠端 root 登入權限）
Remove test database and access to it? [Y/n]
（ Y，移除測試資料庫及帳號）
Reload privilege tables now? [Y/n]
（ Y，重新載入權限表）&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;登入 MySQL&lt;span class="hx:absolute hx:-mt-20" id="登入-mysql"&gt;&lt;/span&gt;
&lt;a href="#%e7%99%bb%e5%85%a5-mysql" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;登入MySQL&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql -u root -p
Enter password: root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.6.8-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type &amp;#39;help;&amp;#39; or &amp;#39;\h&amp;#39; for help. Type &amp;#39;\c&amp;#39; to clear the current input statement.
MariaDB [(none)]&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查看目前是誰登入&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; select current_user();
&amp;#43;----------------&amp;#43;
| current_user() |
&amp;#43;----------------&amp;#43;
| root@localhost |
&amp;#43;----------------&amp;#43;
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;登入 MySQL - Socket&lt;span class="hx:absolute hx:-mt-20" id="登入-mysql---socket"&gt;&lt;/span&gt;
&lt;a href="#%e7%99%bb%e5%85%a5-mysql---socket" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ mysql -u root -S /run/mysqld/mysqld.sock
ERROR 1698 (28000): Access denied for user &amp;#39;root&amp;#39;@&amp;#39;localhost&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;噴錯的原因是因為沒有借用最高權限root的身份執行&lt;/p&gt;
&lt;p&gt;加&lt;code&gt;sudo&lt;/code&gt; 後再登入一次&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo mysql -u root -S /run/mysqld/mysqld.sock
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 18
Server version: 10.6.8-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type &amp;#39;help;&amp;#39; or &amp;#39;\h&amp;#39; for help. Type &amp;#39;\c&amp;#39; to clear the current input statement.
MariaDB [(none)]&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;成功登入！&lt;/p&gt;
&lt;p&gt;小結論：
&lt;font color=red&gt; &lt;strong&gt;&lt;code&gt;sudo mysql -u root -S /run/mysqld/mysqld.sock&lt;/code&gt;與&lt;code&gt;sudo mysql&lt;/code&gt;
都是透過Unix Domain Socket登入&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;新增 bigred 帳號可以從遠端登入&lt;span class="hx:absolute hx:-mt-20" id="新增-bigred-帳號可以從遠端登入"&gt;&lt;/span&gt;
&lt;a href="#%e6%96%b0%e5%a2%9e-bigred-%e5%b8%b3%e8%99%9f%e5%8f%af%e4%bb%a5%e5%be%9e%e9%81%a0%e7%ab%af%e7%99%bb%e5%85%a5" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;建立bigred使用者並且設定最高權限&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; GRANT ALL PRIVILEGES ON *.* TO &amp;#39;bigred&amp;#39;@&amp;#39;%&amp;#39; IDENTIFIED BY &amp;#39;bigred&amp;#39; WITH GRANT OPTION;
Query OK, 0 rows affected (0.002 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;立刻生效&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; SELECT user,host FROM mysql.user;
&amp;#43;-------------&amp;#43;-----------&amp;#43;
| User | Host |
&amp;#43;-------------&amp;#43;-----------&amp;#43;
| bigred | % |
| mariadb.sys | localhost |
| mysql | localhost |
| root | localhost |
&amp;#43;-------------&amp;#43;-----------&amp;#43;
4 rows in set (0.003 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;SQL Command&lt;span class="hx:absolute hx:-mt-20" id="sql-command"&gt;&lt;/span&gt;
&lt;a href="#sql-command" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;建立名為：test 的Database&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; create database test;
Query OK, 1 row affected (0.000 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; show databases;
&amp;#43;--------------------&amp;#43;
| Database |
&amp;#43;--------------------&amp;#43;
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
&amp;#43;--------------------&amp;#43;
5 rows in set (0.002 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;進入名為：test 的Database&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; use test;
Database changed&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;刪除名為：test 的Database&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [test]&amp;gt; drop database test;
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;抓取練習資料庫&lt;span class="hx:absolute hx:-mt-20" id="抓取練習資料庫"&gt;&lt;/span&gt;
&lt;a href="#%e6%8a%93%e5%8f%96%e7%b7%b4%e7%bf%92%e8%b3%87%e6%96%99%e5%ba%ab" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;下載練習的壓縮檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ wget https://downloads.mysql.com/docs/sakila-db.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解壓縮&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ tar zxvf sakila-db.tar.gz
sakila-db/
sakila-db/sakila-data.sql
sakila-db/sakila-schema.sql
sakila-db/sakila.mwb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ls
bin sakila-data.sql sakila-db sakila-db.tar.gz sakila-schema.sql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;資料表中的欄位定義(名稱, 屬性, 長度, 空值, 主鍵&amp;hellip;等)&lt;/p&gt;
&lt;p&gt;進入MySQL&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo mysql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;匯入sakila 的schema&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [(none)]&amp;gt; source sakila-schema.sql
...
Database changed
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;匯入Sakila 的Data&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [sakila]&amp;gt; source sakila-data.sql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [sakila]&amp;gt; show tables;
&amp;#43;----------------------------&amp;#43;
| Tables_in_sakila |
&amp;#43;----------------------------&amp;#43;
| actor |
| actor_info |
| address |
| category |
| city |
| country |
| customer |
| customer_list |
| film |
| film_actor |
| film_category |
| film_list |
| film_text |
| inventory |
| language |
| nicer_but_slower_film_list |
| payment |
| rental |
| sales_by_film_category |
| sales_by_store |
| staff |
| staff_list |
| store |
&amp;#43;----------------------------&amp;#43;
23 rows in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查Data&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [sakila]&amp;gt; select count(*) from customer;
&amp;#43;----------&amp;#43;
| count(*) |
&amp;#43;----------&amp;#43;
| 599 |
&amp;#43;----------&amp;#43;
1 row in set (0.000 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;使用MySQL Workbench&lt;/h1&gt;&lt;h2&gt;下載 MySQL GUI工具&lt;span class="hx:absolute hx:-mt-20" id="下載-mysql-gui工具"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%8b%e8%bc%89-mysql-gui%e5%b7%a5%e5%85%b7" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a
href="https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-8.0.29-winx64.msi"target="_blank" rel="noopener"&gt;MySQL Workbench 下載點&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a
href="https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-8.0.29-winx64.msi"target="_blank" rel="noopener"&gt;DBeaver 下載點&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;MySQL Workbench Connect to MariaDB&lt;span class="hx:absolute hx:-mt-20" id="mysql-workbench-connect-to-mariadb"&gt;&lt;/span&gt;
&lt;a href="#mysql-workbench-connect-to-mariadb" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在MySQL Connetion 那邊按 +
&lt;img src="https://lh3.googleusercontent.com/znvrzMzc93MaE5D-dtdpn-co04_bDfLgtx5Te3P5tcEqfg6i4JCkpgN_mu-CePPEgZ3NPt1b5K7lcR9ifjoOlYKAtGuDB84tAnnxc3WmROK7IoyfXv8j2YirtPHoBNIXccNcWtfpDdrbdsJldVBALg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;什麼是DBMS ?
database management system 的縮寫，其實就是資料庫的泛稱&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;Stored Routine&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;Stored Function｜執行單行 SQL 指令
&lt;ul&gt;
&lt;li&gt;調用指令
&lt;ul&gt;
&lt;li&gt;select rand();&lt;/li&gt;
&lt;li&gt;select now();&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;內建功能
&lt;ul&gt;
&lt;li&gt;SUM()&lt;/li&gt;
&lt;li&gt;COUNT()&lt;/li&gt;
&lt;li&gt;NOW()&lt;/li&gt;
&lt;li&gt;RAND()&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Stored Procedure｜執行多行 SQL 指令
&lt;ul&gt;
&lt;li&gt;當要執行多個SQL 語句時&lt;/li&gt;
&lt;li&gt;可決定是否回傳值，或Result sets&lt;/li&gt;
&lt;li&gt;可以呼叫Function&lt;/li&gt;
&lt;li&gt;對 SQL 注入攻擊的一些保護&lt;/li&gt;
&lt;li&gt;呼叫方式 CALL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;練習&lt;span class="hx:absolute hx:-mt-20" id="練習"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [sakila]&amp;gt; select inventory.film_id, film.title, inventory_id, store_id from inventory inner join film on film.film_id=inventory.film_id wh
ere title=&amp;#34;DARLING BREAKING&amp;#34;;
&amp;#43;---------&amp;#43;------------------&amp;#43;--------------&amp;#43;----------&amp;#43;
| film_id | title | inventory_id | store_id |
&amp;#43;---------&amp;#43;------------------&amp;#43;--------------&amp;#43;----------&amp;#43;
| 211 | DARLING BREAKING | 948 | 1 |
| 211 | DARLING BREAKING | 949 | 1 |
&amp;#43;---------&amp;#43;------------------&amp;#43;--------------&amp;#43;----------&amp;#43;
2 rows in set (0.000 sec)
MariaDB [sakila]&amp;gt; select inventory_in_stock(948);
&amp;#43;-------------------------&amp;#43;
| inventory_in_stock(948) |
&amp;#43;-------------------------&amp;#43;
| 1 |
&amp;#43;-------------------------&amp;#43;
1 row in set (0.001 sec)
MariaDB [sakila]&amp;gt; select inventory_in_stock(949);
&amp;#43;-------------------------&amp;#43;
| inventory_in_stock(949) |
&amp;#43;-------------------------&amp;#43;
| 1 |
&amp;#43;-------------------------&amp;#43;
1 row in set (0.001 sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;MariaDB [sakila]&amp;gt; CREATE VIEW customer_list_name_postal As select first_name, last_name, address.postal_code, address.city_id from customer inner join address on address.address_id=customer.address_id;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;MySQL&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-mysql"&gt;&lt;/span&gt;
&lt;a href="#tags-mysql" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>ELK-Overview</title><link>https://blog.kubeantony.com/archive/data-platform/elk-overview/</link><pubDate>Sun, 07 Aug 2022 14:50:50 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/elk-overview/</guid><description>
&lt;hr&gt;
&lt;h2&gt;ELK Stack Architecture&lt;span class="hx:absolute hx:-mt-20" id="elk-stack-architecture"&gt;&lt;/span&gt;
&lt;a href="#elk-stack-architecture" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://lh4.googleusercontent.com/NqSB-5FqvPZl9B2JwL1T0wwP2u0hHi0vjuE8STzAOAwqWJxQYNtZT9pEzY7pwLFkEJvSvKtrXZj44NJ4ZsP8BQ0FrqNxWVSrW2big5YWQ9GOQcXzV4ExGiBDWkd2GJJYhwazZmMowwfFtKJwTg" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;What is ELK Stack ?&lt;span class="hx:absolute hx:-mt-20" id="what-is-elk-stack-"&gt;&lt;/span&gt;
&lt;a href="#what-is-elk-stack-" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ELK Stack
統一為 log 收集儲存過濾和視覺畫的工具&lt;/p&gt;
&lt;p&gt;logstash 可以預處理與收集資料
Beats 收吃資料，功耗較小&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;What is Elasticsearch?&lt;/h1&gt;&lt;p&gt;在企業遇到的資料主要會分為結構化資料與非結構化資料&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;結構化資料
&lt;ul&gt;
&lt;li&gt;具有固定的格式以及有限長度的資料&lt;/li&gt;
&lt;li&gt;也就是 Database&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;非結構化資料
&lt;ul&gt;
&lt;li&gt;長度不一定且沒有固定格式的資料&lt;/li&gt;
&lt;li&gt;ex. email的內容&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Elasticsearch Introduction&lt;span class="hx:absolute hx:-mt-20" id="elasticsearch-introduction"&gt;&lt;/span&gt;
&lt;a href="#elasticsearch-introduction" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Apache License
&lt;ul&gt;
&lt;li&gt;Basic Apache Lucene&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Flexible Architecture
&lt;ul&gt;
&lt;li&gt;RESTful API&lt;/li&gt;
&lt;li&gt;JSON Format
&lt;ul&gt;
&lt;li&gt;他的格式是一個物件，前提開頭和結尾都是大括號，使用逗號做分割，key、value 之間用 冒號 連結，每組 key、value 之間是由 逗號 分割&lt;/li&gt;
&lt;li&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;{
&amp;#34;region&amp;#34;: &amp;#34;US&amp;#34;,
&amp;#34;age&amp;#34;: 30
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Distributed
&lt;ul&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;High Availability&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Document Oriented （文件導向儲存體）
&lt;ul&gt;
&lt;li&gt;Schema Free （不需預先定義 Schema）
&lt;ul&gt;
&lt;li&gt;Storage 本身會去偵測資料的樣子，然後定義一個基本的版本&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Near Realtime Search （近即時收尋）
&lt;ul&gt;
&lt;li&gt;Full-text Search （全文檢索，像是在查字典）
&lt;ul&gt;
&lt;li&gt;資料進來時，會先建立資料索引，當資料索引建立好後，在資料量很大時，搜索的速度會優於傳統式資料庫按照順序一行一行在掃描&lt;/li&gt;
&lt;li&gt;平常在網站上搜尋也是全文檢索&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elasticsearch 裡的名詞解釋&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Elasticsearch&lt;/th&gt;
&lt;th&gt;RDB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Index&lt;/td&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type&lt;/td&gt;
&lt;td&gt;Table&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document&lt;/td&gt;
&lt;td&gt;Row(Record)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field&lt;/td&gt;
&lt;td&gt;Column&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mapping&lt;/td&gt;
&lt;td&gt;Schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everything is indexed&lt;/td&gt;
&lt;td&gt;Index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shard&lt;/td&gt;
&lt;td&gt;Partition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query DSL&lt;/td&gt;
&lt;td&gt;SQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;td&gt;Text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replica&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node&lt;/td&gt;
&lt;td&gt;Instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cluster&lt;/td&gt;
&lt;td&gt;Cluster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Elasticsearch Node&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Master
&lt;ul&gt;
&lt;li&gt;Coordinator Node&lt;/li&gt;
&lt;li&gt;Create/Delete Index&lt;/li&gt;
&lt;li&gt;本身不做 Document 處理，會丟給 Data Node 處理，資源需求相對 Data Node 低&lt;/li&gt;
&lt;li&gt;會定期發 ping 確認其他 Node 的存在&lt;/li&gt;
&lt;li&gt;Master 預設可以當 Data node，所以我們要把它關掉，以免他太忙&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Data
&lt;ul&gt;
&lt;li&gt;Storage Data&lt;/li&gt;
&lt;li&gt;負責儲存和查詢資料&lt;/li&gt;
&lt;li&gt;需要的硬體資源 cpu memory 和硬碟的資源較高&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ingest
&lt;ul&gt;
&lt;li&gt;Data Process&lt;/li&gt;
&lt;li&gt;在數據儲存之前，它負責做數據的預處理&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Coordinating
&lt;ul&gt;
&lt;li&gt;當 master 要新增或刪除資料時，會讓 Data node 作處理，而 Data node 處理完的資料，就會由 Coordinating node 匯總處理完的資料，再傳給 clinet 端&lt;/li&gt;
&lt;li&gt;Coordinating 本身不負責儲存資料&lt;/li&gt;
&lt;li&gt;它的存在可以降低 Master 和 Data 兩個 node 的負擔&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Elasticsearch Shard &amp;amp; Replica&lt;span class="hx:absolute hx:-mt-20" id="elasticsearch-shard--replica"&gt;&lt;/span&gt;
&lt;a href="#elasticsearch-shard--replica" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Shard
&lt;ul&gt;
&lt;li&gt;Index split&lt;/li&gt;
&lt;li&gt;Shard &amp;lt;= 30G&lt;/li&gt;
&lt;li&gt;單個 Shard 盡量在 50 GB 以下&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Replica
&lt;ul&gt;
&lt;li&gt;High Availability&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://lh6.googleusercontent.com/0maBlrJgUVCYDeBR5oEQWBf_IXvCghgIb4u22Yoq4Oa2Rr2U5R2WuJ5FPgAB63d6YeN5TNtHGjEF_l9LgHv7vFnHb1lPYhcn5YbFd0inPNNPSgqfk_UzWb6_5S4cQw5OFw3jwp_IbL1udYTCtQ" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Elasticsearch Indexing Process&lt;span class="hx:absolute hx:-mt-20" id="elasticsearch-indexing-process"&gt;&lt;/span&gt;
&lt;a href="#elasticsearch-indexing-process" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/BDxy1IJ.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;資料進來時，會先存到 memory buffer （），然後每秒會 refresh 到 filesystem cache（Data node 的記憶體裡），最後每30分鐘或 translog 大於512 MB時，會將所有資料寫入硬碟&lt;/p&gt;
&lt;p&gt;CharacterFiliters 負責把不同語言的標籤去掉，只保留內容&lt;/p&gt;
&lt;p&gt;Tokenizer 分詞器，將資料的詞分割&lt;/p&gt;
&lt;p&gt;Token Filter 去掉贅字&lt;/p&gt;
&lt;p&gt;translog 相當於 Hadoop 的 etcd ，會紀錄資料新增/修改/刪除的動作，防止資料在傳送的過程中，突然斷電，導致動作中斷&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Elasticsearch Inverted Index&lt;span class="hx:absolute hx:-mt-20" id="elasticsearch-inverted-index"&gt;&lt;/span&gt;
&lt;a href="#elasticsearch-inverted-index" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Inverted Index 反向索引，讓全文索引加速&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/pRQcspD.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Elasticsearch Template &amp;amp; Mapping&lt;span class="hx:absolute hx:-mt-20" id="elasticsearch-template--mapping"&gt;&lt;/span&gt;
&lt;a href="#elasticsearch-template--mapping" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Template (Refresh頻率、索引名稱、欄名)
&lt;ul&gt;
&lt;li&gt;Setting: index config
&lt;ul&gt;
&lt;li&gt;refresh_interval (根據機器效能和任務需求決定)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mapping: define index and Field&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mapping (產生 Schema)
&lt;ul&gt;
&lt;li&gt;Dynamic (自動產生 Schema)&lt;/li&gt;
&lt;li&gt;Static (自訂 Schema)
&lt;ul&gt;
&lt;li&gt;Default analyzed: standard (預設分詞器: standard)&lt;/li&gt;
&lt;li&gt;Default doc_value:true (根據相關性分數作排序)&lt;/li&gt;
&lt;li&gt;Text Type:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Text (會經tokenizer處理)&lt;/li&gt;
&lt;li&gt;keyword (不經tokenizer處理)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;反向索引: 從字詞去找文件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Example
&lt;img src="https://lh5.googleusercontent.com/HR0quObOagejO5Y3t2gczjhjWPF9r6cBZG0w5zZLhCq-Xp0Q5lzyvJM1HTNoe0uW9kfb9P7wlM4SRKMWLh4OUNk7_Vb4ibi-rCypDidbZIf16HKwwE-k3tN2sKJJqU6s40gBNzqUU9YUcwfL6Q" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Elasticsearch Analysis&lt;span class="hx:absolute hx:-mt-20" id="elasticsearch-analysis"&gt;&lt;/span&gt;
&lt;a href="#elasticsearch-analysis" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Analyzer
&lt;ul&gt;
&lt;li&gt;Character Filters:
&lt;ul&gt;
&lt;li&gt;HTML Strip Character Filters&lt;/li&gt;
&lt;li&gt;Mapping Character Filters&lt;/li&gt;
&lt;li&gt;Pattern Replace Character Filters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Tokenizer
&lt;ul&gt;
&lt;li&gt;Standard、Whitespace、Letter…&lt;/li&gt;
&lt;li&gt;smartch、ik&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Token Filters
&lt;ul&gt;
&lt;li&gt;Lowercase、Length…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/DCHpH9m.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Elasticsearch Hot-Warm&lt;span class="hx:absolute hx:-mt-20" id="elasticsearch-hot-warm"&gt;&lt;/span&gt;
&lt;a href="#elasticsearch-hot-warm" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://lh5.googleusercontent.com/a969_aQLopIhThPz3aftO78vLtClTEQrGz99Zw5epK_BJCXLAZP8R3yqrIbKGR3OIIb3MGBTUmZWKZ3sLRN21tRW9TXjp_vRQQKAAJFpzXov-GmbQhSZh3AP3Xh_t4J0bYFfy5yo3acVEqzjDQ" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Elasticsearch Hot-Warm（冷、暖、熱區的定義）
&lt;ul&gt;
&lt;li&gt;定義資料的生命週期（Data life-circle）自訂判定條件，減少人為處理流程&lt;/li&gt;
&lt;li&gt;依照取用的頻繁程度分別定義資料為&lt;/li&gt;
&lt;li&gt;“data”:”hot” 熱資料｜新增、常用的資料&lt;/li&gt;
&lt;li&gt;“data”:”warm” 暖資料｜過了一段時間，依然有進行存取的資料&lt;/li&gt;
&lt;li&gt;“data”:”cold” 冷資料｜已經長時間未使用的資料&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1&gt;What is Logstash &amp;amp; Beats?&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;根據現有的欄位做處理產生新的欄位，好處是可以根據結果來做搜尋&lt;/li&gt;
&lt;li&gt;可將非結構化的資料變成結構化的資料&lt;/li&gt;
&lt;li&gt;通常 Logstash 不會只有一個，會有很多 input 和 output 的插件
&lt;ul&gt;
&lt;li&gt;資源的數據來源有 log&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果主機直接對連 Logstash ，當 Logstash 壞了，Beats 還是會一直丟資料給 Logstash ，有可能就會造成資料遺失。&lt;/p&gt;
&lt;p&gt;在 Logstash 和 Beats 之間，加 Broker layer 資料中繼站，做完彙整後， logstash 會再把資料拉回來，好處是可避免資料遺失。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://lh4.googleusercontent.com/AktOSWv9a9iwKAkUNqto7pLYbhBLXC3MG3Kj07JS3UEW0k3qYN0zLn-P1vg51pPYMltXlAlpIYtadvxZErblSsKuLTLm2FGv-fIt-V7xUdKwL1wvsw_oznbO_0dVqm8HmA8v2niGmKBLuSyXog" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;Logstash Syntax&lt;span class="hx:absolute hx:-mt-20" id="logstash-syntax"&gt;&lt;/span&gt;
&lt;a href="#logstash-syntax" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://lh4.googleusercontent.com/Yx6OwqbHdvLFbA2RHnZwkqB14jtYOlzIzEkVhraoyb2gu3POcz_fZqnEZWw7lCkZXdJrrLzhmrVl5TwbNI60euDin4s0jWA29f-05TgtrZo4KLHDDSgh7QaVXvqya-GgUUwi7mJBV5KKL8ND5w" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;start_position 時間戳，代表會從檔案的第一筆開始讀一直到最後更新那筆，如果不加就只會讀最後更新那筆
sincedb_path
ignore_older =&amp;gt; 0 不要忽略資料&lt;/p&gt;
&lt;h2&gt;Logstash Performance Tuning&lt;span class="hx:absolute hx:-mt-20" id="logstash-performance-tuning"&gt;&lt;/span&gt;
&lt;a href="#logstash-performance-tuning" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://lh6.googleusercontent.com/_Fi_h_HItSj8kL9cQHHBqaZ8hGN3XEEeuWkoXsukyB8IQfDSem5E7XQN2e_a9L30XPQH5rPUkSthO4i4sXhF9MBuD4wGMjwapbDq77Z8lYhCEAil8OdkEjWq7L-mWvIljoc8Nb4HEzgmmjyvcA" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;Beats Introduction&lt;span class="hx:absolute hx:-mt-20" id="beats-introduction"&gt;&lt;/span&gt;
&lt;a href="#beats-introduction" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Data Shippers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filebeat 收集檔案&lt;/li&gt;
&lt;li&gt;Metricbeat&lt;/li&gt;
&lt;li&gt;Packetbeat 收集 http&lt;/li&gt;
&lt;li&gt;Winlogbeat 收集 windows 的 log&lt;/li&gt;
&lt;li&gt;Auditbeat 收集人的行為&lt;/li&gt;
&lt;li&gt;Third Party 第三方插件&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Beats Filebeat&lt;span class="hx:absolute hx:-mt-20" id="beats-filebeat"&gt;&lt;/span&gt;
&lt;a href="#beats-filebeat" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://lh6.googleusercontent.com/Vt5JjeSqFk8L_3jphNyPZ75fMBB9KQCF0Oh9ZT0V4bQrbSL5Olu-xs-hY405wRcfEC-1U4Po9T2YeQNQf23777TKCwfxBk8dsh5FT3mthT8tP1btLgnjA5YHyFcUOlJlvaQ7g5SClHe-HKDH8Q" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Input
Harvester 逐行處理資料的程序
Spooler 緩衝處理程序（緩衝區），將每一個Harvester收集到的資料處理過後，output 到 Elasticsearch、Logstash、Kafka和Redis&amp;hellip;等&lt;/p&gt;
&lt;h2&gt;Filebeat Syntax&lt;span class="hx:absolute hx:-mt-20" id="filebeat-syntax"&gt;&lt;/span&gt;
&lt;a href="#filebeat-syntax" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/Gw52B2H.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Logstash｜主要任務：將非結構化資料 &amp;raquo; 結構化資料，擔任中央數據處理引擎&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 Java 語言開發，重裝型的資料收集器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beats｜主要任務：抽取、整合資料，擔任前端的資料收割機&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 go 語言開發，較輕量型的資料收集器&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;tags: &lt;code&gt;系統工程&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-系統工程"&gt;&lt;/span&gt;
&lt;a href="#tags-%e7%b3%bb%e7%b5%b1%e5%b7%a5%e7%a8%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>ELK-cluster</title><link>https://blog.kubeantony.com/archive/data-platform/elk-cluster/</link><pubDate>Sun, 07 Aug 2022 14:50:38 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/elk-cluster/</guid><description>
&lt;hr&gt;
&lt;h2&gt;Getting Started&lt;span class="hx:absolute hx:-mt-20" id="getting-started"&gt;&lt;/span&gt;
&lt;a href="#getting-started" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Get Elasticsearch_2.13-2.6.0.tgz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
$ tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz
$ cd ~/elasticsearch-7.4.0
Modify The Elasticsearch Config
Modify the config
$ vim ~/elasticsearch-7.4.0/config/elasticsearch.yml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 新增一筆資料
$ curl -X PUT &amp;#34;localhost:9200/my-index/_doc/1?pretty&amp;#34; -H &amp;#39;Content-Type: application/json&amp;#39; -d&amp;#39;{&amp;#34;user&amp;#34; : &amp;#34;Mack&amp;#34;,&amp;#34;age&amp;#34; : &amp;#34;20&amp;#34;,&amp;#34;interests&amp;#34;
: &amp;#34;music&amp;#34;}&amp;#39;
## 檢查資料
$ curl -X GET &amp;#34;localhost:9200/my-index/_search?pretty&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;建立索引為tibame類別employee的文件，並產生三筆資料，資料內容有first_name,last_name,age,about,interests&lt;/p&gt;
&lt;p&gt;匯入資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;curl -H &amp;#39;Content-Type: application/json&amp;#39; -X POST &amp;#39;localhost:9200/bank/account/_bulk?pretty&amp;#39; --data-binary @accounts.json
curl -H &amp;#39;Content-Type: application/json&amp;#39; -X POST &amp;#39;localhost:9200/bank/shakespeare/_bulk?pretty&amp;#39; --data-binary @shakespeare_6.0.json
curl -H &amp;#39;Content-Type: application/json&amp;#39; -X POST &amp;#39;localhost:9200/bank/hfp/_bulk?pretty&amp;#39; --data-binary @prod.json&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#查詢所有 index
GET _cat/indices
#刪除 index
DELETE my-index-001
#創建 index 並賦予自動型別判定
PUT my-index-001
{
&amp;#34;mappings&amp;#34;: {
&amp;#34;dynamic_templates&amp;#34;:[
{
&amp;#34;longs_as_strings&amp;#34;:{
&amp;#34;match_mapping_type&amp;#34;: &amp;#34;string&amp;#34;,
&amp;#34;match&amp;#34;: &amp;#34;long_*&amp;#34;,
&amp;#34;unmatch&amp;#34;: &amp;#34;*_text&amp;#34;,
&amp;#34;mapping&amp;#34;: {
&amp;#34;type&amp;#34;: &amp;#34;long&amp;#34;
}
}
}]
}
}
# #寫入一筆資料
PUT my-index-001/_doc/1
{
&amp;#34;long_num&amp;#34;: &amp;#34;5&amp;#34;,
&amp;#34;long_text&amp;#34;: &amp;#34;foo&amp;#34;
}
#確認 index 的資料
GET my-index-001/_search?pretty
{
&amp;#34;query&amp;#34;: {
&amp;#34;match_all&amp;#34;: {}
}
}
PUT tibame/
{&amp;#34;mappings&amp;#34; : {
&amp;#34;properties&amp;#34; : {
&amp;#34;long_num&amp;#34; : {
&amp;#34;type&amp;#34; : &amp;#34;long&amp;#34;
},
&amp;#34;long_text&amp;#34; :{
&amp;#34;type&amp;#34; : &amp;#34;text&amp;#34;,
&amp;#34;fields&amp;#34;: {
&amp;#34;keyword&amp;#34; : {
&amp;#34;type&amp;#34; : &amp;#34;keyword&amp;#34;,
&amp;#34;ignore_above&amp;#34; : 256
}
}
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Field名稱為is開頭皆設定為布林(bollean)類型&lt;span class="hx:absolute hx:-mt-20" id="field名稱為is開頭皆設定為布林bollean類型"&gt;&lt;/span&gt;
&lt;a href="#field%e5%90%8d%e7%a8%b1%e7%82%bais%e9%96%8b%e9%a0%ad%e7%9a%86%e8%a8%ad%e5%ae%9a%e7%82%ba%e5%b8%83%e6%9e%97bollean%e9%a1%9e%e5%9e%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;PUT my-index-001
{
&amp;#34;mappings&amp;#34;: {
&amp;#34;dynamic_templates&amp;#34;:[
{
&amp;#34;longs_as_strings&amp;#34;:{
&amp;#34;match_mapping_type&amp;#34;: &amp;#34;boolean&amp;#34;,
&amp;#34;match&amp;#34;: &amp;#34;is_*&amp;#34;,
&amp;#34;unmatch&amp;#34;: &amp;#34;*_text&amp;#34;,
&amp;#34;mapping&amp;#34;: {
&amp;#34;type&amp;#34;: &amp;#34;long&amp;#34;
}
}
}]
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET /shakespeare/_search?pretty
{
&amp;#34;query&amp;#34;: {
&amp;#34;match_all&amp;#34;: {}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;假設資料流不是自己的，就可以用空查詢來確認&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1&gt;Query Filter&lt;/h1&gt;&lt;p&gt;⽤查詢某個特定欄位，如match，term，range&lt;/p&gt;
&lt;p&gt;注意，term 不會被分詞，得到的結果只有符合與不符合&lt;/p&gt;
&lt;p&gt;命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET /bank/_search?pretty
{
&amp;#34;query&amp;#34;: {
&amp;#34;term&amp;#34;: {
&amp;#34;firstname&amp;#34;: {
&amp;#34;value&amp;#34;: &amp;#34;Amber&amp;#34;
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;結果： 為何找不到？&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;{
&amp;#34;took&amp;#34; : 0,
&amp;#34;timed_out&amp;#34; : false,
&amp;#34;_shards&amp;#34; : {
&amp;#34;total&amp;#34; : 1,
&amp;#34;successful&amp;#34; : 1,
&amp;#34;skipped&amp;#34; : 0,
&amp;#34;failed&amp;#34; : 0
},
&amp;#34;hits&amp;#34; : {
&amp;#34;total&amp;#34; : {
&amp;#34;value&amp;#34; : 0,
&amp;#34;relation&amp;#34; : &amp;#34;eq&amp;#34;
},
&amp;#34;max_score&amp;#34; : null,
&amp;#34;hits&amp;#34; : [ ]
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;透過預設分詞器查看 Amber 怎麼被分詞的&lt;/p&gt;
&lt;p&gt;命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET /_analyze
{
&amp;#34;analyzer&amp;#34;: &amp;#34;standard&amp;#34;,
&amp;#34;text&amp;#34;: [&amp;#34;Amber&amp;#34;]
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;ldquo;Amber&amp;rdquo; 被預設的 Standard 分詞器分詞時，結果如下&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;{
&amp;#34;tokens&amp;#34; : [
{
&amp;#34;token&amp;#34; : &amp;#34;amber&amp;#34;,
&amp;#34;start_offset&amp;#34; : 0,
&amp;#34;end_offset&amp;#34; : 5,
&amp;#34;type&amp;#34; : &amp;#34;&amp;lt;ALPHANUM&amp;gt;&amp;#34;,
&amp;#34;position&amp;#34; : 0
}
]
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果要搜尋大寫的 Amber，命令如下&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET /bank/_search?pretty
{
&amp;#34;query&amp;#34;: {
&amp;#34;term&amp;#34;: {
&amp;#34;firstname.keyword&amp;#34;: {
&amp;#34;value&amp;#34;: &amp;#34;Amber&amp;#34;
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;在 filed 後面加 &amp;ldquo;.keyword&amp;rdquo;
keyword 代表不會被分詞器分詞&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;range&lt;span class="hx:absolute hx:-mt-20" id="range"&gt;&lt;/span&gt;
&lt;a href="#range" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET /bank/_search?pretty
{
&amp;#34;query&amp;#34;: {
&amp;#34;range&amp;#34;: {
&amp;#34;account_number&amp;#34;: {
&amp;#34;gte&amp;#34;: 20,
&amp;#34;lte&amp;#34;: 40
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;match&lt;span class="hx:absolute hx:-mt-20" id="match"&gt;&lt;/span&gt;
&lt;a href="#match" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET /bank/_search?pretty
{
&amp;#34;query&amp;#34;: {
&amp;#34;match&amp;#34;: {
&amp;#34;lastname&amp;#34;: &amp;#34;Molina&amp;#34;
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;Must, must_not, should&lt;span class="hx:absolute hx:-mt-20" id="must-must_not-should"&gt;&lt;/span&gt;
&lt;a href="#must-must_not-should" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;⽤於合併其他的查詢或複合查詢語句，也就是說複合語句之間可以巢狀，⽤來表⽰⼀個複雜的單 ⼀查詢。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;must： 必須符合條件&lt;/li&gt;
&lt;li&gt;must_not：必須不符合條件&lt;/li&gt;
&lt;li&gt;should：如果可能符合條件&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;must&lt;span class="hx:absolute hx:-mt-20" id="must"&gt;&lt;/span&gt;
&lt;a href="#must" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET /shakespeare/_search?pretty
{
&amp;#34;query&amp;#34;: {
&amp;#34;bool&amp;#34;: {
&amp;#34;must&amp;#34;: [
{
&amp;#34;match&amp;#34;: {
&amp;#34;speaker&amp;#34;: &amp;#34;KING&amp;#34;
}
},{
&amp;#34;match&amp;#34;: {
&amp;#34;text_entry&amp;#34;: &amp;#34;Have&amp;#34;
}
}
]
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;Query Aggregate&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;Metric(指標聚合)
&lt;ul&gt;
&lt;li&gt;會去計算最大最小 or 平均值的匯總函數。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bucket(桶聚合)
&lt;ul&gt;
&lt;li&gt;想成SQL的 group by ，滿足一些統計，ex. 男女比例或是國家人口&amp;hellip;等。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Matrix(矩陣聚合)
&lt;ul&gt;
&lt;li&gt;用於計算每一組文件欄中的統計資訊。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pipeline(管道聚合)
&lt;ul&gt;
&lt;li&gt;將上一次的聚合的結果，再進行一次聚合分析&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一般來說 Bucket 會配合 Matrix&lt;/p&gt;
&lt;p&gt;語法解釋&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET bank/_search?pretty
{
&amp;#34;aggs&amp;#34; [聚合]: {
&amp;#34;NAME&amp;#34;:[自訂整合名稱]{
&amp;#34;AGG_TYPE&amp;#34; [聚合總類]: {
field : column
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;練習&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET bank/_search?pretty
{
&amp;#34;aggs&amp;#34;: {
&amp;#34;group_by_state&amp;#34;: {
&amp;#34;terms&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;state.keyword&amp;#34;
}
}
}
}
# size: 0 可以關掉值的顯示
GET bank/_search?pretty
{ &amp;#34;size&amp;#34;: 0,
&amp;#34;aggs&amp;#34;: {
&amp;#34;group_by_age&amp;#34;: {
&amp;#34;range&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;age&amp;#34;
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET bank/_search?pretty
{ &amp;#34;size&amp;#34;: 0,
&amp;#34;aggs&amp;#34;: {
&amp;#34;group_by_age&amp;#34;: {
&amp;#34;range&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;age&amp;#34;,
&amp;#34;ranges&amp;#34;: [
{
&amp;#34;to&amp;#34;: 20
},
{
&amp;#34;from&amp;#34;: 20,
&amp;#34;to&amp;#34;: 30
},
{
&amp;#34;from&amp;#34;: 30,
&amp;#34;to&amp;#34;: 40
},
{
&amp;#34;key&amp;#34;: &amp;#34;大於等於40&amp;#34;,
&amp;#34;from&amp;#34;: 40
}
]
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET bank/_search?pretty
{
&amp;#34;size&amp;#34;: 0,
&amp;#34;aggs&amp;#34;: {
&amp;#34;group_by_state&amp;#34;: {
&amp;#34;terms&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;state.keyword&amp;#34;
},
&amp;#34;aggs&amp;#34;: {
&amp;#34;group_by_gender&amp;#34;: {
&amp;#34;terms&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;gender.keyword&amp;#34;
}
}
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Query Metrics&lt;span class="hx:absolute hx:-mt-20" id="query-metrics"&gt;&lt;/span&gt;
&lt;a href="#query-metrics" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;計算平均存款&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET bank/_search?pretty
{
&amp;#34;size&amp;#34;: 0,
&amp;#34;aggs&amp;#34;: {
&amp;#34;group_by_state&amp;#34;: {
&amp;#34;terms&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;state.keyword&amp;#34;
},
&amp;#34;aggs&amp;#34;: {
&amp;#34;avg_balance&amp;#34;: {
&amp;#34;avg&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;balance&amp;#34;
}
}
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;索引名稱bank，以欄位state進⾏分組，統計各州數量，再依年齡計算不重複的數字共有幾個 Distinct&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET bank/_search?pretty
{
&amp;#34;size&amp;#34;: 0,
&amp;#34;aggs&amp;#34;: {
&amp;#34;group_by_state&amp;#34;: {
&amp;#34;terms&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;state.keyword&amp;#34;
},
&amp;#34;aggs&amp;#34;: {
&amp;#34;age_distinct&amp;#34;: {
&amp;#34;cardinality&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;age&amp;#34;
}
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Query Pipline&lt;span class="hx:absolute hx:-mt-20" id="query-pipline"&gt;&lt;/span&gt;
&lt;a href="#query-pipline" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;索引bank，以欄位state進⾏分組，計算各州的平均存款，並找出平均存款最低的州。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET bank/_search?pretty
{
&amp;#34;size&amp;#34;: 0,
&amp;#34;aggs&amp;#34;: {
&amp;#34;group_by_state&amp;#34;: {
&amp;#34;terms&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;state.keyword&amp;#34;
},
&amp;#34;aggs&amp;#34;: {
&amp;#34;avg_balance&amp;#34;: {
&amp;#34;avg&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;balance&amp;#34;
}
}
}
},
&amp;#34;min_balance_state&amp;#34;:{
&amp;#34;min_bucket&amp;#34;: {
&amp;#34;buckets_path&amp;#34;: &amp;#34;group_by_state&amp;gt;avg_balance&amp;#34;
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;索引logs*，以欄位@timestamp進⾏分組，依每⼩時為分組將bytes進⾏加總計。&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET logs*/_search?pretty
{
&amp;#34;size&amp;#34;: 0
, &amp;#34;aggs&amp;#34;: {
&amp;#34;per_hour&amp;#34;: {
&amp;#34;date_histogram&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;@timstomp&amp;#34;,
&amp;#34;interval&amp;#34;: &amp;#34;hour&amp;#34;
},
&amp;#34;aggs&amp;#34;: {
&amp;#34;sum_of_bytes&amp;#34;: {
&amp;#34;sum&amp;#34;: {
&amp;#34;field&amp;#34;: &amp;#34;bytes&amp;#34;
}
},
&amp;#34;cul_sum_of_bytes&amp;#34;:{
&amp;#34;cumulative_sum&amp;#34;: {
&amp;#34;buckets_path&amp;#34;: &amp;#34;sum_of_bytes&amp;#34;
}
}
}
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;GET /shakespeare/_search?pretty
{
&amp;#34;query&amp;#34;: {
&amp;#34;query_string&amp;#34;: {
&amp;#34;default_field&amp;#34;: &amp;#34;text_entry&amp;#34;,
&amp;#34;query&amp;#34;: &amp;#34;channel OR blood&amp;#34;
}
}
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h1&gt;Logstash&lt;/h1&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 下載 Logstash
$ wget https://artifacts.elastic.co/downloads/logstash/logstash-7.4.0.tar.gz
## 解壓縮 Logstash
$ tar -xzf logstash-7.4.0.tar.gz
## 切換目錄
$ cd ~/logstash-7.4.0
## 開啟 Logstash
$ ~/logstash-7.4.0/bin/logstash -e &amp;#39;input { stdin { } } output { stdout {} }’&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;
$ cat sample1.conf
input {
stdin {
}
}
filter {
kv {
value_split =&amp;gt; &amp;#34;=&amp;#34;
field_split =&amp;gt; &amp;#34;&amp;amp;?&amp;#34;
}
}
output {
stdout {
}
}
## 測試 `-t`
$ ../bin/logstash -f sample1.conf -t&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;Beats&lt;/h1&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 下載 Beats
$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.0-linux-x86_64.tar.gz
## 解壓縮 Beats
$ tar -xzf filebeat-7.4.0-linux-x86_64.tar.gz
## 切換目錄進 beats 的目錄
$ cd filebeat-7.4.0-linux-x86_64/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;系統工程&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-系統工程"&gt;&lt;/span&gt;
&lt;a href="#tags-%e7%b3%bb%e7%b5%b1%e5%b7%a5%e7%a8%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>hadoop 設定檔</title><link>https://blog.kubeantony.com/archive/data-platform/hadoop-%E8%A8%AD%E5%AE%9A%E6%AA%94/</link><pubDate>Sun, 07 Aug 2022 14:37:32 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/hadoop-%E8%A8%AD%E5%AE%9A%E6%AA%94/</guid><description>
&lt;h2&gt;JAVA 環境變數&lt;span class="hx:absolute hx:-mt-20" id="java-環境變數"&gt;&lt;/span&gt;
&lt;a href="#java-%e7%92%b0%e5%a2%83%e8%ae%8a%e6%95%b8" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ java -version
openjdk version &amp;#34;1.8.0-332&amp;#34;
OpenJDK Runtime Environment (build 1.8.0-332-b09)
OpenJDK 64-Bit Server VM (build 25.71-b09, mixed mode)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;hive 跑程式會需要用到 java&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $PATH
/opt/spark-3.2.2-bin-hadoop3.2/bin:/opt/spark-3.2.2-bin-hadoop3.2/sbin:/opt/openjdk-8u332-linux-x64/bin:/home/bigred/vmalpdt/bin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/hadoop-3.3.3/bin:/opt/hadoop-3.3.3/sbin:/opt/pig-0.17.0/bin:/opt/apache-hive-3.1.3-bin/bin:/opt/apache-zookeeper-3.6.3-bin/bin:/opt/hbase-2.4.13/bin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;我們在 linux 系統的任何目錄可以 run java 的命令是因為 Path 環境變數裡面有 &lt;code&gt;/opt/openjdk-8u332-linux-x64/bin&lt;/code&gt;這個目錄&lt;/li&gt;
&lt;li&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; $ which java
/opt/openjdk-8u332-linux-x64/bin/java&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;code&gt;hadoop-env.sh&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="hadoop-envsh"&gt;&lt;/span&gt;
&lt;a href="#hadoop-envsh" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
.......
export JAVA_HOME=/opt/openjdk-8u332-linux-x64
.......
export HADOOP_HEAPSIZE=512
........
export HADOOP_LOG_DIR=/tmp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;hadoop 要 run Java 程式，他不會咬 環境變數的 JAVA_HOME，他會看自己的&lt;code&gt;hadoop-env.sh&lt;/code&gt; 這個設定檔裡面的 JAVA_HOME 這個變數&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export HADOOP_HEAPSIZE=256&lt;/code&gt; ，hadoop run 程式處理資料的記憶體大小 256 mb
&lt;ul&gt;
&lt;li&gt;hadoop run 的程式有 : &lt;code&gt;NameNode&lt;/code&gt;, &lt;code&gt;SecondaryNameNode&lt;/code&gt;, &lt;code&gt;DataNode&lt;/code&gt;, &lt;code&gt;JobHistoryServer&lt;/code&gt;, &lt;code&gt;ResourceManager&lt;/code&gt;, &lt;code&gt;NodeManager&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HADOOP_LOG_DIR=/tmp&lt;/code&gt; ，&lt;code&gt;NameNode&lt;/code&gt; 或是 &lt;code&gt;SecondaryNameNode&lt;/code&gt; 運作有 bug 的時候，資料會存在這裡設定的目錄。&lt;/li&gt;
&lt;li&gt;ava 7 was end-of-lifed in April 2015, meaning Oracle would no longer publicly support it with security fixes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;壓縮命令解析&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ zip -r &amp;lt; 壓縮完的名字 &amp;gt; &amp;lt; 要壓縮的目錄 &amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;hdfs-site.xml&lt;span class="hx:absolute hx:-mt-20" id="hdfs-sitexml"&gt;&lt;/span&gt;
&lt;a href="#hdfs-sitexml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
.........
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;3&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.name.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;file:/home/bigred/nn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.datanode.data.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;file:/home/bigred/dn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.permissions.superusergroup&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;bigboss&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
...........
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt; &amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;&lt;/code&gt; ，設定 1 個 block 存幾分，預設是 3 份，如果沒有 3 台 DataNode ，Hadoop 絕對 run 不起來。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dfs.namenode.name.dir&lt;/code&gt; ，設定 &lt;code&gt;nameNode&lt;/code&gt; 儲存資料的目錄位置&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dfs.datanode.data.dir&lt;/code&gt; ，設定 &lt;code&gt;dataNode&lt;/code&gt; 儲存資料的目錄位置&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dfs.permissions.superusergroup&lt;/code&gt; ，設定 hadoop 的管理群組&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;core-site.xml&lt;span class="hx:absolute hx:-mt-20" id="core-sitexml"&gt;&lt;/span&gt;
&lt;a href="#core-sitexml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
........
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;fs.defaultFS&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hdfs://dtm1:8020&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;fs.default.name&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hdfs://dtm1:8020&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;io.compression.codecs&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.SnappyCodec&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;hadoop.user.group.static.mapping.overrides&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;rbean=soup;gbean=soup,rice;ybean=rice&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fs.defaultFS&lt;/code&gt; ，設定 Namenode 要在哪一台電腦跑，它的 port 號 : 8020 ( 國際標準 )，給新的好朋友使用&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fs.default.name&lt;/code&gt; ，設定內容同上，不過這裡的設定項目是給舊的老朋友使用&lt;/li&gt;
&lt;li&gt;&lt;code&gt;io.compression.codecs&lt;/code&gt; ， hadoop 能接受的壓縮技術，尤其是 &lt;code&gt;bzip2&lt;/code&gt; 很重要&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hadoop.user.group.static.mapping.overrides&lt;/code&gt; ，&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>認識 資料科技 筆記連結</title><link>https://blog.kubeantony.com/archive/data-platform/%E8%AA%8D%E8%AD%98-%E8%B3%87%E6%96%99%E7%A7%91%E6%8A%80-%E7%AD%86%E8%A8%98%E9%80%A3%E7%B5%90/</link><pubDate>Sun, 07 Aug 2022 14:37:18 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E8%AA%8D%E8%AD%98-%E8%B3%87%E6%96%99%E7%A7%91%E6%8A%80-%E7%AD%86%E8%A8%98%E9%80%A3%E7%B5%90/</guid><description>
&lt;p&gt;&lt;a
href="https://blog.kubeantony.com/data-platform/datatechnology-overview/"&gt;DataTechnology - Overview&lt;/a&gt;
&lt;a
href="https://drive.google.com/drive/folders/10M6OGraNPO3slnS36N0TN9oqqJyKhvOY?usp=sharing"target="_blank" rel="noopener"&gt;手動建立 hadoop 連結&lt;/a&gt;
&lt;a
href="https://blog.kubeantony.com/data-platform/hadoop-%e8%a8%ad%e5%ae%9a%e6%aa%94/"&gt;手動建立 hadoop 筆記&lt;/a&gt;
&lt;a
href="https://blog.kubeantony.com/data-platform/apache-spark/"&gt;Apache Spark&lt;/a&gt;&lt;/p&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>Create VM-US2204</title><link>https://blog.kubeantony.com/archive/data-platform/create-vm-us2204/</link><pubDate>Sun, 07 Aug 2022 14:36:56 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/create-vm-us2204/</guid><description>
&lt;p&gt;目錄 :&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;認識 DT VM 硬體規格&lt;span class="hx:absolute hx:-mt-20" id="認識-dt-vm-硬體規格"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%8d%e8%ad%98-dt-vm-%e7%a1%ac%e9%ab%94%e8%a6%8f%e6%a0%bc" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Administrator 與 Student
&lt;ul&gt;
&lt;li&gt;規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Ubuntu Server 22.04 LTS&lt;/li&gt;
&lt;li&gt;記憶體 : 6 GB&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 400 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 所在的 Windows 主機 ip + 100&lt;/li&gt;
&lt;li&gt;Hostname : dta1,, dts( 1..3 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;dtm1, dtm2
&lt;ul&gt;
&lt;li&gt;規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Ubuntu Server 22.04 LTS&lt;/li&gt;
&lt;li&gt;記憶體 : 4 G&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 400 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 所在的 Windows 主機 ip + 100&lt;/li&gt;
&lt;li&gt;Hostname : dtm( 1, 2 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font color=blue&gt;以上 6 台 VM 分別建立在 S2 和 S4 ( Switch ) 連接的所有 Windows 電腦 &lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data node + Node Manager
&lt;ul&gt;
&lt;li&gt;VM 規格 :
&lt;ul&gt;
&lt;li&gt;作業系統 : Ubuntu Server 22.04 LTS&lt;/li&gt;
&lt;li&gt;記憶體 : 10 GB&lt;/li&gt;
&lt;li&gt;CPU : 2 C&lt;/li&gt;
&lt;li&gt;硬碟 : 800 GB&lt;/li&gt;
&lt;li&gt;網路模式 : bridge&lt;/li&gt;
&lt;li&gt;ip : 所在的 Windows 主機 ip + 100&lt;/li&gt;
&lt;li&gt;Hostname : dtw( 1..6 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font color=blue&gt;以上 6 台 VM 分別建立在 S3 和 S5 ( Switch ) 連接的所有 Windows 電腦 &lt;/font&gt;&lt;/p&gt;
&lt;h2&gt;建立 dta1, dts1..3, dtm1..2 的母機&lt;span class="hx:absolute hx:-mt-20" id="建立-dta1-dts13-dtm12-的母機"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-dta1-dts13-dtm12-%e7%9a%84%e6%af%8d%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;因 Data node + Node Manager 的虛擬機 硬碟儲存空間需求較大，故建立 2 台 VM 當作母機。&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下載 &lt;a
href="https://ftp.ubuntu-tw.org/ubuntu-releases/22.04/ubuntu-22.04-live-server-amd64.iso"target="_blank" rel="noopener"&gt;Ubuntu Server 22.04 LTS ( 點我可直接下載 )&lt;/a&gt;
網址 : &lt;code&gt;https://ftp.ubuntu-tw.org/ubuntu-releases/22.04/ubuntu-22.04-live-server-amd64.iso&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;打開 VMware Workstation 16 Player，點選 &amp;ldquo;Create a New Virtual Machine&amp;rdquo;
&lt;img src="https://i.imgur.com/HT8JaoH.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;選擇 &amp;ldquo;I will install the operating system later.&amp;rdquo; ，再點 &amp;ldquo;Next &amp;gt;&amp;rdquo;
&lt;img src="https://i.imgur.com/JfwJIyY.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;選 &amp;ldquo;Linux&amp;rdquo; ，在 Version 點下拉選單找到&amp;quot;Ubuntu 64-bit&amp;quot;，再點 &amp;ldquo;Next &amp;gt;&amp;rdquo;
&lt;img src="https://i.imgur.com/rDTEd7o.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;Virtual Machine Name : &lt;code&gt;US2204&lt;/code&gt;
Location : &lt;code&gt;C:\Users\$USER\US2204&lt;/code&gt;
填好後，點 &amp;ldquo;Next &amp;gt;&amp;rdquo;
&lt;img src="https://i.imgur.com/yM3k6nQ.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;VM 的硬碟設定
aximum disk size (GB) : &lt;strong&gt;400&lt;/strong&gt; GB
選 &amp;ldquo;Store virtual disk as a single file&amp;rdquo;
&lt;img src="https://i.imgur.com/eBJQczg.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;點 &amp;ldquo;Customize Hardware&amp;rdquo;
&lt;img src="https://i.imgur.com/oVEWRxq.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;設定 memory &amp;ndash; &amp;gt; 6144 mb
&lt;img src="https://i.imgur.com/mSf5ZsA.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;點 &amp;ldquo;New CD/DVD (SATA)&amp;rdquo; ，選 &amp;ldquo;Use ISO image file:&amp;rdquo; ，再點 &amp;ldquo;Browse&amp;hellip;&amp;rdquo;
&lt;img src="https://i.imgur.com/0SbY4NJ.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;選擇剛剛下載的 &amp;ldquo;ubuntu-22.04-live-server-amd64.iso&amp;quot;後，按 &amp;ldquo;開啟&amp;rdquo;
&lt;img src="https://i.imgur.com/fhiNfOS.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;選擇 &amp;ldquo;Network Adapter&amp;rdquo;，再選&amp;quot;Bridged: Connected directly to the physical network&amp;rdquo;
&lt;img src="https://i.imgur.com/jb1Vczf.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;選擇 &amp;ldquo;USB Controller&amp;rdquo;，按 Remove
&lt;img src="https://i.imgur.com/RZZX8gc.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;選擇 &amp;ldquo;Sound Card&amp;rdquo;，按 Remove
&lt;img src="https://i.imgur.com/nmNT4a2.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;選擇 &amp;ldquo;Printer&amp;rdquo;，按 Remove
&lt;img src="https://i.imgur.com/hKzug1l.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;按 &amp;ldquo;close&amp;rdquo;
&lt;img src="https://i.imgur.com/Qi6btgV.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;點 &amp;ldquo;Finsh&amp;rdquo;
&lt;img src="https://i.imgur.com/fAeqN6m.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;建立 dtw1..6 系列的母機&lt;span class="hx:absolute hx:-mt-20" id="建立-dtw16-系列的母機"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-dtw16-%e7%b3%bb%e5%88%97%e7%9a%84%e6%af%8d%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;前 4 個步驟同上&lt;/p&gt;
&lt;p&gt;第 5 步驟 ，Virtual Machine Name : &lt;code&gt;US2204DN&lt;/code&gt;
Location : &lt;code&gt;C:\Users\$USER\US2204DN&lt;/code&gt;
填好後，點 &amp;ldquo;Next &amp;gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;第 6 步驟 ，VM 的硬碟設定須設為 Maximum disk size (GB) : &lt;strong&gt;800&lt;/strong&gt; GB，
選 &amp;ldquo;Store virtual disk as a single file&amp;rdquo;&lt;/p&gt;
&lt;p&gt;其他步驟皆相同。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;{%hackmd HQ07S1WXTzCUB1p6UPDxjA %}&lt;/p&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>配置 YARN 運算資源前需具備的 CPU 基礎觀念</title><link>https://blog.kubeantony.com/archive/data-platform/%E9%85%8D%E7%BD%AE-yarn-%E9%81%8B%E7%AE%97%E8%B3%87%E6%BA%90%E5%89%8D%E9%9C%80%E5%85%B7%E5%82%99%E7%9A%84-cpu-%E5%9F%BA%E7%A4%8E%E8%A7%80%E5%BF%B5/</link><pubDate>Fri, 05 Aug 2022 06:22:54 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E9%85%8D%E7%BD%AE-yarn-%E9%81%8B%E7%AE%97%E8%B3%87%E6%BA%90%E5%89%8D%E9%9C%80%E5%85%B7%E5%82%99%E7%9A%84-cpu-%E5%9F%BA%E7%A4%8E%E8%A7%80%E5%BF%B5/</guid><description>
&lt;p&gt;&lt;img src="https://i.imgur.com/SkjZIGt.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中央處理器 （英語：Central Processing Unit，縮寫：CPU）&lt;/li&gt;
&lt;li&gt;CPU 型號 : i7-8700 6C/12T&lt;/li&gt;
&lt;li&gt;插槽 : 1 ，實體的電腦可以插幾顆 CPU，一般家用電腦為 1 ，伺服器的機器可能會有 1 以上&lt;/li&gt;
&lt;li&gt;核心數 Core : 6 ，可以當成 6 個 CPU 來看&lt;/li&gt;
&lt;li&gt;邏輯處理器 thread : 12 ，可以讓 CPU 的一個核心平行處理兩個程式，但有一個條件，程式裡面有用到 &lt;strong&gt;HyperThreating ( 超執行緒， 簡稱 : HT )&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;HT ，在 CPU 內部僅複製必要的資源，讓兩個執行緒可以在一單位時間內同時執行，就好像真的有實體雙核心，能進行雙執行緒運作。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;多個程式會分時( Time-sharing )共用實體 CPU
&lt;ul&gt;
&lt;li&gt;以實體 Windows 電腦為例，由&amp;quot;應用程式&amp;quot;，&amp;ldquo;背景處理程序&amp;rdquo;，&amp;ldquo;Windows 處理程序&amp;rdquo;， 三個部份的程式會來分時共用一顆 CPU&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a
href="https://jenifers001d.github.io/2020/08/04/%E9%9B%BB%E8%85%A6%E7%9F%A5%E8%AD%98/what-is-core-and-thread/"target="_blank" rel="noopener"&gt;電腦的核心 (Core) 和執行緒 (Tread) 文章介紹連結&lt;/a&gt;
&lt;a
href="https://www.youtube.com/watch?v=Ya1ZDNNlIUc&amp;amp;ab_channel=kaicode"target="_blank" rel="noopener"&gt;【CPU】什么是CPU的核心（Core）和线程（Thread）？影片連結&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;提問 :　為何 VMware 的 Core 可以選到 12 ?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/mzrBImb.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;因為 VMware 這個程式有啟動 HyperThreating ( 超執行緒 ) ，所以可以動用到 CPU 的 12 Threads&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/276PWrM.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;c1 ~ c4&lt;/code&gt; ，為 cpu 的 4 個 core&lt;/li&gt;
&lt;li&gt;&lt;code&gt;100&lt;/code&gt; ，cpu 核心執行的單元 100&lt;/li&gt;
&lt;li&gt;&lt;code&gt;os&lt;/code&gt;， windows 10 作業系統&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p1 ~ p9&lt;/code&gt;，process 1 ~ 9&lt;/li&gt;
&lt;li&gt;每一個 process 都會透過作業系統裡面的管理器，來使用 cpu。( 如果要深入探討請修 成大 黃敬群老師 的作業系統課程 )&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://youtube.com/playlist?list=PL6S9AqLQkFpongEA75M15_BlQBC9rTdd8"target="_blank" rel="noopener"&gt;成大 黃敬群老師 在 YT 的影片連結&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p1 c1 20&lt;/code&gt;，process 1 分配到 cpu 第一個核心 20 的運作資源&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p2 c1 5&lt;/code&gt;，process 2 分配到 cpu 第一個核心 5 的運作資源，其他依此類推&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VM1&lt;/code&gt;，因 VM 設定使用兩個核心，所以會去跟作的核心( kernel )要 cpu 的運算資源，可能會得到 cpu 第一個核心 30 的運算資源和 第四個核心 20 的運作資源&lt;/li&gt;
&lt;li&gt;:bulb: 注意，以上 cpu 資源上的分配，為同一個時點的配置，隨著時間軸的變化，在不同的時間點會有不同的資源分配&lt;/li&gt;
&lt;li&gt;:bulb: 所有的程序 (process) ，會一起分時共用一顆 cpu&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>Hadoop - MapReduce - YARN</title><link>https://blog.kubeantony.com/archive/data-platform/hadoop-mapreduce-yarn/</link><pubDate>Thu, 04 Aug 2022 15:04:52 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/hadoop-mapreduce-yarn/</guid><description>
&lt;hr&gt;
&lt;h2&gt;YARN 分散運算系統運作圖&lt;span class="hx:absolute hx:-mt-20" id="yarn-分散運算系統運作圖"&gt;&lt;/span&gt;
&lt;a href="#yarn-%e5%88%86%e6%95%a3%e9%81%8b%e7%ae%97%e7%b3%bb%e7%b5%b1%e9%81%8b%e4%bd%9c%e5%9c%96" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;img src="https://i.imgur.com/8tkEvDi.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;啟動 YARN 系統， &lt;code&gt;Node Manager&lt;/code&gt; 會透過網路一起向 &lt;code&gt;Resource Mananger&lt;/code&gt; 報告，幾 G 的記憶體和 幾 core 的 cpu ，每台 &lt;code&gt;Node Manager&lt;/code&gt; 都會透過網路報告自己所在主機的運算資源，此時 &lt;code&gt;Resource Manager&lt;/code&gt; 就會知道 YARN 的總運算資源。&lt;/li&gt;
&lt;li&gt;&lt;img src="https://i.imgur.com/Oe4tugW.png" alt="" loading="lazy" /&gt;&lt;/li&gt;
&lt;li&gt;rbean 使用者登入 dta1 這台電腦，打&lt;code&gt; hive &amp;lt;SQL command&amp;gt;&lt;/code&gt;，hive 會幫我們把 SQL Command 翻譯成 &lt;code&gt;mapreduce&lt;/code&gt; 的 Java 程式 ( &lt;code&gt;*.jar&lt;/code&gt; )。&lt;/li&gt;
&lt;li&gt;Client 端會在 &lt;code&gt;mapred-site.xml&lt;/code&gt; 設定自己的程式要用幾個 cpu ,多少 memory&lt;/li&gt;
&lt;li&gt;程式設計師需要知道自己執行的程式會需要多少運算資源&lt;/li&gt;
&lt;li&gt;每個 &lt;code&gt;Node Manager&lt;/code&gt; 會讀取 &lt;code&gt;yarn-site.xml&lt;/code&gt; ，裡面自己可以用的運算資源&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Resource Manager&lt;/code&gt; 會讀取 &lt;code&gt;yarn-site.xml&lt;/code&gt;，裡面的 Container 可以用多少 mwmory, 幾 c 的 core&lt;/li&gt;
&lt;li&gt;程式產生後，會丟給在 dtm2 主機上的 &lt;code&gt;Resource Manager&lt;/code&gt; ，請它幫忙啟動 &lt;code&gt;App Master&lt;/code&gt; ( 也是 Java 程式 )&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App Master&lt;/code&gt; 會去詢問 &lt;code&gt;Name Node&lt;/code&gt; 得知要分析的資料有幾個 block ，得知有 6 個 block 後，會告訴 &lt;code&gt;Resource Manager&lt;/code&gt; 需要 6 支程式，一個 block 需要一支 map 程式來處理，&lt;code&gt;Resource Manager&lt;/code&gt; 會告訴 &lt;code&gt;Node Manager&lt;/code&gt; 啟動 7 台 Container ，請他們去找 &lt;code&gt;App Master&lt;/code&gt; 工作，處理後的資料會彙總給 reduce 程式來分析，分析的結果會由 &lt;code&gt;App Master&lt;/code&gt; 回報給 &lt;code&gt;Jobhistory Server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Container | JVM
&lt;ul&gt;
&lt;li&gt;寫好的 Java 程式，副檔名 &lt;code&gt;*.java&lt;/code&gt; ，經過 Javac 編譯產生的程式，副檔名 &lt;code&gt;*.class&lt;/code&gt; ，這時候的程式碼會變成 byte code ，&lt;/li&gt;
&lt;li&gt;執行 &lt;code&gt;*.class&lt;/code&gt;，會透過 class Loader 將程式放入 JVM&lt;/li&gt;
&lt;li&gt;Static 內會有 Blueprint ( 藍圖 )，藍圖可以 new 很多 object&lt;/li&gt;
&lt;li&gt;string | 在 Java 裡面是字串物件&lt;/li&gt;
&lt;li&gt;Method 集合物件 ( 變數 )，裡面存 Data | 用來處理資料，在 heap 裡面 ( Java 的記憶體空間 ，一定會大於 128 mb )&lt;/li&gt;
&lt;li&gt;heap 的大小由 &lt;code&gt;-xmx&lt;/code&gt; 這個參數來設定，他會決定程式執行時用到的記憶體大小&lt;/li&gt;
&lt;li&gt;Stack | 當我們呼叫 Method 時，參數的資料暫存在這&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;檢視 YARN 總量運算資源&lt;span class="hx:absolute hx:-mt-20" id="檢視-yarn-總量運算資源"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-yarn-%e7%b8%bd%e9%87%8f%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 dta1 執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -s http://dtm2:8088/ws/v1/cluster/metrics | jq | grep -E &amp;#34;totalMB|totalVirtualCores&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dtm2:8088&lt;/code&gt;，&lt;code&gt;dtm2&lt;/code&gt; 這台主機上面跑的 &lt;code&gt;Resource Manager&lt;/code&gt; 這支 Java 程式，他開的 port number : 8088。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;metrics&lt;/code&gt;，劑量的意思。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jq&lt;/code&gt;，json query&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; &amp;#34;totalMB&amp;#34;: 6144,
&amp;#34;totalVirtualCores&amp;#34;: 6,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;:bulb: YARN 系統內定每部 &lt;code&gt;Node Manager&lt;/code&gt; 的記憶體為 8G, CPU 為 8 Core&lt;/p&gt;
&lt;h3&gt;設定 YARN 總量運算資源&lt;span class="hx:absolute hx:-mt-20" id="設定-yarn-總量運算資源"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a-yarn-%e7%b8%bd%e9%87%8f%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/TPklwgJ.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat vmalpdt/hdp33/conf/hadoop-3.3.3/yarn-site.xml
......
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.memory-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2048&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.cpu-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
.......&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將記憶體改成 6144 mb&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano vmalpdt/hdp33/conf/hadoop-3.3.3/yarn-site.xml
......
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.memory-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;6144&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.cpu-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
.......&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重新佈署新的設定檔到每台機器&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ dtconf 33&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;停止 yarn 運算系統&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ stopyarn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;再次 開啟 yarn 運算系統&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ startyarn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查是否符合預期&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ curl -s http://dtm2:8088/ws/v1/cluster/metrics | jq | grep -E &amp;#34;totalMB|totalVirtualCores&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; &amp;#34;totalMB&amp;#34;: 18432,
&amp;#34;totalVirtualCores&amp;#34;: 6,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;總量的運算資源，由多台 &lt;code&gt;Node Manager&lt;/code&gt; 相加得出
yarn 的總資源得出後，執行的那隻程式可以用幾 cpu 幾 memory 也可以設定 !&lt;/p&gt;
&lt;h3&gt;node manager 的運算資源如何規劃 ?&lt;span class="hx:absolute hx:-mt-20" id="node-manager-的運算資源如何規劃-"&gt;&lt;/span&gt;
&lt;a href="#node-manager-%e7%9a%84%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90%e5%a6%82%e4%bd%95%e8%a6%8f%e5%8a%83-" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;先得出 &lt;code&gt;Node Manager&lt;/code&gt; 所在主機的運算資源 ( CPU 幾 C 幾 T，memory 幾 G )，假設現在得到的是 4 G 的記憶體和 2 C 的 CPU 可以用。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Node Manager&lt;/code&gt; 的運算資源如果規劃 memory 3 G ，cpu 3 Core 。&lt;/li&gt;
&lt;li&gt;假設&lt;strong&gt;一支程式&lt;/strong&gt;最多只能用一個核心，memory ( 384 ~ 896 mb )&lt;/li&gt;
&lt;li&gt;為何 CPU 可以超過 ? 因為這裡設定的運算資源，是針對程式可以用到多少記憶體和 CPU 的運算資源做規劃， CPU 核心數代表的是，程式在執行時會用到的 cpu 核心數。&lt;/li&gt;
&lt;li&gt;CPU 設定 3 Core ，代表這台電腦最多可以同時執行 3 支程式，這 3 支程式會分時共用 2 個核心數，所以 ok ，沒有問題。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Node Manager&lt;/code&gt; cpu core 的數字，決定權在於&lt;strong&gt;實體 cpu 夠不夠力&lt;/strong&gt;，以及&lt;strong&gt;程式動用到的運算&lt;/strong&gt;複不複雜來判斷。&lt;/li&gt;
&lt;li&gt;為何記憶體設 3 G ?&lt;/li&gt;
&lt;li&gt;其實設這樣已經很極限，要留記憶體空間給所在電腦主機上的其他程式用，如果全部用滿，電腦當場卡在那給你看。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;設定單一 Container ( 程式 ) 可用運算資源&lt;span class="hx:absolute hx:-mt-20" id="設定單一-container--程式--可用運算資源"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a%e5%96%ae%e4%b8%80-container--%e7%a8%8b%e5%bc%8f--%e5%8f%af%e7%94%a8%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/rOO96by.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;memory 384 mb | 設給 &lt;code&gt;map&lt;/code&gt; &lt;code&gt;reduce&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;memory 896 mb | 設給 &lt;code&gt;spark&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat vmalpdt/hdp33/conf/hadoop-3.3.3/yarn-site.xml
........
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.minimum-allocation-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.maximum-allocation-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;896&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.minimum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.maximum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
..........&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;程式透過 yarn 系統跑，記憶體被限制在 384 ~ 896 mb, cpu 1 c&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;程式指定 run 1 顆 cpu 的 core ，並不等於 cpu 的那 1 顆 core 就會霸佔 run 這支程式&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;在大企業做系統工程，要注意發電機 and 大樓結構和水塔 ，了解整個大樓的結構&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;練習 規劃 Hadoop Cluster 的運算資源&lt;span class="hx:absolute hx:-mt-20" id="練習-規劃-hadoop-cluster-的運算資源"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92-%e8%a6%8f%e5%8a%83-hadoop-cluster-%e7%9a%84%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/keBMPjB.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;Mapreduce 叢集運作架構圖&lt;span class="hx:absolute hx:-mt-20" id="mapreduce-叢集運作架構圖"&gt;&lt;/span&gt;
&lt;a href="#mapreduce-%e5%8f%a2%e9%9b%86%e9%81%8b%e4%bd%9c%e6%9e%b6%e6%a7%8b%e5%9c%96" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/w7WS6a4.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mapreduce | programing model， 它的語言 Java
&lt;ul&gt;
&lt;li&gt;程式執行才會啟動， 程式分析結束， Mapreduce 停止。&lt;/li&gt;
&lt;li&gt;mapreduce 處理資料的區塊稱為 split， Default 預設值 = 1 個 blcok ( 128 m )&lt;/li&gt;
&lt;li&gt;&lt;code&gt;map&lt;/code&gt; 程式 | 擷取 ( 可以想成 cut ) and 過濾 ( 可以想成 grep )， 把要分析的資料拉出來
&lt;ul&gt;
&lt;li&gt;擷取過濾後的資料，會存在小白區塊，在該 host 主機的硬碟&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Shuffle&lt;/code&gt; | Java 程式 ，由 hadoop 團隊鑽寫
&lt;ul&gt;
&lt;li&gt;將多個小白區塊，透過網路，彙整 ( merge | 分類、排序 ) 到一台工作機的大白區塊&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reduce&lt;/code&gt; 程式 | 分析大白區塊的資料
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;reduce&lt;/code&gt; 可以用的記憶體規格，在 &lt;code&gt;mapred-site.xml&lt;/code&gt; 和 &lt;code&gt;yarn-site.xml&lt;/code&gt; 設定&lt;/li&gt;
&lt;li&gt;實務通常設定 16 G&lt;/li&gt;
&lt;li&gt;分析後的結果會再存回 hdfs 分散式檔案系統中&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;設定 MapReduce Job 的運算資源&lt;span class="hx:absolute hx:-mt-20" id="設定-mapreduce-job-的運算資源"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a-mapreduce-job-%e7%9a%84%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat /opt/hadoop-3.3.3/etc/hadoop/mapred-site.xml
..........
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.reduce.memory.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;512&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.reduce.java.opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx384m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.map.memory.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.map.java.opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx256m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
........&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mapreduce.reduce.memory.mb&lt;/code&gt;，設定 &lt;code&gt;reduce&lt;/code&gt; 程式可以用 512 mb 的記憶體空間&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mapreduce.reduce.java.opts&lt;/code&gt;，設定 &lt;code&gt;reduce&lt;/code&gt; 處理資料的記憶體空間站 384/512 mb&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mapreduce.map.memory.mb&lt;/code&gt;，設定 &lt;code&gt;map&lt;/code&gt; 程式在執行時記憶體可以用 384 mb&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mapreduce.map.java.opts&lt;/code&gt;，設定 &lt;code&gt;map&lt;/code&gt; 程式處理資料的記憶體空間站 256/384 mb&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:bulb: 一般 &lt;code&gt;reduce&lt;/code&gt; 設定為 &lt;code&gt;map&lt;/code&gt; 的兩倍。
:bulb: Just make sure you set java.opts to 20-25% less than memory.mb
:bulb: &lt;code&gt;reduce&lt;/code&gt; 是做分析的，所以記憶體要大一點
:bulb: &lt;code&gt;map&lt;/code&gt; 是做資料的擷取和過濾，記憶體不需要很大&lt;/p&gt;
&lt;p&gt;修改&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 設定 reduce 記憶體需求, 只需修改 dta1 主機的 mapred-site.xml 設定檔
$ sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml
..........
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.reduce.memory.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;512&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.reduce.java.opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx400m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.map.memory.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.map.java.opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx256m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
........&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;因程式在 Client 端產生，故 &lt;code&gt;mapred-site.xml&lt;/code&gt; 是給 hive 和 pig 在讀取的，而這個設定檔一定在 dta1 這邊設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yarn-site.xml&lt;/code&gt; ，給 dtm2 的 &lt;code&gt;resource manager&lt;/code&gt; 和 所有 &lt;code&gt;node manager&lt;/code&gt; 讀取&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 在 dta1 終端機執行以下命令
$ cp vmalpdt/hdp210/bin/jpslog.sh vmalpdt/hdp33/bin/
$ cp vmalpdt/hdp210/bin/maxjps.sh vmalpdt/hdp33/bin/
$ cp vmalpdt/hdp210/bin/startjps vmalpdt/hdp33/bin/
$ cp vmalpdt/hdp210/bin/startmaxctn vmalpdt/hdp33/bin/
# 開啟收集資料
$ startjps
# 測試程式
$ yarn jar /opt/hadoop-3.3.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar pi 2 100000&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;*.jar&lt;/code&gt; ，人家寫好的 java 程式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pi&lt;/code&gt; ，計算 pi 值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2&lt;/code&gt; 產生兩個 &lt;code&gt;map&lt;/code&gt; 程式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;100000&lt;/code&gt; | 座標&lt;/li&gt;
&lt;li&gt;reduce 會幫我們處理和分析 &lt;code&gt;examples-3.3.3.jar&lt;/code&gt; 的資料&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;WARNING: YARN_LOG_DIR has been replaced by HADOOP_LOG_DIR. Using value of YARN_LOG_DIR.
Number of Maps = 2
Samples per Map = 100000
Wrote input for Map #0
Wrote input for Map #1
Starting Job
Job Finished in 19.79 seconds
Estimated value of Pi is 3.14118000000000000000&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;停止收集&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ stopjps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;dtw1&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;dtw2&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;11:53:34
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;64795&lt;/span&gt; YarnChild 256m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;11:53:38
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;65282&lt;/span&gt; YarnChild 384m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;dtw3&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;11:53:26
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;63279&lt;/span&gt; MRAppMaster 256m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;11:53:33
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;64159&lt;/span&gt; YarnChild 256m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;63279&lt;/span&gt; MRAppMaster 256m
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;11:53:36
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;63279&lt;/span&gt; MRAppMaster 256m&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;MRAppMaster | Map Reduce App Master
&lt;ul&gt;
&lt;li&gt;會隨機出現在 &lt;code&gt;Node Manager&lt;/code&gt; 的主機，它一定第一個執行，最後一個離開&lt;/li&gt;
&lt;li&gt;在 heap 裡，記憶體大小 256 m&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Yarnchild | 這裡的 Yarnchild 由 &lt;code&gt;map&lt;/code&gt; + &lt;code&gt;reduce&lt;/code&gt; 組成 ( 圖裡的 Container )
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;YarnChild 256m&lt;/code&gt;，2 個 &lt;code&gt;map&lt;/code&gt; 程式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;YarnChild 384m&lt;/code&gt;，1 個 &lt;code&gt;reduce&lt;/code&gt; 程式&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;以處理資料量 1 TB 為例 :
&lt;ul&gt;
&lt;li&gt;1 TB = 1024 * 1024 = 1,048,576 mb&lt;/li&gt;
&lt;li&gt;1,048,576 mb / 128 = 8192 個 block&lt;/li&gt;
&lt;li&gt;8192 block &amp;ndash; &amp;gt; 需要 8192 支程式來處理&lt;/li&gt;
&lt;li&gt;MRAppMaster &amp;mdash;&amp;gt; 需要 512 mb 來紀錄 8192 支程式的資訊 ( 512 mb 由老師實戰得出 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;測試 YARN Container 最大的總執行量&lt;span class="hx:absolute hx:-mt-20" id="測試-yarn-container-最大的總執行量"&gt;&lt;/span&gt;
&lt;a href="#%e6%b8%ac%e8%a9%a6-yarn-container-%e6%9c%80%e5%a4%a7%e7%9a%84%e7%b8%bd%e5%9f%b7%e8%a1%8c%e9%87%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 在 dta1 終端機執行以下命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 開始收集&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ startmaxctn
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 執行程式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hadoop jar /opt/hadoop-3.3.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar pi &lt;span class="m"&gt;15&lt;/span&gt; &lt;span class="m"&gt;300000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Number of &lt;span class="nv"&gt;Maps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Samples per &lt;span class="nv"&gt;Map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;300000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrote input &lt;span class="k"&gt;for&lt;/span&gt; Map &lt;span class="c1"&gt;#0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrote input &lt;span class="k"&gt;for&lt;/span&gt; Map &lt;span class="c1"&gt;#1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;............
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrote input &lt;span class="k"&gt;for&lt;/span&gt; Map &lt;span class="c1"&gt;#8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrote input &lt;span class="k"&gt;for&lt;/span&gt; Map &lt;span class="c1"&gt;#9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrote input &lt;span class="k"&gt;for&lt;/span&gt; Map &lt;span class="c1"&gt;#10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrote input &lt;span class="k"&gt;for&lt;/span&gt; Map &lt;span class="c1"&gt;#11&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Starting Job
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Job Finished in 86.116 seconds
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Estimated value of Pi is 3.14163444444444444444
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 停止收集&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ stopmaxctn
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;dtw1&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:26 -&amp;gt; Y:0 M:1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:34 -&amp;gt; Y:1 M:1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:35 -&amp;gt; Y:2 M:1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:40 -&amp;gt; Y:1 M:1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:40 -&amp;gt; Y:0 M:1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:41 -&amp;gt; Y:2 M:1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:45 -&amp;gt; Y:1 M:1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:45 -&amp;gt; Y:0 M:1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;dtw2&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:36 -&amp;gt; Y:2 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:36 -&amp;gt; Y:3 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:44 -&amp;gt; Y:2 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:44 -&amp;gt; Y:1 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:45 -&amp;gt; Y:3 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:51 -&amp;gt; Y:1 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;dtw3&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:36 -&amp;gt; Y:3 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:44 -&amp;gt; Y:2 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:44 -&amp;gt; Y:1 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:45 -&amp;gt; Y:3 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:51 -&amp;gt; Y:2 M:0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;19:52:51 -&amp;gt; Y:1 M:0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>DataTechnology - Overview</title><link>https://blog.kubeantony.com/archive/data-platform/datatechnology-overview/</link><pubDate>Thu, 04 Aug 2022 13:11:44 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/datatechnology-overview/</guid><description>
&lt;h2&gt;Information Technology&lt;span class="hx:absolute hx:-mt-20" id="information-technology"&gt;&lt;/span&gt;
&lt;a href="#information-technology" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/6gSEqDj.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OLTP｜線上交易處理｜Online transaction processing&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Transactional 代表 4 大動作
&lt;ul&gt;
&lt;li&gt;crud，新增,修改,刪除,查詢，多人同時去執行這幾個動作 create read update delete&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;lock
當有一個人在改資料內容，系統會鎖住那筆資料，等他改完，其他人才能看到那筆資料&lt;/li&gt;
&lt;li&gt;rollback
以銀行轉帳為例，當A帳戶轉錢給B帳戶的過程中，因為動物攻擊線路造成停電，Ａ轉錢轉到一半無法成功，這時候系統就會rollback倒退回去更改回去的狀態，A帳戶扣掉的錢會再次新增回來&lt;/li&gt;
&lt;li&gt;commit
完成，當A轉戶成功轉錢給B帳，Ａ帳戶扣錢，Ｂ帳戶前增加，這兩個動作完成，就會顯示commit&lt;/li&gt;
&lt;li&gt;OLTP 沒辦法同時處理很大量的資料，因為同時多人在做 Transaction 的 4 個動作，所以沒辦法同時處理很大量的資料&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;以上這些 Transaction 動作會由 Transcation Log Reader 紀錄。&lt;/li&gt;
&lt;li&gt;OLTP 應用程式 : MS SQL, MySQL, Oracle&lt;/li&gt;
&lt;li&gt;企業買電腦為了 run application 會裝防火牆、防毒軟體，為的就是 run 的長長久久。&lt;/li&gt;
&lt;li&gt;如何做備份？
&lt;ul&gt;
&lt;li&gt;Transaction Log Reader
Lod Reader 意思是說，Server本身會有做一個紀錄，全程紀錄，會有一個log的存放區
會有另一個程式，去讀取 Transaction log 檔，這個程式就叫 CDC ( Change data capture ) ，只要這個 log 檔一有變動，就會馬上把資料抓出來，把抓到的資料做整理，整理後再透過 Stream Loader 丟到 OLAP 進行重播，譬如在 OLTP 這個 DATABASE 新增一筆資料，CDC 抓到了這個 log 檔，會在 OLAP 這裡的資料庫也新增一筆資料，只要硬體設備夠強，可以做到即時作業&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bulk Loader
批次備份，通常會在半夜進行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OLAP｜線上分析處理｜Online Analytical Processing&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在這台資料庫伺服器裡面，只會用到 read，不會做修改，主要的功能是用來做商業分析，用的命令像是 select&amp;hellip;等&lt;/li&gt;
&lt;li&gt;Data Warehouse&lt;/li&gt;
&lt;li&gt;Business Intelligence 商業智慧&lt;/li&gt;
&lt;li&gt;在 select 之前，一定要先 create&lt;/li&gt;
&lt;li&gt;schema on write
&lt;ul&gt;
&lt;li&gt;先產生 Database 及 Table，才能做後續的資料儲存及分析&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Teradata ，一間公司，它的軟體和硬體拿來做 BI 很強，但很貴
「Business Intelligence」
現在的公司使用資料庫就是為了能夠
分析出有效、有價值的決策報告，
但是 teradata 天睿這家公司出版的 Teradata 資料庫，
不只軟體價格變高，還要求使用指定的硬體設備，
讓很多公司受不了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/UAMa2jC.png" alt="" loading="lazy" /&gt;!&lt;/p&gt;
&lt;p&gt;VMware 網路模式
Host｜不可上網，僅限虛擬網路內部通訊
Brigde｜可以上網，藉由橋接器領取與主機相同網段的 IP Address
NAT｜可以上網，透過封包轉送實現虛擬網路上網&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;route r負責讓要送的封包，讓他傳到外面的網路
NAT 會把封包的 Source IP 位址進行更改，才能上網，所以和 router 不一樣
VMware player 的 3 種網路模式，事實上都有一個虛擬橋接器，NAT模式因為有開啟轉址功能才可以上網，而 Host only 沒有開啟轉址功能，所以不能上網&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;當整間教室的所有 windows 主機都用 VMware 啟動一台 bridge 網路的虛擬機，其實就等同於一個私有雲的架構，&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;公有雲，以 GCP 為例，他的實體電腦用的是什麼作業系統，用什麼虛擬技術建立虛擬機器？
Google 絕對不會使用 windows 作業系統，因為他們可以自己建立作業系統，用 KVM 的虛擬技術起虛擬機器，不過他的虛擬技術不一定要叫 KVM&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;之後要教的 Hadoop, Spark 和 Hbase，可以讓我應徵資料管理師，資料分析師和資料科學家&lt;/p&gt;
&lt;hr&gt;
&lt;hr&gt;
&lt;h2&gt;DataTechnology&lt;span class="hx:absolute hx:-mt-20" id="datatechnology"&gt;&lt;/span&gt;
&lt;a href="#datatechnology" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/hX7YE5D.png" alt="" loading="lazy" /&gt;
++&lt;strong&gt;新世代的資料科技｜DataTechnology (DT)&lt;/strong&gt;++&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;資料來源（data lake）：
&lt;ul&gt;
&lt;li&gt;傳統的 IT 系統的資料，例如 : MS SQL, MySQL, Orcale 的資料&lt;/li&gt;
&lt;li&gt;OpenData ｜ 開放資料平台，不會有 license 問題
&lt;ul&gt;
&lt;li&gt;缺點 : 資料不整齊，亂七八糟。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IoT - Internet of Things ｜ 萬物皆連線，用於環境監測、智慧居家、自動化工業&amp;hellip;&lt;/li&gt;
&lt;li&gt;企業內部資料｜同一間公司，不同部門的文本資料、營運資料&amp;hellip;&lt;/li&gt;
&lt;li&gt;爬蟲資料｜到網路上去抓取特定資料&lt;/li&gt;
&lt;li&gt;黑資料 | 私下用錢買賣資料&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;以上的資料都會上載到 Hadoop&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dara lake (資料湖) 和 資料倉儲 不一樣，資料倉儲是已經先做初步分類; 資料湖則是在資料先進到湖裡，在湖旁邊蓋很多工廠再做處理&lt;/p&gt;
&lt;p&gt;第一個工廠
Apache Hive，讓我們可以用 SQL command，對資料湖做分析&lt;/p&gt;
&lt;p&gt;第二個工廠
Spark，做深度分析，機器學習
Spark Straming ， 分析 IOT 的資料&lt;/p&gt;
&lt;p&gt;第三個工廠
Hbase，可以承接 IoT 的資料，以及 nosql 的資料&lt;/p&gt;
&lt;p&gt;資料庫的核心就是Hadoop，&lt;/p&gt;
&lt;p&gt;以 Hadoop 為主 + Hive 就可以做出企業要的 BI&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;請問可以說是因為關聯式資料庫使用上成本較高，所以大家才開始使用 hadoop 嗎?
&lt;ul&gt;
&lt;li&gt;答 : 大單位在用傳統關聯式資料庫的維運成本才會比較高，小單位的部分並不會有這部分的問題，故學 Hadoop 可以為有一定規模的公司解決維運傳統關聯式資料庫成本高的問題。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/tOo19Un.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font color=red&gt;&lt;strong&gt;Hadoop 被設計出來，用來處理 RAW DATA（原始資料）&lt;/strong&gt;&lt;/font&gt;，像是氣象局的氣象資料或是火車的誤點資料，RAW DATA 的資料不能被修改&lt;/li&gt;
&lt;li&gt;Raw Data (原始資料) : 一但產生，即不可修改 (例: 火車時刻表、各區域排碳量、機場出入境人次、感測器所蒐集的資料)&lt;/li&gt;
&lt;li&gt;4V
&lt;ul&gt;
&lt;li&gt;VELOCITY，這種 RAW DATA 是一種&amp;quot;串流資料&amp;quot;，一段時間就會有資料輸入，有分為高中低3種速度 高速:微秒，中速:秒，低速:分&lt;/li&gt;
&lt;li&gt;Variety，企業 IT 系統的紀錄檔（ log 檔），舉例，醫院的病歷歷史資料, Open Data （政府資料開放平臺）,社交網站的資料（ Facebook, Line ）&lt;/li&gt;
&lt;li&gt;Volune，台灣的大數據資料量單為是 Ｔ，&lt;/li&gt;
&lt;li&gt;Veracity，資料真實性，老師翻成品質，因為資料越真，品質越高&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Hadoop Architecture&lt;span class="hx:absolute hx:-mt-20" id="hadoop-architecture"&gt;&lt;/span&gt;
&lt;a href="#hadoop-architecture" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/WaXUf3b.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hadoop Common&lt;/strong&gt;: The common utilities that support the other Hadoop modules.
&lt;ul&gt;
&lt;li&gt;對於 hdfs, YARN, MapReduce 的管理命令和應用命令&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hadoop Distributed File System (HDFS™)&lt;/strong&gt;，分散式檔案系統，&lt;strong&gt;這套檔案系統在運作一定要多台電腦&lt;/strong&gt;
&lt;blockquote&gt;
&lt;p&gt;windows 的檔案系統為：NTFS or FAT32 ，只能在一台電腦上面跑，所以檔案系統的大小是有限制的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YARN ( Yet Another Resource Negotiator )&lt;/strong&gt;，運算系統，專門來跑資料處理引擎的程式，可以平行處理，意思就是說可以在多台電腦同時讓 Mapreduce 和 Spark 跑程式分析資料
&lt;blockquote&gt;
&lt;p&gt;Hadoop 算不算一個資料型的作業系統？
是，因為它具備資料儲存、運算能力
windows 裡，執行程式的平台叫做 &lt;code&gt;.net&lt;/code&gt;，其中有一個 msSQ&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MapReduce&lt;/strong&gt;，內建資料處理引擎，用來做資料分析&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spark&lt;/strong&gt;，（可加裝）也是資料處理引擎&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hive&lt;/strong&gt;，會將 SQL Command 翻譯成 Map, Reduce 程式，最後得出分析結果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a
href="https://hadoop.apache.org/"target="_blank" rel="noopener"&gt;Hadoop 官網連結&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Related projects (Hadoop的親戚)&lt;span class="hx:absolute hx:-mt-20" id="related-projects-hadoop的親戚"&gt;&lt;/span&gt;
&lt;a href="#related-projects-hadoop%e7%9a%84%e8%a6%aa%e6%88%9a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Hbase 資料庫，一定要使用 HDFS 檔案系統來儲存資料庫的 DATA&lt;/li&gt;
&lt;li&gt;Hive，內定使用 Mapreduce 資料處理引擎，來分析資料&lt;/li&gt;
&lt;li&gt;pig 豬小弟，內定會使用 Mapreduce 來做資料整理&lt;/li&gt;
&lt;li&gt;Spark 是 Hadoop 的朋友，不是親戚，他們是在一場比賽中認識的， Spark 他的強項在於 RDD 資料處理引擎，表現比 Mapreduce 強很多，但底層一樣要有存儲檔案系統和運算系統， Spark 跑到公有雲（GCP,AWS, Azure），可以使用公有雲的存儲檔案系統和運算系統; 在 Hadoop 上跑的話，需要有底層( HDFS、YARN ) support 才可運行&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;雅馬遜的檔案系統 S3&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;Hadoop Cluser 架構&lt;span class="hx:absolute hx:-mt-20" id="hadoop-cluser-架構"&gt;&lt;/span&gt;
&lt;a href="#hadoop-cluser-%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/xlo4uIi.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hadoop 一定由多台電腦以及上面跑的 Java 程式組成。&lt;/li&gt;
&lt;li&gt;dta1，這台電腦給資料管理師，資料工程師，資料分析師，資料科學家用的
&lt;blockquote&gt;
&lt;p&gt;叢集 cluster，多台電腦&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;HDFS 檔案系統的組成：
&lt;ul&gt;
&lt;li&gt;dtm1 裡面有 Secondary Name Node 和 Namenode ( 兩個 Java程式 )&lt;/li&gt;
&lt;li&gt;dtw1, dtw2, dtw3 三台電腦上面都有 run Data node（Java程式）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;YARN 由以下組成：
&lt;ul&gt;
&lt;li&gt;dtm2 裡面的 Resource Manager ( Java 程式 )&lt;/li&gt;
&lt;li&gt;dtw1, dtw2, dtw3 三台電腦上跑的 Node Manager ( Java 程式 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hadoop 叢集總共會有 7 台電腦，Client 一台，Secondary NameNode 一台，Active Namenode 一台，Data Node ＋ Node Manager 4 台&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Standby NameNode 是獨立的Active Name Node 備援機&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;在 Open Source 的領域要看功能與支援程度，不是一昧追最新的版本
Hadoop 2.10.1 這個版本在Apache裡面，跟很多頂級專案是朋友，所以功能會比較多&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a
href="https://apache.org/"target="_blank" rel="noopener"&gt;Apache.org 裡面都是頂級專案&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;{%hackmd K3xvoyRCRNS-b4-sPS1W_Q %}
{%hackmd zObYmETOSbS&amp;ndash;aHj4Ycbaw %}
{%hackmd cVAzCcAfQE2919WvyX_1-w %}
{%hackmd 5O2EFLOOTlKRNc498z6JDQ %}
{%hackmd sH4pBq1fTiKKDPqM2xXjsg %}&lt;/p&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>資科平台重要資訊</title><link>https://blog.kubeantony.com/archive/data-platform/%E8%B3%87%E7%A7%91%E5%B9%B3%E5%8F%B0%E9%87%8D%E8%A6%81%E8%B3%87%E8%A8%8A/</link><pubDate>Thu, 04 Aug 2022 10:24:24 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E8%B3%87%E7%A7%91%E5%B9%B3%E5%8F%B0%E9%87%8D%E8%A6%81%E8%B3%87%E8%A8%8A/</guid><description>
&lt;h2&gt;查看 hadoop 管理者帳號&lt;span class="hx:absolute hx:-mt-20" id="查看-hadoop-管理者帳號"&gt;&lt;/span&gt;
&lt;a href="#%e6%9f%a5%e7%9c%8b-hadoop-%e7%ae%a1%e7%90%86%e8%80%85%e5%b8%b3%e8%99%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs dfs -ls -d /&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-d&lt;/code&gt; ，Directories are listed as plain files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;output :&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;drwxr-xr-x - bigred bigboss 0 2022-07-27 23:08 /&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;hdfs 檔案系統 根目錄 的擁有者 : bigred&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;練習寫一隻程式&lt;span class="hx:absolute hx:-mt-20" id="練習寫一隻程式"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92%e5%af%ab%e4%b8%80%e9%9a%bb%e7%a8%8b%e5%bc%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;功能 : 透過 time 命令以及 for 迴圈，得出在 YARN 運算系統執行 x 支程式 跑 n 輪的時間，並將每次得到的時間平均&lt;/p&gt;
&lt;p&gt;用法 :&lt;/p&gt;
&lt;p&gt;參數 1 為 : 設定幾支 map 程式
參數 2 為 : 設定要 run 幾輪&lt;/p&gt;
&lt;h3&gt;完整程式&lt;span class="hx:absolute hx:-mt-20" id="完整程式"&gt;&lt;/span&gt;
&lt;a href="#%e5%ae%8c%e6%95%b4%e7%a8%8b%e5%bc%8f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
[ &amp;#34;$#&amp;#34; != &amp;#34;2&amp;#34; ] &amp;amp;&amp;amp; echo -e &amp;#34;\n用法\n\n參數 1 為 : 設定幾支 map 程式\n參數 2 為 : 設定要 run 幾輪\n&amp;#34; &amp;amp;&amp;amp; exit 1
# clean file
cat /dev/null &amp;gt; /tmp/txt
cat /dev/null &amp;gt; /tmp/average
# 收集資料
for ((i=0;i&amp;lt;${2};i=i&amp;#43;1))
do
/usr/bin/time -p -o /tmp/txt yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-${HADOOP_HOME##*-}.jar pi $1 10000000 &amp;amp;&amp;gt;/dev/null
cat /tmp/txt | grep &amp;#39;real&amp;#39; | cut -d &amp;#34; &amp;#34; -f 2 &amp;gt;&amp;gt;/tmp/average
done
# 加總收集到的秒數
a=0
while read line
do
a=$(echo &amp;#34;${line} &amp;#43; ${a}&amp;#34; | bc)
done &amp;lt; /tmp/average
# 取平均值
c=$(cat /tmp/average | wc -l)
average=$(echo &amp;#34;scale=5; ${a}/${c}&amp;#34; | bc)
t=$(echo &amp;#34;${1} &amp;#43; 2&amp;#34; | bc)
echo -e &amp;#34;\n總共 ${t} 支程式，跑 ${c} 輪的平均時間 : ${average} 秒\n&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;程式解析&lt;span class="hx:absolute hx:-mt-20" id="程式解析"&gt;&lt;/span&gt;
&lt;a href="#%e7%a8%8b%e5%bc%8f%e8%a7%a3%e6%9e%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#!/bin/bash&lt;/code&gt; ， 宣告以下程式內容由 bash 程式執行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$#&lt;/code&gt; ，參數總數&lt;/li&gt;
&lt;li&gt;&lt;code&gt;echo -e&lt;/code&gt; ，讓 &lt;code&gt;\&lt;/code&gt; 反斜線轉譯
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;\n&lt;/code&gt; ，換行符號&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cat /dev/null &amp;gt; /tmp/txt&lt;/code&gt; ，將 &lt;code&gt;/tmp&lt;/code&gt; 目錄下的 txt 檔案清空&lt;/li&gt;
&lt;li&gt;&lt;code&gt;for ((i=0;i&amp;lt;${2};i=i+1))&lt;/code&gt; ，格式為 for ((起始值;最大值;累進值))&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$2&lt;/code&gt; ，第二個參數，主要用來設定跑幾輪&lt;/li&gt;
&lt;li&gt;&lt;code&gt;time&lt;/code&gt; 用於統計命令執行所消耗的時間及相關係統資源等資訊。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/usr/bin/time&lt;/code&gt; ，用絕對路徑的原因是因為如果只執行 &lt;code&gt;time&lt;/code&gt; ，會去執行 busybox 的 &lt;code&gt;time&lt;/code&gt; 命令，功能不完整&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt; ，使用相容輸出格式，&lt;code&gt;real %e user %U sys %S&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%e&lt;/code&gt;，執行指令所花費的時間，單位是秒&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%S&lt;/code&gt;：指令執行時在內核模式（kernel mode）所花費的時間，單位是秒&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%U&lt;/code&gt;：指令執行時在用戶模式（user mode）所花費的時間，單位是秒&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o /tmp/txt&lt;/code&gt;，設定結果輸出到 /tmp 目錄下的 txt 檔案。這個選項會將 time 的輸出寫入所指定的檔案中。如果檔案已經存在，覆寫其內容&lt;/li&gt;
&lt;li&gt;&lt;a
href="https://www.it145.com/9/23467.html"target="_blank" rel="noopener"&gt;詳解 Linux time 命令的使用 連結&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yarn jar&lt;/code&gt; ，Runs a jar file. Users can bundle their Yarn code in a jar file and execute it using this command.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;*.jar&lt;/code&gt; ，人家寫好的 java 程式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pi&lt;/code&gt; ，計算 pi 值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2&lt;/code&gt; ，產生兩個 map 程式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;100000&lt;/code&gt; ，座標&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reduce&lt;/code&gt; ，會幫我們處理和分析 &lt;code&gt;examples-3.3.3.jar&lt;/code&gt; 的資料&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&amp;gt;/dev/null&lt;/code&gt; ，將 1 號裝置 (標準輸出) 和 2 號裝置 (警告訊息 or 錯誤訊息) 重導到 黑洞&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cat /tmp/txt&lt;/code&gt;，將檔案內容顯示在螢幕上
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;|&lt;/code&gt; ，pipe，將左邊命令執行後的結果輸入給右邊的命令&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grep 'real'&lt;/code&gt;，搜索 real 字串&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cut -d &amp;quot; &amp;quot;&lt;/code&gt;，指定用空格作為分隔符號，&lt;code&gt;-f 2&lt;/code&gt;，將第 2 欄的內容剪下&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt;&amp;gt;/tmp/average&lt;/code&gt;，將左邊 cut 完的結果 append 到 /tmp 目錄下的 average 這個檔案&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;while&lt;/code&gt; 結合 &lt;code&gt;read&lt;/code&gt; 的語法，先讀檔（每次會只讀一行）後，再跑迴圈。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;a=$(echo &amp;quot;${line} + ${a}&amp;quot; | bc)&lt;/code&gt;，因 bash 不支援有小數的運算，所以要透過 pipe 丟給 bc 這個命令去算&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wc -l&lt;/code&gt; ，得出檔案有幾行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scale=5&lt;/code&gt;，小數點後面保留 5 位數，預設為 0&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;程式執行結果&lt;span class="hx:absolute hx:-mt-20" id="程式執行結果"&gt;&lt;/span&gt;
&lt;a href="#%e7%a8%8b%e5%bc%8f%e5%9f%b7%e8%a1%8c%e7%b5%90%e6%9e%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ bash time.sh 5 5
總共 7 支程式，跑 5 輪的平均時間 : 18.58800 秒&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>手動建制資科平台</title><link>https://blog.kubeantony.com/archive/data-platform/%E6%89%8B%E5%8B%95%E5%BB%BA%E5%88%B6%E8%B3%87%E7%A7%91%E5%B9%B3%E5%8F%B0/</link><pubDate>Wed, 06 Jul 2022 03:06:42 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E6%89%8B%E5%8B%95%E5%BB%BA%E5%88%B6%E8%B3%87%E7%A7%91%E5%B9%B3%E5%8F%B0/</guid><description>
&lt;h2&gt;資科平台叢集建置&lt;span class="hx:absolute hx:-mt-20" id="資科平台叢集建置"&gt;&lt;/span&gt;
&lt;a href="#%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0%e5%8f%a2%e9%9b%86%e5%bb%ba%e7%bd%ae" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下載 US2004.CVN80.zip 虛擬主機壓縮檔, 然後解壓縮至使用者家目錄&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open jdk-8 已安裝&lt;/li&gt;
&lt;li&gt;libisal-dev libsnappy-dev libz-dev&lt;/li&gt;
&lt;li&gt;設定 SSH
/etc/ssh/sshd_config -&amp;gt; PermitUserEnvironment yes
/etc/ssh/ssh_config -&amp;gt; StrictHostKeyChecking no
設定好環境後，再複製其他機器，可降低人為的錯誤以及達成快速部署&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;啟動 US2004.CVN80 虛擬主機, 執行以下設定命令&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;C:\Users\bigred&amp;gt;ssh bigred@192.168.61.144
bigred@192.168.61.144s password:
## 系統更新
$ sudo apt update; sudo apt upgrade; sudo apt autoremove
## 安裝 Hadoop 所需的套件 (本次練習已先做好設定)
$ sudo apt install libisal-dev libsnappy-dev libz-dev
## 設定 SSH (本次練習已先做好設定)
$ sudo nano /etc/ssh/sshd_config
.......
PermitUserEnvironment yes
$ sudo nano /etc/ssh/ssh_config
.........
StrictHostKeyChecking no
## 產生公私鑰，並複製公鑰成 authorized_keys
$ ssh-keygen -t rsa -P &amp;#39;&amp;#39;
Enter file in which to save the key (/home/bigred/.ssh/id_rsa): 按 Enter
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ sudo nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 cvn80
120.96.143.xx dta1
120.96.143.xx dtm1
120.96.143.xx dtm2
120.96.143.xx dtw1
120.96.143.xx dtw2
120.96.143.xx dtw3
## 關機
$ poweroff&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;在 Windows 命令提示字元 視窗, 執行以下命令&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;C:\Users\bigred&amp;gt;mkdir dtvm
C:\Users\bigred&amp;gt;xcopy US2004.CVN80\US2004.vmwarevm dtvm\us.dta1\ /E /Y &amp;gt; nul
C:\Users\bigred&amp;gt;xcopy US2004.CVN80\US2004.vmwarevm dtvm\us.dtm1\ /E /Y &amp;gt; nul
C:\Users\bigred&amp;gt;xcopy US2004.CVN80\US2004.vmwarevm dtvm\us.dtm2\ /E /Y &amp;gt; nul
C:\Users\bigred&amp;gt;xcopy US2004.CVN80\US2004.vmwarevm dtvm\us.dtw1\ /E /Y &amp;gt; nul
C:\Users\bigred&amp;gt;xcopy US2004.CVN80\US2004.vmwarevm dtvm\us.dtw2\ /E /Y &amp;gt; nul
C:\Users\bigred&amp;gt;xcopy US2004.CVN80\US2004.vmwarevm dtvm\us.dtw3\ /E /Y &amp;gt; nul&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;xcopy ，複製檔案和目錄（包括子目錄）。
/E ，複製所有子目錄（即使它們是空的）。
/Y ，隱藏提示以確認您想要覆寫現有的目的地檔案。
&lt;code&gt;&amp;gt; nul&lt;/code&gt; ， STDOUT 標準輸出重新導向至 NUL 裝置，錯誤訊息仍會列印到畫面。因為錯誤訊息通常會傳送至標準錯誤資料流程，而不是標準輸出資料流程。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol start="4"&gt;
&lt;li&gt;
&lt;p&gt;啟動 VMware Workstation Player, 設定 資科平台 六部虛擬主機&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;設定 虛擬主機 名稱 (dta1,dtm1,dtm2,dtw1,dtw2,dtw3)&lt;/li&gt;
&lt;li&gt;設定 虛擬主機 記憶體
dta1 -&amp;gt; 8G (8192)
dtm1 -&amp;gt; 8G
dtm2 -&amp;gt; 8G
dtw1 -&amp;gt; 10G (10240)
dtw2 -&amp;gt; 10G
dtw3 -&amp;gt; 10G&lt;/li&gt;
&lt;li&gt;設定 虛擬主機 網卡
Network Adapter -&amp;gt; Bridged&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;壓縮 資科平台 六部虛擬主機目錄, 使用 scp 命令, 複製到 組員 的落地雲主機&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;啟動 資科平台 虛擬主機, 然後設定網路系統&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在 Windows 命令提示字元 視窗, 執行以下命令, 登入虛擬主機&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;c:\&amp;gt;ssh bigred@120.96.143.xx
設定固定 IP
$ sudo nano /etc/netplan/00-installer-config.yaml
network:
version: 2
renderer: networkd
ethernets:
ens32:
dhcp4: no
addresses:
- 120.96.143.xx/25
gateway4: 120.96.143.254
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
設定電腦名稱
$ sudo nano /etc/hostname
dta1
$ sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;每台虛擬機器上面跑的Java程式&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;dta1
hdfs,yarn,pig,hive&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dtm1
name node, secondary name node&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dtm2
resource manager, Job history server&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dtw1
Datamode, node manager&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dtw2
Datamode, node manager&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dtw3
Datamode, node manager&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dtw4
Datamode, node manager&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;資科平台系統建置&lt;span class="hx:absolute hx:-mt-20" id="資科平台系統建置"&gt;&lt;/span&gt;
&lt;a href="#%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0%e7%b3%bb%e7%b5%b1%e5%bb%ba%e7%bd%ae" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;下載 資料科技 平台套件檔
在 Windows 系統的 cmd 視窗, 執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ssh bigred@&amp;lt;dta1 IP&amp;gt;
$ cd; wget http://www.oc99.org/zip/vmusdt2022.zip; unzip vmusdt2022.zip
$ dir vmusdt ## vmusdt (Virtual Machine Ubuntu Server Data technology)
total 341M
drwxr-sr-x 4 bigred bigred 4.0K Mar 21 20:44 .
drwxr-sr-x 9 bigred bigred 4.0K Mar 21 22:41 ..
drwxr-sr-x 2 bigred bigred 4.0K Mar 21 22:17 bin
-rw-r--r-- 1 bigred bigred 341M Mar 21 20:42 hdp210
drwxr-sr-x 4 bigred bigred 4.0K Mar 21 22:15 hdp33
bigred@dta1:~$ dir vmusdt/bin
total 28K
drwxr-xr-x 2 bigred bigred 4.0K May 11 06:57 .
drwxr-xr-x 5 bigred bigred 4.0K May 11 14:02 ..
-rwxr-xr-x 1 bigred bigred 1.2K May 10 07:40 dtconf
-rwxr-xr-x 1 bigred bigred 942 May 11 05:51 dtcopy
-rwxr-xr-x 1 bigred bigred 255 Apr 25 07:07 dthdpchk
-rwxr-xr-x 1 bigred bigred 452 Jul 31 2021 dtsyschk
-rwxr-xr-x 1 bigred bigred 771 May 9 15:35 dtwget
## 因為有把/home/bigred/vmusdt/bin加到PATH環境變數，所以才可以直接執行vmusdt/bin目錄裡面的命令
$ echo $PATH
/home/bigred/bin:/home/bigred/bin:/home/bigred/vmusdt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ cd ~/vmusdt; dir hdp33
total 28K
drwxr-sr-x 4 bigred bigred 4.0K Mar 21 22:15 .
drwxr-sr-x 4 bigred bigred 4.0K Mar 21 20:44 ..
-rwxr-xr-x 1 bigred bigred 2.6K Mar 20 16:52 us.bash
drwxr-sr-x 2 bigred bigred 4.0K Mar 21 20:36 bin
drwxr-sr-x 7 bigred bigred 4.0K Mar 20 16:41 conf
-rw-r--r-- 1 bigred bigred 420 Mar 20 16:10 dlist
-rw-r--r-- 1 bigred bigred 891 Mar 20 16:51 environmen&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;us.bash #設定資科平台所需的環境變數
opt #資科平台套件的存放目錄
bin #存放部署或建制資科平台所需的命令
conf #存放資科平台套件設定檔的目錄
dlist #資科平台套件下載連結清單
environment #設定 ssh 直接執行指令時的環境變數&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;檢視 下載資科平台套件 清單檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat hdp33/dlist
https://dlcdn.apache.org/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz
https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
https://dlcdn.apache.org/pig/pig-0.17.0/pig-0.17.0.tar.gz
https://dlcdn.apache.org/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz
https://dlcdn.apache.org/hbase/2.4.12/hbase-2.4.12-bin.tar.gz
https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;開始 下載資科平台套件&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ dtwget 33
download DT packages ? (YES/NO) YES
hadoop-3.3.2.tar.gz ok
apache-hive-3.1.3-bin.tar.gz ok
pig-0.17.0.tar.gz ok
spark-3.2.1-bin-hadoop3.2.tgz ok
hbase-2.4.12-bin.tar.gz ok
apache-zookeeper-3.6.3-bin.tar.gz ok
[註] dtwget 主要是下載 DT 套件檔至 ~/vmausdt/hdp33/opt 這目錄&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ./bin/dtcopy 33
dta1 /opt/ ok
dta1 /opt/bin ok
dta1 /etc/hosts ok
dtm1 /opt/ ok
dtm1 /opt/bin ok
dtm1 /etc/hosts ok
dtm2 /opt/ ok
dtm2 /opt/bin ok
dtm2 /etc/hosts ok
dtw1 /opt/ ok
dtw1 /opt/bin ok
dtw1 /etc/hosts ok
dtw2 /opt/ ok
dtw2 /opt/bin ok
dtw2 /etc/hosts ok
dtw3 /opt/ ok
dtw3 /opt/bin ok
dtw3 /etc/hosts ok
......
[註] dtcopy 主要是覆製 dta1 主機 /home/bigred/vmalpdt/hdp33/opt 這目錄至 dtm1, dtm2, dtw1, dtw2, dtw3 這三部主機的 /opt 目錄&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;複製 資料科技平台 設定檔&lt;span class="hx:absolute hx:-mt-20" id="複製-資料科技平台-設定檔"&gt;&lt;/span&gt;
&lt;a href="#%e8%a4%87%e8%a3%bd-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0-%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat ~/vmalpdt/hdp33/us.bash
#!/bin/bash
adminuser=bigred
export JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre ## 資料科技平台所跑的Java程式的家
export HADOOP_HOME=/opt/hadoop-3.3.2
export HADOOP_LOG_DIR=/tmp
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=&amp;#34;-Djava.library.path=$HADOOP_HOME/lib/native&amp;#34;
# export HADOOP_USER_CLASSPATH_FIRST=true
[ -z $HADOOP_USER_NAME ] &amp;amp;&amp;amp; [ $SHELL == &amp;#39;/bin/bash&amp;#39; ] &amp;amp;&amp;amp; declare -r HADOOP_USER_NAME=$USER
# JobHistory log file path, 會自動產生目錄
# export HADOOP_MAPRED_LOG_DIR=&amp;#34;/home/bigred/jhslog&amp;#34;
export YARN_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export YARN_LOG_DIR=/tmp
# hadoop 3.2.1 及 3.1.3 這二個版本只要執行檔案傳送命令就會出現以下訊息
# hadoop fs -put -f /etc/passwd /tmp
# SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
export HADOOP_ROOT_LOGGER=&amp;#34;WARN,console&amp;#34;
export PIG_HOME=/opt/pig-0.17.0
export PIG_HEAPSIZE=512
export HIVE_HOME=/opt/apache-hive-3.1.2-bin
export PATH=/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH=/usr/lib/jvm/java-1.8-openjdk/bin:/home/bigred/dt/bin:$PATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PIG_HOME/bin:$HIVE_HOME/bin
export HBASE_HOME=/opt/hbase-2.4.11
export HBASE_CONF_DIR=/opt/hbase-2.4.11/conf
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.6.3-bin
export ZOO_LOG_DIR=/tmp/logs
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin
#export ZEPPELIN_HOME=/opt/zeppelin-0.9.0-bin-all
#export PATH=$PATH:$ZEPPELIN_HOME/bin
export SPARK_HOME=/opt/spark-3.2.1-bin-hadoop3.2
export SPARK_CONF_DIR=$SPARK_HOME/conf
export PYSPARK_PYTHON=/usr/bin/python3
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
if [ -d /opt/jupyter/miniconda3/bin ];then
export ANACONDA_ROOT=/opt/jupyter/miniconda3
export PATH=$ANACONDA_ROOT/bin:$PATH
export PYSPARK_PYTHON=$ANACONDA_ROOT/bin/python
fi
if [ &amp;#34;$USER&amp;#34; != &amp;#34;&amp;#34; ]; then
[ -f /home/$USER/dkc.env ] &amp;amp;&amp;amp; source /home/$USER/dkc.env
if [ ! -d metastore_db ]; then
#hn=$(hostname)
#if [ ${hn:0:3} == &amp;#34;adm&amp;#34; ] || [ ${hn:0:2} == &amp;#34;ds&amp;#34; ] || [ ${hn:0:8} == &amp;#34;zeppelin&amp;#34; ]; then
echo -n &amp;#34;build derby database ...&amp;#34;
schematool -initSchema -dbType derby &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34; ok&amp;#34;
echo &amp;#34;set hive.cli.print.current.db=true;&amp;#34; &amp;gt; .hiverc
echo &amp;#34;set hive.metastore.warehouse.dir=/user/$USER/hive;&amp;#34; &amp;gt;&amp;gt; .hiverc
echo &amp;#34;set hive.exec.scratchdir=/user/$USER/tmp;&amp;#34; &amp;gt;&amp;gt; .hiverc
fi
fi
alias nano=&amp;#39;nano -Ynone&amp;#39;
alias dir=&amp;#39;ls -alh&amp;#39;
alias ssh=&amp;#39;ssh -q&amp;#39;
fi
$ cat ~/vmalpdt/hdp33/environment
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
HADOOP_HOME=/opt/hadoop-3.3.2
HADOOP_LOG_DIR=/tmp
LD_LIBRARY_PATH=/opt/hadoop-3.3.2/lib/native/
HADOOP_COMMON_LIB_NATIVE_DIR=/opt/hadoop-3.3.2/lib/native
HADOOP_OPTS=-Djava.library.path=/opt/hadoop-3.3.2/lib/native
HADOOP_MAPRED_LOG_DIR=/home/bigred/jhslog
YARN_HOME=/opt/hadoop-3.3.2
YARN_LOG_DIR=/tmp
PIG_HOME=/opt/pig-0.17.0/
PIG_HEAPSIZE=512
SPARK_HOME=/opt/spark-3.2.1-bin-hadoop3.2
HIVE_HOME=/opt/apache-hive-3.1.2-bin
HBASE_HOME=/opt/hbase-2.4.11
HBASE_CONF_DIR=/opt/hbase-2.4.11/conf
HBASE_LOG_DIR=/tmp
ZOO_LOG_DIR=/tmp/logs
PATH=/root/bin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/hadoop-3.3.2/bin:/opt/hadoop-3.3.2/sbin:/opt/pig-0.17.0/bin:/opt/apache-hive-3.1.2-bin/bin:/opt/spark-3.2.1-bin-hadoop3.2/bin:/opt/spark-3.2.1-bin-hadoop3.2/sbin:/opt/hbase-2.4.11/bin:/opt/apache-zookeeper-3.6.3-bin/bin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;降版Java&lt;span class="hx:absolute hx:-mt-20" id="降版java"&gt;&lt;/span&gt;
&lt;a href="#%e9%99%8d%e7%89%88java" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 關閉Hadoop
bigred@dta1:~$ stopyarn ; stophdfs
## 安裝jdk8
bigred@dta1:~$ sudo apt-get install openjdk-8-jdk
## 尋找Java程式
bigred@dta1:~/vmusdt$ which java
/usr/bin/java
## /usr/bin/java是連結檔
bigred@dta1:~/vmusdt$ ls -al /usr/bin/java
lrwxrwxrwx 1 root root 22 May 11 12:12 /usr/bin/java -&amp;gt; /etc/alternatives/java
## /etc/alternatives/java還是捷徑檔
bigred@dta1:~/vmusdt$ ls -al /etc/alternatives/java
lrwxrwxrwx 1 root root 46 May 11 12:12 /etc/alternatives/java -&amp;gt; /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
## JVM(java)程式真正的家
bigred@dta1:~/vmusdt$ ls -al /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
-rwxr-xr-x 1 root root 14632 Nov 3 2021 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
## 檢查
bigred@dta1:~$ java -version check
openjdk version &amp;#34;1.8.0_312&amp;#34;
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
bigred@dta1:~$ nano ~/vmusdt/hdp33/us.bash
#!/bin/bash
...
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre ##把原本的java-11改成java-8
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;==&lt;strong&gt;在設定一次的原因是因為只要是Hadoop的程式，都是到hadoop-env.sh這個檔案來讀取設定檔，不會去讀取us.bash（只有pig, spark, Hive才會去讀取）&lt;/strong&gt;==&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ nano hdp33/conf/hadoop-3.3.2/hadoop-env.sh
...
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;還有要改&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ cat hdp33/environment
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;設定檔和套件檔的目錄名稱要一致&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;設定檔
bigred@dta1:~/vmusdt$ dir hdp33/conf
total 28K
drwxr-xr-x 7 bigred bigred 4.0K May 11 05:45 .
drwxr-xr-x 5 bigred bigred 4.0K May 12 06:51 ..
drwxr-xr-x 2 bigred bigred 4.0K Feb 6 16:00 apache-hive-3.1.2-bin
drwxr-xr-x 2 bigred bigred 4.0K Feb 6 16:00 apache-zookeeper-3.6.3-bin
drwxr-xr-x 2 bigred bigred 4.0K May 12 06:49 hadoop-3.3.2
drwxr-xr-x 2 bigred bigred 4.0K Feb 6 16:00 hbase-2.4.12
drwxr-xr-x 2 bigred bigred 4.0K May 9 18:54 spark-3.2.1-bin-hadoop3.2
套件檔
bigred@dta1:~/vmusdt$ dir /opt
total 40K
drwxrwxrwx 10 root root 4.0K May 12 06:00 .
drwxr-xr-x 20 root root 4.0K May 11 12:29 ..
drwxrwxrwx 10 root root 4.0K May 12 05:59 apache-hive-3.1.3-bin
drwxrwxrwx 6 root root 4.0K May 12 05:59 apache-zookeeper-3.6.3-bin
drwxrwxrwx 2 root root 4.0K May 12 06:00 bin
drwxrwxrwx 3 root root 4.0K Apr 13 2021 cni
drwxrwxrwx 10 root root 4.0K May 12 05:59 hadoop-3.3.2
drwxrwxrwx 7 root root 4.0K May 12 05:59 hbase-2.4.12
drwxrwxrwx 16 root root 4.0K May 12 06:00 pig-0.17.0
drwxrwxrwx 13 root root 4.0K May 12 06:00 spark-3.2.1-bin-hadoop3.2
更改目錄名稱
bigred@dta1:~/vmusdt$ mv hdp33/conf/apache-hive-3.1.2-bin/ hdp33/conf/apache-hive-3.1.3-bin/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;拷貝設定檔到dt系列的虛擬機器&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ dtconf 33&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;將每台電腦重新開機(a1 最後開)&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ ssh dtm1 sudo reboot
bigred@dta1:~/vmusdt$ ssh dtm2 sudo reboot
bigred@dta1:~/vmusdt$ ssh dtw1 sudo reboot
bigred@dta1:~/vmusdt$ ssh dtw2 sudo reboot
bigred@dta1:~/vmusdt$ ssh dtw3 sudo reboot
bigred@dta1:~/vmusdt$ ssh dta1 sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;dthdpchk檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ dthdpchk
[dta1]
Hadoop 3.3.2
Native library checking:
hadoop: true /opt/hadoop-3.3.2/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtm1]
Hadoop 3.3.2
Native library checking:
hadoop: true /opt/hadoop-3.3.2/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtm2]
Hadoop 3.3.2
Native library checking:
hadoop: true /opt/hadoop-3.3.2/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw1]
Hadoop 3.3.2
Native library checking:
hadoop: true /opt/hadoop-3.3.2/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw2]
Hadoop 3.3.2
Native library checking:
hadoop: true /opt/hadoop-3.3.2/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.
[dtw3]
Hadoop 3.3.2
Native library checking:
hadoop: true /opt/hadoop-3.3.2/lib/native/libhadoop.so
zlib: true /lib/x86_64-linux-gnu/libz.so.1
zstd : true /lib/x86_64-linux-gnu/libzstd.so.1
bzip2: true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L: true /lib/x86_64-linux-gnu/libisal.so.2
PMDK: false The native code was built without PMDK support.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;formathdfs&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ formathdfs
Are you sure ? (YES/NO) YES
formathdfs ok&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查formathdfs&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ ssh dtm1 tree nn
nn
└── current
├── fsimage_0000000000000000000
├── fsimage_0000000000000000000.md5
├── seen_txid
└── VERSION
1 directory, 4 files
bigred@dta1:~/vmusdt$ ssh dtm1 tree dn
dn [error opening dir]
0 directories, 0 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;開啟HDFS&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ starthdfs
dtm1: Name Node Started
dtm1: Secondary Name Node started
dtw1: Data Node started
dtw2: Data Node started
dtw3: Data Node started
bigred@dta1:~/vmusdt$ hls
[dtm1]
3257 NameNode
3482 SecondaryNameNode
[dtw1]
3104 DataNode
[dtw2]
2890 DataNode
[dtw3]
3006 DataNode&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ ssh dtw1 tree dn
dn
├── current
│   ├── BP-832687255-120.96.143.51-1652366868764
│   │   ├── current
│   │   │   ├── finalized
│   │   │   ├── rbw
│   │   │   └── VERSION
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock
6 directories, 4 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;啟動YARN&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ startyarn
dtm2: Resource Manager started
dtm2: Job History Server started
dtw1: Node Manager started
dtw2: Node Manager started
dtw3: Node Manager started
## 檢查
bigred@dta1:~/vmusdt$ hls
[dtm1]
3257 NameNode
3482 SecondaryNameNode
[dtm2]
3637 JobHistoryServer
3485 ResourceManager
[dtw1]
3104 DataNode
3947 NodeManager
[dtw2]
3649 NodeManager
2890 DataNode
[dtw3]
3780 NodeManager
3006 DataNode&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ dtest
[HDFS]
Live datanodes (3):
Name: 120.96.143.53:9866 (dtw1)
Name: 120.96.143.54:9866 (dtw2)
Name: 120.96.143.55:9866 (dtw3)
[YARN]
Total Nodes:3
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
dtw2:44893 RUNNING dtw2:8042 0
dtw3:46197 RUNNING dtw3:8042 0
dtw1:46179 RUNNING dtw1:8042 0
[MapReduce]
Estimated value of Pi is 3.14400000000000000000
[Spark]
Pi is roughly 3.143560
[HBase]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>Hadoop 實戰篇</title><link>https://blog.kubeantony.com/archive/data-platform/hadoop-%E5%AF%A6%E6%88%B0%E7%AF%87/</link><pubDate>Fri, 10 Jun 2022 00:34:08 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/hadoop-%E5%AF%A6%E6%88%B0%E7%AF%87/</guid><description>
&lt;h1&gt;目錄&lt;/h1&gt;&lt;h2&gt;落地雲 應用套件包的系統需求&lt;span class="hx:absolute hx:-mt-20" id="落地雲-應用套件包的系統需求"&gt;&lt;/span&gt;
&lt;a href="#%e8%90%bd%e5%9c%b0%e9%9b%b2-%e6%87%89%e7%94%a8%e5%a5%97%e4%bb%b6%e5%8c%85%e7%9a%84%e7%b3%bb%e7%b5%b1%e9%9c%80%e6%b1%82" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下載 VMware Workstation Player 軟體,下載網址如下:&lt;/p&gt;
&lt;p&gt;&lt;a
href="https://www.vmware.com/tw/products/workstation-player/workstation-player-evaluation.html"target="_blank" rel="noopener"&gt;https://www.vmware.com/tw/products/workstation-player/workstation-player-evaluation.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要執行高教落地雲,最低系統需求如下:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4 核心 CPU (VT-x: i3,i5,i7,i9)&lt;/li&gt;
&lt;li&gt;至少 32 G 記憶體&lt;/li&gt;
&lt;li&gt;微軟 64 位元作業系統 (Windows 10/11)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3&gt;落地雲 應用套件包下載與內容&lt;span class="hx:absolute hx:-mt-20" id="落地雲-應用套件包下載與內容"&gt;&lt;/span&gt;
&lt;a href="#%e8%90%bd%e5%9c%b0%e9%9b%b2-%e6%87%89%e7%94%a8%e5%a5%97%e4%bb%b6%e5%8c%85%e4%b8%8b%e8%bc%89%e8%88%87%e5%85%a7%e5%ae%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;在 Windows 系統, 啟動 Browser, 下載 CNT.2022.v4.zip&lt;/li&gt;
&lt;li&gt;下載後, 請將 CNT.2022.v4.zip 解壓縮至 使用者家目錄, 例如 /user/rbean&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;C:\\Users\\rbean&amp;gt;dir CNT.2022.v4
.....
2022/01/29 下午 09:52 &amp;lt;DIR&amp;gt; ALP.DT.ADM
2022/01/29 下午 09:53 &amp;lt;DIR&amp;gt; ALP.K8S
2022/01/29 下午 09:53 &amp;lt;DIR&amp;gt; ALP3
2022/01/29 上午 09:07 1,768 docker.bat
2022/02/02 下午 03:32 7,457 dt.bat
2022/02/02 下午 03:44 4,499 k8s.bat
2022/01/29 上午 09:07 1,769 podman.bat
2022/01/29 下午 09:53 &amp;lt;DIR&amp;gt; system
2022/01/29 上午 09:07 115 vmrun.bat&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;認識 &lt;strong&gt;Alpine Linux&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="認識-alpine-linux"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%8d%e8%ad%98-alpine-linux" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Alpine Linux 是一套由社群開發，以安全為導向的 Linux 作業系統，目前最新的版本 v3.6.2 在 2017-06-17 發布。&lt;/p&gt;
&lt;p&gt;跟一般的 Linux 發行版不一樣的地方是 Alpine 是使用 &lt;strong&gt;musl libc&lt;/strong&gt; 和 &lt;strong&gt;busybox&lt;/strong&gt; 來減少系統需求容量(5 MB )和執行消耗資源。&lt;/p&gt;
&lt;p&gt;比起其他輕量化 Image (如：Busybox，Image 大小為1.113MB)， &lt;strong&gt;Alpine&lt;/strong&gt; 的優勢在於多了像是 &lt;strong&gt;apt&lt;/strong&gt; 之於 &lt;strong&gt;Ubuntu&lt;/strong&gt; 這樣的套件管理工具 &lt;strong&gt;apk&lt;/strong&gt; ，官方提供了大量的套件供開發者使用，可以透過網站或者直接下 apk 指令進行查詢或者安裝。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alpine 的busybox 是 HardLink, 而不是 Softlink. Docker busybox image 沒有提供 套件安裝平台&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;80 年代大型主機實體架構&lt;span class="hx:absolute hx:-mt-20" id="80-年代大型主機實體架構"&gt;&lt;/span&gt;
&lt;a href="#80-%e5%b9%b4%e4%bb%a3%e5%a4%a7%e5%9e%8b%e4%b8%bb%e6%a9%9f%e5%af%a6%e9%ab%94%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/vepCBbk.png" alt="" loading="lazy" /&gt;
只要提到linux作業系統，他一定可以連接很多台終端機（Terminals），他沒有硬碟，只有螢幕跟鍵盤，讓操作者能夠打字看結果，在終端機裡面跑的程式叫做“貝殼程式”，有sh(輕量貝殼)、有bash（重量貝殼程式），只要在linux和unix系統裡面，跑貝殼程式，一定在終端機上面跑，讓人家可以打字，命令會透過RS-232這條線，傳到linux的主機去執行，執行完的結果會再透過RS-232傳回來到終端機的螢幕上。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;建制資科平台&lt;span class="hx:absolute hx:-mt-20" id="建制資科平台"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e5%88%b6%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;建立 資科平台 虛擬主機&lt;span class="hx:absolute hx:-mt-20" id="建立-資科平台-虛擬主機"&gt;&lt;/span&gt;
&lt;a href="#%e5%bb%ba%e7%ab%8b-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e8%99%9b%e6%93%ac%e4%b8%bb%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 Windows 系統的 cmd 終端機,執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;C:\\Users\\rbean&amp;gt;cd CNT.2022.v4
C:\\Users\\rbean\\CNT.2022.v4&amp;gt; dt create
&amp;#34;DT\\alp.dta1\ (3072MB) ok&amp;#34;
&amp;#34;DT\\alp.dtm1\ (3072MB) ok&amp;#34;
&amp;#34;DT\\alp.dtm2\ (3072MB) ok&amp;#34;
&amp;#34;DT\\alp.dtw1\ (4096MB) ok&amp;#34;
&amp;#34;DT\\alp.dtw2\ (4096MB) ok&amp;#34;
&amp;#34;DT\\alp.dtw3\ (4096MB) ok&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;[&lt;strong&gt;註&lt;/strong&gt;] dt.bat 會產生 6 個 虛擬主機, 並設定這 6 部虛擬主機的 記憶體, MAC 位址, 虛擬主機名稱, IP 位址 及 電腦名稱&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;啟動 資科平台 虛擬主機&lt;span class="hx:absolute hx:-mt-20" id="啟動-資科平台-虛擬主機"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e8%99%9b%e6%93%ac%e4%b8%bb%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;C:\\Users\\rbean\\CNT.2022.v4&amp;gt; dt start
C:\\Users\\rbean\\CNT.2022.v4&amp;gt; dt list
[DT]
alp.a1
alp.m1
alp.m2
alp.w1
alp.w2
alp.w3
[VM runnig]
C:\\Users\\gbean\\CNT.2022.v1\\DT\\alp.a1\\alpine64.vmwarevm\\alpine64.vmx
C:\\Users\\gbean\\CNT.2022.v1\\DT\\alp.m1\\alpine64.vmwarevm\\alpine64.vmx
C:\\Users\\gbean\\CNT.2022.v1\\DT\\alp.m2\\alpine64.vmwarevm\\alpine64.vmx
C:\\Users\\gbean\\CNT.2022.v1\\DT\\alp.w1\\alpine64.vmwarevm\\alpine64.vmx
C:\\Users\\gbean\\CNT.2022.v1\\DT\\alp.w2\\alpine64.vmwarevm\\alpine64.vmx
C:\\Users\\gbean\\CNT.2022.v1\\DT\\alp.w3\\alpine64.vmwarevm\\alpine64.vmx&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;資科平台 管理主機 啟動畫面&lt;span class="hx:absolute hx:-mt-20" id="資科平台-管理主機-啟動畫面"&gt;&lt;/span&gt;
&lt;a href="#%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e7%ae%a1%e7%90%86%e4%b8%bb%e6%a9%9f-%e5%95%9f%e5%8b%95%e7%95%ab%e9%9d%a2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/j8WQwsz.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;登入 資科平台 管理主機&lt;span class="hx:absolute hx:-mt-20" id="登入-資科平台-管理主機"&gt;&lt;/span&gt;
&lt;a href="#%e7%99%bb%e5%85%a5-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e7%ae%a1%e7%90%86%e4%b8%bb%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 利用SSH指令連線到dtal的主機，使用者為: bigred
C:\Users\rbean\CNT.2022.v4&amp;gt; ssh bigred@192.168.116.3
The authenticity of host &amp;#39;192.168.72.3 (192.168.116.3)&amp;#39; can&amp;#39;t be established.
ECDSA key fingerprint is SHA256:Kkr7Pkjo&amp;#43;QclG7y4QqI3/saqgd8Su3u6H4DxHV3V3vU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added &amp;#39;192.168.116.3&amp;#39; (ECDSA) to the list of known hosts.
bigred@192.168.116.3&amp;#39;s password: bigred&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;資科平台 系統準備&lt;span class="hx:absolute hx:-mt-20" id="資科平台-系統準備"&gt;&lt;/span&gt;
&lt;a href="#%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0-%e7%b3%bb%e7%b5%b1%e6%ba%96%e5%82%99" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 在家目錄，下載資科平台的建置包，並解壓縮
$ cd; wget http://www.oc99.org/zip/vmalpdt2022.zip; unzip vmalpdt2022.zip
$ dir vmalpdt
total 20K
drwxr-sr-x 5 bigred bigred 4.0K Apr 25 10:13 .
drwxr-sr-x 7 bigred bigred 4.0K Apr 25 14:41 ..
drwxr-sr-x 2 bigred bigred 4.0K Mar 21 22:17 bin
drwxr-sr-x 5 bigred bigred 4.0K Apr 25 10:11 hdp210
drwxr-sr-x 5 bigred bigred 4.0K Apr 24 21:13 hdp33
$ cd ~/vmalpdt; dir hdp210
total 341M
drwxr-sr-x 5 bigred bigred 4.0K Apr 25 10:11 .
drwxr-sr-x 5 bigred bigred 4.0K Apr 25 10:13 ..
-rwxr-xr-x 1 bigred bigred 2.6K Apr 25 10:34 alpine.bash
drwxr-sr-x 2 bigred bigred 4.0K Mar 21 20:36 bin
drwxr-sr-x 7 bigred bigred 4.0K Apr 25 10:33 conf
-rw-r--r-- 1 bigred bigred 348 Apr 25 09:55 dlist
-rw-r--r-- 1 bigred bigred 889 Apr 25 10:36 environment
-rw-r--r-- 1 bigred bigred 341M Mar 21 20:42 hadoop-2.10.1.zip
drwxr-sr-x 2 bigred bigred 4.0K Apr 25 10:38 opt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;補充 SHell&lt;span class="hx:absolute hx:-mt-20" id="補充-shell"&gt;&lt;/span&gt;
&lt;a href="#%e8%a3%9c%e5%85%85-shell" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;執行env，看環境變數，可以看到終端機的設定&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ env
SHELL=/bin/bash # 看哪個shell程式，這裡是bash（重裝貝殼程式）
...
TERM=xterm-256color # 讓終端機在運作時可以有顏色
...
SSH_TTY=/dev/pts/1 # 虛擬終端機，這個終端機是給SSH通訊協定用的，/dev的全名是device&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;下載 DT 套件檔&lt;span class="hx:absolute hx:-mt-20" id="下載-dt-套件檔"&gt;&lt;/span&gt;
&lt;a href="#%e4%b8%8b%e8%bc%89-dt-%e5%a5%97%e4%bb%b6%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;檢視 下載資科平台套件 清單檔
$ cat hdp210/dlist
https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
https://dlcdn.apache.org/pig/pig-0.17.0/pig-0.17.0.tar.gz
https://dlcdn.apache.org/spark/spark-3.2.1/spark-3.2.1-bin-hadoop2.7.tgz
https://dlcdn.apache.org/hbase/2.4.11/hbase-2.4.11-bin.tar.gz
https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
開始 下載資科平台套件
$ ./bin/dtwget 210
apache-hive-3.1.3-bin.tar.gz ok
pig-0.17.0.tar.gz ok
spark-3.2.1-bin-hadoop2.7.tgz ok
hbase-2.4.11-bin.tar.gz ok
apache-zookeeper-3.6.3-bin.tar.gz ok
Hadoop-2.10.1 ok
[註] dtwget 主要是下載 DT 套件檔至 ~/vmalpdt/hdp33/opt 這目錄&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;複製 資料科技平台 套件檔&lt;span class="hx:absolute hx:-mt-20" id="複製-資料科技平台-套件檔"&gt;&lt;/span&gt;
&lt;a href="#%e8%a4%87%e8%a3%bd-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0-%e5%a5%97%e4%bb%b6%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ./bin/dtcopy 210
dta1 /opt/ ok
dta1 alpine.bash ok
dta1 environment ok
dta1 /etc/hosts ok
dtm1 /opt/ ok
dtm1: /opt/bin ok
dtm1 alpine.bash ok
dtm1 environment ok
dtm1 /etc/hosts ok
dtm2 /opt/ ok
dtm2 alpine.bash ok
dtm2 environment ok
dtm2 /etc/hosts ok
......
[註] dtcopy 主要是覆製 dta1 主機 /home/bigred/vmalpdt/hdp33/opt 這目錄至 dta1, dtm1, dtm2, dtw1, dtw2, dtw3 這三部主機的 /opt 目錄&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;複製 資料科技 平台 設定檔&lt;span class="hx:absolute hx:-mt-20" id="複製-資料科技-平台-設定檔"&gt;&lt;/span&gt;
&lt;a href="#%e8%a4%87%e8%a3%bd-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80-%e5%b9%b3%e5%8f%b0-%e8%a8%ad%e5%ae%9a%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ./bin/dtconf 210
dta1: apache-hive-3.1.3-bin config ok
dta1: apache-zookeeper-3.6.3-bin config ok
dta1: hadoop-2.10.1 config ok
dta1: hbase-2.4.11 config ok
dta1: spark-3.2.1-bin-hadoop2.7 config ok
dta1 /etc/profile ok
dtm1: apache-hive-3.1.3-bin config ok
dtm1: apache-zookeeper-3.6.3-bin config ok
dtm1: hadoop-2.10.1 config ok
dtm1: hbase-2.4.11 config ok
dtm1: spark-3.2.1-bin-hadoop2.7 config ok
dtm1 /etc/profile ok
dtm2: apache-hive-3.1.3-bin config ok
dtm2: apache-zookeeper-3.6.3-bin config ok
dtm2: hadoop-2.10.1 config ok
dtm2: hbase-2.4.11 config ok
dtm2: spark-3.2.1-bin-hadoop2.7 config ok
dtm2 /etc/profile ok
.........&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;檢測 資料科技 平台&lt;span class="hx:absolute hx:-mt-20" id="檢測-資料科技-平台"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%b8%ac-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80-%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ ./bin/dthdpchk 210
[dta1]
Hadoop 2.10.1
Native library checking:
hadoop: true /opt/hadoop-2.10.1/lib/native/libhadoop.so
zlib: true /lib/libz.so.1
snappy: true /usr/lib/libsnappy.so.1
zstd : false
lz4: true revision:10301
bzip2: true /usr/lib/libbz2.so.1
openssl: true /usr/lib/libcrypto.so
[dtm1]
Hadoop 2.10.1
Native library checking:
hadoop: true /opt/hadoop-2.10.1/lib/native/libhadoop.so
zlib: true /lib/libz.so.1
snappy: true /usr/lib/libsnappy.so.1
zstd : false
lz4: true revision:10301
bzip2: true /usr/lib/libbz2.so.1
openssl: true /usr/lib/libcrypto.so&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;格式化 HDFS 分散檔案系統&lt;span class="hx:absolute hx:-mt-20" id="格式化-hdfs-分散檔案系統"&gt;&lt;/span&gt;
&lt;a href="#%e6%a0%bc%e5%bc%8f%e5%8c%96-hdfs-%e5%88%86%e6%95%a3%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ sudo reboot
C:\Users\rbean\CNT.2022.v4&amp;gt; ssh bigred@192.168.116.3
bigred@192.168.116.3&amp;#39;s password: bigred
bigred@dta1:~$ formathdfs
Are you sure ? (YES/NO) YES
formathdfs ok&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;啟動 資科平台&lt;span class="hx:absolute hx:-mt-20" id="啟動-資科平台"&gt;&lt;/span&gt;
&lt;a href="#%e5%95%9f%e5%8b%95-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;啟動分散式檔案系統&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ starthdfs
dtm1: Name Node Started
dtm1: Secondary Name Node started
dtw1: Data Node started
dtw2: Data Node started
dtw3: Data Node started&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;啟動YARN&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ startyarn
dtm2: Resource Manager started
dtm2: Job History Server started
dtw1: Node Manager started
dtw2: Node Manager started
dtw3: Node Manager started&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;測試 資科平台&lt;span class="hx:absolute hx:-mt-20" id="測試-資科平台"&gt;&lt;/span&gt;
&lt;a href="#%e6%b8%ac%e8%a9%a6-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;測試資料科技平台有沒有問題，Hbase因為目前沒用到，所以沒啟動&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ dtest
[HDFS]
Live datanodes (3):
Name: 192.168.61.6:50010 (dtw1)
Name: 192.168.61.7:50010 (dtw2)
Name: 192.168.61.8:50010 (dtw3)
[YARN]
Total Nodes:3
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
dtw3:43493 RUNNING dtw3:8042 0
dtw1:40799 RUNNING dtw1:8042 0
dtw2:33379 RUNNING dtw2:8042 0
[MapReduce]
Estimated value of Pi is 3.14400000000000000000
[Spark]
Pi is roughly 3.145160
[HBase]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;關閉 資科平台&lt;span class="hx:absolute hx:-mt-20" id="關閉-資科平台"&gt;&lt;/span&gt;
&lt;a href="#%e9%97%9c%e9%96%89-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ stopyarn; stophdfs
dtw1: Node Manager stoped
dtw2: Node Manager stoped
dtw3: Node Manager stoped
dtm2: Job History Server stoped
dtm2: Resource Manager stoped
dtw1: Data Node stoped
dtw2: Data Node stoped
dtw3: Data Node stoped
dtm1: Secondary Name Node stoped
dtm1: Name Node stoped&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;關閉 資科平台基礎 虛擬主機&lt;span class="hx:absolute hx:-mt-20" id="關閉-資科平台基礎-虛擬主機"&gt;&lt;/span&gt;
&lt;a href="#%e9%97%9c%e9%96%89-%e8%b3%87%e7%a7%91%e5%b9%b3%e5%8f%b0%e5%9f%ba%e7%a4%8e-%e8%99%9b%e6%93%ac%e4%b8%bb%e6%a9%9f" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ exit
C:\Users\bigred\CNT.2022.v4&amp;gt;dt stop&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;Open Data 截取, 轉換及載入 (ETL)&lt;span class="hx:absolute hx:-mt-20" id="open-data-截取-轉換及載入-etl"&gt;&lt;/span&gt;
&lt;a href="#open-data-%e6%88%aa%e5%8f%96-%e8%bd%89%e6%8f%9b%e5%8f%8a%e8%bc%89%e5%85%a5-etl" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;取得機場、港口入出境人數統計資料集&lt;span class="hx:absolute hx:-mt-20" id="取得機場港口入出境人數統計資料集"&gt;&lt;/span&gt;
&lt;a href="#%e5%8f%96%e5%be%97%e6%a9%9f%e5%a0%b4%e6%b8%af%e5%8f%a3%e5%85%a5%e5%87%ba%e5%a2%83%e4%ba%ba%e6%95%b8%e7%b5%b1%e8%a8%88%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 &lt;strong&gt;Windows&lt;/strong&gt; 系統的 &lt;strong&gt;CMD&lt;/strong&gt; 視窗, 執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;透過SSH命令連到dta1主機
$ ssh bigred@&amp;lt;alp.dta1 IP&amp;gt;
建立目錄
$ mkdir -p ~/opendata/dip
用wget下載檔案，並且在家目錄命名為2016ip.zip
$ wget &amp;#39;https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=BC553073-6E98-47CC-92FA-6DB9720D9993&amp;#39; -O ~/2016dip.zip
--2022-04-28 13:18:48-- https://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx?DATA=BC553073-6E98-47CC-92FA-6DB9720D9993
Resolving data.moi.gov.tw (data.moi.gov.tw)... 117.56.7.114
Connecting to data.moi.gov.tw (data.moi.gov.tw)|117.56.7.114|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 38004 (37K) [application/zip]
Saving to: &amp;#39;/home/bigred/2016dip.zip&amp;#39;
/home/bigred/2016dip.zip 100%[=================================================&amp;gt;] 37.11K --.-KB/s in 0.008s
2022-04-28 13:18:49 (4.36 MB/s) - &amp;#39;/home/bigred/2016dip.zip&amp;#39; saved [38004/38004]
&amp;gt; \[註\] -O 下載後儲存至 /tmp/2016dip.zip 檔, 入出境人數網址：https://data.gov.tw/dataset/12369
bigred@dta1:~$ mkdir /tmp/data; cd /tmp/data; unzip ~/2016dip.zip
Archive: /home/bigred/2016dip.zip
inflating: 2016-DailyImmigPort-All.csv
inflating: file.csv
inflating: manifest.csv
extracting: schema-file.csv
bigred@dta1:/tmp/data$ dir
total 132K
drwxr-xr-x 2 bigred bigred 4.0K Apr 28 13:19 .
drwxrwxrwt 7 root root 4.0K Apr 28 13:19 ..
-rw-r--r-- 1 bigred bigred 111K May 3 2018 2016-DailyImmigPort-All.csv
-rw-r--r-- 1 bigred bigred 545 May 24 2018 file.csv
-rw-r--r-- 1 bigred bigred 59 Jan 29 2018 manifest.csv
-rw-r--r-- 1 bigred bigred 49 Jan 29 2018 schema-file.csv
$ mv 2016-DailyImmigPort-All.csv ~/opendata/dip/
$ cd; rm -r /tmp/data
檢視機場、港口入出境人數統計資料集
$ cd; head -n 3 opendata/dip/2016-DailyImmigPort-All.csv &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;整理機場、港口入出境人數統計資料集&lt;span class="hx:absolute hx:-mt-20" id="整理機場港口入出境人數統計資料集"&gt;&lt;/span&gt;
&lt;a href="#%e6%95%b4%e7%90%86%e6%a9%9f%e5%a0%b4%e6%b8%af%e5%8f%a3%e5%85%a5%e5%87%ba%e5%a2%83%e4%ba%ba%e6%95%b8%e7%b5%b1%e8%a8%88%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat ~/opendata/dip/2016-DailyImmigPort-All.csv | wc -l
368
$ tail -n &amp;#43;3 ~/opendata/dip/2016-DailyImmigPort-All.csv | head -n 1
20160101,128447,22808,25372,48180,23050,24914,47964,96144,6376,5928,12304,1722,587,2309,1,2,3,8,85,93,0,0,0,0,0,0,0,0,0,128,177,305,0,0,0,3664,3867,7531,2751,2960,5711,20,237,257,0,158,158,9,2,11,0,0,0,1478,2021,3499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,22,22,0,0,0,26,73,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,
移除前二行
$ tail -n &amp;#43;3 ~/opendata/dip/2016-DailyImmigPort-All.csv &amp;gt; 2016dip.csv
$ head -n 1 2016dip.csv
20160101,128447,22808,25372,48180,23050,24914,47964,96144,6376,5928,12304,1722,587,2309,1,2,3,8,85,93,0,0,0,0,0,0,0,0,0,128,177,305,0,0,0,3664,3867,7531,2751,2960,5711,20,237,257,0,158,158,9,2,11,0,0,0,1478,2021,3499,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,22,22,0,0,0,26,73,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; wget -qO - http://www.oc99.org/dt/getcsv.sh | bash
-q 代表靜音模式（不顯示指令輸出）
-O 將檔案輸出（大寫的O）
- 標準輸出裝置（利用螢幕作為輸出目標）
| bash 把輸出的內容丟給 bash 執行
結果：在螢幕裝置輸出，丟給 bash 執行，不會把程式下載下來，與顯示指令輸出
standard input 標準輸入｜代碼為 0 程式執行所需要的輸入資料
standard output 標準輸出｜代碼為 1、- 程式正常執行所產生的輸出資料
standard error output 標準錯誤輸出｜代碼為 2 程式出錯時通知使用者用的訊息，或是呈現程式狀態用的訊息&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo ~
/home/bigred&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;家目錄能存的檔案有限&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -ls /user
Found 1 items
drwxr-xr-x - bigred bigboss 0 2022-04-28 13:11 /user/bigred&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;我們的第二個家，是在HDFS檔案系統裡面，也有一個家目錄，他能存放的檔案比較多&lt;/p&gt;
&lt;p&gt;只要在linux系統裡面的家目錄，他的名字一定是/home，在HDFS檔案系統裡面，他的家目錄名字一定是/user&lt;/p&gt;
&lt;p&gt;檢查JAVA程式狀態&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hls
[dtm1]
3544 SecondaryNameNode ## 3544代表pid
3435 NameNode
[dtm2]
3500 ResourceManager
3550 JobHistoryServer
[dtw1]
4050 DataNode
4218 NodeManager
[dtw2]
4035 DataNode
4200 NodeManager
[dtw3]
4018 DataNode
4180 NodeManager&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;HDFS&lt;/strong&gt; 操作命令 (一)&lt;span class="hx:absolute hx:-mt-20" id="hdfs-操作命令-一"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e6%93%8d%e4%bd%9c%e5%91%bd%e4%bb%a4-%e4%b8%80" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;顯示使用者 HDFS 家目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ pig -e &amp;#39;pwd&amp;#39; 2&amp;gt;/dev/null # -e 是執行後面的pwd
hdfs://dtm1:8020/user/bigred # hdfs://dtm1:8020，代表dtm1的Name Node這個Java程式回答，port是8020&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;開啟pig模式，並且把pig的交談模式噴出的錯誤訊息和警告訊息丟到黑洞&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ pig 2&amp;gt;/dev/null
grunt&amp;gt; ls
hdfs://dtm1:8020/user/bigred/.sparkStaging &amp;lt;dir&amp;gt;
grunt&amp;gt; mkdir zzz #建立zzz目錄
grunt&amp;gt; ls
hdfs://dtm1:8020/user/bigred/.sparkStaging &amp;lt;dir&amp;gt;
hdfs://dtm1:8020/user/bigred/zzz &amp;lt;dir&amp;gt;
grunt&amp;gt; rm zzz #豬小弟的rm，可以直接刪目錄
grunt&amp;gt; ls
hdfs://dtm1:8020/user/bigred/.sparkStaging &amp;lt;dir&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;產生mydataset的目錄&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfbigred@dta1:~$ hdfs dfs -mkdir mydataset
bigred@dta1:~$ hdfs dfs -ls
Found 2 items
drwxr-xr-x - bigred bigboss 0 2022-04-28 13:12 .sparkStaging
drwxr-xr-x - bigred bigboss 0 2022-04-29 10:13 mydatasets dfs -mkdir mydataset&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;HDFS檔案系統是仿照linux檔案系統設計的，有些linux檔案系統的命令會沒有，例如&lt;code&gt;tree&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ head -n 2 ~/mycsv/customer.csv
4000001,Kristina,Chung,55,Pilot
4000002,Paige,Chen,74,Teacher
bigred@dta1:~$ hdfs dfs -put ~/mycsv/customer.csv mydataset/ ## 把linux檔案系統的家目錄的檔案，搬到HDFS檔案系統下的mydataset目錄下
bigred@dta1:~$ hdfs dfs -ls mydataset/ ## -ls 查看mydataset目錄下的子目錄和檔案
Found 1 items
-rw-r--r-- 2 bigred bigboss 695 2022-04-29 10:16 mydataset/customer.csv
bigred@dta1:~$ hdfs dfs -cat mydataset/customer.csv ## -cat 看檔案內容
4000001,Kristina,Chung,55,Pilot
4000002,Paige,Chen,74,Teacher
4000003,Sherri,Melton,34,Firefighter
4000004,Gretchen,Hill,66,Computer hardware engineer
4000005,Karen,Puckett,74,Lawyer
4000006,Patrick,Song,42,Veterinarian
4000007,Elsie,Hamilton,43,Pilot
4000008,Hazel,Bender,63,Carpenter
4000009,Malcolm,Wagner,39,Artist
4000010,Dolores,McLaughlin,60,Writer
4000011,Francis,McNamara,47,Therapist
4000012,Sandy,Raynor,26,Writer
4000013,Marion,Moon,41,Carpenter
4000014,Beth,Woodard,65,
4000015,Julia,Desai,49,Musician
4000016,Jerome,Wallace,52,Pharmacist
4000017,Neal,Lawrence,72,Computer support specialist
4000018,Jean,Griffin,45,Childcare worker
4000019,Kristine,Dougherty,63,Financial analyst&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;[重要] 管理目錄, 記得目錄名稱最後要加上 &amp;ldquo;/&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;練習&lt;span class="hx:absolute hx:-mt-20" id="練習"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;1.請在 HDFS 建立以下目錄架構 ?&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;mydataset
|--US
|--TW&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;答案：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -mkdir -p mydataset/{US,TW}
bigred@dta1:~$ hdfs dfs -ls mydataset
Found 3 items
drwxr-xr-x - bigred bigboss 0 2022-04-29 10:25 mydataset/TW
drwxr-xr-x - bigred bigboss 0 2022-04-29 10:25 mydataset/US
-rw-r--r-- 2 bigred bigboss 695 2022-04-29 10:16 mydataset/customer.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2.請將 Linux 的 /etc/hosts 檔案上傳至 HDFS 檔案系統的 mydataset/TW 目錄中&lt;/p&gt;
&lt;p&gt;答案：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -put /etc/hosts mydataset/TW
bigred@dta1:~$ hdfs dfs -ls mydataset/TW
Found 1 items
-rw-r--r-- 2 bigred bigboss 198 2022-04-29 10:28 mydataset/TW/hosts&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;HDFS&lt;/strong&gt; 操作命令 (二)&lt;span class="hx:absolute hx:-mt-20" id="hdfs-操作命令-二"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e6%93%8d%e4%bd%9c%e5%91%bd%e4%bb%a4-%e4%ba%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;檔案可以覆蓋&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -put ~/mycsv/customer.csv mydataset/
put: &amp;#39;mydataset/customer.csv&amp;#39;: File exists
bigred@dta1:~$ hdfs dfs -put -f ~/mycsv/customer.csv mydataset/
## -f ，force 強迫的意思&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檔案內容可增加&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -cat mydataset/customer.csv | wc -l
20
bigred@dta1:~$ hdfs dfs -appendToFile ~/mycsv/customer.csv mydataset/customer.csv
## -appendToFile 對已經存在的檔案，增加資料到裡面，從檔案內的最後一行開始增加
bigred@dta1:~$ hdfs dfs -cat mydataset/customer.csv | wc -l
40&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;103&lt;/strong&gt; 年大專校院名錄檔&lt;span class="hx:absolute hx:-mt-20" id="103-年大專校院名錄檔"&gt;&lt;/span&gt;
&lt;a href="#103-%e5%b9%b4%e5%a4%a7%e5%b0%88%e6%a0%a1%e9%99%a2%e5%90%8d%e9%8c%84%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## wget下載資料
bigred@dta1:~$ wget --no-check-certificate https://stats.moe.gov.tw/files/school/103/u1_new.txt
--2022-04-29 10:38:05-- https://stats.moe.gov.tw/files/school/103/u1_new.txt
Resolving stats.moe.gov.tw (stats.moe.gov.tw)... 140.111.34.86
Connecting to stats.moe.gov.tw (stats.moe.gov.tw)|140.111.34.86|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 26986 (26K) [text/plain]
Saving to: &amp;#39;u1_new.txt&amp;#39;
u1_new.txt 100%[====================================================================&amp;gt;] 26.35K --.-KB/s in 0.02s
2022-04-29 10:38:05 (1.42 MB/s) - &amp;#39;u1_new.txt&amp;#39; saved [26986/26986]
## file -bi 檢查檔案格式
bigred@dta1:~$ file -bi u1_new.txt
text/plain; charset=utf-16le
## 因為linux檔案系統是utf-8編碼，所以utf-16看到的是亂碼
bigred@dta1:~$ head -n 3 u1_new.txt
T3x[t^^&amp;#39;\!hb
T1z 0W@W q }@W Ԛ|%R&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;轉換資料格式
bigred@dta1:~$ iconv -f utf-16le -t utf8 u1_new.txt &amp;gt;103u.txt
顯示檔案內容
bigred@dta1:~$ head -n 10 103u.txt
﻿103學年度大專校院名錄
代碼 學校名稱 縣市名稱 地址 電話 網址 體系別
0001 國立政治大學 [38]臺北市 [116]臺北市文山區指南路二段64號 (02)29393091 http://www.nccu.edu.tw [1]一般
0002 國立清華大學 [18]新竹市 [300]新竹市東區光復路二段101號 (03)5715131 http://www.nthu.edu.tw [1]一般
0003 國立臺灣大學 [33]臺北市 [106]臺北市大安區羅斯福路四段1號 (02)33663366 http://www.ntu.edu.tw [1]一般
0004 國立臺灣師範大學 [33]臺北市 [106]臺北市大安區和平東路一段162號 (02)77341111 http://www.ntnu.edu.tw [3]師範
0005 國立成功大學 [21]臺南市 [701]臺南市東區大學路1號 (06)2757575 http://www.ncku.edu.tw [1]一般
0006 國立中興大學 [19]臺中市 [402]臺中市南區國光路250號 (04)22873181 http://www.nchu.edu.tw [1]一般
0007 國立交通大學 [18]新竹市 [300]新竹市東區大學路1001號 (03)5712121 http://www.nctu.edu.tw [1]一般
bigred@dta1:~$ hdfs dfs -put 103u.txt mydataset/103u.txt
bigred@dta1:~$ hdfs dfs -ls mydataset
Found 4 items
-rw-r--r-- 2 bigred bigboss 20807 2022-04-29 10:45 mydataset/103u.txt
drwxr-xr-x - bigred bigboss 0 2022-04-29 10:28 mydataset/TW
drwxr-xr-x - bigred bigboss 0 2022-04-29 10:25 mydataset/US
-rw-r--r-- 2 bigred bigboss 1390 2022-04-29 10:36 mydataset/customer.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;練習&lt;span class="hx:absolute hx:-mt-20" id="練習-1"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;1.先建立以下文字檔並上載至 HDFS 檔案系統
$ echo &amp;ldquo;224.2.2.2 ICRT&amp;rdquo; &amp;gt; radio.txt
$ hdfs dfs -put radio.txt mydataset/TW/&lt;/p&gt;
&lt;p&gt;請將 &amp;ldquo;224.1.1.1 FM989&amp;rdquo; 這行字串增加到，mydataset/TW/radio.txt 檔案的開頭&lt;/p&gt;
&lt;p&gt;答案：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ nano radio.txt
bigred@dta1:~$ hdfs dfs -put -f radio.txt mydataset/TW&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;只能在linux系統修改檔案內容，因為==Hadoop被設計出來就是要處理raw data的資料，所以不能在HDFS檔案系統裡面做修改，所以只能在linux檔案系統修改後，用&lt;code&gt;hdfs dfs -put -f&lt;/code&gt; 去覆蓋HDFS檔案系統裡面的檔案==&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;HDFS 協同作業系統&lt;span class="hx:absolute hx:-mt-20" id="hdfs-協同作業系統"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e5%8d%94%e5%90%8c%e4%bd%9c%e6%a5%ad%e7%b3%bb%e7%b5%b1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;HDFS 的誕生之初，就是提供給多人使用的環境&lt;/li&gt;
&lt;li&gt;當初是由哪個使用者格式化與部署 HDFS，控制權就在那位使用者上&lt;/li&gt;
&lt;li&gt;新增使用者流程
&lt;ul&gt;
&lt;li&gt;在 Linux 環境下建立使用者&lt;/li&gt;
&lt;li&gt;於 HDFS /user 新建對應的使用者家目錄&lt;/li&gt;
&lt;li&gt;將權限與群組轉移至對應使用者&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;實作：&lt;span class="hx:absolute hx:-mt-20" id="實作"&gt;&lt;/span&gt;
&lt;a href="#%e5%af%a6%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;在 &lt;strong&gt;dta1&lt;/strong&gt; 終端機, 建立兩個帳號rbean和gbean&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo -e &amp;#34;rbean\nrbean&amp;#34; | sudo adduser -h /home/rbean -s /bin/bash rbean
Changing password for rbean
New password:
Bad password: too short
Retype password:
passwd: password for rbean changed by root
bigred@dta1:~$ echo -e &amp;#34;gbean\ngbean&amp;#34; | sudo adduser -h /home/gbean -s /bin/bash gbean
Changing password for gbean
New password:
Bad password: too short
Retype password:
passwd: password for gbean changed by root&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如何檢查帳號有沒有建立成功&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ tail -n 5 /etc/passwd
qemu:x:36:34:Linux User,,,:/home/qemu:/sbin/nologin
openvpn:x:101:103:openvpn:/dev/null:/sbin/nologin
utmp:x:102:406:utmp:/home/utmp:/bin/false
rbean:x:1002:1002:Linux User,,,:/home/rbean:/bin/bash
gbean:x:1003:1003:Linux User,,,:/home/gbean:/bin/bash
## /bin/bash 代表這個使用者是使用重裝貝殼，
## 如果是使用sh簡易貝殼，沒辦法執行mkdir -p AAA/{bb,cc}，不支援左右大括弧
bigred@dta1:~$ ls -l /home
total 16
drwxr-sr-x 10 bigred bigred 4096 Apr 29 10:48 bigred
drwxr-sr-x 2 gbean gbean 4096 Apr 29 11:16 gbean
drwxr-sr-x 2 qemu kvm 4096 Sep 5 2020 qemu
drwxr-sr-x 2 rbean rbean 4096 Apr 29 11:16 rbean&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;哪個帳號 format HDFS,這帳號就會成為Hadoop檔案系統的管理者 ，而非root!
我們一開始是用bigred帳號format HDFS，所以HDFS檔案系統的管理者就是bigred !&lt;/strong&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -ls /user
Found 1 items
drwxr-xr-x - bigred bigboss 0 2022-04-29 10:13 /user/bigred
##建立使用者在HDFS檔案系統的家目錄
bigred@dta1:~$ hdfs dfs -mkdir -p /user/{bigred,rbean,gbean}
## 更改rbean他在HDFS檔案系統家目錄的權限
bigred@dta1:~$ hdfs dfs -chown rbean:rbean /user/rbean
## 更改gbean他在HDFS檔案系統家目錄的權限
bigred@dta1:~$ hdfs dfs -chown gbean:gbean /user/gbean
bigred@dta1:~$ hdfs dfs -ls /user
Found 3 items
drwxr-xr-x - bigred bigboss 0 2022-04-29 10:13 /user/bigred
drwxr-xr-x - gbean gbean 0 2022-04-29 11:31 /user/gbean
drwxr-xr-x - rbean rbean 0 2022-04-29 11:31 /user/rbean&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;補充練習：
在練習一個ybean，用另一個命令提示字元登入ybean&lt;/p&gt;
&lt;p&gt;先在bigred執行&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo -e &amp;#34;ybean\nybean&amp;#34; | sudo adduser -h /home/ybean -s /bin/bash ybean
Changing password for ybean
New password:
Bad password: too short
Retype password:
passwd: password for ybean changed by root&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;用另一個命令提示字元登入ybean&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;build derby database ... ok
ybean@dta1:~$ hdfs dfs -mkdir mydata
mkdir: `mydata&amp;#39;: No such file or directory
ybean@dta1:~$ hdfs dfs -ls
ls: `.&amp;#39;: No such file or directory
ybean@dta1:~$ hdfs dfs -ls /
Found 2 items
drwxrwxrwx - bigred bigboss 0 2022-04-27 15:26 /tmp
drwxr-xr-x - bigred bigboss 0 2022-04-29 11:31 /user
ybean@dta1:~$ &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;再回到bigred&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -mkdir -p /user/ybean
bigred@dta1:~$ hdfs dfs -chown ybean:ybean /user/ybean&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;再回到ybean&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;ybean@dta1:~$ hdfs dfs -ls
ybean@dta1:~$ hdfs dfs -mkdir mydataset
ybean@dta1:~$ pig 2&amp;gt;/dev/null
grunt&amp;gt; pwd
hdfs://dtm1:8020/user/ybean
grunt&amp;gt; ls
hdfs://dtm1:8020/user/ybean/mydataset &amp;lt;dir&amp;gt;
grunt&amp;gt; quit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;練習結束&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;透過bigred使用者，在HDFS檔案系統的根目錄，建立dataset&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -mkdir /dataset
bigred@dta1:~$ hdfs dfs -put mycsv/customer.csv /dataset&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在另一個終端機，登入rbean&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;Welcome to DT Platform Version 21.08 (Alpine Linux : 3.15.4)
IP : 192.168.61.3
build derby database ... ok
rbean@dta1:~$ hdfs dfs -ls /dataset
Found 1 items
-rw-r--r-- 2 bigred bigboss 695 2022-04-29 13:02 /dataset/customer.csv
rbean@dta1:~$ hdfs dfs -rm /dataset/customer.csv
rm: Permission denied: user=rbean, access=WRITE, inode=&amp;#34;/dataset&amp;#34;:bigred:bigboss:drwxr-xr-x
rbean@dta1:~$ pig -e &amp;#39;pwd&amp;#39; 2&amp;gt;/dev/null
hdfs://dtm1:8020/user/rbean
rbean@dta1:~$ hdfs dfs -mkdir mydata
rbean@dta1:~$ hdfs dfs -ls /user/rbean
Found 1 items
drwxr-xr-x - rbean rbean 0 2022-04-29 13:10 /user/rbean/mydata
rbean@dta1:~$ hdfs dfs -cp /dataset/customer.csv mydata/
rbean@dta1:~$ hdfs dfs -ls mydata/
Found 1 items
-rw-r--r-- 2 rbean rbean 695 2022-04-29 13:13 mydata/customer.csv
rbean@dta1:~$ hdfs dfs -rm mydata/customer.csv
Deleted mydata/customer.csv
rbean@dta1:~$ hdfs dfs -rm -r mydata/
Deleted mydata&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ lake.schema
/raw/ (bigred:bigboss,755) #放原始資料
/elt/ (bigred:bigboss,755) #過濾程式
/dataset/ existed #過濾後的資料
/apps/ (bigred:bigboss,755) #application
/metadata/ (bigred:bigboss,755) #資料庫的schdma宣告檔
/tmp/hive created (Jupyter) #
/tmp (777) #跑YARN一定會放在/tmp，要設定成 777 權限，YARN 才能使用
執行完成&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;設定 HDFS Access Control List&lt;span class="hx:absolute hx:-mt-20" id="設定-hdfs-access-control-list"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a-hdfs-access-control-list" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ hdfs getconf -confKey dfs.namenode.acls.enabled
true
#檢查Access Control有沒有啟動
#設定rbean在HDFS檔案系統裡的/apps目錄裡面擁有最高權限
# -setfacl 可以針對某資料夾修改特定對象的權限
bigred@dta1:~$ hdfs dfs -setfacl -m user:rbean:rwx /apps/
#檢查
bigred@dta1:~$ hdfs dfs -getfacl /apps
# file: /apps
# owner: bigred
# group: bigboss
user::rwx
user:rbean:rwx
group::r-x
mask::rwx
other::r-x&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;看見 HDFS 底層運作&lt;span class="hx:absolute hx:-mt-20" id="看見-hdfs-底層運作"&gt;&lt;/span&gt;
&lt;a href="#%e7%9c%8b%e8%a6%8b-hdfs-%e5%ba%95%e5%b1%a4%e9%81%8b%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;&lt;strong&gt;HDFS&lt;/strong&gt; 系統資訊&lt;span class="hx:absolute hx:-mt-20" id="hdfs-系統資訊"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e7%b3%bb%e7%b5%b1%e8%b3%87%e8%a8%8a" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在資料管理師bigred執行&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfsadmin -report
Configured Capacity: 1578782097408 (1.44 TB)
Present Capacity: 1488026882048 (1.35 TB)
DFS Remaining: 1488025145344 (1.35 TB)
DFS Used: 1736704 (1.66 MB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (3):
Name: 192.168.61.6:50010 (dtw1)
Hostname: dtw1
Decommission Status : Normal
Configured Capacity: 526260699136 (490.12 GB)
DFS Used: 729088 (712 KB)
Non DFS Used: 3538210816 (3.30 GB)
DFS Remaining: 495917797376 (461.86 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.23%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri Apr 29 15:16:12 CST 2022
Last Block Report: Fri Apr 29 13:28:13 CST 2022
Name: 192.168.61.7:50010 (dtw2)
Hostname: dtw2
Decommission Status : Normal
Configured Capacity: 526260699136 (490.12 GB)
DFS Used: 573440 (560 KB)
Non DFS Used: 3538227200 (3.30 GB)
DFS Remaining: 495917936640 (461.86 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.23%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri Apr 29 15:16:13 CST 2022
Last Block Report: Fri Apr 29 13:33:14 CST 2022
Name: 192.168.61.8:50010 (dtw3)
Hostname: dtw3
Decommission Status : Normal
Configured Capacity: 526260699136 (490.12 GB)
DFS Used: 434176 (424 KB)
Non DFS Used: 3266891776 (3.04 GB)
DFS Remaining: 496189411328 (462.11 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.29%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri Apr 29 15:16:11 CST 2022
Last Block Report: Fri Apr 29 11:22:13 CST 2022&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;HDFS 分散檔案系統 - 寫入檔案&lt;span class="hx:absolute hx:-mt-20" id="hdfs-分散檔案系統---寫入檔案"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e5%88%86%e6%95%a3%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1---%e5%af%ab%e5%85%a5%e6%aa%94%e6%a1%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/enDyACY.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;File.txt是使用wget抓下來的&lt;/p&gt;
&lt;p&gt;hdfs dfs -put File.txt /dataset
檔案要丟到HDFS檔案系統裡面，一定要在本機被切割，每128M被切一塊，切好後才能傳到HDFS&lt;/p&gt;
&lt;p&gt;以圖片有三個區塊（block）為例，File.txt的檔案大小為 256 &amp;lt; 大小 &amp;lt;= 384&lt;/p&gt;
&lt;p&gt;Client透過網路連到dtm1和Name Node這個Java程式說話，
請Name Node，告訴我，我的3個區塊的資料要存到哪裡？&lt;/p&gt;
&lt;p&gt;他說，你的第一個block，要存在第一機櫃(Rack)的第一個server的Data Node，同時也要存在第五個機櫃的第五和第六個server的Data Node&lt;/p&gt;
&lt;p&gt;代表1個block要存3個機器，3個block就會有可能用到9台機器&lt;/p&gt;
&lt;p&gt;以我們上課的環境為例，dtw1,dtw2和dtw3分別要存1個block的資料&lt;/p&gt;
&lt;p&gt;Hadoop 實際使用觀念&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在建立系統時，要優先確保寫入的資料大小，並以此為基礎乘以三倍準備硬碟&lt;/li&gt;
&lt;li&gt;絕對不行減少寫入的 Block 冗余，不要依靠神明系統&lt;/li&gt;
&lt;li&gt;目標要有 10TB 要存放，因為每個 Block 會需要存放在三台 Data Node 至少需要 30TB&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;client端（dta1）告知Name Node要存幾個block&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;檔案要上傳到HDFS前會在Client進行切割 Client向Name Node詢問到存放位置後，會將資料上傳 假如獲得的位置是Blk A到Data Node 1、5、6，則會先將Blk A傳到Data Node 1，Data Node 1接收到&amp;quot;64k&amp;quot;後會將檔案往後傳到Data Node 5，Data Node 5接收到64k後會將檔案往後傳到Data Node 6&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3&gt;HDFS 分散式檔案系統 - 讀取檔案&lt;span class="hx:absolute hx:-mt-20" id="hdfs-分散式檔案系統---讀取檔案"&gt;&lt;/span&gt;
&lt;a href="#hdfs-%e5%88%86%e6%95%a3%e5%bc%8f%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1---%e8%ae%80%e5%8f%96%e6%aa%94%e6%a1%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/Xg3nHZI.png" alt="" loading="lazy" /&gt;
client跟Name Node說，請告訴我result.txt這個檔案的所有block的locations的清單，
Name Node的功能就是決定block存在哪裡，所以Name Node會把以下的清單內容：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;block A = 1,5,6 ##意思就是說分別存在3台有Data Node的主機
block B = 8,1,2
block C = 5,8,9&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;回報給client，client收到資料後，就會自己去讀取資料，而不是Name Node去讀取．&lt;/p&gt;
&lt;p&gt;這裡產生一個問題，client要去哪讀資料？&lt;/p&gt;
&lt;p&gt;答：把Name Node給的清單抓第一個順位，意思就是說block A的區塊，他會找第一個機器要，block B的區塊，他會找第八台機器的Data Node要來讀，block C的區塊，他會找第五台機器的Data Node讀取&lt;/p&gt;
&lt;p&gt;client端會到這3台電腦，同時讀取這3塊資料，把這3個block的資料都讀回來，這時候我們就會有result.txt的所有內容&lt;/p&gt;
&lt;p&gt;如果一個block掛了，其他機器的block就會頂上．&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果client端要讀取10T的檔案，clent能成功嗎？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;client端是工程師在用的電腦，10TB的資料就要有10TB的硬碟，一台個人電腦要有10TB的硬碟，總價約落在3萬到4萬，公司是不會配給這魔好的設備，而且讀取完10TB的資料還要分析，記憶體也要有一定的水準，所以以上的架構檔案不能太大，不然很難成行&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;當有3個人同時要讀取result.txt，Name Node給的block位置會一樣嗎？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不一樣，當第一個人要讀取result.txt時，Name Node會給的清單第一順位是1,8,5，當第二個人要讀取result.txt時，Name Node會給的清單第一順位是5,1,8，當第三個人要讀取result.txt時，Name Node會給的清單第一順位是6,2,9，當第四個人要讀取result.txt時，Name Node會給的清單第一順位是1,8,5，以上依此類推，這個運作模式就是平衡負載(round robin)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;HDFS檔案系統有容錯，有平衡負載，write once（寫一次） read many（多人讀取）&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;Name Node 目錄內容&lt;span class="hx:absolute hx:-mt-20" id="name-node-目錄內容"&gt;&lt;/span&gt;
&lt;a href="#name-node-%e7%9b%ae%e9%8c%84%e5%85%a7%e5%ae%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;nn，為 Name Node (Java程式)所使用的目錄，來儲存它要管理的資料
bigred@dta1:~$ ssh dtm1 tree nn
nn
├── current
│   ├── VERSION
│   ├── edits_0000000000000000001-0000000000000000009
│   ├── edits_0000000000000000010-0000000000000000011
│   ├── edits_inprogress_0000000000000000012
│   ├── fsimage_0000000000000000000
│   ├── fsimage_0000000000000000000.md5
│   └── seen_txid
└── in_use.lock
1 directory, 10 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;fsimage 稱之為 Meta Data 是目錄和檔案的屬性資料（包含目錄的擁有者、使用者權限、檔案紀錄、檔案的大小等）
針對 HDFS 所下的指令紀錄 &amp;raquo; 會記錄在 edits_inprogress_*&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;HDFS檔案系統運作架構的資訊&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ ssh dtm1 cat nn/current/VERSION
#Mon May 02 10:12:02 CST 2022
namespaceID=985719912 ## Hdfs的身份證號碼，namespace為一個運作空間
clusterID=cute ## cluster 聯邦，意思就是說每一個同學都有自己一套Hadoop系統、一套HDFS檔案系統？？？
cTime=1651044227924 ## 紀錄創立時間，以格林威治時間（1924 年 2 月 5 日）為起點，用秒數表達，紀錄儲存的形式
storageType=NAME_NODE ## Name Node在處理
blockpoolID=BP-1851199489-192.168.61.4-1651044227924 ##這個是給Data Node識別用的一個ID
layoutVersion=-63 ##二進位在表示版本代號&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;&lt;strong&gt;Data Node&lt;/strong&gt; 目錄內容&lt;span class="hx:absolute hx:-mt-20" id="data-node-目錄內容"&gt;&lt;/span&gt;
&lt;a href="#data-node-%e7%9b%ae%e9%8c%84%e5%85%a7%e5%ae%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;同樣的Data Node可以幫多台Name Node服務&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ ssh dtw1 tree dn
dn
├── current
│   ├── BP-1851199489-192.168.61.4-1651044227924 ## 192.168.61.4 為dtm1的IP位址，這個目錄的意思就是說，他會幫忙在dtm1上的Name Node存取資料
│   │   ├── current
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   │   └── subdir0
│   │   │   │   └── subdir0
│   │   │   │   ├── blk_1073741829
│   │   │   │   ├── blk_1073741829_1009.meta
│   │   │   │   ├── blk_1073741830
│   │   │   │   ├── blk_1073741830_1010.meta
│   │   │   │   ├── blk_1073741831
│   │   │   │   └── blk_1073741831_1011.meta
│   │   │   ├── rbw
│   │   │   └── VERSION
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;由blk_1073741829這個檔案名稱可以得知，blk_1~9，總共有10位數，代表Hadoop總共最大可以儲存的檔案大小為9999999999*128MB = 1280PB&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;HDFS檔案系統由Name Node以及Data Node來做整個檔案系統的資料處理，
- Name Node他的重要資訊存在nn目錄
- Data Node的檔案資料存在多台dtw1、dtw2和dtw3裡面的dn目錄區&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3&gt;檢視 &lt;strong&gt;NameNode MetaData&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="檢視---namenode-metadata"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96---namenode-metadata" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Meta Data是HDFS檔案系統的整個目錄以及檔案的重要資訊 &amp;raquo; fsimage檔&lt;/p&gt;
&lt;p&gt;在看Meta Data之前，首先要先檢查HDFS有沒有啟動&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hls
pls start HDFS first or fomathdfs
## 如果出現這行，代表HDFS檔案系統沒有啟動
bigred@dta1:~$ starthdfs ## 啟動HDFS檔案系統
dtm1: Name Node Started
dtm1: Secondary Name Node started
dtw1: Data Node started
dtw2: Data Node started
dtw3: Data Node started&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;先確認目前擁有的資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ ssh dtw1 tree dn
dn
├── current
│   ├── BP-1851199489-192.168.61.4-1651044227924
│   │   ├── current
│   │   │   ├── VERSION
│   │   │   ├── dfsUsed
│   │   │   ├── finalized
│   │   │   │   └── subdir0
│   │   │   │   └── subdir0
│   │   │   │   ├── blk_1073741836
│   │   │   │   ├── blk_1073741836_1012.meta
│   │   │   │   ├── blk_1073741837
│   │   │   │   ├── blk_1073741837_1013.meta
│   │   │   │   ├── blk_1073741856
│   │   │   │   ├── blk_1073741856_1032.meta
│   │   │   │   ├── blk_1073741857
│   │   │   │   ├── blk_1073741857_1033.meta
│   │   │   │   ├── blk_1073741864
│   │   │   │   ├── blk_1073741864_1040.meta
│   │   │   │   ├── blk_1073741866
│   │   │   │   ├── blk_1073741866_1042.meta
│   │   │   │   ├── blk_1073741867
│   │   │   │   ├── blk_1073741867_1044.meta
│   │   │   │   ├── blk_1073741868
│   │   │   │   ├── blk_1073741868_1045.meta
│   │   │   │   ├── blk_1073741870
│   │   │   │   ├── blk_1073741870_1047.meta
│   │   │   │   ├── blk_1073741873
│   │   │   │   ├── blk_1073741873_1050.meta
│   │   │   │   ├── blk_1073741874
│   │   │   │   ├── blk_1073741874_1051.meta
│   │   │   │   ├── blk_1073741875
│   │   │   │   ├── blk_1073741875_1052.meta
│   │   │   │   ├── blk_1073741876
│   │   │   │   └── blk_1073741876_1053.meta
│   │   │   └── rbw
│   │   ├── scanner.cursor
│   │   └── tmp
│   └── VERSION
└── in_use.lock
8 directories, 31 files
bigred@dta1:~$
bigred@dta1:~$
bigred@dta1:~$
bigred@dta1:~$
bigred@dta1:~$ hls
[dtm1]
25123 NameNode
25231 SecondaryNameNode
[dtm2]
4540 ResourceManager
4591 JobHistoryServer
[dtw1]
25068 DataNode
5262 NodeManager
[dtw2]
25187 DataNode
5242 NodeManager
[dtw3]
5222 NodeManager
25023 DataNode
bigred@dta1:~$ stopyarn ; stophdfs
dtw1: Node Manager stoped
dtw2: Node Manager stoped
dtw3: Node Manager stoped
dtm2: Job History Server stoped
dtm2: Resource Manager stoped
dtw1: Data Node stoped
dtw2: Data Node stoped
dtw3: Data Node stoped
dtm1: Secondary Name Node stoped
dtm1: Name Node stoped
bigred@dta1:~$ hls
pls start HDFS first or fomathdfs
bigred@dta1:~$ starthdfs
dtm1: Name Node Started
dtm1: Secondary Name Node started
dtw1: Data Node started
dtw2: Data Node started
dtw3: Data Node started
bigred@dta1:~$ ssh dtm1 tree nn
nn
├── current
│   ├── VERSION
│   ├── edits_0000000000000000001-0000000000000000002
......
│   ├── edits_0000000000000000624-0000000000000000625
│   ├── edits_inprogress_0000000000000000626
│   ├── fsimage_0000000000000000622
│   ├── fsimage_0000000000000000622.md5
│   ├── fsimage_0000000000000000623
│   ├── fsimage_0000000000000000623.md5 ## 目前最新的資料是625
│   └── seen_txid
└── in_use.lock
1 directory, 81 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;立即更新 fsimage，讓Hdfs檔案系統進入安全模式&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;安全模式：只能讀取已存在HDFS檔案系統中的檔案，不能新增、修改和刪除資料。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfsadmin -safemode enter
Safe mode is ON&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;會立即將記憶體中的資料寫入一個新的 fsimage 檔中&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfsadmin -saveNamespace
Save namespace successful&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;檢查 最新的fsimage馬上變627&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ ssh dtm1 tree nn
nn
├── current
│   ├── VERSION
│   ├── edits_0000000000000000001-0000000000000000002
......
│   ├── edits_0000000000000000626-0000000000000000627
│   ├── edits_inprogress_0000000000000000628
│   ├── fsimage_0000000000000000623
│   ├── fsimage_0000000000000000623.md5
│   ├── fsimage_0000000000000000627
│   ├── fsimage_0000000000000000627.md5 ## 最新的馬上變627
│   └── seen_txid
└── in_use.lock
1 directory, 82 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;離開安全模式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfsadmin -safemode leave
Safe mode is OFF&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;取出 fsimage 檔, 並將之轉換成 csv 格式檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfsadmin -fetchImage /tmp/
## -fetchImage ， fetch是抓取的意思，也就是說把剛剛產生最新的fsimage檔案，拷貝到/tmp目錄
## 其實也可以用linux檔案系統的cp命令，但檔案名稱太長太麻煩了。
bigred@dta1:~$ dir /tmp/fsimage*
-rw-r--r-- 1 bigred bigred 5.0K May 2 11:29 /tmp/fsimage.csv
-rw-r--r-- 1 bigred bigred 3.7K May 3 00:07 /tmp/fsimage_0000000000000000627&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;HDFS Offline Image Viewer&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs oiv -i /tmp/fsimage_0000000000000000627 -o /tmp/fsimage.csv -p Delimited -delimiter &amp;#34;,&amp;#34;
## oiv這個指令是把&amp;#34;/tmp/fsimage_0000000000000000562&amp;#34;這個二進位檔案輸出成CSV文字檔，欄位之間用&amp;#34;,&amp;#34;做分割
bigred@dta1:~$ head -n 10 /tmp/fsimage2.csv
Path,Replication,ModificationTime,AccessTime,PreferredBlockSize,BlocksCount,FileSize,NSQUOTA,DSQUOTA,Permission,UserName,GroupName
/,0,2022-04-29 14:28,1970-01-01 08:00,0,0,0,9223372036854775807,-1,drwxr-xr-x,bigred,bigboss
/tmp,0,2022-05-02 15:48,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn,0,2022-04-27 15:25,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging,0,2022-04-27 15:26,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history,0,2022-04-27 15:25,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done,0,2022-04-27 15:28,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwx,bigred,bigboss
/tmp/hadoop-yarn/staging/history/done_intermediate,0,2022-04-27 15:26,1970-01-01 08:00,0,0,0,-1,-1,drwxrwxrwt,bigred,bigboss
/user,0,2022-04-29 15:01,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
/user/bigred,0,2022-04-29 10:13,1970-01-01 08:00,0,0,0,-1,-1,drwxr-xr-x,bigred,bigboss
## 以上就是meta data裡面的內容&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;練習&lt;span class="hx:absolute hx:-mt-20" id="練習-2"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;hdfs dfs -touchz /tmp/zzz
用-touchz命令在/tmp中產生zzz檔
要在fsimage.csv中看到zzz的屬性&lt;/p&gt;
&lt;p&gt;答：&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;在Hdfs檔案系統新增/tmp/zzz
bigred@dta1:~$ hdfs dfs -touchz /tmp/zzz
進入安全模式
bigred@dta1:~$ hdfs dfsadmin -safemode enter
Safe mode is ON
立即將記憶體中剛剛新增的空檔案寫入一個新的 fsimage 檔中
bigred@dta1:~$ hdfs dfsadmin -saveNamespace
Save namespace successful
離開安全模式
bigred@dta1:~$ hdfs dfsadmin -safemode leave
Safe mode is OFF
取出 剛剛新增的fsimage 檔，放到/tmp目錄下
bigred@dta1:~$ hdfs dfsadmin -fetchImage /tmp/
檢查有沒有新增一個fsimage 檔案
bigred@dta1:~$ dir /tmp/fsimage*
-rw-r--r-- 1 bigred bigred 5.0K May 2 11:29 /tmp/fsimage.csv
-rw-r--r-- 1 bigred bigred 3.4K May 2 11:26 /tmp/fsimage_0000000000000000562
-rw-r--r-- 1 bigred bigred 3.4K May 2 11:41 /tmp/fsimage_0000000000000000566
轉換成 csv 格式檔
bigred@dta1:~$ hdfs oiv -i /tmp/fsimage_0000000000000000566 -o /tmp/fsimage1.csv -p Delimited -delimiter &amp;#34;,&amp;#34;
檢查更新內容
bigred@dta1:~$ cat /tmp/fsimage1.csv
...
/tmp/zzz,2,2022-05-02 11:39,2022-05-02 11:39,134217728,0,0,0,0,-rw-r--r--,bigred,bigboss&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;edits檔案會紀錄Transcation的動作&lt;span class="hx:absolute hx:-mt-20" id="edits檔案會紀錄transcation的動作"&gt;&lt;/span&gt;
&lt;a href="#edits%e6%aa%94%e6%a1%88%e6%9c%83%e7%b4%80%e9%8c%84transcation%e7%9a%84%e5%8b%95%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtm1:~$ tree -h nn/current
nn/current
├── [ 180] VERSION
...
├── [ 42] edits_0000000000000000567-0000000000000000568
├── [1.0M] edits_inprogress_0000000000000000569 ##要看這個檔案
├── [3.3K] fsimage_0000000000000000562
├── [ 62] fsimage_0000000000000000562.md5
├── [3.4K] fsimage_0000000000000000566
├── [ 62] fsimage_0000000000000000566.md5
└── [ 4] seen_txid
0 directories, 66 files&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt; hdfs oev -i /home/bigred/nn/current/edits_inprogress_0000000000000000569 -o edits.xml -p XML&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;core-site.xml&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="core-sitexml"&gt;&lt;/span&gt;
&lt;a href="#core-sitexml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ sudo nano /opt/hadoop-2.10.1/etc/hadoop/core-site.xml
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;fs.defaultFS&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hdfs://dtm1:8020&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;fs.default.name&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hdfs://dtm1:8020&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;io.compression.codecs&amp;lt;/name&amp;gt;
## 宣告name node在哪，有兩種名稱的宣告，
## fs.defaultFS: 舊的親朋好友專案習慣使用此名稱
## fs.default.name: 新的親朋好友專案習慣使用此名稱
## 以上都是宣告Hdfs他在dtm1的機器，port號是：8020
&amp;lt;value&amp;gt;org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.GzipCodec&amp;lt;/val&amp;gt; &amp;lt;/property&amp;gt;
## 上面這條是hdfs裡面有哪些演算法
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;hadoop.user.group.static.mapping.overrides&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;hbase=bigboss;rbean=soup;gbean=soup,rice;ybean=rice&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
## 這邊的宣告與linux檔案系統不同&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;&lt;strong&gt;hdfs-site.xml&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="hdfs-sitexml"&gt;&lt;/span&gt;
&lt;a href="#hdfs-sitexml" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ sudo nano /opt/hadoop-2.10.1/etc/hadoop/hdfs-site.xml
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&amp;lt;?xml-stylesheet type=&amp;#34;text/xsl&amp;#34; href=&amp;#34;configuration.xsl&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt; ## 2代表block會儲存兩份
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.name.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;file:/home/bigred/nn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.datanode.data.dir&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;file:/home/bigred/dn&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.permissions.superusergroup&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;bigboss&amp;lt;/value&amp;gt; ## 具有管理權限的群組
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;dfs.namenode.acls.enabled&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;YARN 分散運算系統運作圖&lt;span class="hx:absolute hx:-mt-20" id="yarn-分散運算系統運作圖"&gt;&lt;/span&gt;
&lt;a href="#yarn-%e5%88%86%e6%95%a3%e9%81%8b%e7%ae%97%e7%b3%bb%e7%b5%b1%e9%81%8b%e4%bd%9c%e5%9c%96" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/bAvTo9Z.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;啟動yarn之後(startyarn) 每個node manager會回報給resource manager他在執行的那台電腦所擁有的運算資源（CPU和記憶體）&lt;/p&gt;
&lt;p&gt;resource manager應該要有總量的運算數字出來&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;檢視 YARN 總量運算資源&lt;span class="hx:absolute hx:-mt-20" id="檢視-yarn-總量運算資源"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e8%a6%96-yarn-%e7%b8%bd%e9%87%8f%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 dta1 執行以下命令&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ curl -s http://dtm2:8088/ws/v1/cluster/metrics | jq | grep -E &amp;#34;totalMB|totalVirtualCores&amp;#34;
&amp;#34;totalMB&amp;#34;: 6144,
&amp;#34;totalVirtualCores&amp;#34;: 6,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;curl，使用 HTTP Protocol 獲取資料
-s，Silent mode 安靜模式
metrics (存放運算資源總數)
jq，全名jason query，處理 JSON 文件的工具，query是查詢的意思
grep -E，多項目搜尋（模式為左右擴展）
[重點] YARN 系統內定每部 Node Manager 的記憶體為 8G, CPU 為 8 Core
DTM2:8088執行甚麼JAVA程式 答案是RESOURCE MANAGER/ 另一個JAVA程式是JOB SERVER&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;使用 curl -s 指令去索取 dtm2 機器中的 metrics 文件(存放運算資源總數)，利用 jq 指令處理，把JSON格式化成人在看的資料，交由 grep -E 將 totalMB、totalVirtualCores 這兩個項目呈現到螢幕上&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;設定單一 Node Manager 運算資源&lt;span class="hx:absolute hx:-mt-20" id="設定單一-node-manager-運算資源"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a%e5%96%ae%e4%b8%80-node-manager-%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ cat vmalpdt/hdp210/conf/hadoop-2.10.1/yarn-site.xml
&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;
&amp;lt;configuration&amp;gt;
......
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.memory-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2048&amp;lt;/value&amp;gt; ##設定node manager他的運算資源，記憶體只能用2Ｇ
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.cpu-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt; ##設定node manager他的運算資源，CPＵ兩個核心
&amp;lt;/property&amp;gt;
.......&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;這個設定檔要存在哪幾台機器？
&lt;strong&gt;以上的設定檔，是給dtw1,dtw2,dtw3裡面的node manager Java程式讀取的&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat vmalpdt/hdp210/conf/hadoop-2.10.1/yarn-site.xml
........
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.minimum-allocation-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt; ## YARN系統裡每一個Java程式能夠使用的記憶體大小最少384mb
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.maximum-allocation-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;896&amp;lt;/value&amp;gt; ## YARN系統裡每一個Java程式能夠使用的記憶體大小最多896mb
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.minimum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.scheduler.maximum-allocation-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
..........&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Scheduler 的功能是 Resource Manager 做的，所以Scheduler ＝ Resource Manager ，而Resource Manager在dtm2上面執行&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;因為resource manager他已經得到整個運算資源的總量數字（有多少記憶體可以用，有多少CPU可以用），他會來開始管控，我們的resource manager真正最主要的工作是幫我們執行我們寫的Java程式，YARN他是一個分散式運算系統，它負責要來跑我們要寫的程式，他要來執行我們的程式，所以對要執行的程式所需要用到的記憶體和CPU做使用的上限與下限設定。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;YARN這個運算系統，他現在有一個運算總量（有多少記憶體可以用、有多少CPU可以用），當他幫我們跑程式時，我們的程式記憶體最多896，最少384mb，CPU一核心&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;windows系統只要一啟動，就會執行很多服務(程式)，這些服務會共用電腦的CPU，所以CPU越好，程式跑得越快&lt;/p&gt;
&lt;h3&gt;練習：設定記憶體總量: 9216 mb和 CPU 總量: 6c&lt;span class="hx:absolute hx:-mt-20" id="練習設定記憶體總量-9216-mb和-cpu-總量-6c"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92%e8%a8%ad%e5%ae%9a%e8%a8%98%e6%86%b6%e9%ab%94%e7%b8%bd%e9%87%8f-9216-mb%e5%92%8c-cpu-%e7%b8%bd%e9%87%8f-6c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;首先更改yarn-site.xml設定檔
bigred@dta1:~$ nano vmalpdt/hdp210/conf/hadoop-2.10.1/yarn-site.xml
...
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.memory-mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;3072&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;yarn.nodemanager.resource.cpu-vcores&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
...
停止yarn運算系統
bigred@dta1:~$ stopyarn
dtw1: Node Manager stoped
dtw2: Node Manager stoped
dtw3: Node Manager stoped
dtm2: Job History Server stoped
dtm2: Resource Manager stoped
把新的yarn-site.xml的設定檔拷貝到每台機器
bigred@dta1:~$ dtconf 210
dta1: apache-hive-3.1.3-bin config ok
dta1: apache-zookeeper-3.6.3-bin config ok
dta1: hadoop-2.10.1 config ok
dta1: hbase-2.4.11 config ok
dta1: spark-3.2.1-bin-hadoop2.7 config ok
dta1 /etc/profile ok
dtm1: apache-hive-3.1.3-bin config ok
dtm1: apache-zookeeper-3.6.3-bin config ok
dtm1: hadoop-2.10.1 config ok
dtm1: hbase-2.4.11 config ok
dtm1: spark-3.2.1-bin-hadoop2.7 config ok
dtm1 /etc/profile ok
dtm2: apache-hive-3.1.3-bin config ok
dtm2: apache-zookeeper-3.6.3-bin config ok
dtm2: hadoop-2.10.1 config ok
dtm2: hbase-2.4.11 config ok
dtm2: spark-3.2.1-bin-hadoop2.7 config ok
dtm2 /etc/profile ok
dtw1: apache-hive-3.1.3-bin config ok
dtw1: apache-zookeeper-3.6.3-bin config ok
dtw1: hadoop-2.10.1 config ok
dtw1: hbase-2.4.11 config ok
dtw1: spark-3.2.1-bin-hadoop2.7 config ok
dtw1 /etc/profile ok
dtw2: apache-hive-3.1.3-bin config ok
dtw2: apache-zookeeper-3.6.3-bin config ok
dtw2: hadoop-2.10.1 config ok
dtw2: hbase-2.4.11 config ok
dtw2: spark-3.2.1-bin-hadoop2.7 config ok
dtw2 /etc/profile ok
dtw3: apache-hive-3.1.3-bin config ok
dtw3: apache-zookeeper-3.6.3-bin config ok
dtw3: hadoop-2.10.1 config ok
dtw3: hbase-2.4.11 config ok
dtw3: spark-3.2.1-bin-hadoop2.7 config ok
dtw3 /etc/profile ok
啟動YARN運算系統
bigred@dta1:~$ startyarn
dtm2: Resource Manager started
dtm2: Job History Server started
dtw1: Node Manager started
dtw2: Node Manager started
dtw3: Node Manager started
檢查運算資源總量
bigred@dta1:~$ curl -s http://dtm2:8088/ws/v1/cluster/metrics | jq | grep -E &amp;#34;totalMB|totalVirtualCores&amp;#34;
&amp;#34;totalMB&amp;#34;: 9216,
&amp;#34;totalVirtualCores&amp;#34;: 6,&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;MapReduce 資料處理引擎&lt;span class="hx:absolute hx:-mt-20" id="mapreduce-資料處理引擎"&gt;&lt;/span&gt;
&lt;a href="#mapreduce-%e8%b3%87%e6%96%99%e8%99%95%e7%90%86%e5%bc%95%e6%93%8e" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;font color=red&gt;&lt;strong&gt;MapReduce要啟動有一個必要條件，給他一個程式才能跑，程式只要一跑完，MapReduce就會關閉&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;Mapreduce 叢集運作架構圖&lt;span class="hx:absolute hx:-mt-20" id="mapreduce-叢集運作架構圖"&gt;&lt;/span&gt;
&lt;a href="#mapreduce-%e5%8f%a2%e9%9b%86%e9%81%8b%e4%bd%9c%e6%9e%b6%e6%a7%8b%e5%9c%96" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/chybTVU.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;MapReduce處理1GB的檔案(=1024MB)
1024MB/128MB(Block上限)=8個blocks
又每個block存3份，因此3台Work Node都有8個blocks&lt;/p&gt;
&lt;p&gt;YARN會平均在Work Node上啟動8個Map程式，做平行處理
Node Manager會告訴Resource Manager其運算資源量(CPU,Memory)&lt;/p&gt;
&lt;p&gt;dtw1處理blk1,blk2,blk3 (3個MAP程式)
dtw2處理blk4,blk5,blk6 (3個MAP程式)
dtw3處理blk7,blk8 (2個MAP程式)&lt;/p&gt;
&lt;p&gt;==&lt;strong&gt;有幾個block就會有幾個Map程式&lt;/strong&gt;==&lt;/p&gt;
&lt;p&gt;一個Map程式會對一個block的資料做擷取和過濾的動作，程式跑完會output結果到硬碟裡面（小白區塊），這時候MapReduce就會啟動Shuffle這個program（由Hadoop團隊寫的），透過網路傳到其中一台Work Node中的Shuffle接收做Merge分類和排序（大白區塊），完了以後再經過Reduce處理分析，最後會把分析完的結果存到HDFS檔案系統&lt;/p&gt;
&lt;p&gt;yarn系統，可以同時執行的數量越大，就可以一輪處理更多的資料&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/uN8doRn.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;多個 Block 的好處，可以實現多程式處理相同資料的框架
YARN 要盡可能的將每台 Worker Node 能執行的程式量放到最大，但當多人運作碰上運算瓶頸時，還是會有排隊等待的狀況
3.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一個檔案分成多個 Block 的好處：
&lt;ul&gt;
&lt;li&gt;可以實現平行運算處理，在一個程式作業的時間內完成所有動作，而不是輪替執行&lt;/li&gt;
&lt;li&gt;可以實現多使用者、多程式處理的需求&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;YARN 要盡可能的將每台 Worker Node 能執行的程式量放到最大，但當多人運作碰上運算瓶頸時，還是會有排隊等待的狀況&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3&gt;設定 MapReduce Job 的運算資源&lt;span class="hx:absolute hx:-mt-20" id="設定-mapreduce-job-的運算資源"&gt;&lt;/span&gt;
&lt;a href="#%e8%a8%ad%e5%ae%9a-mapreduce-job-%e7%9a%84%e9%81%8b%e7%ae%97%e8%b3%87%e6%ba%90" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat /opt/hadoop-2.10.1/etc/hadoop/mapred-site.xml
..........
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.reduce.memory.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;512&amp;lt;/value&amp;gt; ##
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.reduce.java.opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx384m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.map.memory.mb&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;384&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property&amp;gt;
&amp;lt;name&amp;gt;mapreduce.map.java.opts&amp;lt;/name&amp;gt;
&amp;lt;value&amp;gt;-Xmx256m&amp;lt;/value&amp;gt;
&amp;lt;/property&amp;gt;
........
[註] 一般 reduce 設定為 map 的兩倍。Just make sure you set java.opts to 20-25% less than memory.mb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;補充Java程式的介紹&lt;span class="hx:absolute hx:-mt-20" id="補充java程式的介紹"&gt;&lt;/span&gt;
&lt;a href="#%e8%a3%9c%e5%85%85java%e7%a8%8b%e5%bc%8f%e7%9a%84%e4%bb%8b%e7%b4%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/eJ5tjmK.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class="hx:absolute hx:-mt-20" id=""&gt;&lt;/span&gt;
&lt;a href="#" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ yarn jar /opt/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar pi 2 100000
## *.jar是壓縮檔
## pi 是jar檔裡面的程式
## 2是用兩個map去跑
## 100000是10萬個座標&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;Java process&lt;span class="hx:absolute hx:-mt-20" id="java-process"&gt;&lt;/span&gt;
&lt;a href="#java-process" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ ssh dtm1 jps # j代表java，p代表process
49648 Jps
55751 SecondaryNameNode
55641 NameNode
bigred@dta1:~$ ssh dtw2 jps -v # -v，可以看到java程式的參數
54827 DataNode -Dproc_datanode -Xmx1000m -Djava.library.path=/opt/hadoop-2.10.1/lib/native -Dhadoop.log.dir=/tmp -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/opt/hadoop-2.10.1 -Dhadoop.id.str= -Dhadoop.root.logger=ERROR,console -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/tmp -Dhadoop.log.file=hadoop-bigred-datanode-dtw2.log -Dhadoop.home.dir=/opt/hadoop-2.10.1 -Dhadoop.id.str=bigred -Dhadoop.root.logger=ERROR,console -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Dhadoop.security.logger=INFO,RFAS
## -Dproc_datanode -Xmx1000m -，代表可以使用的記憶體有1Ｇ
46395 Jps -Dapplication.home=/usr/lib/jvm/java-1.8-openjdk -Xms8m
95930 NodeManager -Dproc_nodemanager -Xmx1000m -Dhadoop.log.dir=/tmp -Dyarn.log.dir=/tmp -Dhadoop.log.file=yarn-bigred-nodemanager-
dtw2.log -Dyarn.log.file=yarn-bigred-nodemanager-dtw2.log -Dyarn.home.dir=/opt/hadoop-2.10.1 -Dhadoop.home.dir=/opt/hadoop-2.10.1 -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
for n in dtw1 dtw2 dtw3
do
ssh $n &amp;#39;nohup maxjps.log &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;#39;
##nohup，當跑到第一台機器時，執行後面的maxjps.log &amp;amp;&amp;gt;/dev/null ＆，做完後，
##會不中斷第一台的機器連線，跑到第二台機器再次執行nohup maxjps.log &amp;amp;&amp;gt;/dev/null &amp;amp;，
##之後依此類推
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;*.zip in HDFS&lt;span class="hx:absolute hx:-mt-20" id="zip-in-hdfs"&gt;&lt;/span&gt;
&lt;a href="#zip-in-hdfs" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/prpoBW2.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;由於壓縮檔的特性，所以將壓縮檔存入 HDFS 後就不能針對 Block 進行解壓縮&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;結論：HDFS可以對ZIP檔存檔，但不能在裡面解壓縮
&lt;img src="https://i.imgur.com/Gqq4XAI.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;從 data.csv 讀取檔案 &amp;raquo; 輸出內部結構為每一個 Block 為 100KB 的壓縮檔案
&lt;img src="https://i.imgur.com/pbOFvp9.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>RDD</title><link>https://blog.kubeantony.com/archive/data-platform/rdd/</link><pubDate>Tue, 17 May 2022 05:10:10 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/rdd/</guid><description>
&lt;h1&gt;目錄&lt;/h1&gt;&lt;h2&gt;&lt;strong&gt;認識 Resilient Distributed Datasets&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="認識-resilient-distributed-datasets"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%8d%e8%ad%98-resilient-distributed-datasets" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;14:50&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Resilient
This means fault-tolerant. By using RDD lineage graph(DAG), we can recompute missing or damaged partitions due to node failures.
有彈性的運算機制，有部分 Node 下線不需要重新運算&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Distributed
It means data resides on multiple nodes.
具備多點同時處理資料的特性&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dataset
It is nothing but a record of the data you work with. Also, a user can load the dataset externally. For example, JSON file, CSV file, text file or database via JDBC with no specific data structure.
可處理資料型態相對 Hive、Pig 多樣化&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;資料在處理的過程都會放在記憶體裡面處理，所以處理速度會比放在硬碟處理快&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;MapReduce 在運算時部分 Node 故障下線，MapReduce 會用剩下的 Node 去重新處理資料&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;認識 RDD Operations&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="認識-rdd-operations"&gt;&lt;/span&gt;
&lt;a href="#%e8%aa%8d%e8%ad%98-rdd-operations" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Transformations 
Spark Transformation is a function that produces new RDD from the existing RDDs. It takes RDD as input and produces one or more RDD as output. Each time it creates new RDD when we apply any transformation. Thus, the so input RDDs, cannot be changed since RDD are immutable in nature.&lt;/p&gt;
&lt;p&gt;Transformations are lazy in nature i.e., they get execute when we call an action. They are not executed immediately. Two most basic type of transformations is a map(), filter().&lt;/p&gt;
&lt;p&gt;After the transformation, the resultant RDD is always different from its parent RDD. It can be smaller (e.g. filter, count, distinct, sample), bigger (e.g. flatMap(), union(), Cartesian()) or the same size (e.g. map).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;當此指令出現時，不會立即處理分析，會先做記錄&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Actions
Transformations create RDDs from each other, but when we want to work with the actual dataset, at that point action is performed. When the action is triggered after the result, new RDD is not formed like transformation. Thus, Actions are Spark RDD operations that give non-RDD values. The values of action are stored to drivers or to the external storage system. It brings laziness of RDD into motion.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;當此指令出現時，整個資料的分析流程才會開始&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Spark在執行的過程當中，會提供一些功能，當我們程式在執行時，他只會&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;Spark RDD 程式設計&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="spark-rdd-程式設計"&gt;&lt;/span&gt;
&lt;a href="#spark-rdd-%e7%a8%8b%e5%bc%8f%e8%a8%ad%e8%a8%88" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;&lt;strong&gt;以交付模式執行&lt;code&gt; spkrdd1.py&lt;/code&gt; 分析程式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="以交付模式執行"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%a5%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;在 Windows 系統的 cmd.exe 視窗, 執行以下命令
$ ssh bigred@&amp;lt;dta1 ip&amp;gt;
bigred@172.16.119.3&amp;#39;s password: bigred
$ echo $&amp;#39;from pyspark import SparkConf
from pyspark import SparkContext
conf = SparkConf()
conf.setAppName(\&amp;#39;spkrdd1\&amp;#39;)
sc = SparkContext(conf=conf)
## Transformations動作
lines = sc.parallelize([&amp;#34;hello world&amp;#34;, &amp;#34;hi&amp;#34;])
## 宣告這行目前尚未被執行，等等的line會被空格做切割
words = lines.flatMap(lambda line: line.split(\&amp;#39; \&amp;#39;))
## fisrt ，是rdd的action命令
print (words.first())&amp;#39; &amp;gt; spkrdd1.py
[註] 上式的 $ 會將 \&amp;#39; 轉換成 &amp;#39;
$ spark-submit --master yarn spkrdd1.py
hello&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;以交付模式執行 &lt;code&gt;spkrdd2.py&lt;/code&gt; 分析程式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="以交付模式執行-1"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%a5%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $&amp;#39;from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.setAppName(\&amp;#39;spkrdd2\&amp;#39;)
sc = SparkContext(conf=conf)
words = sc.parallelize (
[&amp;#34;scala&amp;#34;,&amp;#34;java&amp;#34;,&amp;#34;hadoop&amp;#34;,&amp;#34;spark&amp;#34;,&amp;#34;akka&amp;#34;,&amp;#34;spark vs hadoop&amp;#34;,&amp;#34;pyspark&amp;#34;,
&amp;#34;pyspark and spark&amp;#34;]
)
words_filter = words.filter(lambda x: \&amp;#39;spark\&amp;#39; in x)
## count()，為action命令，執行到這行，上面的word和words_filter才會執行
counts = words_filter.count()
print (&amp;#34;Number of elements filtered -&amp;gt; %i&amp;#34; % (counts))&amp;#39; &amp;gt; spkrdd2.py
$ spark-submit spkrdd2.py
Number of elements filtered -&amp;gt; 4&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;&lt;strong&gt;以交付模式執行 &lt;code&gt;spkrdd3.py&lt;/code&gt; 分析程式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="以交付模式執行-2"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%a5%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c-2" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;echo $&amp;#39;from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.setAppName(\&amp;#39;spkrdd2\&amp;#39;)
sc = SparkContext(conf=conf)
words = sc.parallelize (
[&amp;#34;scala&amp;#34;,&amp;#34;java&amp;#34;,&amp;#34;hadoop&amp;#34;,&amp;#34;spark&amp;#34;,&amp;#34;akka&amp;#34;,&amp;#34;spark vs hadoop&amp;#34;,&amp;#34;pyspark&amp;#34;,
&amp;#34;pyspark and spark&amp;#34;]
)
words_filter = words.filter(lambda x: \&amp;#39;spark\&amp;#39; in x)
counts = words_filter.count()
words_filter.saveAsTextFile(&amp;#34;myword&amp;#34;)
x = sc.textFile(&amp;#34;myword&amp;#34;)
print (x.take(counts))&amp;#39; &amp;gt; spkrdd3.py
$ spark-submit spkrdd3.py
[&amp;#39;spark&amp;#39;, &amp;#39;spark vs hadoop&amp;#39;, &amp;#39;pyspark&amp;#39;, &amp;#39;pyspark and spark&amp;#39;]
$ spark-submit spkrdd3.py
...
Output directory hdfs://dtm1:8020/user/bigred/myword already exists
...
$ hdfs dfs -rm -r myword
Deleted myword
$ spark-submit spkrdd3.py
[&amp;#39;spark&amp;#39;, &amp;#39;spark vs hadoop&amp;#39;, &amp;#39;pyspark&amp;#39;, &amp;#39;pyspark and spark&amp;#39;]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;strong&gt;檢測 RDD Partition&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="檢測-rdd-partition"&gt;&lt;/span&gt;
&lt;a href="#%e6%aa%a2%e6%b8%ac-rdd-partition" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ wget &amp;#34;http://www.oc99.org/dt/dataset/goodword.zip&amp;#34; &amp;amp;&amp;gt;/dev/null
bigred@dta1:~$ unzip goodword.zip
Archive: goodword.zip
inflating: goodword.txt
bigred@dta1:~$ dir goodword.txt
-rw-r--r-- 1 bigred bigred 626M Sep 2 2021 goodword.txt
bigred@dta1:~$ hdfs dfs -put goodword.txt mydataset/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;626MB的檔案被切成5個block，所以總共要啟動5個task&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ nano goodwords.py
from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.setAppName(&amp;#39;wordcount&amp;#39;)
sc = SparkContext(conf=conf)
words = sc.textFile(&amp;#34;/user/bigred/mydataset/goodword.txt&amp;#34;).flatMap(lambda line: line.split(&amp;#34; &amp;#34;))
print(&amp;#34;parallelize : &amp;#34;&amp;#43;str(words.getNumPartitions()))
# count the occurrence of each word
wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a,b:a&amp;#43;b)
wf = wordCounts.coalesce(1)
wf.saveAsTextFile(&amp;#34;/user/bigred/mydataset/wordcount&amp;#34;)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 未指定一個Excuter多少core
bigred@dta1:~$ time spark-submit goodwords.py
parallelize : 5
real 1m30.657s
user 0m9.530s
sys 0m11.988s
同時開另一個終端機下hls
bigred@dta1:~$ hls
[dtm1]
181104 NameNode
181339 SecondaryNameNode
[dtm2]
48403 ResourceManager
48554 JobHistoryServer
[dtw1]
216720 YarnCoarseGrainedExecutorBackend
204667 NodeManager
181803 DataNode
[dtw2]
26142 DataNode
50014 NodeManager
[dtw3]
50960 NodeManager
26484 DataNode
63191 YarnCoarseGrainedExecutorBackend
63035 ExecutorLauncher
[dta1]
216029 SparkSubmit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;未指定一個Excuter多少core&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ time spark-submit --num-executors 3 goodwords.py
parallelize : 5
real 1m8.794s
user 0m10.798s
sys 0m5.279s
同時開另一個終端機下hls
bigred@dta1:~$ hls
[dtm1]
181104 NameNode
181339 SecondaryNameNode
[dtm2]
48403 ResourceManager
48554 JobHistoryServer
[dtw1]
218278 YarnCoarseGrainedExecutorBackend
204667 NodeManager
181803 DataNode
[dtw2]
63537 ExecutorLauncher
26142 DataNode
50014 NodeManager
63679 YarnCoarseGrainedExecutorBackend
[dtw3]
50960 NodeManager
26484 DataNode
64838 YarnCoarseGrainedExecutorBackend
[dta1]
218019 SparkSubmit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;指定一個Excuter 2 core&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ time spark-submit --num-executors 3 --executor-cores 2 goodwords.py
parallelize : 5
real 0m51.977s
user 0m10.105s
sys 0m7.079s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2&gt;Spark SQL&lt;span class="hx:absolute hx:-mt-20" id="spark-sql"&gt;&lt;/span&gt;
&lt;a href="#spark-sql" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;&lt;strong&gt;交付模式執行 &lt;code&gt;spksql1.py&lt;/code&gt; 分析程式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="交付模式執行"&gt;&lt;/span&gt;
&lt;a href="#%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;json，全名：JavaScript Object Notation
Java語言對於物件的描述，他很適合用來表達我們的資料，而這個格式就是json&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;瀏覽器要運作有4大天王：html + dom + JavaScript + css
由 HTML 描述 DOM 再由 JavaScript 操作並使用 CSS 塑造外觀
以上4個都會可以去當web developer
如果只會html + css 可以去當 web ui（不過需要顏色配置上的天賦），因為主要是在設計整個網站的介面&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;產生一個json資料檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $&amp;#39;{&amp;#34;name&amp;#34;:&amp;#34;Michael&amp;#34;}
{&amp;#34;name&amp;#34;:&amp;#34;Andy&amp;#34;,&amp;#34;age&amp;#34;:30}
{&amp;#34;name&amp;#34;:&amp;#34;Justin&amp;#34;,&amp;#34;age&amp;#34;:19}&amp;#39; &amp;gt; pepole.json&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;一個左大括號與一個右大括號為一筆資料&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;## 將資料丟到Hdfs檔案系統
bigred@dta1:~$ hdfs dfs -put pepole.json
bigred@dta1:~$ echo $&amp;#39;from pyspark.sql import SparkSession
&amp;gt; spark = SparkSession.builder.getOrCreate() ## 這行能讓我們等一下馬上創造出table
&amp;gt; df=spark.read.json(&amp;#34;pepole.json&amp;#34;) ## 資料表的schema
&amp;gt; df.show()&amp;#39; &amp;gt; spksql1.py
bigred@dta1:~$ spark-submit spksql1.py
&amp;#43;----&amp;#43;-------&amp;#43;
| age| name|
&amp;#43;----&amp;#43;-------&amp;#43;
|null|Michael|
| 30| Andy|
| 19| Justin|
&amp;#43;----&amp;#43;-------&amp;#43;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;&lt;strong&gt;以交付模式執行 &lt;code&gt;spksql2.py&lt;/code&gt; 分析程式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="以交付模式執行-3"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%a5%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c-3" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;編輯json檔格式的資料&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo $&amp;#39;from pyspark.sql import SparkSession
&amp;gt; spark = SparkSession.builder.getOrCreate()
&amp;gt; df=spark.read.json(&amp;#34;pepole.json&amp;#34;)
&amp;gt; df.printSchema()
&amp;gt;
&amp;gt; df.select(df[&amp;#34;name&amp;#34;],df[&amp;#34;age&amp;#34;]&amp;#43;1).show()
&amp;gt;
&amp;gt; df.filter(df[&amp;#34;age&amp;#34;]&amp;gt;20).show() &amp;#39; &amp;gt; spksql2.py&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;透過Spark執行剛剛的json檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ spark-submit spksql2.py
root
|-- age: long (nullable = true)
|-- name: string (nullable = true)
&amp;#43;-------&amp;#43;---------&amp;#43;
| name|(age &amp;#43; 1)|
&amp;#43;-------&amp;#43;---------&amp;#43;
|Michael| null|
| Andy| 31|
| Justin| 20|
&amp;#43;-------&amp;#43;---------&amp;#43;
&amp;#43;---&amp;#43;----&amp;#43;
|age|name|
&amp;#43;---&amp;#43;----&amp;#43;
| 30|Andy|
&amp;#43;---&amp;#43;----&amp;#43;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;&lt;strong&gt;交付模式執行 &lt;code&gt;spksql3.py&lt;/code&gt; 分析程式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="交付模式執行-1"&gt;&lt;/span&gt;
&lt;a href="#%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c-1" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;編輯一個json檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo $&amp;#39;from pyspark.sql import SparkSession
&amp;gt;
&amp;gt; spark = SparkSession.builder.getOrCreate()
&amp;gt; df=spark.read.json(&amp;#34;pepole.json&amp;#34;)
&amp;gt;
&amp;gt; df.groupBy(&amp;#34;age&amp;#34;).count().show()
&amp;gt; df.sort(df[&amp;#34;age&amp;#34;].desc()).show()&amp;#39; &amp;gt; spksql3.py&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;透過Spark執行剛剛的json檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ spark-submit --master yarn spksql3.py
&amp;#43;----&amp;#43;-----&amp;#43;
| age|count|
&amp;#43;----&amp;#43;-----&amp;#43;
| 19| 1|
|null| 1|
| 30| 1|
&amp;#43;----&amp;#43;-----&amp;#43;
&amp;#43;----&amp;#43;-------&amp;#43;
| age| name|
&amp;#43;----&amp;#43;-------&amp;#43;
| 30| Andy|
| 19| Justin|
|null|Michael|
&amp;#43;----&amp;#43;-------&amp;#43;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;&lt;strong&gt;以交付模式執行 &lt;code&gt;spksql4.py&lt;/code&gt; 分析程式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="以交付模式執行-4"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%a5%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c-4" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;編輯一個json檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ echo $&amp;#39;from pyspark.sql import SparkSession
&amp;gt; spark = SparkSession.builder.getOrCreate()
&amp;gt; spark.conf.set(&amp;#34;spark.sql.shuffle.partitions&amp;#34;, 1)
&amp;gt;
&amp;gt; df=spark.read.json(&amp;#34;pepole.json&amp;#34;)
&amp;gt;
&amp;gt; dfs=df.sort(df[&amp;#34;age&amp;#34;].desc())
&amp;gt; dfs.write.format(&amp;#34;json&amp;#34;).save(&amp;#34;pepole_sort.json&amp;#34;)&amp;#39; &amp;gt; spksql4.py&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;執行與檢查&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bigred@dta1:~$ spark-submit spksql4.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bigred@dta1:~$ hdfs dfs -ls pepole_sort.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Found &lt;span class="m"&gt;2&lt;/span&gt; items
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- &lt;span class="m"&gt;2&lt;/span&gt; bigred bigboss &lt;span class="m"&gt;0&lt;/span&gt; 2022-05-17 01:55 pepole_sort.json/_SUCCESS
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- &lt;span class="m"&gt;2&lt;/span&gt; bigred bigboss &lt;span class="m"&gt;71&lt;/span&gt; 2022-05-17 01:55 pepole_sort.json/part-00000-fa7c1b97-e38b-4805-bd34-d2bf15a78a1d-c000.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bigred@dta1:~$ hdfs dfs -cat pepole_sort.json/part-00000-fa7c1b97-e38b-4805-bd34-d2bf15a78a1d-c000.json
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;age&amp;#34;&lt;/span&gt;:30,&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;Andy&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;age&amp;#34;&lt;/span&gt;:19,&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;Justin&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;:&lt;span class="s2"&gt;&amp;#34;Michael&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;&lt;strong&gt;以交付模式執行 &lt;code&gt;spksql5.py&lt;/code&gt; 分析程式&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="以交付模式執行-5"&gt;&lt;/span&gt;
&lt;a href="#%e4%bb%a5%e4%ba%a4%e4%bb%98%e6%a8%a1%e5%bc%8f%e5%9f%b7%e8%a1%8c-5" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;編輯一個json檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ echo $&amp;#39;from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
df=spark.read.json(&amp;#34;pepole.json&amp;#34;)
df.createOrReplaceTempView(&amp;#34;pepole_table&amp;#34;)
df.cache()
resultsDF = spark.sql(&amp;#34;SELECT * FROM pepole_table&amp;#34;)
resultsDF.show(2)&amp;#39; &amp;gt; spksql5.py&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;可以直接飆SQL Command&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;執行&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ spark-submit --master yarn spksql5.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+----+-------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; age&lt;span class="p"&gt;|&lt;/span&gt; name&lt;span class="p"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+----+-------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt;null&lt;span class="p"&gt;|&lt;/span&gt;Michael&lt;span class="p"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;|&lt;/span&gt; 30&lt;span class="p"&gt;|&lt;/span&gt; Andy&lt;span class="p"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+----+-------+
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;only showing top &lt;span class="m"&gt;2&lt;/span&gt; rows&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;==&lt;strong&gt;研究Spark看文章看到&lt;code&gt;spark = SparkSession.builder.getOrCreate()&lt;/code&gt;這行，再去閱讀那篇文章&lt;/strong&gt;==&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;GroupLens&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="grouplens"&gt;&lt;/span&gt;
&lt;a href="#grouplens" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;&lt;strong&gt;整理與檢視 u.data 資料集&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="整理與檢視-udata---資料集"&gt;&lt;/span&gt;
&lt;a href="#%e6%95%b4%e7%90%86%e8%88%87%e6%aa%a2%e8%a6%96-udata---%e8%b3%87%e6%96%99%e9%9b%86" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ wget &amp;#39;https://files.grouplens.org/datasets/movielens/ml-100k.zip&amp;#39; &amp;amp;&amp;gt;/dev/null
bigred@dta1:~$ unzip ml-100k.zip &amp;amp;&amp;gt;/dev/null
bigred@dta1:~$ head -n 3 ml-100k/u.data
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
## user id | item id | rating | timestamp.
上傳 u.data 至 HDFS
bigred@dta1:~$ hdfs dfs -mkdir -p mydataset/ml; hdfs dfs -put ml-100k/u.data mydataset/ml/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;撰寫與執行 &lt;code&gt;myML01.py&lt;/code&gt;&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano myML01.py
from pyspark import SparkConf, SparkContext
conf = SparkConf()
conf.setAppName(&amp;#39;spkml&amp;#39;)
sc = SparkContext(conf=conf)
## 資料讀取到 Executor 的記憶體中
rdd = sc.textFile(&amp;#34;/dataset/ml/u.data&amp;#34;)
## &amp;#39;\t&amp;#39; 代表 Tab，[:3] 代表只取三個欄位
raw_ratings = rdd.map(lambda line: line.split(&amp;#34;\t&amp;#34;)[:3])
## 計數資料數量
print (raw_ratings.count())
## 取兩筆資料顯示
print (raw_ratings.take(2))
## 取出參與者筆數（不重複）
num_users = raw_ratings.map(lambda x: x[0]).distinct().count()
## 取出電影筆數（不重複）
num_movies = raw_ratings.map(lambda x: x[1]).distinct().count()
## 顯示上兩個數值
print (num_users,num_movies)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bigred@dta1:~$ spark-submit myML01.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;100000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;196&amp;#39;&lt;/span&gt;, &lt;span class="s1"&gt;&amp;#39;242&amp;#39;&lt;/span&gt;, &lt;span class="s1"&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;186&amp;#39;&lt;/span&gt;, &lt;span class="s1"&gt;&amp;#39;302&amp;#39;&lt;/span&gt;, &lt;span class="s1"&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;943&lt;/span&gt; &lt;span class="m"&gt;1682&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3&gt;&lt;strong&gt;撰寫 &lt;code&gt;myML-2m.py&lt;/code&gt;&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="撰寫"&gt;&lt;/span&gt;
&lt;a href="#%e6%92%b0%e5%af%ab" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ nano myML-2m.py
from pyspark import SparkConf, SparkContext
from pyspark.mllib.recommendation import ALS
conf = SparkConf()
conf.setAppName(&amp;#39;spkml&amp;#39;)
sc = SparkContext(conf=conf)
rdd = sc.textFile(&amp;#34;mydataset/ml/u.data&amp;#34;)
raw_ratings = rdd.map(lambda line: line.split(&amp;#34;\t&amp;#34;)[:3])
# alternating least squares (ALS) algorithm
model = ALS.train(raw_ratings, 10, 10, 0.01)
# User ID 為 10, 有興趣的 5 部 Movie
print (model.recommendProducts(10,5))
# User ID 為 10, 對 Movie 793 的興趣
print (model.predict(10,793))
# Movie 200 有興趣的 5 位 User
print (model.recommendUsers(product=200,num=5))&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ spark-submit myML-2m.py
[Rating(user=10, product=1643, rating=5.256996914990797), Rating(user=10, product=1131, rating=5.14216181023412), Rating(user=10, product=1449, rating=5.124614615562111), Rating(user=10, product=318, rating=5.0720185300899265), Rating(user=10, product=1169, rating=5.0102908782616735)]
3.336593846280392
[Rating(user=86, product=200, rating=5.889509864929162), Rating(user=547, product=200, rating=5.729359529809475), Rating(user=153, product=200, rating=5.622134384555626), Rating(user=61, product=200, rating=5.618051883323263), Rating(user=762, product=200, rating=5.5938395090862105)]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;練習實作&lt;span class="hx:absolute hx:-mt-20" id="練習實作"&gt;&lt;/span&gt;
&lt;a href="#%e7%b7%b4%e7%bf%92%e5%af%a6%e4%bd%9c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ hdfs dfs -ls -h mydataset/ml-25m/
Found 1 items
-rw-r--r-- 2 bigred bigboss 646.8 M 2022-05-17 03:09 mydataset/ml-25m/ratings.csv&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>實測資科平台</title><link>https://blog.kubeantony.com/archive/data-platform/%E5%AF%A6%E6%B8%AC%E8%B3%87%E7%A7%91%E5%B9%B3%E5%8F%B0/</link><pubDate>Sun, 15 May 2022 06:24:10 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E5%AF%A6%E6%B8%AC%E8%B3%87%E7%A7%91%E5%B9%B3%E5%8F%B0/</guid><description>
&lt;h2&gt;第一題&lt;span class="hx:absolute hx:-mt-20" id="第一題"&gt;&lt;/span&gt;
&lt;a href="#%e7%ac%ac%e4%b8%80%e9%a1%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;YARN最大運算總量&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~/vmusdt$ hdp33/bin/startmaxctn
hadoop jar /opt/hadoop-3.3.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar pi 50 300000
bigred@dta1:~/vmusdt$ hdp33/bin/stopmaxctn&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;第二題&lt;span class="hx:absolute hx:-mt-20" id="第二題"&gt;&lt;/span&gt;
&lt;a href="#%e7%ac%ac%e4%ba%8c%e9%a1%8c" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;請各組 3 位同學在 dta2，使用不同的帳號登入，同時執行以下 3 個命令，告知執行結果的平均時間&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from daily_mask where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; group by substring(dt,12,8) order by t&amp;#34;
—————————
time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from twmcompact where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; group by substring(dt,12,8) order by t&amp;#34; 2&amp;gt;/dev/null
—————————
time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from twmpp where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; and month=&amp;#39;04&amp;#39; group by substring(dt,12,8) order by t&amp;#34; 2&amp;gt;/dev/null&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;第一支程式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from daily_mask where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; group by substring(dt,12,8) order by t&amp;#34;
real 2m5.104s
user 0m23.854s
sys 0m4.920s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;第二支程式
compact&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from twmcompact where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; group by substring(dt,12,8) order by t&amp;#34; 2&amp;gt;/dev/null
real 1m31.348s
user 0m21.857s
sys 0m3.571s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;parquet&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from twmparquet where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; group by substring(dt,12,8) order by t&amp;#34; 2&amp;gt;/dev/null
real 0m58.534s
user 0m21.175s
sys 0m3.968s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;第三支程式&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta1:~$ time hive -S -e &amp;#34;select substring(dt,12,8) as t, sum(adult)/10000 from twmpp where substring(dt,1,10)=&amp;#39;2020/04/17&amp;#39; and month=&amp;#39;04&amp;#39; group by substring(dt,12,8) order by t&amp;#34; 2&amp;gt;/dev/null
real 0m56.604s
user 0m21.122s
sys 0m3.884s&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>Hadoop 實戰篇(舊版)</title><link>https://blog.kubeantony.com/archive/data-platform/hadoop-%E5%AF%A6%E6%88%B0%E7%AF%87%E8%88%8A%E7%89%88/</link><pubDate>Sun, 15 May 2022 05:33:42 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/hadoop-%E5%AF%A6%E6%88%B0%E7%AF%87%E8%88%8A%E7%89%88/</guid><description>
&lt;h2&gt;先下載製作 myus20.04 Image 套件檔&lt;span class="hx:absolute hx:-mt-20" id="先下載製作-myus2004-image-套件檔"&gt;&lt;/span&gt;
&lt;a href="#%e5%85%88%e4%b8%8b%e8%bc%89%e8%a3%bd%e4%bd%9c-myus2004-image-%e5%a5%97%e4%bb%b6%e6%aa%94" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;在 Windows 系統的 cmd 視窗, 執行以下命令
$ ssh bigred@&amp;lt;m1 IP&amp;gt;
$ wget http://www.oc99.org/dt/hadoop/myus20.04.zip; unzip myus20.04.zip
$ cd ~/myus20.04; tree .
.
├── Dockerfile # 這個就是等等要做的image。
├── bin
│   └── bash.append
├── buildimg.sh
└── ssh
├── authorized_keys #自動登入的憑證檔
├── id_rsa # 私鑰
└── id_rsa.pub # 公鑰&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在製作的過程中，會把&lt;code&gt;bin&lt;/code&gt;跟&lt;code&gt;ssh&lt;/code&gt;兩個目錄區裡面的內容放到光碟片裡面去，一個是&lt;code&gt;bin&lt;/code&gt;裡面會有一段程式(&lt;code&gt;bash.append&lt;/code&gt;)，另一個是&lt;code&gt;ssh&lt;/code&gt;裡面的私鑰(&lt;code&gt;id_rsa&lt;/code&gt;)和自動登入的憑證檔(&lt;code&gt;id_rsa.pub&lt;/code&gt;)，代表用這個Dockerfile做出來的image，以後產生出來的container，他們之間用&lt;code&gt;ssh&lt;/code&gt;命令互連，就可以不用打密碼了，因為大家的憑證都一模一樣，但是不用打密碼不代表真的沒密碼，只是因為憑證一樣，所以我們是安全的。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;製作 myus20.04 Image&lt;span class="hx:absolute hx:-mt-20" id="製作-myus2004-image"&gt;&lt;/span&gt;
&lt;a href="#%e8%a3%bd%e4%bd%9c-myus2004-image" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat Dockerfile
FROM localhost/ubuntu:20.04
# 因為先前手動還原光碟片，不是從Docker光片中心來的，所以前面要加&amp;#34;localhost&amp;#34;。
# 如果是Docker光片中心來的，前面的&amp;#34;localhost&amp;#34;就可以不用寫。
COPY bin/bash.append /tmp/
# 把&amp;#34;bin/&amp;#34;這個目錄裡面的bash.append檔案，拷貝到&amp;#34;/tmp/&amp;#34; 裡面。
RUN mkdir -p /etc/skel/.ssh
# 在&amp;#34;/etc/skel/&amp;#34;裡面產生一個&amp;#34;.ssh&amp;#34;目錄
COPY ssh/* /etc/skel/.ssh/
# 把剛剛ssh目錄裡面的3個檔案拷貝到/etc/skel/.ssh裡面。
# 在linux產生新的使用者，一定會有一個家目錄，而linux系統一定會把/etc/skel/裡面的所有資料，
拷貝一份到新建的家目錄去。
# 先這樣做是因為等等的光碟片或系統，只要一有產生新的使用者，就會擁有我們先埋進去的憑證。
ENV DEBIAN_FRONTEND noninteractive
# 在做光碟片(image)的時候，告訴image的過程，如果有一些命令它會有互動過程，
也就是來問我們問題的，請它一概用內定自作業，像是apt-get install 安裝一堆系統套件或是系統更新，
會有機會遇到它問你要不要按YES或是原來的東西要不要蓋掉，它會跟你互動，所以今天輸入這行，就是讓它
自己用內定值，不要問我。
RUN apt-get update &amp;amp;&amp;amp; apt-get install -y nano locales apt-utils elinks tree unzip curl
wget jq psmisc npm nfs-common &amp;amp;&amp;amp; \
apt-get install -y openssl netcat net-tools ssh zip sudo golang iputils-ping dnsutils
gettext-base &amp;amp;&amp;amp; \
# 這行命令是先做系統套件的更新，再安裝nano、locales、apt-utils、elinks、tree...等，後面都會用到，
所以要先安裝，特別注意有安裝nfs-common，代表等等做出來的光碟片，可以去mount nfs的共享資料夾。
# 最重要的是老師在image裡面還有安裝Open SSHserver
mkdir /opt/bin /opt/www /opt/dataset /opt/mdb /mnt/sysbak &amp;amp;&amp;amp; \
# /opt/bin 這個是放資料科技平台(Hadoop、kafka、Cassandra、Hbase...等)的program。
# /opt/www 只要我們有建資料科技平台的網站，網站的資料，網頁要下載的檔案，都會放在裡面。/
# /opt/dataset 這個目錄釋放要資料科技分析的資料檔。
# /opt/mdb 這個目錄是放mariadb，sql命令的程序(script)檔會放在裡面，以後就不用慢慢打，在這裡
可以直接一次跑完。
# /mnt/sysbak 這個目錄是放K8S的yaml檔，pod會用的。
locale-gen en_US &amp;amp;&amp;amp; locale-gen zh_TW.UTF-8 &amp;amp;&amp;amp; locale-gen en_US.UTF-8 &amp;amp;&amp;amp;
sudo passwd -dl root &amp;amp;&amp;amp; \
# sudo passwd -dl root 是把root的密碼設成永久過期(冷凍)，但是root的權限還是有在用。
# locale-gen en_US是標準英文語系。locale-gen zh_TW是繁體中文。等等這個光碟片做出來的pod，
就可以處理英文跟繁體中文的編碼。
locale-gen en_US.UTF-8 是萬國英文碼。
# 這一整段是讓等等這台ubuntu可以顯示和儲存的檔案內容可以有這些編碼的存在。
sudo ln -sf /usr/share/zoneinfo/Asia/Taipei /etc/localtime &amp;amp;&amp;amp; \
# Ubuntu內建實區是格林威治的時間，所以要把時區設在亞洲台北
# 以下命令會同時安裝 Python2 &amp;amp; Python3
apt-get install -y python3 python3-numpy python3-pandas python3-pip
python-is-python3 &amp;amp;&amp;amp; \
#提供python2跟3給Spark程式來執行，因為Spark只跑Python語言。
apt-get -y upgrade &amp;amp;&amp;amp; apt-get autoremove -y &amp;amp;&amp;amp; apt-get clean &amp;amp;&amp;amp; rm -rf
/var/cache/apt/archives &amp;amp;&amp;amp; \
# 把剛剛下載下來的一堆套件的暫存檔通通刪掉，因為不需要的檔案太多會造成image太大，所以通通刪掉，
簡稱大掃除。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;# 建立管理者帳號 bigred
groupadd bigboss &amp;amp;&amp;amp; echo &amp;#39;%bigboss ALL=(ALL) NOPASSWD: ALL&amp;#39; &amp;gt;&amp;gt; /etc/sudoers &amp;amp;&amp;amp; \ # 新增bigboss的群組，並讓這群組裡的使用者都有sudo的權限
cat /tmp/bash.append &amp;gt;&amp;gt; /etc/bash.bashrc &amp;amp;&amp;amp; rm /tmp/bash.append &amp;amp;&amp;amp; \ # 這個程式是執行重裝貝殼(bin/bash)時，
useradd -m -s /bin/bash bigred &amp;amp;&amp;amp; echo &amp;#39;bigred:bigred&amp;#39; | chpasswd &amp;amp;&amp;amp; \
usermod -a -G bigboss bigred &amp;amp;&amp;amp; chmod -R 700 /home/bigred/.ssh
RUN echo &amp;#39;PermitUserEnvironment yes&amp;#39; &amp;gt;&amp;gt; /etc/ssh/sshd_config &amp;amp;&amp;amp; \ #
echo &amp;#39;StrictHostKeyChecking no&amp;#39; &amp;gt;&amp;gt; /etc/ssh/ssh_config &amp;amp;&amp;amp; \
rm /etc/update-motd.d/* &amp;amp;&amp;amp; echo &amp;#34;Ubuntu 20.04 LTS : IP `hostname -I`&amp;#34; &amp;gt;/etc/update-motd.d/00 &amp;amp;&amp;amp; \
sudo chmod &amp;#43;x /etc/update-motd.d/00
USER bigred
WORKDIR /home/bigred/
CMD [&amp;#34;/bin/bash&amp;#34;]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;$ cat Dockerfile
FROM localhost/myus20.04
ADD hadoop-2.10.1.tar.gz apache-hive-3.1.2-bin.tar.gz pig-0.17.0.tar.gz spark-3.0.1-bin-hadoop2.7.tgz /opt/ # ADD這個命令它會幫壓縮檔解壓縮，並且放到image裡面去
COPY parquet-pig-bundle-1.6.0.jar /opt/pig-0.17.0/lib/ # .jar是Java的打包檔
COPY mariadb-java-client-2.3.0.jar /opt/apache-hive-3.1.2-bin/lib
COPY hdp210/* /opt/hadoop-2.10.1/etc/hadoop/
COPY spk301/* /opt/spark-3.0.1-bin-hadoop2.7/conf/
COPY bin/* /opt/bin/
# 使用 ssh 執行命令, 會讀取 /etc/environment 這個設定檔
COPY ssh/environment /etc/environment # ssh登入到ssh server的時候，會觸發/etc/environment 這個檔案被執行一遍
COPY apt.temp /etc/apt/ # 給ubuntu(pod)的apt命令讀的
RUN sudo apt-get update &amp;amp;&amp;amp; DEBIAN_FRONTEND=noninteractive sudo -E apt-get install -y mariadb-client nfs-common openjdk-8-jdk libisal-dev libsnappy-dev libz-dev &amp;amp;&amp;amp; \ # openjdk-8-jdk 是Java的開發套件，安裝完才能跑JAVA語言
DEBIAN_FRONTEND=noninteractive sudo -E apt-get -y upgrade &amp;amp;&amp;amp; DEBIAN_FRONTEND=noninteractive sudo -E apt-get autoremove -y &amp;amp;&amp;amp; \
sudo apt-get clean &amp;amp;&amp;amp; sudo rm -rf /var/cache/apt/archives &amp;amp;&amp;amp; sudo chown -R root:root /opt &amp;amp;&amp;amp; \
mkdir -p /opt/dataset
CMD [&amp;#34;/bin/bash&amp;#34;]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;手動建立 ubuntu 20.04 image
$ wget http://www.oc99.org/images/ubuntu.20.04.tar
# 因為Docker光片中心有做下載限制，所以老師先自行下載，並且把光碟變成tar檔，放在老師自己的網站。
$ sudo podman load &amp;lt; ubuntu.20.04.tar
# sduo podman = docker 。
# &amp;#34;docker load &amp;lt;&amp;#34; 的意思是把光碟片被分出去的tar檔還原回來。
$ cat buildimg.sh
#!/bin/bash
Sudo podman rmi localhost/myus20.04 &amp;amp;&amp;gt;/dev/null
Echo &amp;#34;building myus20.04 image&amp;#34; &amp;amp;&amp;amp; sudo podman build –no-cache –t myus20.04 .
Sudo podman save myus20.04 &amp;gt; myus20.04.tar
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;myus20.04.tar created&amp;#34;
$ ./buildimg.sh
...........
--&amp;gt; 8c6b5798596
Successfully tagged localhost/myus20.04:latest
8c6b5798596a346e894b3448b4298fe63326f95f28acfca37046e3fc9f112c7f
myus20.04.tar created&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>Datatechnology 資料科技 (舊版)</title><link>https://blog.kubeantony.com/archive/data-platform/datatechnology-%E8%B3%87%E6%96%99%E7%A7%91%E6%8A%80-%E8%88%8A%E7%89%88/</link><pubDate>Sun, 15 May 2022 05:33:34 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/datatechnology-%E8%B3%87%E6%96%99%E7%A7%91%E6%8A%80-%E8%88%8A%E7%89%88/</guid><description>
&lt;ul&gt;
&lt;li&gt;前言
學完以後，可以應徵資料工程師、資料管理師、資料分析師、資料科學家、資料架構師，資料科學家有個必要條件，數學(統計機率、工程數學)要很強，資料分析師要把這幾天的核心掌握，就有部分去使用一些分析工具，像微軟公司出的Power BI、Mathlab&amp;hellip;等的分析工具，資料管理師和資料工程師是要學的，但只要學會以後要去應徵資料分析師或資料科學家會比別人更有競爭力，因為你會後端的技術。老師會教我們後端的部分，前端因為太複雜太廣，很多老師都在教這塊，都是一個學年兩個學年在教，但只教前端，所以偏奇怪，資料架構師前跟後端都要會。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/DJoHiLl.png" alt="" loading="lazy" /&gt;
圖中的小飛象，他的英文叫做Hadoop，他是我們資料科技平台的核心。&lt;/p&gt;
&lt;p&gt;中間的兩個英文單字&amp;quot;EXTRACT&amp;quot;和&amp;quot;lOAD&amp;quot;意思是，Hadoop可以存處非常大量的單位，台灣來講以&amp;quot;T&amp;quot;為單位，在外面大的社群網站，一天都是100GB在產生，台灣來說大數據到&amp;quot;T&amp;quot;為單位就是大數據，因受限經濟規模，全球的話資料量不可能是&amp;quot;T&amp;quot;。&lt;/p&gt;
&lt;p&gt;補充:
1 Byte = 8 Bits
1 Kilobyte (KB) = 1024 Bytes
1 Megabyte (MB) = 1024 KB
1 Gigabyte (GB) = 1024 MB
1 Terabyte (TB) = 1024 GB
1 Petabyte (PB) = 1024 TB
1 Exabyte (EB) = 1024 PB
1 Zettabyte (ZB) = 1024 EB
1 Yottabyte (YB) = 1024 ZB&lt;/p&gt;
&lt;p&gt;Hadoop在台灣處理T級的資料，這個資料從企業內部的應用系統來，其中有傳統的IT系統、人資、貿易、會計和工廠管理系統，這些系統的核心就是資料庫(Database)。我們目前有學過sqlite和mariadb，而sqlite是單機版的資料庫，個人在用的，或者是有一些應用系統會考慮使用他。&lt;/p&gt;
&lt;p&gt;老師站在資料管理師和資料分析師的立場給我們一個忠告，平常在公司處理一些資料，屬於個人比較秘密、驕傲的資料，可以放在sqlite資料庫裡面，因為一帶就走了，像銀行的理專，一般在資訊的應用知識上面，他們會用excel把機密資料整理好帶走，老師建議我們像資料工程師、資料管理師和資料分析師一樣，在這樣的工作理念，如果有一些重要的資訊，可以把他存放在sqlite裡面，因為一帶就走。Mariadb 在企業一般都是公司的機房，或是公司的電算中心人員在做控管，因為這是一個網路型的資料庫。&lt;/p&gt;
&lt;p&gt;在看回去圖，我們可以從公司的mariadb或mysql或是mssql，把資料拉出來存到Hadoop裡面。除此之外，還可以從opendata(國家給的資料)存到Hadoop裡面，透過open API我們可以取得各式各樣的資料，還有從&amp;quot;IOT&amp;quot;(工作紡會教)裡面拿資料，也是存到Hadoop裡面。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IT(Database):私人資料可存在&lt;code&gt;sqlite&lt;/code&gt;、公司資料存在&lt;code&gt;mariadb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;透過OpenAPI可以取得自己要的資料,存入hadoop內
&lt;ul&gt;
&lt;li&gt;資料盡可能用正規方式取得,確保資料品質&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Hive&lt;/code&gt;可以執行 sql 命令做出&lt;code&gt;Business intelligence(BI)&lt;/code&gt;
企業要的分析決策報告&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Spark&lt;/code&gt; 是使用&lt;code&gt;python&lt;/code&gt;寫的，主要做 &lt;code&gt;machine learning&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HBase&lt;/code&gt; 物聯網資料庫，是nosql，堆疊架構在&lt;code&gt;hadoop&lt;/code&gt;上，並非傳統關聯式資料庫，處理一些用時間做判讀的資料&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Apache Hive&lt;span class="hx:absolute hx:-mt-20" id="apache-hive"&gt;&lt;/span&gt;
&lt;a href="#apache-hive" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;可以用sql的查詢命令&lt;code&gt;select * from table&lt;/code&gt;，在小飛象存處的大量資料裡面做sql command的分析。&lt;/li&gt;
&lt;li&gt;資料分析師透過Hive，&lt;strong&gt;可以做出企業所需的決策報告&lt;/strong&gt;，也就是企業的商業智慧。
&lt;ul&gt;
&lt;li&gt;商業智慧（Business Intelligence, BI):指用現代資料倉儲技術、線上分析處理技術、資料探勘和資料展現技術進行資料分析以實現商業價值。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;老師善良提醒: 不要把自己的未來壓在一個軟體上，要把能力建構在open source。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Spark&lt;span class="hx:absolute hx:-mt-20" id="spark"&gt;&lt;/span&gt;
&lt;a href="#spark" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;一種資料處理的引擎，主要做&lt;code&gt;machine learning&lt;/code&gt;，是使用&lt;code&gt;python&lt;/code&gt;寫的，因為&lt;code&gt;python&lt;/code&gt;的強項就是&lt;code&gt;machine learning&lt;/code&gt;。
&lt;ul&gt;
&lt;li&gt;事實上&lt;code&gt;machine learning&lt;/code&gt;也是一種資料處理的系統，只是我們規劃它屬於高能的資料分析，它一樣架構在YARN以及HDFS之上。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hbase&lt;span class="hx:absolute hx:-mt-20" id="hbase"&gt;&lt;/span&gt;
&lt;a href="#hbase" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;物聯網資料庫，他的整個運作架構叫做&lt;code&gt;nosql&lt;/code&gt;，而Hbase是架構在Hadoop之上，主要很適合用來處理物聯網的資料，因為他是屬於&amp;quot;Time Series&amp;quot;，時間序為主的資料庫，物聯網前端給的資料，大部分都是senser的資料，senser的資料在處理一定要看時間，由時間才能夠對這些資料做實質的分析。&lt;/li&gt;
&lt;li&gt;問:甚麼是&lt;code&gt;nosql&lt;/code&gt;?
&lt;ul&gt;
&lt;li&gt;意思就是說他的整個運作架構，跟傳統的關聯是資料庫Mariadb、mysql、mssql和oracle的運作方式完全不一樣。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;這個是Hbase堆疊在Hadoop之上，&lt;strong&gt;可以讓企業擁有處理IOT物聯網的能力。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;它一樣架構在YARN以及HDFS之上，也是一種資料處理的引擎。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上3個堆疊在Hadoop之上的3個應用不是全部，只是一部分的應用。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/i6lo0yy.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Hadoop當初在設計被建立起來的時候，有一個非常重要的系統規格，就是要處理RAW DATA(原始資料)，RAW DATA是不允許被串改的。&lt;/strong&gt;&lt;span class="hx:absolute hx:-mt-20" id="hadoop當初在設計被建立起來的時候有一個非常重要的系統規格就是要處理raw-data原始資料raw-data是不允許被串改的"&gt;&lt;/span&gt;
&lt;a href="#hadoop%e7%95%b6%e5%88%9d%e5%9c%a8%e8%a8%ad%e8%a8%88%e8%a2%ab%e5%bb%ba%e7%ab%8b%e8%b5%b7%e4%be%86%e7%9a%84%e6%99%82%e5%80%99%e6%9c%89%e4%b8%80%e5%80%8b%e9%9d%9e%e5%b8%b8%e9%87%8d%e8%a6%81%e7%9a%84%e7%b3%bb%e7%b5%b1%e8%a6%8f%e6%a0%bc%e5%b0%b1%e6%98%af%e8%a6%81%e8%99%95%e7%90%86raw-data%e5%8e%9f%e5%a7%8b%e8%b3%87%e6%96%99raw-data%e6%98%af%e4%b8%8d%e5%85%81%e8%a8%b1%e8%a2%ab%e4%b8%b2%e6%94%b9%e7%9a%84" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h1&gt;&lt;/h1&gt;&lt;p&gt;例如:收集物聯網 (車聯網,..)、企業 IT 系統的記錄檔 (Log)、Open Data (政府資料開放平臺, …)和社交網站 (Facebook, Line, ….)的RAW DATA三年，資料量一定會變大，到&amp;quot;VOLUME&amp;quot;這個英文單字來，以台灣來講這邊是大數據，這邊的單位是&amp;quot;T&amp;quot;，有了這麼大量的資料後，接下來這個挑戰最大&amp;quot;veracity&amp;quot;，資料的真實性，也就是資料的品質，這個部份決定了你的 Business Intelligence，你的公司的決策報告是有效的還是無效的。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Hadoop Architecture&lt;span class="hx:absolute hx:-mt-20" id="hadoop-architecture"&gt;&lt;/span&gt;
&lt;a href="#hadoop-architecture" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/iSBbrL8.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hadoop Common: The common utilities that support the other Hadoop modules.&lt;/li&gt;
&lt;li&gt;Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
&lt;ul&gt;
&lt;li&gt;分散HDFS意思就是說，&lt;strong&gt;這個檔案系統是由很多台實體電腦所組成的，也就代表這個檔案系統在儲存檔案的時候，檔案的內容會分散儲存在不同的實體機器。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Distributed 它的意思是這個檔案系統是由很多台實體電腦所組成的 。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hadoop YARN: A framework for job scheduling and cluster resource management.
&lt;ul&gt;
&lt;li&gt;YARN就是負責來幫我們執行我們要的分析程式，它的厲害之處在於分析資料的時候，&lt;strong&gt;可以提供我們平行處理的功能，也就是一個程式可以在多台電腦同時執行。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;要跑得程式例如:微軟的&amp;quot;.net&amp;quot;；Java的世界叫&amp;quot;jvm&amp;quot;，也是執行程式的平台，這個還是屬於單機版，在一台機器裡面做。可是在看看我們的YARN，它的基礎是分散的，所以可以在多台電腦執行相同的程式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
&lt;ul&gt;
&lt;li&gt;它是&lt;strong&gt;資料處理的引擎&lt;/strong&gt;，這個資料處理引擎，一定是&lt;strong&gt;架構在&amp;quot;HDFS&amp;quot;這個檔案系統，以及&amp;quot;YARN&amp;quot;這個分散運算系統之上&lt;/strong&gt;，代表這個資料處理引擎，絕對&lt;strong&gt;有能力處理大數據&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;只要是hadoop一定在多台主機&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Spark補充:事實上&lt;code&gt;machine learning&lt;/code&gt;也是一種資料處理的系統，只是我們規劃它屬於高能的資料分析，它一樣架構在YARN以及HDFS之上。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;問:為何網路上很多人說Hadoop是天坑?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;網路上寫的會有很多各式各樣的訊息，今天如果要自己來識別，方法只有一個，自己要能夠用到這套系統，才有能力判斷網路上的文章真假，電腦系統一定不是完美的，每個系統都會有優點跟缺點，最起碼要有操作過才能跟人家做討論。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;Bare Metal(原生) Hadoop 叢集 cluster 架構&lt;span class="hx:absolute hx:-mt-20" id="bare-metal原生-hadoop-叢集-cluster-架構"&gt;&lt;/span&gt;
&lt;a href="#bare-metal%e5%8e%9f%e7%94%9f-hadoop-%e5%8f%a2%e9%9b%86-cluster-%e6%9e%b6%e6%a7%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/v6Zsl42.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;今天要做Hadoop要很多電腦，要事先做規劃，每台電腦叫甚麼名稱、IP多少，通通都要規劃。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ds101這台機器是給資料分析師用的。&lt;/li&gt;
&lt;li&gt;綠色跟暗紅色的名稱，&amp;ldquo;Active NameNode&amp;quot;跟&amp;quot;Secondary NameNode&amp;rdquo;，這兩個名字是Java的程式名稱。電腦名稱:nna，裡面跑兩個Java program，一個叫&amp;quot;Active NameNode&amp;quot;另一個叫&amp;quot;Secondary NameNode&amp;quot;。&lt;/li&gt;
&lt;li&gt;電腦wka01一樣run兩個Java program，名字叫&amp;quot;Data Node&amp;quot;，另一個叫&amp;quot;Node manager&amp;quot;。&lt;/li&gt;
&lt;li&gt;電腦wka02~04也都跟01一樣。&lt;/li&gt;
&lt;li&gt;電腦rma，它跑的是Rseource Manager這個Java程式，資料管理者用的。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;小總結:Hadoop是用Java語言寫出來的&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Standby Namenode是一台機器，上面的Shared edit logs是一個資料庫，會有另外一個機器會來扮演，為何這兩天沒做，因為上課環境有限，如果這兩個有做出來，代表Hadoop有容錯系統，也就是nna如果掛了，Standby Namenode就會上來，繼續讓Hadoop系統跑，他們兩個之所以可以互相備援，是因為他們讀的是共同的一個資料庫。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;建立一個Hadoop最少需要的電腦數是，wka01~03，&amp;ldquo;Active NameNode&amp;quot;跟&amp;quot;Secondary NameNode&amp;quot;各一台，&amp;ldquo;Rseource Manager&amp;quot;一台，再加兩台，一個資料分析師，一個資料管理者來用，總共7台。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/MhroWet.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;大數據(Hadoop)全球權威，只有一家公司&amp;quot;Cloudera&amp;rdquo;，因為寫Hadoop的人就在Cloudera上班，所以它就是第一品牌。從今年開始CDH開始要收錢，一台伺服器只要有安裝CDH，一台一年1萬美金。
老師事實上在教的是Datatechnology，核心部分就是Hadoop，有了它才會用各式用樣的系統堆疊，做出企業所需的應用。&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;總結:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hadoop需要多台電腦叢集建立，我們可以用學過的K8S叢集功能，建立多個pod來跑Hadoop裡面的Java程式，形成一個資料科技平台，並修改建立成為自創的獨一無二的平台。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>Hadoop 程式解析</title><link>https://blog.kubeantony.com/archive/data-platform/hadoop-%E7%A8%8B%E5%BC%8F%E8%A7%A3%E6%9E%90/</link><pubDate>Sun, 15 May 2022 05:32:22 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/hadoop-%E7%A8%8B%E5%BC%8F%E8%A7%A3%E6%9E%90/</guid><description>
&lt;p&gt;確認組內dt系列的虛擬機器是否有在線上&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;#!/bin/bash
export tt=003
for i in dta1 dta2 dtm1 dtm2 dtw1 dtw2 dtw3 dtw4
do
nc -w 1 -z ${i} 22
[ $? = 0 ] &amp;amp;&amp;amp; echo &amp;#34;$i online&amp;#34; || echo &amp;#34;$i not online&amp;#34;
ssh ${i} echo $tt
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;更改ssh client的設定檔，在ssh連到別人時，如果一開始第一次不想回答yes，才下載公鑰，就做下面的更改&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;sudo nano /etc/ssh/ssh_config
...
StrictHostKeyChecking no ##把ask刪掉改成no
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;允許OpenSSH Server可以讀取Environment檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~$ sudo nano /etc/ssh/sshd_config
PermitUserEnvironment yes ##把註解拿掉，並將no改成yes&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;env&lt;span class="hx:absolute hx:-mt-20" id="env"&gt;&lt;/span&gt;
&lt;a href="#env" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PATH環境變數，透過ssh查看，與在本機查看不同
==用ssh登入系統時，一定會做身份認證，所以代表有一個程式一定會被執行，這支程式就是&lt;code&gt;/etc/profile&lt;/code&gt;==&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta2:~$ env
...
PATH=/home/bigred/bin:/home/bigred/bin:/home/bigred/vmusdt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
...
bigred@dta2:~$ env | wc -l
27
bigred@dtw4:~$ ssh dta2 env
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
...
bigred@dtw4:~$ ssh dta2 env | wc -l
17&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果用ssh指令登入dta2這台機器，進到/etc/profile裡面修改內容&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta2:~$ sudo nano /etc/profile
export moon=&amp;#34;go or no go&amp;#34;
bigred@dta2:~$ exit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;登出以後，再用ssh指令登入dta2這台機器，就可以看到剛剛宣告全域的環境變數&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta2:~$ env | grep moon
moon=go or no go&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;==&lt;strong&gt;下面這行指令是，OpenSSH Server在執行，與上面直接用ssh指令登入不同，上面是bash貝殼程式在執行，所以執行env完的結果會不一樣&lt;/strong&gt;==&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~$ ssh dta2 env
...
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;可以藉由以下命令得知，OpenSSH Server讀到的env是在&lt;code&gt;/etc/environment&lt;/code&gt;這個檔案裡面&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~$ ssh dta2 cat /etc/environment
PATH=&amp;#34;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;ssh dta2更改/etc/environment的內容&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dta2:~$ sudo nano /etc/environment
PATH=&amp;#34;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin&amp;#34;
moon=&amp;#34;go or no go&amp;#34; ## 新增這行
bigred@dta2:~$ exit
logout
Connection to dta2 closed.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;可以看到moon這個環境變數有成功新增&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~$ ssh dta2 env
SHELL=/bin/bash
moon=go or no go ##剛剛在/etc/environmentvpu 新增的內容
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;備份到GCP&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;scp dt33pkg.zip sreantony@34.81.39.139:/home/sreantony/dt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;us.bash內容&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~$ cat ~/vmusdt/hdp33/us.bash
#!/bin/bash
adminuser=bigred
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/ ## 把Java的JVM放在這個目錄
export HADOOP_HOME=/opt/hadoop-3.3.2 ## hadoop-3.3.2套件裡面所有的內容
export HADOOP_LOG_DIR=/tmp ## log檔存放區
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/ ## hadoop 設定檔
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/ ## native，像是bzip2這個演算法的程式放在裡面
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=&amp;#34;-Djava.library.path=$HADOOP_HOME/lib/native&amp;#34;
# export HADOOP_USER_CLASSPATH_FIRST=true
[ -z $HADOOP_USER_NAME ] &amp;amp;&amp;amp; [ $SHELL == &amp;#39;/bin/bash&amp;#39; ] &amp;amp;&amp;amp; declare -r HADOOP_USER_NAME=$USER
# JobHistory log file path, 會自動產生目錄
# export HADOOP_MAPRED_LOG_DIR=&amp;#34;/home/bigred/jhslog&amp;#34;
export YARN_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export YARN_LOG_DIR=/tmp
# hadoop 3.2.1 及 3.1.3 這二個版本只要執行檔案傳送命令就會出現以下訊息
# hadoop fs -put -f /etc/passwd /tmp
# SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
export HADOOP_ROOT_LOGGER=&amp;#34;WARN,console&amp;#34;
export PIG_HOME=/opt/pig-0.17.0
export PIG_HEAPSIZE=512 ## Heap 是JVM裡面的區塊，是Java程式用來處理記憶體的一個空間，也就代表pig處理資料的記憶體大小
export HIVE_HOME=/opt/apache-hive-3.1.3-bin
export PATH=/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH=/home/bigred/vmusdt/bin:$PATH ## 前面這個目錄裡面放的是老師開發的程式，像是dtconf、dtcopy、dtwget...等
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PIG_HOME/bin:$HIVE_HOME/bin ##這行代表我們可以在任何目錄執行Hadoop、Pig和Hive的指令
export HBASE_HOME=/opt/hbase-2.4.12
export HBASE_CONF_DIR=/opt/hbase-2.4.12/conf
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.6.3-bin
export ZOO_LOG_DIR=/tmp/logs ##/tmp目錄裡面的檔案，只要系統重新開機，裡面的內容就會清空，這邊把紀錄檔放在/tmp是因為硬體設備不足
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin
#export ZEPPELIN_HOME=/opt/zeppelin-0.9.0-bin-all
#export PATH=$PATH:$ZEPPELIN_HOME/bin
export SPARK_HOME=/opt/spark-3.2.1-bin-hadoop3.2
export SPARK_CONF_DIR=$SPARK_HOME/conf
export PYSPARK_PYTHON=/usr/bin/python3
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
if [ -d /opt/jupyter/miniconda3/bin ];then
export ANACONDA_ROOT=/opt/jupyter/miniconda3
export PATH=$ANACONDA_ROOT/bin:$PATH
export PYSPARK_PYTHON=$ANACONDA_ROOT/bin/python
fi
if [ &amp;#34;$USER&amp;#34; != &amp;#34;&amp;#34; ]; then
[ -f /home/$USER/dkc.env ] &amp;amp;&amp;amp; source /home/$USER/dkc.env
if [ ! -d metastore_db ]; then ## 設定derby資料庫系統所需的設定
#hn=$(hostname)
#if [ ${hn:0:3} == &amp;#34;adm&amp;#34; ] || [ ${hn:0:2} == &amp;#34;ds&amp;#34; ] || [ ${hn:0:8} == &amp;#34;zeppelin&amp;#34; ]; then
echo -n &amp;#34;build derby database ...&amp;#34;
schematool -initSchema -dbType derby &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
echo &amp;#34; ok&amp;#34;
echo &amp;#34;set hive.cli.print.current.db=true;&amp;#34; &amp;gt; .hiverc
echo &amp;#34;set hive.metastore.warehouse.dir=/user/$USER/hive;&amp;#34; &amp;gt;&amp;gt; .hiverc
echo &amp;#34;set hive.exec.scratchdir=/user/$USER/tmp;&amp;#34; &amp;gt;&amp;gt; .hiverc
fi
fi
alias nano=&amp;#39;nano -Ynone&amp;#39; ## 在編輯檔案時，不會有顏色
alias dir=&amp;#39;ls -alh&amp;#39;
alias ssh=&amp;#39;ssh -q&amp;#39; ## -q 是ssh不會問我們問題
fi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~/vmusdt$ cat ~/vmusdt/hdp33/environment
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
HADOOP_HOME=/opt/hadoop-3.3.2
HADOOP_LOG_DIR=/tmp
LD_LIBRARY_PATH=/opt/hadoop-3.3.2/lib/native/
HADOOP_COMMON_LIB_NATIVE_DIR=/opt/hadoop-3.3.2/lib/native
HADOOP_OPTS=-Djava.library.path=/opt/hadoop-3.3.2/lib/native
HADOOP_MAPRED_LOG_DIR=/home/bigred/jhslog
YARN_HOME=/opt/hadoop-3.3.2
YARN_LOG_DIR=/tmp
PIG_HOME=/opt/pig-0.17.0/
PIG_HEAPSIZE=512
SPARK_HOME=/opt/spark-3.2.1-bin-hadoop3.2
HIVE_HOME=/opt/apache-hive-3.1.3-bin
HBASE_HOME=/opt/hbase-2.4.12
HBASE_CONF_DIR=/opt/hbase-2.4.11/conf
HBASE_LOG_DIR=/tmp
PATH=/root/bin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/hadoop-3.3.2/bin:/opt/hadoop-3.3.2/sbin:/opt/pig-0.17.0/bin:/opt/apache-hive-3.1.3-bin/bin:/opt/spark-3.2.1-bin-hadoop3.2/bin:/opt/spark-3.2.1-bin-hadoop3.2/sbin:/opt/hbase-2.4.12/bin:/opt/apache-zookeeper-3.6.3-bin/bin
ZOO_LOG_DIR=/tmp/logs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;裡面放的是設定檔，不是*.jar檔&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~/vmusdt$ dir ~/vmusdt/hdp33/conf/
total 28K
drwxr-xr-x 7 bigred bigred 4.0K May 9 16:15 .
drwxr-xr-x 5 bigred bigred 4.0K May 10 05:39 ..
drwxr-xr-x 2 bigred bigred 4.0K Feb 6 16:00 apache-hive-3.1.2-bin
drwxr-xr-x 2 bigred bigred 4.0K Feb 6 16:00 apache-zookeeper-3.6.3-bin
drwxr-xr-x 2 bigred bigred 4.0K May 9 18:36 hadoop-3.3.2
drwxr-xr-x 2 bigred bigred 4.0K Feb 6 16:00 hbase-2.4.12
drwxr-xr-x 2 bigred bigred 4.0K May 9 18:54 spark-3.2.1-bin-hadoop3.2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;dtconf檔內容&lt;span class="hx:absolute hx:-mt-20" id="dtconf檔內容"&gt;&lt;/span&gt;
&lt;a href="#dtconf%e6%aa%94%e5%85%a7%e5%ae%b9" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~/vmusdt$ cat bin/dtconf
#!/bin/bash
w=&amp;#34;dta1 dta2 dtm1 dtm2 dtw1 dtw2 dtw3 dtw4&amp;#34;
[ &amp;#34;$#&amp;#34; != 1 ] &amp;amp;&amp;amp; echo &amp;#34;dtconf version&amp;#34; &amp;amp;&amp;amp; exit 1
[ ! -d ~/vmusdt/hdp${1}/opt ] &amp;amp;&amp;amp; echo &amp;#34;~/vmusdt/hdp${1}/opt not found&amp;#34; &amp;amp;&amp;amp; exit 1
n=$(ls ~/vmusdt/hdp${1}/opt)
## 偵測要處理的電腦是否在線上，不在則跳過
for x in $w
do
nc -w 1 -z $x 22 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; continue
## 拷貝Hadoop、Hbase和Hive...等的設定檔
for y in $n
do
echo &amp;#34;$y&amp;#34; | grep &amp;#39;hadoop-&amp;#39; &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; scp ~/vmusdt/hdp${1}/conf/$y/* bigred@$x:/opt/$y/etc/hadoop/ &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; echo &amp;#34;$x $y config ok&amp;#34; &amp;amp;&amp;amp; continue
[ -d ~/vmusdt/hdp${1}/conf/$y ] &amp;amp;&amp;amp; scp ~/vmusdt/hdp${1}/conf/$y/* bigred@$x:/opt/$y/conf/ &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x $y config ok&amp;#34;
done
## 以下這三行指令是專門給Ubuntu Linux設定的，Alpine Linux就不用，因為它沒有/etc/environment
ssh $x &amp;#39;sudo rm /etc/environment &amp;amp;&amp;gt;/dev/null&amp;#39; #刪除根目錄中的 environment ，openssh server才不會先讀到它
## 把dta1的bigred使用者家目錄下面的vmusdt目錄下面的hdp${1}目錄下面的environment這個檔案，傳到dt系列的虛擬機器的bigred使用者的家目錄下面的.ssh目錄下
scp -r ~/vmusdt/hdp${1}/environment bigred@$x:~/.ssh/environment &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x environment ok&amp;#34;
## 把us.bash傳到每台dt系列機器的家目錄
scp -r ~/vmusdt/hdp${1}/us.bash bigred@$x:~/us.bash &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$x us.bash ok&amp;#34;
## 將source /home/bigred/us.bash 加到/etc/profile檔案的最後一行
ssh $x &amp;#39;cat /etc/profile | grep &amp;#39;/home/bigred/us.bash&amp;#39; &amp;amp;&amp;gt;/dev/null&amp;#39;
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; ssh $x &amp;#39;echo source /home/bigred/us.bash | sudo tee -a /etc/profile &amp;amp;&amp;gt;/dev/null&amp;#39;
echo &amp;#34;$x /etc/profile ok&amp;#34;
echo &amp;#34;&amp;#34;
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~/vmusdt$ sudo nano hdp33/bin/formathdfs
#!/bin/bash
m=&amp;#34;dtm1&amp;#34;
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
read -p &amp;#34;Are you sure ? (YES/NO) &amp;#34; ans
[ $ans != &amp;#34;YES&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;abort format HDFS&amp;#34; &amp;amp;&amp;amp; exit 1
ssh &amp;#34;$m&amp;#34; rm -r nn/* sn/* &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$m rm ok&amp;#34;
for n in $w
do
nc -w 1 -z $n 22 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; ssh $n rm -r dn/* &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; echo &amp;#34;$n rm ok&amp;#34;
done
ssh $m &amp;#39;hdfs namenode -format -clusterID cute&amp;#39; &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;formathdfs failure&amp;#34; &amp;amp;&amp;amp; exit 1
echo &amp;#34;formathdfs ok&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;starthdfs&lt;span class="hx:absolute hx:-mt-20" id="starthdfs"&gt;&lt;/span&gt;
&lt;a href="#starthdfs" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~/vmusdt$ sudo nano hdp33/bin/starthdfs
m=&amp;#34;dtm1&amp;#34;
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
## 透過openssh server在dtm1直接執行啟動name node的命令
ssh bigred@&amp;#34;$m&amp;#34; hadoop-daemon.sh start namenode &amp;amp;&amp;gt;/dev/null
sleep 10; nc -w 5 -z $m 8020 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;pls formathdfs first&amp;#34; &amp;amp;&amp;amp; exit 1
echo &amp;#34;$m: Name Node Started&amp;#34;
## 透過openssh server在dtm1直接執行啟動secondary namenode的命令
ssh bigred@&amp;#34;$m&amp;#34; hadoop-daemon.sh start secondarynamenode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$m: Secondary Name Node started&amp;#34;
for n in $w
do
nc -w 5 -z $n 22 &amp;amp;&amp;gt;/dev/null
if [ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ]; then
ssh bigred@$n hadoop-daemon.sh start datanode &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n: Data Node started&amp;#34;
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;startyarn&lt;span class="hx:absolute hx:-mt-20" id="startyarn"&gt;&lt;/span&gt;
&lt;a href="#startyarn" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;pre&gt;&lt;code&gt;bigred@dtw4:~/vmusdt$ sudo nano hdp33/bin/startyarn
#!/bin/bash
nn=&amp;#34;dtm1&amp;#34;
rs=&amp;#34;dtm2&amp;#34;
yn=4
w=$(cat /etc/hosts | grep -e &amp;#39; dtw[0-9]&amp;#39; | cut -d&amp;#39; &amp;#39; -f2)
#n=$(hostname)
#[ ${n:0:3} != &amp;#34;adm&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;oops, pls return to admxxx&amp;#34; &amp;amp;&amp;amp; exit 1
nc -w 5 -z $nn 8020 &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; != 0 ] &amp;amp;&amp;amp; echo &amp;#34;pls start HDFS first&amp;#34; &amp;amp;&amp;amp; exit 1
ssh bigred@&amp;#34;$rs&amp;#34; yarn-daemon.sh start resourcemanager &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$rs: Resource Manager started&amp;#34;
ssh bigred@&amp;#34;$rs&amp;#34; mr-jobhistory-daemon.sh start historyserver &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$rs: Job History Server started&amp;#34;
## 上面這行是11:33
c=0
for n in $w
do
if [ &amp;#34;$c&amp;#34; -le &amp;#34;$yn&amp;#34; ]; then
ssh bigred@$n yarn-daemon.sh start nodemanager &amp;amp;&amp;gt;/dev/null
[ &amp;#34;$?&amp;#34; == &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; echo &amp;#34;$n: Node Manager started&amp;#34;
c=$(( c&amp;#43;1 ))
fi
done&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="複製程式碼"
aria-label="複製程式碼"
data-copied-label="已複製！"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h6&gt;tags: &lt;code&gt;資料科技平台&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-資料科技平台"&gt;&lt;/span&gt;
&lt;a href="#tags-%e8%b3%87%e6%96%99%e7%a7%91%e6%8a%80%e5%b9%b3%e5%8f%b0" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item><item><title>如何建立/開始/停止/刪除 6台資料科技的VM</title><link>https://blog.kubeantony.com/archive/data-platform/%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B-%E9%96%8B%E5%A7%8B-%E5%81%9C%E6%AD%A2-%E5%88%AA%E9%99%A4-6%E5%8F%B0%E8%B3%87%E6%96%99%E7%A7%91%E6%8A%80%E7%9A%84vm/</link><pubDate>Mon, 11 Apr 2022 13:21:24 +0800</pubDate><guid>https://blog.kubeantony.com/archive/data-platform/%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B-%E9%96%8B%E5%A7%8B-%E5%81%9C%E6%AD%A2-%E5%88%AA%E9%99%A4-6%E5%8F%B0%E8%B3%87%E6%96%99%E7%A7%91%E6%8A%80%E7%9A%84vm/</guid><description>
&lt;p&gt;如果我們解壓縮CNT.2022.v3.zip的時候，使用滑鼠右鍵，解壓縮全部這個方法的話，
&lt;img src="https://i.imgur.com/uTlrJtS.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;我們的檔案外面會有兩層CNT.2022.v3，這兩層目錄，所以我們一開始打開CMD，工作目錄會在C:\Users\rbean，這時候要打兩次cd CNT.2022.v3，切換兩次目錄，才會看到我們需要的那些檔案，可以用dir這個命令，來檢查
&lt;img src="https://i.imgur.com/ktGOEfs.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;當我們下dt create是執行dt.bat這個批次檔，執行這段命令會幫我們建立一個DT的目錄，並且在這個目錄裡建立6台alpine的機器，可以打dir DT，看看裡面是不是有6台虛擬機器
&lt;img src="https://i.imgur.com/lY3M7cw.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;有了這6台機器後，可以下dt start這個指令，一次開啟6台我們剛剛建立的6台alpine的機器&lt;/p&gt;
&lt;p&gt;當我們要一次關閉6台機器時，可以下dt stop這個指令&lt;/p&gt;
&lt;p&gt;而一次刪除6台電腦的指令是，dt delete，要注意刪除機器前，一定要先將機器都關機，不然絕對會噴錯誤訊息，可以下dir，檢查DT這個資料夾是否被刪除
&lt;img src="https://i.imgur.com/OM68jrB.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最後要特別注意的是執行dt create start stop和delete，一定要先確定我們的工作目錄，是不是在CNT.2022.v3這個目錄下&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>