<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>教程 on LeoChu Space</title>
    <link>https://leochu.work/blog/tags/%E6%95%99%E7%A8%8B/</link>
    <description>Recent content in 教程 on LeoChu Space</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Wed, 08 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://leochu.work/blog/tags/%E6%95%99%E7%A8%8B/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>加密体系</title>
      <link>https://leochu.work/blog/tech/engineering/%E5%8A%A0%E5%AF%86%E4%BD%93%E7%B3%BB/</link>
      <pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/engineering/%E5%8A%A0%E5%AF%86%E4%BD%93%E7%B3%BB/</guid>
      <description>&lt;h2 id=&#34;1-三个核心问题&#34;&gt;1. 三个核心问题&lt;/h2&gt;
&lt;p&gt;整个体系其实在解决三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;你是谁？（身份认证）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据能不能被偷看？（加密传输）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;如何安全地交换密钥？（密钥分发）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;2-非对称加密公钥--私钥&#34;&gt;2. 非对称加密（公钥 / 私钥）&lt;/h2&gt;
&lt;h3 id=&#34;核心定义&#34;&gt;核心定义&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;使用一对密钥：公钥 + 私钥&lt;/p&gt;
&lt;/blockquote&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;hr&gt;
&lt;h3 id=&#34;两种用途关键区分&#34;&gt;两种用途（关键区分）&lt;/h3&gt;
&lt;h4 id=&#34;-加密通信&#34;&gt;① 加密通信&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;graph LR
A[发送方] --&amp;gt;|公钥加密| B[密文]
B --&amp;gt; C[接收方]
C --&amp;gt;|私钥解密| D[明文]
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h4 id=&#34;-身份认证ssh&#34;&gt;② 身份认证（SSH）&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;sequenceDiagram
participant A as 客户端（私钥）
participant B as 服务器（公钥）

B-&amp;gt;&amp;gt;A: challenge
A-&amp;gt;&amp;gt;B: signature
B-&amp;gt;&amp;gt;B: 公钥验证
B-&amp;gt;&amp;gt;A: 通过/拒绝
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h3 id=&#34;关键公式&#34;&gt;关键公式&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;signature = Sign(私钥, challenge)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Verify(公钥, challenge, signature) = true&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;本质总结&#34;&gt;本质总结&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;私钥负责“生成证明”，公钥负责“验证证明”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;3-ssh基于签名的认证机制&#34;&gt;3. SSH：基于签名的认证机制&lt;/h2&gt;
&lt;h3 id=&#34;文件结构&#34;&gt;文件结构&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~/.ssh/id_ed25519      &lt;span style=&#34;color:#75715e&#34;&gt;# 私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~/.ssh/id_ed25519.pub  &lt;span style=&#34;color:#75715e&#34;&gt;# 公钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~/.ssh/authorized_keys &lt;span style=&#34;color:#75715e&#34;&gt;# 服务器保存公钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h3 id=&#34;免密登录本质&#34;&gt;免密登录本质&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;服务器信任“某个公钥”，允许对应私钥登录&lt;/p&gt;</description>
    </item>
    <item>
      <title>PostgreSQL同步HDFS</title>
      <link>https://leochu.work/blog/tech/bigdata/postgresql%E5%90%8C%E6%AD%A5hdfs/</link>
      <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/postgresql%E5%90%8C%E6%AD%A5hdfs/</guid>
      <description>&lt;p&gt;1.使用datax同步数据&lt;/p&gt;
&lt;p&gt;2.模板json(已配置hdfs ha)：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;job&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;reader&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;postgresqlreader&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;parameter&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hs_sync&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Pass2025&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;column&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;order_date&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;day&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iso_day_of_week&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;weekday_cn&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;weekday_en&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;weekday_short&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;is_weekend&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iso_week&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;month&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;month_cn&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;month_en_full&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;month_en_short&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;quarter&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;year&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;connection&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;table&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dim_calendar&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;jdbcUrl&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;jdbc:postgresql://100.64.0.10:25432/hs_sync_data&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;fetchSize&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;writer&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hdfswriter&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;parameter&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;defaultFS&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hdfs://nameservice1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;hadoopConfig&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dfs.nameservices&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nameservice1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dfs.ha.namenodes.nameservice1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nn1,nn2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dfs.namenode.rpc-address.nameservice1.nn1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;192.168.33.61:8020&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dfs.namenode.rpc-address.nameservice1.nn2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;192.168.33.62:8020&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dfs.client.failover.proxy.provider.nameservice1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;fileType&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;orc&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/data/test/&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;fileName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dim_calendar&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;writeMode&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;truncate&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;column&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;order_date&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;day&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;smallint&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iso_day_of_week&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;smallint&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;weekday_cn&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;weekday_en&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;weekday_short&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;is_weekend&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;boolean&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iso_week&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;smallint&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;month&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;smallint&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;month_cn&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;month_en_full&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;month_en_short&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;quarter&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;year&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;smallint&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;fieldDelimiter&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\t&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxFileSize&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;134217728&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;encoding&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;setting&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;speed&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;channel&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;errorLimit&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;record&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;percentage&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.02&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;retry&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;limit&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;interval&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>CDH6.3.2集群部署</title>
      <link>https://leochu.work/blog/tech/bigdata/cdh6.3.2%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2/</link>
      <pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/cdh6.3.2%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2/</guid>
      <description>&lt;p&gt;使用ansible做自动化部署&lt;/p&gt;
&lt;h1 id=&#34;cdh-集群安装指南&#34;&gt;CDH 集群安装指南&lt;/h1&gt;
&lt;h2 id=&#34;环境准备&#34;&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;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;NFS 服务器&lt;/td&gt;
          &lt;td&gt;xxx.xxx.xxx.xxx:/nfs/share&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Inventory&lt;/td&gt;
          &lt;td&gt;inventory/cdh-init.ini&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;安装步骤&#34;&gt;安装步骤&lt;/h2&gt;
&lt;h3 id=&#34;步骤-1配置-etchosts-和挂载-nfs&#34;&gt;步骤 1：配置 /etc/hosts 和挂载 NFS&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ansible-playbook cdh-hosts-nfs.yml -i inventory/cdh-init.ini
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;步骤-2系统初始化&#34;&gt;步骤 2：系统初始化&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ansible-playbook cdh-init-raw.yaml -i inventory/cdh-init.ini
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;验证&#34;&gt;验证&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 验证 NFS 挂载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ansible cdh_all -i inventory/cdh-init.ini -m shell -a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ls /mnt&amp;#34;&lt;/span&gt; -b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 验证 Java&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ansible cdh_all -i inventory/cdh-init.ini -m shell -a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;java -version&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 验证 SELinux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ansible cdh_all -i inventory/cdh-init.ini -m shell -a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sestatus&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 验证 haveged&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ansible cdh_all -i inventory/cdh-init.ini -m shell -a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;systemctl status haveged&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;安装介质目录&#34;&gt;安装介质目录&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/mnt/
├── cdh/                    # CDH Parcel
├── ClouderaManager/        # CM 6.3.1
└── mysql/                  # MySQL 5.7 RPM
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Git配置SSH密钥</title>
      <link>https://leochu.work/blog/tech/engineering/git%E9%85%8D%E7%BD%AEssh%E5%AF%86%E9%92%A5/</link>
      <pubDate>Sat, 17 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/engineering/git%E9%85%8D%E7%BD%AEssh%E5%AF%86%E9%92%A5/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;本文由 &lt;a href=&#34;http://ksria.com/simpread/&#34;&gt;简悦 SimpRead&lt;/a&gt; 转码， 原文地址 &lt;a href=&#34;https://blog.csdn.net/weixin_41990913/article/details/91373362&#34;&gt;blog.csdn.net&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;初次安装 gitgit 需要配置用户名和邮箱，否则 git 会提示：please tell me who you are.&lt;/p&gt;
&lt;p&gt;你需要运行命令来配置你的用户名和邮箱：&lt;br&gt;
$ git config &amp;ndash;&lt;a href=&#34;https://so.csdn.net/so/search?q=global&amp;amp;spm=1001.2101.3001.7020&#34;&gt;global&lt;/a&gt; &lt;a href=&#34;http://user.name&#34;&gt;user.name&lt;/a&gt; “liuhanxia”&lt;br&gt;
$ git config &amp;ndash;global user.email &lt;a href=&#34;mailto:%22liuhanxia@51faguanggao.com&#34;&gt;&amp;ldquo;liuhanxia@51faguanggao.com&lt;/a&gt;&amp;rdquo;&lt;br&gt;
注意：（引号内请输入你自己设置的名字，和你自己的邮箱）此用户名和邮箱是 git 提交代码时用来显示你身份和联系方式的，并不是 &lt;a href=&#34;https://so.csdn.net/so/search?q=github&amp;amp;spm=1001.2101.3001.7020&#34;&gt;github&lt;/a&gt; 用户名和邮箱&lt;br&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/git_ssh_01.png&#34;&gt;&lt;br&gt;
git 使用 ssh 密钥&lt;br&gt;
git 支持 https 和 git 两种传输协议，github 分享链接时会有两种协议可选：git 协议链接图例、https 协议链接图例&lt;/p&gt;
&lt;p&gt;git 使用 https 协议，每次 pull, push 都会提示要输入密码，&lt;br&gt;
使用 git 协议，然后使用 ssh 密钥，这样免去每次都输密码的麻烦&lt;/p&gt;
&lt;p&gt;初次使用 git 的用户要使用 git 协议大概需要三个步骤：&lt;br&gt;
一、生成密钥对&lt;br&gt;
二、设置远程仓库（本文以 github 为例）上的公钥&lt;br&gt;
三、把 git 的 remote url 修改为 git 协议（以上两个步骤初次设置过以后，以后使用都不需要再次设置，此步骤视以后项目的 remote url 而定，如果以后其他项目的协议为 https 则需要此步骤）&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git服务器搭建</title>
      <link>https://leochu.work/blog/tech/engineering/git%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Sat, 20 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/engineering/git%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;p&gt;上一章节中我们远程仓库使用了 Github，Github 公开的项目是免费的，2019 年开始 Github 私有存储库也可以无限制使用。&lt;/p&gt;
&lt;p&gt;这当然我们也可以自己搭建一台 Git 服务器作为私有仓库使用。&lt;/p&gt;
&lt;p&gt;接下来我们将以 Centos 为例搭建 Git 服务器。&lt;/p&gt;
&lt;h3 id=&#34;1安装git&#34;&gt;1、安装Git&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
$ yum install git
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;接下来我们 创建一个git用户组和用户，用来运行git服务：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ groupadd git
$ useradd git -g git
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;2创建证书登录&#34;&gt;2、创建证书登录&lt;/h3&gt;
&lt;p&gt;收集所有需要登录的用户的公钥，公钥位于id_rsa.pub文件中，把我们的公钥导入到/home/git/.ssh/authorized_keys文件里，一行一个。&lt;/p&gt;
&lt;p&gt;如果没有该文件创建它：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cd /home/git/
$ mkdir .ssh
$ chmod 755 .ssh
$ touch .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;3初始化git仓库&#34;&gt;3、初始化Git仓库&lt;/h3&gt;
&lt;p&gt;首先我们选定一个目录作为Git仓库，假定是/home/gitrepo/runoob.git，在/home/gitrepo目录下输入命令：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cd /home
$ mkdir gitrepo
$ chown git:git gitrepo/
$ cd gitrepo

$ git init --bare runoob.git
Initialized empty Git repository in /home/gitrepo/runoob.git/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以上命令Git创建一个空仓库，服务器上的Git仓库通常都以.git结尾。然后，把仓库所属用户改为git：&lt;/p&gt;</description>
    </item>
    <item>
      <title>定制Admin管理后台</title>
      <link>https://leochu.work/blog/tech/python/django/%E5%AE%9A%E5%88%B6admin%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/</link>
      <pubDate>Sun, 03 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/python/django/%E5%AE%9A%E5%88%B6admin%E7%AE%A1%E7%90%86%E5%90%8E%E5%8F%B0/</guid>
      <description>&lt;p&gt;在&lt;a href=&#34;https://www.django.cn/course/show-11.html&#34;&gt;管理后台与model模型&lt;/a&gt;文章里，我们曾经有一个操作，就是在admin.py里注册blog应用，这样blog应用才会在后台显示出来，我们才能在后台对这个应用进行管理。这就是Django自带的后台管理的特色之一，它可以让我们快速便捷管理数据，后台管理可以在各个app的admin.py文件中进行控制。&lt;/p&gt;
&lt;p&gt;想要对APP应用进行管理，最基本的前提是要先在settings里对其进行注册，就是在INSTALLED_APPS里把APP名添加进去，更多的可以查看文章：&lt;a href=&#34;https://www.django.cn/course/show-10.html&#34;&gt;全局配置settings详解&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下面我们以一个blog应用来举例，向大家介绍一些常用的自定制admin的方法。如下为blog的models的Article表的内容:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;class Article(models.Model):
    title = models.CharField(&amp;#39;标题&amp;#39;, max_length=70)
    keywords = models.CharField(&amp;#39;文章关键词&amp;#39;, max_length=120, blank=True, null=True)
    excerpt = models.TextField(&amp;#39;摘要&amp;#39;, max_length=200, blank=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name=&amp;#39;分类&amp;#39;, blank=True, null=True)
    body = models.TextField(&amp;#39;内容&amp;#39;)
    user = models.ForeignKey(Userinfo, on_delete=models.CASCADE, verbose_name=&amp;#39;作者&amp;#39;)
    views = models.PositiveIntegerField(&amp;#39;阅读量&amp;#39;, default=0)
    top = models.IntegerField(choices=[(0, &amp;#39;否&amp;#39;), (1, &amp;#39;是&amp;#39;), ], default=0, verbose_name=&amp;#39;是否推荐&amp;#39;)
    created_time = models.DateTimeField(&amp;#39;发布时间&amp;#39;, auto_now_add=True)
    modified_time = models.DateTimeField(&amp;#39;修改时间&amp;#39;, auto_now=True)
    class Meta:
        verbose_name = &amp;#39;文章&amp;#39;verbose_name_plural = &amp;#39;文章&amp;#39;def __str__(self):
        return self.title
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;一、管理后台注册需要管理的应用&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;只有注册了，我们才能在管理后台看到这个APP应用，才能对其进行管理，这个注册有两种方式：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1、装饰器注册&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;from django.contrib import admin
from .models import Article
  
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display=(&amp;#39;id&amp;#39;, &amp;#39;category&amp;#39;, &amp;#39;title&amp;#39;, &amp;#39;user&amp;#39;,&amp;#39;views&amp;#39;,&amp;#39;created_time&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;2、注册参数&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spark Thrift Server</title>
      <link>https://leochu.work/blog/tech/bigdata/spark-thrift-server/</link>
      <pubDate>Sun, 16 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/spark-thrift-server/</guid>
      <description>&lt;h4 id=&#34;文章目录&#34;&gt;文章目录&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#Spark_Thrift_Server_1&#34;&gt;一、Spark Thrift Server 介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#Spark_Thrift_Server_9&#34;&gt;二、部署 Spark Thrift Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#Spark_Thrift_Server_29&#34;&gt;三、Spark Thrift Server 的架构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#Spark_Thrift_ServerSQL_40&#34;&gt;四、Spark Thrift Server 如何执行 SQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#HiveServer2_48&#34;&gt;五、和 HiveServer2 的区别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#Spark_Thrift_Server_58&#34;&gt;Spark Thrift Server 的优点&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#Spark_Thrift_Server_64&#34;&gt;Spark Thrift Server 的缺点&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#_72&#34;&gt;六、结论&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;一spark-thrift-server-介绍&#34;&gt;一、Spark Thrift Server 介绍&lt;/h3&gt;
&lt;p&gt;Spark Thrift Server 是 Spark 社区基于 HiveServer2 实现的一个 Thrift 服务。旨在无缝兼容 HiveServer2。&lt;/p&gt;
&lt;p&gt;因为 Spark Thrift Server 的接口和协议都和 HiveServer2 完全一致，因此我们部署好 Spark Thrift Server 后，可以直接使用 hive 的 beeline 访问 Spark Thrift Server 执行相关语句。&lt;/p&gt;
&lt;p&gt;Spark Thrift Server 的目的也只是取代 HiveServer2，因此它依旧可以和 Hive Metastore 进行交互，获取到 hive 的元数据。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kerberos入门</title>
      <link>https://leochu.work/blog/tech/bigdata/kerberos%E5%85%A5%E9%97%A8/</link>
      <pubDate>Sun, 05 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/kerberos%E5%85%A5%E9%97%A8/</guid>
      <description>&lt;h2 id=&#34;1kerberos是什么&#34;&gt;1. Kerberos是什么&lt;/h2&gt;
&lt;p&gt;Kerberos在古希腊神话中是指：一只有三个头的狗。这条狗守护在地狱之门外，防止活人闯入。&lt;/p&gt;
&lt;p&gt;Kerberos是一个用于鉴定身份的协议，它采用对称密钥加密。&lt;/p&gt;
&lt;p&gt;在我们的CDH平台中，常用来作为一种安全验证，只有经过kerberos认证后的用户才可以访问大数据集群的服务。&lt;/p&gt;
&lt;h2 id=&#34;2kerberos中的一些概念&#34;&gt;2.Kerberos中的一些概念&lt;/h2&gt;
&lt;p&gt;KDC(key distribution center): kerberos的认证中心，用来鉴别用户的身份的。想访问带kerberos的服务，得先过这个。&lt;/p&gt;
&lt;p&gt;Principal: kerberos中账户的概念，用户会以这个账户来被KDC认证。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;一个Principal由三个部分组成：primary, instance以及realm，其组成形式为primary/instance@realm。

primary : 可以是OS中的username，也可以是service name；
instance : 用于区分属于同一个user或者service的多个principals，该项为optional；
realm : 类似于DNS中的domain，定义了一组principals

举个栗子：hive/hive@ZHENDAO.COM    kafka/kafka@ZHENDAO.COM
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;KeyTab: 以文件的形式呈现，存储了一个或多个Principal的长期的key，用途和密码类似，用于kerberos认证登录；&lt;/p&gt;
&lt;p&gt;其存在的意义在于让用户不需要明文的存储密码，和程序交互时不需要人为交互来输入密码。
&lt;img alt=&#34;Pasted image 20230327112709.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327112709.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;TGT: 用户使用principal在KDC中进行认证后，KDC会返回给客户一个TGT，TGT会有过期时间。
&lt;img alt=&#34;Pasted image 20230327112731.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327112731.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ticket：用户访问具体Server时，KDC会进行一次加密操作，返回给用户一张对应server的门票。&lt;/p&gt;
&lt;h2 id=&#34;3kerberos基本使用&#34;&gt;3.Kerberos基本使用&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;kerberos管理员创建一个principal, 并生成对应的keytab文件  → 注册一个kerberos的账号，并配置了免密登录&lt;/li&gt;
&lt;li&gt;拿着keytab去KDC中进行账户的认证 → kinit  -kt  /var/lib/hive/hive.keytab  &lt;a href=&#34;mailto:hive/hive@ZHENDAO.COM&#34;&gt;hive/hive@ZHENDAO.COM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;KDC返回一个这个principal对应的TGT文件 → 默认存放在linux的 /tmp 目录下&lt;/li&gt;
&lt;li&gt;客户拿着TGT去过带有kerberos的服务端APP&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;4kerberos认证原理&#34;&gt;4.Kerberos认证原理&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;客户拿着principal去KDC中进行认证的时候，kerberos会检查其库中是否有对应的principal，如果有的话，返回一个TGT。&lt;/li&gt;
&lt;li&gt;客户拿着TGT向带有kerberos的服务端app发起请求时，请求会先发到KDC。&lt;/li&gt;
&lt;li&gt;KDC会拿着客户的master key（客户密码的hash）和服务端的master key（比如说hive server的master key）进行加密操作，并返回给客户一个对应hive  server的ticket。&lt;/li&gt;
&lt;li&gt;客户拿着加密后的ticket,去请求hive服务的时候，hive会对ticket进行一个验证。验证通过即可访问hive&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;5举个栗子kafka认证过程&#34;&gt;5.举个栗子：KAFKA认证过程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;kafka producer拿着principal向KDC认证身份，通过则拿到KDC返回的TGT  &amp;lt;这是第一次认证，就好比在游乐园的门口，做一次验票操作&amp;gt;&lt;/li&gt;
&lt;li&gt;producer拿着TGT向KDC请求kafka的服务，KDC验证TGT，看该账号能不能使用kafka，如果可以使用，那么进行加密，并返回一个ticket给producer &amp;lt;这是第二次认证，就好比你想玩游乐园中的具体项目，得看看你买的门票有没有这个资格玩VIP项目&amp;gt;&lt;/li&gt;
&lt;li&gt;producer拿着ticket和kafka server尝试建立连接，kafka server会使用server的master key对ticket进行一次解密操作，来验证producer的身份，通过则建立连接 &amp;lt;玩上具体的项目了&amp;gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Hive注册udf</title>
      <link>https://leochu.work/blog/tech/bigdata/hive%E6%B3%A8%E5%86%8Cudf/</link>
      <pubDate>Sun, 13 Nov 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive%E6%B3%A8%E5%86%8Cudf/</guid>
      <description>&lt;h4 id=&#34;1创建临时函数&#34;&gt;1.创建临时函数&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive&amp;gt; add jar /home/hadoop/bigdata_udf.jar;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive&amp;gt; create temporary &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; isContains100 as &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;com.xx.hive.udf.hm2.IsContains100&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--验证
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive&amp;gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; isContains100&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t.col1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; from t limit 10;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive&amp;gt; drop temporary &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; isContains100;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2创建永久函数&#34;&gt;2.创建永久函数&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hadoop fs -put /opt/bigdata_udf.jar /udf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive&amp;gt; create &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; default.url_decode as &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;com.xx.udf.DecodeURL&amp;#39;&lt;/span&gt; using jar &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hdfs:///udf/bigdata_udf.jar&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--验证
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive&amp;gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; default.url_decode&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t.col1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; from t limit 10;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;注意注册永久函数必须使用hdfs路径不可使用本地路径&#34;&gt;注意:注册永久函数必须使用hdfs路径,不可使用本地路径&lt;/h4&gt;</description>
    </item>
    <item>
      <title>Hive映射HBase数据源</title>
      <link>https://leochu.work/blog/tech/bigdata/hive%E6%98%A0%E5%B0%84hbase%E6%95%B0%E6%8D%AE%E6%BA%90/</link>
      <pubDate>Sun, 30 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive%E6%98%A0%E5%B0%84hbase%E6%95%B0%E6%8D%AE%E6%BA%90/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;EXTERNAL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;mongodb_dingtalk.hbasetohive_patent&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;(  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;key&lt;/span&gt; String,  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;abstracts String,  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;address String)  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STORED &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;org.apache.hadoop.hive.hbase.HBaseStorageHandler&amp;#39;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WITH&lt;/span&gt; SERDEPROPERTIES (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hbase.columns.mapping&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:key,info:abstracts,info:address&amp;#34;&lt;/span&gt;)  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TBLPROPERTIES(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[hbase.table.name](http://hbase.table.name/)&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dingtalk:patent&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;仅从HBase拉取数据使用，禁止利用此种方式往HBase写数据&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据拉出时拉出hbase中数据对应当前版本的时间戳&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;create&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;external&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; ods.ods_zxk_hbase_wechat_public_account_mapping(  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;id string &lt;span style=&#34;color:#66d9ef&#34;&gt;comment&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;需要拆分的key&amp;#39;&lt;/span&gt;,  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ts &lt;span style=&#34;color:#66d9ef&#34;&gt;timestamp&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;comment&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;数据标识符，用来跟新数据做去重&amp;#39;&lt;/span&gt;)  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;comment&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;高级搜索有无微信公众号&amp;#39;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STORED &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;org.apache.hadoop.hive.hbase.HBaseStorageHandler&amp;#39;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WITH&lt;/span&gt; SERDEPROPERTIES (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hbase.columns.mapping&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:key,:timestamp&amp;#39;&lt;/span&gt;)  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TBLPROPERTIES(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;[hbase.table.name](http://hbase.table.name/)&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;dingtalk:wechat_public_account&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>hive映射es</title>
      <link>https://leochu.work/blog/tech/bigdata/hive%E6%98%A0%E5%B0%84elasticsearch/</link>
      <pubDate>Sun, 16 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive%E6%98%A0%E5%B0%84elasticsearch/</guid>
      <description>&lt;h3 id=&#34;一-hive导入es&#34;&gt;一 hive导入es&lt;/h3&gt;
&lt;h4 id=&#34;1-创建hive-es映射表&#34;&gt;1 创建hive-es映射表&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;EXTERNAL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; hive_es.re_run_test2(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;id STRING
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;,test STRING)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STORED &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;org.elasticsearch.hadoop.hive.EsStorageHandler&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TBLPROPERTIES(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.resource&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;re_run_test2/test&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.nodes&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;172.16.98.113,172.16.98.149,172.16.98.150,172.16.98.151,172.16.98.152&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.port&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;9200&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.mapping.id&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;注&#34;&gt;注：&lt;/h3&gt;
&lt;h3 id=&#34;1&#34;&gt;1.&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;es.resource对应es中的index/type
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;2&#34;&gt;2.&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1.es.mapping.names为hive和es字段名映射关系。
2.如果hive表和es表字段名完全一致，可以省略此参数。
3.hive中字段名不区分大小写，元数据寸的全是小写；es中字段大小写敏感，如果es中字段名出现大写，需认真填写。
4.es中_id为自动生成，如若需要覆盖，需加参数&amp;#39;es.mapping.id&amp;#39;=&amp;#39;id&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;&lt;/h3&gt;
&lt;h4 id=&#34;2-先导入es映射表相关jar包&#34;&gt;2 先导入es映射表相关jar包&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;add jar /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hive/auxlib/elasticsearch-hadoop-6.3.0.jar;
add jar /data/jar/httpclient-4.5.5.jar;
add jar /data/jar/org.apache.commons.httpclient.jar;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;3-向映射表insert数据&#34;&gt;3 向映射表insert数据&lt;/h4&gt;
&lt;h3 id=&#34;二-es导入hive&#34;&gt;二 es导入hive&lt;/h3&gt;
&lt;h4 id=&#34;1-建hive映射表&#34;&gt;1 建hive映射表&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;EXTERNAL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; hive_es.cty_test5(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;addTime string
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STORED &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;org.elasticsearch.hadoop.hive.EsStorageHandler&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TBLPROPERTIES(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.resource&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cty_test/cty_test&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.nodes&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;172.16.98.113,172.16.98.149,172.16.98.150,172.16.98.151,172.16.98.152&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.port&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;9200&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.mapping.names&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;addTime:addTime&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.mapping.date.rich&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;false&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;es.index.auto.create&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;false&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;注意hive表数据类型要和es一致除了es的date要转成hive的string同时要加参数esmappingdaterichfalse否则查询会报错&#34;&gt;注意，hive表数据类型要和es一致，除了es的date要转成hive的string，同时要加参数&amp;rsquo;es.mapping.date.rich&amp;rsquo;=&amp;lsquo;false&amp;rsquo;,否则查询会报错.&lt;/h5&gt;
&lt;h4 id=&#34;2-通过映射表向其他表insert&#34;&gt;2 通过映射表向其他表insert&lt;/h4&gt;
&lt;h3 id=&#34;参考&#34;&gt;参考：&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/koushr/p/9505435.html&#34;&gt;https://www.cnblogs.com/koushr/p/9505435.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>flume示例</title>
      <link>https://leochu.work/blog/tech/bigdata/flume%E7%A4%BA%E4%BE%8B/</link>
      <pubDate>Sun, 26 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/flume%E7%A4%BA%E4%BE%8B/</guid>
      <description>&lt;p&gt;conf：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ex_trade.conf:外贸数据自kafka接入hdfs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置负责人：褚天宇&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置时间： 2022-01-17&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置Agent ex_trade_agent各个组件的名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; r1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; k1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;channels &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; c1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置Agent ex_trade_agent的source r1的属性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置kafka源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;r1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; org&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;apache&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;flume&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;source&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;kafka&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;KafkaSource
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置kafka消费者组id （不能改动！改动会丢失已记录的offset）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;r1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;kafka&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;consumer&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;group&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ex_trade_flume
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;r1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;kafka&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;bootstrap&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;servers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.2&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9092&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.3&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9092&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.7&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9092&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;r1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;kafka&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;topics &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ex_trade
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 一批写入 channel 的最大消息数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;r1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;batchSize &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 一个批次写入 channel 之前的最大等待时间（毫秒）。达到等待时间或者数量达到 batchSize 都会触发写操作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;r1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;batchDurationMillis &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置kafka-offset策略为从头消费&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;r1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;kafka&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;consumer&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;auto&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;offset&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;reset &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; earliest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置Agent ex_trade_agent的sink k1的属性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置hdfs目标&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; hdfs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置hdfs写入目录，每天一个文件夹，为之后hive表按日分区做准备&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;flume&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;ex_trade&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;date&lt;span style=&#34;color:#f92672&#34;&gt;=%&lt;/span&gt;Y&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;m&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;d&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置文件前缀&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;filePrefix &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ex_trade_
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置数据类型为原样输出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;fileType &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; DataStream
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 当前文件写入达到该值时间后触发滚动创建新文件，单位：秒，设置为1天防止产生小文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rollInterval &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;86400&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 当前文件写入达到该大小后触发滚动创建新文件，单位：字节，设置为128M&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rollSize &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;134217700&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 向 HDFS 写入内容时每次批量操作的 Event 数量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;batchSize &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 不根据 Event 数量来分割文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;rollCount &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 文件写入格式设置为 Text，否则 Impala或 Apache Hive 无法读取这些文件。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;writeFormat &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Text
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置Agent ex_trade_agent的channel c1的属性，用来缓冲数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;channels&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;c1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置通道的检查点目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;channels&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;c1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;checkpointDir &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;data&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;deploy&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;flume&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;checkpoint
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 配置通道的数据目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;channels&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;c1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;dataDirs &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;data&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;deploy&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;flume&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 把source和sink绑定到channel上&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sources&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;r1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;channels &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; c1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ex_trade_agent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sinks&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;k1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;channel &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; c1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动脚本：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
