<?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>Bigdata on LeoChu Space</title>
    <link>https://leochu.work/blog/tech/bigdata/</link>
    <description>Recent content in Bigdata on LeoChu Space</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 26 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://leochu.work/blog/tech/bigdata/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>HDFS更改数据目录导致NameNode无法启动</title>
      <link>https://leochu.work/blog/tech/bigdata/hdfs%E6%9B%B4%E6%94%B9%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95%E5%AF%BC%E8%87%B4namenode%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8/</link>
      <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hdfs%E6%9B%B4%E6%94%B9%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95%E5%AF%BC%E8%87%B4namenode%E6%97%A0%E6%B3%95%E5%90%AF%E5%8A%A8/</guid>
      <description>&lt;h1 id=&#34;20260326-hdfs更改数据目录导致namenode无法启动&#34;&gt;20260326 HDFS更改数据目录导致NameNode无法启动&lt;/h1&gt;
&lt;h2 id=&#34;问题描述&#34;&gt;问题描述：&lt;/h2&gt;
&lt;p&gt;由于一开始硬盘还未挂载目录，安装cdh时，配置hdfs相关数据目录就用了默认的系统盘下的目录，如下&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/data/dfs/nn /data/dfs/jn /data/dfs/dn&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;后面数据盘挂载在/hadoop/data1/下，固将hdfs的数据目录改为&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/hadoop/data1/dfs/nn /hadoop/data1/dfs/jn /hadoop/data1/dfs/dn&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;重新启动hdfs，报错，分为三类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nameNode 无法格式化&lt;/li&gt;
&lt;li&gt;丢失块信息100%&lt;/li&gt;
&lt;li&gt;Cloudera Manager 无法检测 HDFS 健康状态&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;解决&#34;&gt;解决：&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;停掉hdfs所有服务&lt;/li&gt;
&lt;li&gt;清空&lt;code&gt;/hadoop/data1/dfs/nn /hadoop/data1/dfs/jn /hadoop/data1/dfs/dn&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启动dataNode，failoverController 等服务（除NameNode，journalNode外）&lt;/li&gt;
&lt;li&gt;对activity NameNode执行format操作&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/019d28d7-9af8-7238-a7f4-dd472d172e28-image.png&#34;&gt;&lt;/li&gt;
&lt;li&gt;启动所有journalNode&lt;/li&gt;
&lt;li&gt;启动activity NameNode&lt;/li&gt;
&lt;li&gt;对Standby NameNode执行Bootstrap Standby操作&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/019d28dc-56f9-7688-875c-c416075ef63c-image.png&#34;&gt;&lt;/li&gt;
&lt;li&gt;启动Standby NameNode&lt;/li&gt;
&lt;li&gt;ssh客户端以hdfs用户执行&lt;code&gt;hdfs dfs -chmod -R 777 /data/tmp&lt;/code&gt; 等命令,完成以下目录创建及赋权,后续通过ranger做权限收口&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[hdfs@cdhmaster02 ~]$ hdfs dfs -ls Found 3 items
drwxrwxrwt   - hdfs supergroup          0 2026-03-26 12:31 /data
drwxrwxrwt   - hdfs supergroup          0 2026-03-26 17:25 /tmp
drwxr-xr-x   - hdfs supergroup          0 2026-03-26 17:24 /user
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;注意事项&#34;&gt;注意事项：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;操作顺序不可颠倒，否则可能导致 NameNode 或 JournalNode 数据不一致&lt;/li&gt;
&lt;li&gt;不能对 Standby NameNode 执行 format，否则会破坏 HA 集群&lt;/li&gt;
&lt;li&gt;**(重要)**清空目录操作仅限于尚未存储业务数据的集群或测试环境&lt;/li&gt;
&lt;li&gt;如果要迁移已有数据的数据目录，则需要&lt;code&gt;rsync -avh /data/dfs/nn/ /hadoop/data1/dfs/nn/&lt;/code&gt;类似命令&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;原因解释&#34;&gt;原因解释：&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;NameNode 无法格式化&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;HDFS 的 HA 模式下，Active NameNode 的元数据（fsimage + edits）必须与 Quorum Journal Nodes 保持一致。&lt;/li&gt;
&lt;li&gt;修改 HDFS 存储目录后，如果 JournalNode 目录仍保留旧数据或未初始化，NameNode 在检查 quorum 时会发现元数据不匹配，因此无法格式化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键点&lt;/strong&gt;：只允许对 Active NameNode 格式化，Standby NameNode 或 JournalNode 不能直接 format，否则会破坏 HA 的一致性机制。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;丢失块信息 100%&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;DataNode 存储目录修改后，旧数据无法被 NameNode 正确识别，因为 NameNode 的 fsimage 中没有对应块信息。&lt;/li&gt;
&lt;li&gt;NameNode 启动时会扫描 DataNode 上报的块，如果目录未初始化或数据不匹配，则所有块都被标记为丢失，从而导致 CM 显示 100% missing blocks。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键点&lt;/strong&gt;：HDFS 的块映射严格依赖 NameNode 的元数据，DataNode 目录未同步会造成“逻辑丢失”，即使物理数据存在。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudera Manager 无法检测 HDFS&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;CM Canary 测试依赖基本的 HDFS I/O 操作（创建、写入、读取、删除文件）。&lt;/li&gt;
&lt;li&gt;当 NameNode 在安全模式或丢失块状态下，读写请求无法完成，Canary 测试失败，导致 CM 显示健康异常。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键点&lt;/strong&gt;：CM 健康检测反映的是 NameNode 和 DataNode 的可用性与一致性，而非磁盘本身状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;操作顺序要求严格&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Active NameNode 必须先格式化并启动，使元数据初始化完成。&lt;/li&gt;
&lt;li&gt;JournalNode 启动后才能形成 Quorum，保证 HA 的 edit log 复制。&lt;/li&gt;
&lt;li&gt;Standby NameNode 只能通过 &lt;strong&gt;Bootstrap Standby&lt;/strong&gt; 从 Active NameNode 同步元数据，否则会破坏 HA 的一致性，导致集群无法启动。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键点&lt;/strong&gt;：HDFS HA 的核心机制是 edit log 的 quorum 写入与 NameNode 状态同步，顺序错误会导致集群不可用。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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>CDH基础配置及优化</title>
      <link>https://leochu.work/blog/tech/bigdata/cdh%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E5%8F%8A%E4%BC%98%E5%8C%96/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/cdh%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE%E5%8F%8A%E4%BC%98%E5%8C%96/</guid>
      <description>&lt;h1 id=&#34;一hive中文注释乱码&#34;&gt;一、hive中文注释乱码&lt;/h1&gt;
&lt;h2 id=&#34;1设置-hive-元数据库字符集&#34;&gt;&lt;em&gt;1、设置 hive 元数据库字符集&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;show create database hive;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/019d0a6a-72c9-7608-ac3a-0a57f498e4fd-image.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;查看为 utf8，需变更为 latin1&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;alter database hive character set latin1; &lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/019d0a6b-d35a-7499-96cd-9281218f8e88-image.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;2更改如下表字段为字符集编码为-utf8&#34;&gt;&lt;em&gt;2、更改如下表字段为字符集编码为 utf8&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;①修改表字段注解和表注解&lt;br&gt;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;&lt;br&gt;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;&lt;br&gt;
② 修改分区字段注解：&lt;br&gt;
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;&lt;br&gt;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;&lt;br&gt;
③修改索引注解：&lt;br&gt;
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux系统级优化</title>
      <link>https://leochu.work/blog/tech/bigdata/linux%E7%B3%BB%E7%BB%9F%E7%BA%A7%E4%BC%98%E5%8C%96/</link>
      <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/linux%E7%B3%BB%E7%BB%9F%E7%BA%A7%E4%BC%98%E5%8C%96/</guid>
      <description>&lt;h2 id=&#34;一在cdhcm部署时已经做了部分系统优化&#34;&gt;一、在cdh+cm部署时，已经做了部分系统优化&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ssh双向免密&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置时间同步服务（本次没用ntpd，用的是chrony）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;禁用透明大页、碎片整理：THP (Transparent Huge Pages)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;禁用内存交换swap（常用0或1）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二hadoop集群推荐内核参数&#34;&gt;二、hadoop集群推荐内核参数：&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;参数名称&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;默认值&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;文件系统参数&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;fs.file-max&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;6815744&lt;/td&gt;
          &lt;td&gt;系统最大文件描述符数量（所有进程可打开文件总数上限）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;fs.aio-max-nr&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;1048576&lt;/td&gt;
          &lt;td&gt;异步I/O请求的最大并发数（影响高并发场景性能）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;网络核心参数&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;net.core.rmem_default&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;262144&lt;/td&gt;
          &lt;td&gt;TCP接收缓冲区&lt;strong&gt;默认大小&lt;/strong&gt;（256KB）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;net.core.wmem_default&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;262144&lt;/td&gt;
          &lt;td&gt;TCP发送缓冲区&lt;strong&gt;默认大小&lt;/strong&gt;（256KB）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;net.core.rmem_max&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;16777216&lt;/td&gt;
          &lt;td&gt;TCP接收缓冲区&lt;strong&gt;最大允许值&lt;/strong&gt;（16MB）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;net.core.wmem_max&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;16777216&lt;/td&gt;
          &lt;td&gt;TCP发送缓冲区&lt;strong&gt;最大允许值&lt;/strong&gt;（16MB）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;TCP协议栈参数&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;net.ipv4.tcp_rmem&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;4096 262144 16777216&lt;/td&gt;
          &lt;td&gt;接收窗口尺寸：• 最小值4KB• 默认值256KB• 最大值16MB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;net.ipv4.tcp_wmem&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;4096 262144 16777216&lt;/td&gt;
          &lt;td&gt;发送窗口尺寸：• 最小值4KB• 默认值256KB• 最大值16MB&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sysctl -e fs.file-max fs.aio-max-nr &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; net.core.rmem_default net.core.wmem_default &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; net.core.rmem_max net.core.wmem_max &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; net.ipv4.tcp_rmem net.ipv4.tcp_wmem 2&amp;gt;/dev/nulll
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/019d1e9d-a8aa-71fa-bc02-15c30fb69345-image.png&#34;&gt;&lt;/p&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>spark参数num-executors未生效</title>
      <link>https://leochu.work/blog/tech/bigdata/spark%E5%8F%82%E6%95%B0num-executors%E6%9C%AA%E7%94%9F%E6%95%88/</link>
      <pubDate>Sat, 23 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/spark%E5%8F%82%E6%95%B0num-executors%E6%9C%AA%E7%94%9F%E6%95%88/</guid>
      <description>&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;spark-submit --master yarn --conf spark.default.parallelism&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--deploy-mode cluster --driver-memory 4G --executor-memory 4G &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--num-executors &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt; --executor-cores &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--conf spark.yarn.executor.memoryOverhead&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;5g &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--class com.lz.hbase.CompanyInfo /tmp/test_langzi/original-spark_hbase01-1.0-SNAPSHOT.jar
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上提交参数中的&amp;ndash;num-executors 40没有生效，executors 大于40并且占满yarn资源，导致后来的yarn任务阻塞&lt;/p&gt;
&lt;h3 id=&#34;原因&#34;&gt;原因：&lt;/h3&gt;
&lt;p&gt;官方参数解释&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ndash;num-executors NUM
Number of executors to launch (Default: 2).
If dynamic allocation is enabled, the initial number of executors will be at least NUM.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当开启动态分配时，num-executors成为了最小executors 数，而cdh中spark默认开启dynamic allocation，所以当yarn队列资源空闲时，真正的excutor数会大于设置的num-executors&lt;/p&gt;
&lt;h3 id=&#34;解决方案&#34;&gt;解决方案：&lt;/h3&gt;
&lt;p&gt;提交参数添加&lt;code&gt;--conf spark.dynamicAllocation.maxExecutors=40&lt;/code&gt; 限制最大excutor数&lt;/p&gt;
&lt;h3 id=&#34;附spark提交任务模板&#34;&gt;附：spark提交任务模板&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;spark-submit --master yarn --conf spark.default.parallelism&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#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;--conf spark.dynamicAllocation.maxExecutors&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;40&lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--deploy-mode cluster --driver-memory 4G --executor-memory 4G &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--num-executors &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt; --executor-cores &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--conf spark.yarn.executor.memoryOverhead&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4G &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--class com.lz.hbase.CompanyInfo /tmp/test_langzi/original-spark_hbase01-1.0-SNAPSHOT.jar
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>maven打包去除dependency-reduced-pom.xml文件</title>
      <link>https://leochu.work/blog/tech/bigdata/maven%E6%89%93%E5%8C%85%E5%8E%BB%E9%99%A4dependency-reduced-pom.xml%E6%96%87%E4%BB%B6/</link>
      <pubDate>Sat, 09 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/maven%E6%89%93%E5%8C%85%E5%8E%BB%E9%99%A4dependency-reduced-pom.xml%E6%96%87%E4%BB%B6/</guid>
      <description>&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;标签&lt;/th&gt;
          &lt;th&gt;#maven&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;场景&lt;/td&gt;
          &lt;td&gt;工作&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;时间&lt;/td&gt;
          &lt;td&gt;2023年2月14日17:58:09&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;一问题描述&#34;&gt;一、问题描述&lt;/h3&gt;
&lt;p&gt;每次打包的时候，项目目录会多出一个莫名的文件&lt;strong&gt;dependency-reduced-pom.xml&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image-20230214175954392&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/image-20230214175954392.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;二导致原因&#34;&gt;二、导致原因&lt;/h3&gt;
&lt;p&gt;maven打包插件&lt;strong&gt;maven-shade-plugin&lt;/strong&gt;打包时自动生成，&lt;code&gt;createDependencyReducedPom&lt;/code&gt;默认为&lt;code&gt;true&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dependency-reduced-pom.xml&lt;/strong&gt; 删除了已经在你的着色 jar 中的传递依赖项。这可以防止消费者两次拉他们，从而避免无用的重复。&lt;/p&gt;
&lt;h3 id=&#34;三解决方案&#34;&gt;三、解决方案&lt;/h3&gt;
&lt;p&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-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;configuration&amp;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;lt;createDependencyReducedPom&amp;gt;&lt;/span&gt;false&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/createDependencyReducedPom&amp;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;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&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-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;plugin&amp;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;lt;groupId&amp;gt;&lt;/span&gt;org.apache.maven.plugins&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/groupId&amp;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;lt;artifactId&amp;gt;&lt;/span&gt;maven-shade-plugin&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/artifactId&amp;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;lt;version&amp;gt;&lt;/span&gt;3.1.1&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/version&amp;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;lt;configuration&amp;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;lt;createDependencyReducedPom&amp;gt;&lt;/span&gt;false&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/createDependencyReducedPom&amp;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;lt;/configuration&amp;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;lt;executions&amp;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;lt;execution&amp;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;lt;phase&amp;gt;&lt;/span&gt;package&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/phase&amp;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;lt;goals&amp;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;lt;goal&amp;gt;&lt;/span&gt;shade&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/goal&amp;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;lt;/goals&amp;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;lt;configuration&amp;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;lt;artifactSet&amp;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;lt;excludes&amp;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;lt;exclude&amp;gt;&lt;/span&gt;org.slf4j:*&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/exclude&amp;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;lt;exclude&amp;gt;&lt;/span&gt;log4j:*&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/exclude&amp;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;lt;exclude&amp;gt;&lt;/span&gt;ch.qos.logback:*&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/exclude&amp;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;lt;exclude&amp;gt;&lt;/span&gt;com.google.code.findbugs:jsr305&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/exclude&amp;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;lt;/excludes&amp;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;lt;/artifactSet&amp;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;lt;filters&amp;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;lt;filter&amp;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;&amp;lt;!-- Do not copy the signatures in the META-INF folder.
&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;                        Otherwise, this might cause SecurityExceptions when using the JAR. --&amp;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;lt;artifact&amp;gt;&lt;/span&gt;*:*&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/artifact&amp;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;lt;excludes&amp;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;lt;exclude&amp;gt;&lt;/span&gt;META-INF/*.SF&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/exclude&amp;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;lt;exclude&amp;gt;&lt;/span&gt;META-INF/*.DSA&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/exclude&amp;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;lt;exclude&amp;gt;&lt;/span&gt;META-INF/*.RSA&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/exclude&amp;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;lt;/excludes&amp;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;lt;/filter&amp;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;lt;/filters&amp;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;lt;transformers&amp;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;lt;transformer&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:#a6e22e&#34;&gt;implementation=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;org.apache.maven.plugins.shade.resource.ManifestResourceTransformer&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;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;&amp;lt;!-- Replace this with the main class of your job --&amp;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;lt;mainClass&amp;gt;&lt;/span&gt;my.programs.main.clazz&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/mainClass&amp;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;lt;/transformer&amp;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;lt;transformer&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:#a6e22e&#34;&gt;implementation=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;org.apache.maven.plugins.shade.resource.ServicesResourceTransformer&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&amp;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;lt;/transformers&amp;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;lt;/configuration&amp;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;lt;/execution&amp;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;lt;/executions&amp;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;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>kafka集群运行节点运行不成功</title>
      <link>https://leochu.work/blog/tech/bigdata/kafka%E9%9B%86%E7%BE%A4%E8%BF%90%E8%A1%8C%E8%8A%82%E7%82%B9%E8%BF%90%E8%A1%8C%E4%B8%8D%E6%88%90%E5%8A%9F/</link>
      <pubDate>Sat, 26 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/kafka%E9%9B%86%E7%BE%A4%E8%BF%90%E8%A1%8C%E8%8A%82%E7%82%B9%E8%BF%90%E8%A1%8C%E4%B8%8D%E6%88%90%E5%8A%9F/</guid>
      <description>&lt;h3 id=&#34;1现象&#34;&gt;1.现象&lt;/h3&gt;
&lt;p&gt;由于zookeeper挂掉，造成kafka出现：There are 60 offline partitions。
&lt;img alt=&#34;Pasted image 20230327102327.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327102327.png&#34;&gt;
&lt;img loading=&#34;lazy&#34; src=&#34;http://pmd.71360.com/download/attachments/12159442/image2021-11-25_11-12-28.png?version=1&amp;modificationDate=1637809890000&amp;api=v2&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;2造成的原因&#34;&gt;2.造成的原因&lt;/h3&gt;
&lt;p&gt;经过排查发现，由于kafka之前Topic在zookeeper中的数据还在，再重新建立会产生冲突导致失败。&lt;/p&gt;
&lt;h3 id=&#34;3解决方案&#34;&gt;3.解决方案&lt;/h3&gt;
&lt;p&gt;进入Zookeeper中将之前的脏数据删掉再重启kafka。&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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#1.进入zookeeper&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;sh /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/zookeeper/bin/zkCli.sh
&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;#2.删除掉脏数据&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;deleteall /brokers/topics
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>hiveOnSpak客户端RemoteSparkDriver超时</title>
      <link>https://leochu.work/blog/tech/bigdata/hiveonspark%E5%AE%A2%E6%88%B7%E7%AB%AFremotesparkdriver%E8%B6%85%E6%97%B6/</link>
      <pubDate>Sat, 12 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hiveonspark%E5%AE%A2%E6%88%B7%E7%AB%AFremotesparkdriver%E8%B6%85%E6%97%B6/</guid>
      <description>&lt;h2 id=&#34;1现象&#34;&gt;1.现象&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230327113600.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327113600.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;2原因&#34;&gt;2.原因&lt;/h2&gt;
&lt;p&gt;集群资源使用率过高时可能会导致Hive On Spark查询失败-查询超时。&lt;/p&gt;
&lt;p&gt;从hive on spark的架构看出超时的位置：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230327113614.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327113614.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;3解决&#34;&gt;3.解决&lt;/h2&gt;
&lt;p&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-shell&#34; data-lang=&#34;shell&#34;&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;# 在Hive client和远程Spark driver通信过程中，随机生成密码的比特数。最好设置成8的倍数。　&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.client.secret.bits
&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;# 远程Spark drive用于处理RPC事件所用的最大线程数，默认是8。　&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.client.rpc.threads
&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;# Hive client和远程Spark driver通信最大的消息大小（单位：byte）,默认是50MB。　&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.client.rpc.max.size
&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;# 远程Spark driver的通道日志级别，必须是DEBUG, ERROR, INFO, TRACE, WARN中的一个。　&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.client.channel.log.level
&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;# 用于身份验证的SASL机制的名称。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.client.rpc.sasl.mechanisms
&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;#生产集群设置的相应参数：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.client.future.timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;360s &lt;span style=&#34;color:#75715e&#34;&gt;# Hive client请求Spark driver的超时时间，如果没有指定时间单位，默认就是秒。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.metastore.client.socket.timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;360s &lt;span style=&#34;color:#75715e&#34;&gt;# 客户端socket超时时间，默认20秒。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.client.connect.timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;360000ms &lt;span style=&#34;color:#75715e&#34;&gt;# Spark driver连接Hive client的超时时间，如果没有指定时间单位，默认就是毫秒。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.client.server.connect.timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;360000ms &lt;span style=&#34;color:#75715e&#34;&gt;# Hive client和远程Spark driver握手时的超时时间，这个会在两边都检查的，如果没有指定时间单位，默认就是毫秒。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hive.spark.job.monitor.timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;180s &lt;span style=&#34;color:#75715e&#34;&gt;# Job监控获取Spark作业状态的超时时间，如果没有指定时间单位，默认就是秒。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>hdfs文件未关闭</title>
      <link>https://leochu.work/blog/tech/bigdata/hdfs%E6%96%87%E4%BB%B6%E6%9C%AA%E5%85%B3%E9%97%AD/</link>
      <pubDate>Sat, 28 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hdfs%E6%96%87%E4%BB%B6%E6%9C%AA%E5%85%B3%E9%97%AD/</guid>
      <description>&lt;h3 id=&#34;问题描述&#34;&gt;问题描述：&lt;/h3&gt;
&lt;p&gt;使用hive load hdfs文件时报错：&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-apl&#34; data-lang=&#34;apl&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FAILED: Execution Error&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; return code &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; from org&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;apache&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;hadoop&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;hive&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;ql&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;exec&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;spark&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;SparkTask&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt; Spark job failed due to task failures: Cannot obtain block length for LocatedBlock&lt;span style=&#34;color:#66d9ef&#34;&gt;{&lt;/span&gt;BP&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1984322900&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1594185446267&lt;/span&gt;:blk_1180034904_106295094&lt;span style=&#34;color:#e6db74&#34;&gt;;&lt;/span&gt; getBlockSize()&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4179&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;;&lt;/span&gt; corrupt&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;false&lt;span style=&#34;color:#e6db74&#34;&gt;;&lt;/span&gt; offset&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 style=&#34;color:#e6db74&#34;&gt;;&lt;/span&gt; locs&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;[&lt;/span&gt;DatanodeInfoWithStorage&lt;span style=&#34;color:#e6db74&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.11&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9866&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;cb5a2e07&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;20e9&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;45&lt;/span&gt;fd&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;869&lt;/span&gt;b&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;d8b4ad170a4&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DISK&lt;span style=&#34;color:#e6db74&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; DatanodeInfoWithStorage&lt;span style=&#34;color:#e6db74&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.9&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9866&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;74706&lt;/span&gt;bce&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;bb23&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;aaf&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;a6eb&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;ceaa9bdbf38c&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DISK&lt;span style=&#34;color:#e6db74&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; DatanodeInfoWithStorage&lt;span style=&#34;color:#e6db74&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.5&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9866&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;57&lt;/span&gt;f122fb&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;b6ca&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;437&lt;/span&gt;c&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;a52e&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;f81efdd239c&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DISK&lt;span style=&#34;color:#e6db74&#34;&gt;]]&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#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:#ae81ff&#34;&gt;22&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;02&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;23&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;17&lt;/span&gt; ERROR ql&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;Driver: FAILED: Execution Error&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; return code &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; from org&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;apache&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;hadoop&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;hive&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;ql&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;exec&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;spark&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt;SparkTask&lt;span style=&#34;color:#a6e22e&#34;&gt;.&lt;/span&gt; Spark job failed due to task failures: Cannot obtain block length for LocatedBlock&lt;span style=&#34;color:#66d9ef&#34;&gt;{&lt;/span&gt;BP&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1984322900&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1594185446267&lt;/span&gt;:blk_1180034904_106295094&lt;span style=&#34;color:#e6db74&#34;&gt;;&lt;/span&gt; getBlockSize()&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4179&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;;&lt;/span&gt; corrupt&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;false&lt;span style=&#34;color:#e6db74&#34;&gt;;&lt;/span&gt; offset&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 style=&#34;color:#e6db74&#34;&gt;;&lt;/span&gt; locs&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;[&lt;/span&gt;DatanodeInfoWithStorage&lt;span style=&#34;color:#e6db74&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.11&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9866&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;cb5a2e07&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;20e9&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;45&lt;/span&gt;fd&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;869&lt;/span&gt;b&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;d8b4ad170a4&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DISK&lt;span style=&#34;color:#e6db74&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; DatanodeInfoWithStorage&lt;span style=&#34;color:#e6db74&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.9&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9866&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;74706&lt;/span&gt;bce&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;bb23&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;aaf&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;a6eb&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;ceaa9bdbf38c&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DISK&lt;span style=&#34;color:#e6db74&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; DatanodeInfoWithStorage&lt;span style=&#34;color:#e6db74&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;192.168.102.5&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9866&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;57&lt;/span&gt;f122fb&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;b6ca&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;437&lt;/span&gt;c&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;a52e&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;f81efdd239c&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;DISK&lt;span style=&#34;color:#e6db74&#34;&gt;]]&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;}&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;p&gt;可得知hdfs文件块出现异常，Cannot obtain block length for LocatedBlock，无法获取块文件长度信息&lt;/p&gt;
&lt;p&gt;猜测是因为昨日yarn重启导致hdfs文件未关闭写状态&lt;/p&gt;
&lt;h3 id=&#34;解决问题&#34;&gt;解决问题：&lt;/h3&gt;
&lt;p&gt;对hive load hdfs文件的地址执行检查命令&lt;/p&gt;</description>
    </item>
    <item>
      <title>hdfs文件块异常</title>
      <link>https://leochu.work/blog/tech/bigdata/hdfs%E6%96%87%E4%BB%B6%E5%9D%97%E5%BC%82%E5%B8%B8/</link>
      <pubDate>Sat, 14 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hdfs%E6%96%87%E4%BB%B6%E5%9D%97%E5%BC%82%E5%B8%B8/</guid>
      <description>&lt;h3 id=&#34;问题描述&#34;&gt;问题描述：&lt;/h3&gt;
&lt;p&gt;使用hive load hdfs文件时报错：&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-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FAILED: Execution Error, &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; code 3 from org.&lt;span style=&#34;color:#a6e22e&#34;&gt;apache&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hadoop&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ql&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;exec&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;spark&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SparkTask&lt;/span&gt;. Spark job failed due to task failures: Cannot obtain block length &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; LocatedBlock{BP&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;1984322900&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;192.&lt;span style=&#34;color:#a6e22e&#34;&gt;168&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;102&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;1594185446267:blk1180034904106295094; getBlockSize()&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4179; corrupt&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;; offset&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;0; locs&lt;span style=&#34;color:#f92672&#34;&gt;=[&lt;/span&gt;DatanodeInfoWithStorage&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;192.&lt;span style=&#34;color:#a6e22e&#34;&gt;168&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;102&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;11&lt;/span&gt;:9866,DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;cb5a2e07&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;20e9&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;45fd&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;869b&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;5d8b4ad170a4,DISK&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, DatanodeInfoWithStorage&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;192.&lt;span style=&#34;color:#a6e22e&#34;&gt;168&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;102&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;9&lt;/span&gt;:9866,DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;74706bce&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;bb23&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;4aaf&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;a6eb&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;ceaa9bdbf38c,DISK&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, DatanodeInfoWithStorage&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;192.&lt;span style=&#34;color:#a6e22e&#34;&gt;168&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;102&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;5&lt;/span&gt;:9866,DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;57f122fb&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;b6ca&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;437c&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;a52e&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;5f81efdd239c,DISK&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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 22&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;02&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;23 16:31:17 ERROR ql.&lt;span style=&#34;color:#a6e22e&#34;&gt;Driver&lt;/span&gt;: FAILED: Execution Error, &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; code 3 from org.&lt;span style=&#34;color:#a6e22e&#34;&gt;apache&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hadoop&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;hive&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ql&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;exec&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;spark&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SparkTask&lt;/span&gt;. Spark job failed due to task failures: Cannot obtain block length &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; LocatedBlock{BP&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;1984322900&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;192.&lt;span style=&#34;color:#a6e22e&#34;&gt;168&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;102&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;1594185446267:blk1180034904106295094; getBlockSize()&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4179; corrupt&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;; offset&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;0; locs&lt;span style=&#34;color:#f92672&#34;&gt;=[&lt;/span&gt;DatanodeInfoWithStorage&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;192.&lt;span style=&#34;color:#a6e22e&#34;&gt;168&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;102&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;11&lt;/span&gt;:9866,DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;cb5a2e07&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;20e9&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;45fd&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;869b&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;5d8b4ad170a4,DISK&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, DatanodeInfoWithStorage&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;192.&lt;span style=&#34;color:#a6e22e&#34;&gt;168&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;102&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;9&lt;/span&gt;:9866,DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;74706bce&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;bb23&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;4aaf&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;a6eb&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;ceaa9bdbf38c,DISK&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, DatanodeInfoWithStorage&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;192.&lt;span style=&#34;color:#a6e22e&#34;&gt;168&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;102&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;5&lt;/span&gt;:9866,DS&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;57f122fb&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;b6ca&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;437c&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;a52e&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;5f81efdd239c,DISK&lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3&gt;&lt;/h3&gt;
&lt;h3 id=&#34;分析问题&#34;&gt;分析问题：&lt;/h3&gt;
&lt;p&gt;可得知hdfs文件块出现异常，Cannot obtain block length for LocatedBlock，无法获取块文件长度信息&lt;/p&gt;
&lt;p&gt;因为昨日CDH重启导致hdfs文件未关闭写状态&lt;/p&gt;
&lt;h3 id=&#34;解决问题&#34;&gt;解决问题：&lt;/h3&gt;
&lt;p&gt;对hive load hdfs文件的地址执行检查命令&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flume内存溢出卡死</title>
      <link>https://leochu.work/blog/tech/bigdata/flume%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BA%E5%8D%A1%E6%AD%BB/</link>
      <pubDate>Sat, 31 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/flume%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BA%E5%8D%A1%E6%AD%BB/</guid>
      <description>&lt;h3 id=&#34;问题agent启动后跑到一半报错卡死&#34;&gt;问题：agent启动后跑到一半报错卡死&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230327115742.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327115742.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;解决修改flume_ng启动脚本中jvm参数&#34;&gt;解决：修改flume_ng启动脚本中jvm参数：&lt;/h3&gt;
&lt;p&gt;vi /opt/cloudera/parcels/CDH/lib/flume-ng/bin/flume-ng&lt;/p&gt;
&lt;p&gt;把 &lt;em&gt;JAVA_OPTS=&amp;quot;-Xmx20m&lt;/em&gt;&amp;quot; 改为 &lt;em&gt;JAVA_OPTS=&amp;quot;-Xmx2048m&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230327115750.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327115750.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;重启agent顺畅running&#34;&gt;重启agent，顺畅running&lt;/h3&gt;</description>
    </item>
    <item>
      <title>flume不关闭临时文件</title>
      <link>https://leochu.work/blog/tech/bigdata/flume%E4%B8%8D%E5%85%B3%E9%97%AD%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6/</link>
      <pubDate>Sat, 17 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/flume%E4%B8%8D%E5%85%B3%E9%97%AD%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6/</guid>
      <description>&lt;h4 id=&#34;问题描述flume采集到hdfs上的文件一直不关闭有tmp后缀hive读不到&#34;&gt;问题描述：flume采集到hdfs上的文件一直不关闭，有tmp后缀，hive读不到&lt;/h4&gt;
&lt;h4 id=&#34;原配置&#34;&gt;原配置：&lt;/h4&gt;
&lt;p&gt; # 当前文件写入达到该值时间后触发滚动创建新文件，单位：秒，设置为24小时防止产生小文件&lt;br&gt;
 ex_trade_agent.sinks.k1.hdfs.rollInterval = 86400&lt;br&gt;
 # 当前文件写入达到该大小后触发滚动创建新文件，单位：字节，设置为128M&lt;br&gt;
 ex_trade_agent.sinks.k1.hdfs.rollSize = 134217700&lt;br&gt;
 # 向 HDFS 写入内容时每次批量操作的 Event 数量&lt;br&gt;
 ex_trade_agent.sinks.k1.hdfs.batchSize = 2000&lt;br&gt;
 # 不根据 Event 数量来分割文件&lt;br&gt;
 ex_trade_agent.sinks.k1.hdfs.rollCount = 0&lt;/p&gt;
&lt;p&gt;可以看到只按照128m和24小时来判断是否写新文件，如果两者都不满足那就不关闭临时文件&lt;/p&gt;
&lt;h4 id=&#34;解决方案&#34;&gt;解决方案：&lt;/h4&gt;
&lt;p&gt; # 当前文件写入达到该值时间后触发滚动创建新文件，单位：秒，设置为4小时防止产生小文件&lt;br&gt;
 ex_trade_agent.sinks.k1.hdfs.rollInterval = 14400&lt;br&gt;
 # 当非活动文件超过4小时，关闭该文件&lt;br&gt;
 ex_trade_agent.sinks.k1.hdfs.idleTimeout = 14400&lt;/p&gt;</description>
    </item>
    <item>
      <title>flink虚拟内存不足</title>
      <link>https://leochu.work/blog/tech/bigdata/flink%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%E4%B8%8D%E8%B6%B3/</link>
      <pubDate>Sat, 03 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/flink%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%E4%B8%8D%E8%B6%B3/</guid>
      <description>&lt;h2 id=&#34;1现象&#34;&gt;1.现象&lt;/h2&gt;
&lt;p&gt;flink任务提交任务虚拟内存不足导致的失败&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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Container &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;pid&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;3007,containerID&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;container_1599018748796_0004_01_000004&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; is  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;running 342252032B beyond the &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;VIRTUAL&amp;#39;&lt;/span&gt; memory limit. Current usage: 416.0 MB  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;of &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; GB physical memory used; 2.4 GB of 2.1 GB virtual memory used.  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Killing container.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2原因&#34;&gt;2.原因&lt;/h2&gt;
&lt;p&gt;因为yarn强制检查虚拟内存是否符合配置导致的，当我们的服务器或者虚拟机的内存达不到配置要求，可能就会报这个错误 。&lt;/p&gt;
&lt;h2 id=&#34;3解决&#34;&gt;3.解决&lt;/h2&gt;
&lt;p&gt;修改检查虚拟内存的属性为false&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-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;property&amp;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;lt;name&amp;gt;&lt;/span&gt;yarn.nodemanager.vmem-check-enabled&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/name&amp;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;lt;value&amp;gt;&lt;/span&gt;false&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/value&amp;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;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>flink查看stdout日志</title>
      <link>https://leochu.work/blog/tech/bigdata/flink%E6%9F%A5%E7%9C%8Bstdout%E6%97%A5%E5%BF%97/</link>
      <pubDate>Sat, 20 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/flink%E6%9F%A5%E7%9C%8Bstdout%E6%97%A5%E5%BF%97/</guid>
      <description>&lt;h4 id=&#34;问题&#34;&gt;问题:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;flink的web管理界面在日志过大时无法加载且无法下载&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/image-20230209180331732.png&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;解决&#34;&gt;解决:&lt;/h4&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/image-20230209180433316.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;复制该任务task manager的container编号 container_e01_1675618892497_0264_01_000003&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;远程登录该task manager所在服务器&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;使用命令查询进程&lt;/strong&gt; &lt;code&gt;ps -ef | grep taskmanager | grep -v &amp;quot;bash -c&amp;quot; |grep container_e01_1675618892497_0264_01_000003&lt;/code&gt; &lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/image-20230209180903878.png&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;进入该目录&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;各文件用途&lt;/strong&gt; taskmanager.out：业务侧的输出文件，该文件中的内容一般是业务代码中，使用算子的print()方法或者使用java的System.out.print()产生的内容，与前台的taskmanager输出打印内容一致&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;taskmanager.log就是运行中的taskmanager的日志&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;taskmanager.err ：taskmanager中出错时候的异常信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gc.log.x.current：taskmanager的gc日志&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>ES映射hive数据类型date无法解析</title>
      <link>https://leochu.work/blog/tech/bigdata/es%E6%98%A0%E5%B0%84hive%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8Bdate%E6%97%A0%E6%B3%95%E8%A7%A3%E6%9E%90/</link>
      <pubDate>Sat, 06 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/es%E6%98%A0%E5%B0%84hive%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8Bdate%E6%97%A0%E6%B3%95%E8%A7%A3%E6%9E%90/</guid>
      <description>&lt;h3 id=&#34;在es中数据类型为date&#34;&gt;在es中数据类型为date：&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-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;addTime&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#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;format&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;yyyy-MM-dd HH:mm:ss&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;在hive建映射表&#34;&gt;在hive建映射表&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-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_test1(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;addTime date
&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.date.format&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;yyyy-MM-dd HH:mm:ss&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;h3 id=&#34;查询报错&#34;&gt;查询报错：&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230327120417.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327120417.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;更改hive表数据类型为string&#34;&gt;更改hive表数据类型为string&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-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.date.format&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;yyyy-MM-dd HH:mm:ss&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;h3 id=&#34;查询继续报错&#34;&gt;查询继续报错：&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230327120434.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230327120434.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;查阅资料&#34;&gt;查阅资料：&lt;/h3&gt;
&lt;p&gt;elasticsearch-hadoop中用于将ES中的日期转换为Hive中的日期格式的类为org.elasticsearch.hadoop.hive.HiveValueReader，通过查看该类的源码，其实现的用户日期转换的方法为：&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-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Override&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;protected&lt;/span&gt; Object &lt;span style=&#34;color:#a6e22e&#34;&gt;parseDate&lt;/span&gt;(String value, &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; richDate) {
&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;return&lt;/span&gt; (richDate &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; TimestampWritable(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Timestamp(DatatypeConverter.&lt;span style=&#34;color:#a6e22e&#34;&gt;parseDateTime&lt;/span&gt;(value).&lt;span style=&#34;color:#a6e22e&#34;&gt;getTimeInMillis&lt;/span&gt;())) : parseString(value));
&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;p&gt;可以看到它是通过javax.xml.bind.DatatypeConverter.parseDateTime(String)方法将对应的日期字符串转换为日期的，该方法不支持的日期字符串格式为“yyyy-MM-dd HH:mm:ss”的字符串，它支持的日期字符串的格式为“yyyy-MM-ddTHH:mm:ss”这样的。&lt;/p&gt;
&lt;h3 id=&#34;解决方案&#34;&gt;解决方案：&lt;/h3&gt;
&lt;p&gt;在建表时设置参数&amp;rsquo;es.mapping.date.rich&amp;rsquo;=&amp;lsquo;false&amp;rsquo;，然后hive字段类型设为string。&lt;/p&gt;
&lt;h3 id=&#34;官方解释&#34;&gt;官方解释：&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Whether to create a rich Date like object for Date fields in Elasticsearch or returned them as primitives (String or long). By default this is true. The actual object type is based on the library used; noteable exception being Map/Reduce which provides no built-in Date object and as such LongWritable and Text are returned regardless of this setting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>dolphin踩坑</title>
      <link>https://leochu.work/blog/tech/bigdata/dolphinscheduler%E8%B8%A9%E5%9D%91/</link>
      <pubDate>Sat, 22 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/dolphinscheduler%E8%B8%A9%E5%9D%91/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;一个sql节点只能写一条sql且结尾不能写分号&lt;/li&gt;
&lt;li&gt;使用sql节点时由于dolohin写了hive的预编译，某些时候变量不能正确传入，比如 location ‘xxxxx${变量名}’,在预编译过程中会直接变成 location ‘xxxxx?’
**解决方案：**把sql节点替换成shell节点用hive -e &amp;lsquo;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;.. location ‘xxxxx${变量名}’来实现变量传参&lt;/li&gt;
&lt;li&gt;节点开启非严格模式，从节点偶尔会失效
**解决方案：**每个需要动态分区的sql都加上设置非严格模式的前置sql&lt;/li&gt;
&lt;li&gt;sql节点无法使用hive永久注册的udf
**解决方案：**在dolphin资源中心上传udf并创建（会注册成临时udf）&lt;/li&gt;
&lt;li&gt;sql节点使用 REPLACE函数会有bug，导致任务流无法保存
**解决方案：**使用REGEXP_REPLACE函数&lt;/li&gt;
&lt;li&gt;sql节点添加扩展jar包，无法使用本地路径
**解决方案：**需要先上传jar到hdfs，然后加上hdfs://nameservice1/前缀&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>部署CDH踩坑总结</title>
      <link>https://leochu.work/blog/tech/bigdata/%E9%83%A8%E7%BD%B2cdh%E8%B8%A9%E5%9D%91%E6%80%BB%E7%BB%93/</link>
      <pubDate>Sat, 08 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/%E9%83%A8%E7%BD%B2cdh%E8%B8%A9%E5%9D%91%E6%80%BB%E7%BB%93/</guid>
      <description>&lt;p&gt;1.zookeeper刚启动时会报错，晾它两分钟会就好了&lt;/p&gt;
&lt;p&gt;2.更改或迁移服务时一定要切换到维护模式并停止当前服务！！！&lt;/p&gt;
&lt;p&gt;3.cdh01的hadoop组件起不来，原因是一些文件夹的权限问题，更改权限并且更改拥有者及组（参照其他服务器）&lt;/p&gt;
&lt;p&gt;4.内存不足主要因为NodeManager内存调的太高，调小即可（个人经验，5台机器可用内存和为30*4+20=160G，可同时对20G的数据做处理，感觉够用了）&lt;/p&gt;
&lt;p&gt;5.oozie报错：Failed to install Oozie ShareLib，这个问题是cdh6.2的通病，只要安装oozie就会 出现(无论是升级，还是新装。&lt;/p&gt;
&lt;p&gt;解决：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cd /opt/cloudera/parcels/CDH/lib/oozie/libtools&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ln -s ../../../jars/logredactor-2.0.7.jar logredactor-2.0.7.jar&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;执行完后重启oozie。&lt;/p&gt;
&lt;p&gt;6.oozie端口号11000冲突，改为11002&lt;/p&gt;
&lt;p&gt;7.从节点不要提前安装agent服务！！！直接在web界面安装！&lt;/p&gt;
&lt;p&gt;8.把CM和CDH装好后面就轻松多了&lt;/p&gt;
&lt;p&gt;9.==主机名不要出现下划线!==&lt;/p&gt;</description>
    </item>
    <item>
      <title>指标字典</title>
      <link>https://leochu.work/blog/tech/bigdata/%E6%8C%87%E6%A0%87%E5%AD%97%E5%85%B8/</link>
      <pubDate>Sat, 11 May 2024 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/%E6%8C%87%E6%A0%87%E5%AD%97%E5%85%B8/</guid>
      <description>&lt;h2 id=&#34;1指标字典&#34;&gt;&lt;strong&gt;1.指标字典&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;指标字典，是业务数据标准化的基础，目的是对指标进行统一管理，方便共享达成对业务指标的共识，并且统一修改和维护。指标字典可以更新在 Excel或者Wiki中。如果有足够多的资源，那么开发指标管理模块可以放在数据管理系统中再配合血缘关系，就可以很方便追踪数据流转了。&lt;/p&gt;
&lt;h3 id=&#34;11设计指标字典的主要目的&#34;&gt;&lt;strong&gt;1.1设计指标字典的主要目的：&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;(1)规范维度和量度命名，命名规则要尽量做到明确、通用、易懂。&lt;/p&gt;
&lt;p&gt;(2)对维度或量度统一计算口径，避免岐义。&lt;/p&gt;
&lt;p&gt;(3)涵盖尽可能多的关注的核心维度和量度，以此为基础推动数据建设，确保指标字典里覆盖的维度都可区分、指标都可统计&lt;/p&gt;
&lt;p&gt;(4)基于指标字典，将核心维度和量度注入元数据中心，接入指标提取工具，后续实现不需要写QL语句即可完成自査询及分析需求&lt;/p&gt;
&lt;p&gt;指标字典的建立，是搭建数据平台的基础。&lt;/p&gt;
&lt;h3 id=&#34;12指标量度和维度的相关概念&#34;&gt;&lt;strong&gt;1.2指标、量度和维度的相关概念&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;121-指标&#34;&gt;&lt;strong&gt;1.2.1 指标:&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;定义：衡量目标的方法&lt;/p&gt;
&lt;p&gt;构成要素：维度+汇总方式+量度&lt;/p&gt;
&lt;p&gt;（1）维度=哪些角度去看问题&lt;/p&gt;
&lt;p&gt;（2）汇总方式=哪些方法衡量问题&lt;/p&gt;
&lt;p&gt;（3）量度=目标是什么问题&lt;/p&gt;
&lt;h4 id=&#34;122-维度&#34;&gt;&lt;strong&gt;1.2.2 维度：&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;定义：看问题的角度和方向，例如我要从年份看毛衣的销量，那么年份就是我看问题的角度&lt;/p&gt;
&lt;h4 id=&#34;123-量度&#34;&gt;&lt;strong&gt;1.2.3 量度：&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;定义：对一个物理量的测定，通常数字+计算单位表示。例如，金额，次数，率&lt;/p&gt;
&lt;h3 id=&#34;13-指标定义规范&#34;&gt;&lt;strong&gt;1.3 指标定义规范&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;131怎么定义一个合格的指标字典需要遵守什么规范&#34;&gt;&lt;strong&gt;1.3.1怎么定义一个合格的指标字典？需要遵守什么规范？&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;一个指标一经录入，它的命名和所有下钻维度的口径都已确定(默认口径)，这称为指标的一义性。&lt;br&gt;
例如，“交易额”这个指标默认的时间口径是：支付时间，默认的城市口径是：下单所在城市等。&lt;br&gt;
如果需要按下单时间口径看订单金额，我们定义了一个新的指标“下单交易额”。一个在某些维度上口径不确定的“指标”是不能被使用的，在业务场景中是毫无意义的。&lt;/p&gt;
&lt;h4 id=&#34;132指标一般分为基础指标普通指标和计算指标三类&#34;&gt;&lt;strong&gt;1.3.2指标一般分为基础指标、普通指标和计算指标三类。&lt;/strong&gt;&lt;/h4&gt;
&lt;h5 id=&#34;1321基础指标&#34;&gt;&lt;strong&gt;1.3.2.1基础指标&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;例如，“交易额”作为一个基于单纯实体的属性的简单计算，它没有更上游的指标，即它的父指标是它自身。我们称这样的指标为基础指标。&lt;/p&gt;
&lt;h5 id=&#34;1322普通指标&#34;&gt;&lt;strong&gt;1.3.2.2.普通指标&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;所谓普通指标，即在单一父指标的基础上通过一些维度上的取值限定可以定义的指标。&lt;br&gt;
例如，对于购买中PC端首次购买用户数，限制条件为首次购买用户中下单平台＝PC。&lt;/p&gt;
&lt;h5 id=&#34;1323计算指标&#34;&gt;&lt;strong&gt;1.3.2.3.计算指标&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;可以在若干个注册指标之上通过四则运算、排序、累计或汇总定义出的指标称为计算指标。&lt;/p&gt;
&lt;h3 id=&#34;14量度和维度都考虑好了在构建一个指标字典时我们应该考虑哪些要素呢&#34;&gt;&lt;strong&gt;1.4量度和维度都考虑好了，在构建一个指标字典时我们应该考虑哪些要素呢?&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;141指标字典要素如下&#34;&gt;&lt;strong&gt;1.4.1指标字典要素如下：&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20260323095931.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020260323095931.png&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;142通常指标字典包含指标维度和指标量度两个部分如下&#34;&gt;&lt;strong&gt;1.4.2通常指标字典包含指标维度和指标量度两个部分，如下：&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20260323095936.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020260323095936.png&#34;&gt;
&lt;img alt=&#34;Pasted image 20260323095940.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020260323095940.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;&lt;strong&gt;总结：&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;通过上面的步骤和方法，根据自身业务情况，建立一个指标字典。&lt;/p&gt;
&lt;p&gt;指标字典在建立知乎，要经过各个业务产品经理的评审，纠正错误不明或者有歧义的指标，在达成一致后，由数据产品推广，共大家参考使用。&lt;/p&gt;
&lt;p&gt;好的指标字典就像二叉树一样，从单维度，粗糙维度分析，再细拆维度。看问题需要：由大到小，由内到外。&lt;/p&gt;</description>
    </item>
    <item>
      <title>yarn队列设置</title>
      <link>https://leochu.work/blog/tech/bigdata/yarn%E9%98%9F%E5%88%97%E8%AE%BE%E7%BD%AE/</link>
      <pubDate>Sun, 28 May 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/yarn%E9%98%9F%E5%88%97%E8%AE%BE%E7%BD%AE/</guid>
      <description>&lt;p&gt;在大数据平台运维中，会经常遇到&lt;strong&gt;集群资源争抢的问题&lt;/strong&gt;。因为在公司内部，Hadoop Yarn 集群一般会被多个业务、多个用户同时使用，共享 Yarn 资源。此时，如果不对集群资源做规划和管理的话，那么就会出现 Yarn 的资源被某一个用户提交的 Application（App）占满，而其他用户只能等待；或者也可能会出现集群还有很多剩余资源，但 App 就是无法使用的情况。&lt;/p&gt;
&lt;p&gt;如何解决这个问题呢？此时就需要用到 Hadoop 中提供的&lt;strong&gt;资源调度器&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;yarn-多用户资源管理策略&#34;&gt;&lt;strong&gt;Yarn 多用户资源管理策略&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Yarn 提供了可插拔的资源调度算法，用于解决 App 之间资源竞争的问题。在 Yarn 中有三种资源调度器可供选择，即 FIFO Scheduler、Capacity Scheduler、Fair Scheduler，目前使用比较多的是 Fair Scheduler 和 Capacity Scheduler。下面对这三种资源调度器分别进行介绍。&lt;/p&gt;
&lt;h4 id=&#34;1-fifo-scheduler&#34;&gt;&lt;strong&gt;1. FIFO Scheduler&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;在 Hadoop 1.x 系列版本中，默认使用的调度器是 FIFO，它采用队列方式将每个任务按照时间先后顺序进行服务。比如排在最前面的任务需要若干 Map Task 和 Reduce Task，当发现有空闲的服务器节点时就分配给这个任务，直到任务执行完毕。&lt;/p&gt;
&lt;h4 id=&#34;2-capacity-scheduler&#34;&gt;&lt;strong&gt;2. Capacity Scheduler&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;在 Hadoop 2.x/3.x 系列版本中，默认使用的调度器是 Capacity Scheduler（容量调度器），这是一种&lt;strong&gt;多用户、多队列&lt;/strong&gt;的资源调度器。每个队列可以配置资源量，可限制每个用户、每个队列的并发运行作业量，也可限制每个作业使用的内存量；每个用户的作业有优先级，在单个队列中，作业按照先来先服务（实际上是先按照优先级，优先级相同的再按照作业提交时间）的原则进行调度。&lt;/p&gt;
&lt;p&gt;容量资源调度器，支持多队列，&lt;strong&gt;但默认情况下只有 root.default 这一个队列&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;当不同用户提交任务时，任务都会在这个队列里按照先进先出策略执行调度，很明显，单个队列会大大降低多用户的资源使用率。&lt;/p&gt;
&lt;p&gt;因此，要使用容量资源调度，一定要配置多个队列，每个队列可配置一定比率的资源量（CPU、内存）；同时为了防止同一个用户的任务独占队列的所有资源，调度器会对同一个用户提交的任务所占资源量进行限定。&lt;/p&gt;
&lt;p&gt;举个简单的例子，下图是容量调度器中配置好的一个队列树：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;队列树&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.nlark.com/yuque/0/2022/png/21887514/1646927210814-732f7f8b-7cb1-4dc5-b649-f542a504f26b.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;上图通过队列树方式对 Yarn 集群资源做了一个划分，可以看到，在 root 队列下面定义了两个子队列 dev 和 test，分别占 30% 和 70% 的 Yarn 集群资源；而 dev 队列又被分成了 dev1 和 dev2 两个子队列，分别占用 dev 队列 30% 中的 40% 和 60% 的 Yarn 集群资源。&lt;/p&gt;</description>
    </item>
    <item>
      <title>sqoop提交参数解析</title>
      <link>https://leochu.work/blog/tech/bigdata/sqoop%E6%8F%90%E4%BA%A4%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90/</link>
      <pubDate>Sun, 14 May 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/sqoop%E6%8F%90%E4%BA%A4%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/cloudera/parcels/CDH/lib/sqoop/bin/sqoop import &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--connect jdbc:&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;mysql://ip:port/T_Cloud_Promote&lt;span style=&#34;color:#f92672&#34;&gt;](&lt;/span&gt;mysql://ipport&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--username rt_center &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--password pwd&lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--query &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;select KeywordID,KeyType,Root,KeywordName,UID,Status,AddDate,UpdateDate,MigrateOID,PromotionStatus,WordType,IsEmphasis,KeywordLength,IsViolate,ViolateWord from T_Cloud_Promote.T_Cloud_User_KeywordLibrary where KeywordID &amp;lt; &lt;/span&gt;$&lt;span style=&#34;color:#e6db74&#34;&gt;[a+10000000] AND KeywordID &amp;gt;= &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;a&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; AND AddDate != &amp;#39;0000-00-00 00:00:00&amp;#39; AND \$CONDITIONS&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--fields-terminated-by &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\001&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--target-dir /tmp/t_cloud_order &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--delete-target-dir &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--hive-import &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--hive-database T_Cloud_Promote &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--hive-table ods_t_cloud_user_keywordlibraryb_tmp_01 &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--null-string &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\\N&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--null-non-string &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\\N&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--hive-drop-import-delims &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--num-mappers &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--split-by KeywordID &lt;span style=&#34;color:#ae81ff&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--hive-overwrite  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;connect&lt;br&gt;
mysql连接&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;username&lt;br&gt;
用户名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;password&lt;br&gt;
密码&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;query&lt;br&gt;
条件查询语句&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;fields-terminated-by&lt;br&gt;
分隔符&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;target-dir&lt;br&gt;
临时存放位置&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;delete-target-dir \&lt;br&gt;
程序结束删除文件夹&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;hive-import \&lt;br&gt;
导入到hive&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;hive-database T_Cloud_Promote \&lt;br&gt;
hive的数据库&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;hive-table&lt;br&gt;
hive表&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ndash;null-string &amp;lsquo;\N&amp;rsquo; \&lt;br&gt;
&amp;ndash;null-non-string &amp;lsquo;\N&amp;rsquo; \&lt;br&gt;
转换为hive空&lt;/p&gt;</description>
    </item>
    <item>
      <title>spark提交参数</title>
      <link>https://leochu.work/blog/tech/bigdata/spark%E6%8F%90%E4%BA%A4%E5%8F%82%E6%95%B0/</link>
      <pubDate>Sun, 30 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/spark%E6%8F%90%E4%BA%A4%E5%8F%82%E6%95%B0/</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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;spark-submit --master yarn --conf spark.default.parallelism&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--deploy-mode cluster --driver-memory 4G --executor-memory 4G &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--num-executors &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt; --executor-cores &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--conf spark.yarn.executor.memoryOverhead&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;5g &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--class com.lz.hbase.CompanyInfo /tmp/test_langzi/original-spark_hbase01-1.0-SNAPSHOT.jar &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--conf spark.dynamicAllocation.maxExecutors&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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>Ranger配置大数据组件</title>
      <link>https://leochu.work/blog/tech/bigdata/ranger%E9%85%8D%E7%BD%AE%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/</link>
      <pubDate>Sun, 02 Apr 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/ranger%E9%85%8D%E7%BD%AE%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6/</guid>
      <description>&lt;p&gt;1.开启ranger-hive ranger-hdfs插件
2.修改hdfs配置
1.开启hdfs认证
hadoop.security.authorization = true&lt;/p&gt;</description>
    </item>
    <item>
      <title>presto</title>
      <link>https://leochu.work/blog/tech/bigdata/presto%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</link>
      <pubDate>Sun, 19 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/presto%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</guid>
      <description>&lt;p&gt;presto操作hive&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;presto-cli --server 172.16.98.183:8050 --catalog hive
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>OneData数据仓库架构</title>
      <link>https://leochu.work/blog/tech/bigdata/onedata%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93%E6%9E%B6%E6%9E%84/</link>
      <pubDate>Sun, 05 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/onedata%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93%E6%9E%B6%E6%9E%84/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E6%9E%B6%E6%9E%84.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;**1.**&lt;strong&gt;什么是&lt;/strong&gt; &lt;strong&gt;onedata&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;面对爆炸式增长的数据，如何建设高效的数据模型和体系，对这些数据进行有序和有结构地分类组织和存储，避免重复建设和数据不一致性，保证数据的规范性，一直是大数据系统建设不断追求的方向。OneData 即是阿里巴巴内部进行数据整合及管理的方法体系和工具。阿里巴巴的大数据工程师在这一体系下，构建统一、规范、可共享的全域数据体系，避免数据的冗余和重复建设，规避数据烟囱和不一致性，充分发挥阿里巴巴在大数据海量、多样性方面的独特优势。借助这一统一化数据整合及管理的方法体系，我们构建了阿里巴巴的数据公共层，并可以帮助相似的大数据项目快速落地实现。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E6%9E%B6%E6%9E%84.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;**2.**&lt;strong&gt;指导思想&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;阿里巴巴集团数据公共层设计理念遵循维度建模思想，可参考 StarSchema-The Complete Reference 和 The Data Warehouse Toolkit-The Definitive Guide to Dimensional Modeling。数据模型的维度设计主要以维度建模理论为基础，基于维度数据模型总线架构，构建一致性的维度和事实。其核心的实施指导方针如下：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://s.w.org/images/core/emoji/17.0.2/svg/26ab.svg&#34;&gt; 首先，要进行充分的业务调研和需求分析。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://s.w.org/images/core/emoji/17.0.2/svg/26ab.svg&#34;&gt; 其次，进行数据总体架构设计，主要是根据数据域对数据进行划分；按照维度建模理论，构建总线矩阵，抽象出业务过程和维度。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://s.w.org/images/core/emoji/17.0.2/svg/26ab.svg&#34;&gt; 再次，对报表需求进行抽象整理出相关指标体系，使用 One Data 工具完成指标规范定义和模型设计。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://s.w.org/images/core/emoji/17.0.2/svg/26ab.svg&#34;&gt; 最后，是代码研发和运维。其实施流程主要分为：数据调研、架构设计、规范定义和模型设计。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E6%B5%81%E7%A8%8B.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;**3.**&lt;strong&gt;业务调研&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;业务调研&lt;/strong&gt;：需要确认要规划进数仓的业务领域，以及各业务领域包含的功能模块，以阿里的业务为例，可规划如下矩阵&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E4%B8%9A%E5%8A%A1%E8%B0%83%E7%A0%94.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;需求调研&lt;/strong&gt;：了解需求方关系哪些指标？需要哪些维度、度量？数据是否沉淀到汇总层等。&lt;/p&gt;
&lt;p&gt;可以想象一下，在没有考虑分析师、业务运营人员的数据需求的情况下，根据业务调研建设的数据仓库无疑等于闭门造车。了解了业务系统的业务后并不代表就可以进行实施了，此刻要做的就是收集数据使用者的需求，可以去找分析师、业务运营人员了解他们有什么数据诉求，此时更多的就是报表需求。&lt;/p&gt;
&lt;p&gt;需求调研的途径有两种:一是根据与分析师、业务运营人员的沟通(邮件、IM)获知需求；二是对报表系统中现有的报表进行研究分析。通过需求调研分析后，就清楚数据要做成什么样的。很多时候，都是由具体的数据需求驱动数据仓库团队去了解业务系统的业务数据，这两者并没有严格的先后顺序。&lt;/p&gt;
&lt;p&gt;举例：分析师需要了解大淘宝(淘宝、天猫、天猫国际)一级类目的成交金额。当获知这个需求后，我们要分析根据什么(维度)汇总，以及汇总什么(度量)，这里类目是维度，金额是度量；明细数据和汇总数据应该怎样设计?这是一个公用的报表吗?是需要沉淀到汇总表里面，还是在报表工具中进行汇总?&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E9%9C%80%E6%B1%82%E8%B0%83%E7%A0%94.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;**4.**&lt;strong&gt;架构设计&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.1 数据域的划分&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数据域是指面向业务分析，将业务过程或者维度进行抽象的集合，一般数据域和应用系统(功能模块)有联系，可以考虑将同一个功能模块系统的业务过程划分到一个数据域。业务过程可以概括为一个个不可拆分的行为事件，如下单、支付、退款。为保障整个体系的生命力，数据域需要抽象提炼，并且长期维护和更新，但不轻易变动。在划分数据域时，既能涵盖当前所有的业务需求，又能在新业务进入时无影响地被包含进已有的数据域中或者扩展新的数据域。如表所示是功能模块/业务线的业务动作(部分示例)：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E4%B8%9A%E5%8A%A1%E5%8A%A8%E4%BD%9C.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;根据业务过程进行归纳，可以抽象出如下数据域：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E6%95%B0%E6%8D%AE%E5%9F%9F.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.2 构建总线矩阵&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在进行充分的业务调研和需求调研后，就要构建总线矩阵了，需要做两件事情：&lt;/p&gt;
&lt;p&gt;1.明确每个数据域下有哪些业务过程。&lt;/p&gt;
&lt;p&gt;2.业务过程与哪些维度相关，并通过总线矩阵定义每个数据域下的业务过程和维度。&lt;/p&gt;
&lt;p&gt;如下表是供应链管理业务过程示例：&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E4%B8%9A%E5%8A%A1%E6%80%BB%E7%BA%BF%E7%9F%A9%E9%98%B5.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;4.3 规范定义&lt;/p&gt;
&lt;p&gt;规范定义主要定义指标体系，包括原子指标、修饰词、时间周期和派生指标。&lt;/p&gt;
&lt;p&gt;4.4 模型设计&lt;/p&gt;
&lt;p&gt;模型设计主要包括维度及属性的规范定义，维表、明细事实表和汇总事实表的模型设计。&lt;/p&gt;
&lt;p&gt;4.5 架构总结&lt;/p&gt;
&lt;p&gt;One Data 的实施过程是一个高度迭代和动态的过程，一般采用螺旋式实施方法。在总体架构设计完成之后，开始根据数据域进行迭代式模型设计和评审。在架构设计、规范定义和模型设计等模型实施过程中，都会引入评审机制，以确保模型实施过程的正确性。&lt;/p&gt;
&lt;p&gt;**5.**&lt;strong&gt;指标体系搭建&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5.1 指标体系核心结构&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/onedata_%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB%E6%A0%B8%E5%BF%83%E7%BB%93%E6%9E%84.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>left join 谓词下推</title>
      <link>https://leochu.work/blog/tech/bigdata/left-join%E8%B0%93%E8%AF%8D%E4%B8%8B%E6%8E%A8/</link>
      <pubDate>Sun, 19 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/left-join%E8%B0%93%E8%AF%8D%E4%B8%8B%E6%8E%A8/</guid>
      <description>&lt;p&gt;zzz1&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;uid&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;is_delete&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;zzz2&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;uid&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;is_delete&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&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;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; zzz1 &lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; zzz2 &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; zzz1.uid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; zzz2.uid
&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;where&lt;/span&gt; zzz1.is_delete &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 style=&#34;color:#66d9ef&#34;&gt;and&lt;/span&gt; zzz2.is_delete &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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果:
3       0       3       0&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;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; zzz1 &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; zzz1.is_delete &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) z1
&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;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; zzz2 &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; zzz2.is_delete &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) z2
&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;on&lt;/span&gt; z1.uid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; z2.uid
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果:
2       0       NULL    NULL
3       0       3       0&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;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; zzz1 &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; zzz1.is_delete &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) z1
&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;left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;join&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; zzz2 &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; zzz2.is_delete &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) z2
&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;on&lt;/span&gt; z1.uid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; z2.uid &lt;span style=&#34;color:#66d9ef&#34;&gt;where&lt;/span&gt; z2.uid &lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果:
3       0       3       0&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>kafka在zk中的目录结构</title>
      <link>https://leochu.work/blog/tech/bigdata/kafka%E5%9C%A8zk%E4%B8%AD%E7%9A%84%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84/</link>
      <pubDate>Sun, 22 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/kafka%E5%9C%A8zk%E4%B8%AD%E7%9A%84%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;kafkaInZK&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/kafkaInZK.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kafka数据导入ClickHouse</title>
      <link>https://leochu.work/blog/tech/bigdata/kafka%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5clickhouse/</link>
      <pubDate>Sun, 08 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/kafka%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5clickhouse/</guid>
      <description>&lt;h2 id=&#34;1kafka中数据导入clickhouse的标准流程&#34;&gt;1.Kafka中数据导入ClickHouse的标准流程&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;在ClickHouse中建立Kafka Engine 外表，作为Kafka数据源的一个接口&lt;/li&gt;
&lt;li&gt;在ClickHouse中创建普通表(通常是MergeTree系列）存储Kafka中的数据&lt;/li&gt;
&lt;li&gt;在ClickHouse中创建Materialized View, 监听Kafka中的数据，并将数据写入ClickHouse存储表中&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上述三个步骤，就可以将Kafka中的数据导入到ClickHouse集群中。&lt;/p&gt;
&lt;h2 id=&#34;2-kafka数据导入clickhouse详细步骤&#34;&gt;2. Kafka数据导入ClickHouse详细步骤&lt;/h2&gt;
&lt;p&gt;ClickHouse 提供了Kafka Engine 作为访问Kafka集群的一个接口（数据流）。有了这个接口后，导入数据就很方便了，具体步骤如下：&lt;/p&gt;
&lt;h3 id=&#34;步骤1创建kafka-engine&#34;&gt;步骤1：创建Kafka Engine&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-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;TABLE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;source&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;`&lt;/span&gt;ts&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; DateTime, 
&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;`&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; String, 
&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;`&lt;/span&gt;message&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; 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;ENGINE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Kafka()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SETTINGS kafka_broker_list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;172.19.0.47:9092&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_topic_list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;tag&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_group_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;clickhouse&amp;#39;&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_format &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;JSONEachRow&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_skip_broken_messages &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         kafka_num_consumers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;必选参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kafkabrokerlist: 这里填写Kafka服务的broker列表，用逗号分隔&lt;/li&gt;
&lt;li&gt;kafkatopiclist: 这里填写Kafka topic,多个topic用逗号分隔&lt;/li&gt;
&lt;li&gt;kafkagroupname：这里填写消费者group名称 &lt;/li&gt;
&lt;li&gt;kafkaformat__:Kafka数据格式, ClickHouse支持的Format, 详见这里 可选参数： &lt;/li&gt;
&lt;li&gt;kafkaskipbrokenmessages：填写大于等于0的整数，表示忽略解析异常的Kafka数据的条数。如果出现了N条异常后，后台线程结束，Materialized View会被重新安排后台线程去监听数据 &lt;/li&gt;
&lt;li&gt;kafkanumconsumers_: 单个Kafka Engine 的消费者数量，通过增加该参数，可以提高消费数据吞吐，但总数不应超过对应topic的partitions总数&lt;/li&gt;
&lt;li&gt;kafkarowdelimiter: 消息分隔符  &lt;/li&gt;
&lt;li&gt;kafkaschema__:对于kafkaformat需要schema定义的时候，其schema由该参数确定&lt;/li&gt;
&lt;li&gt;kafkamaxblocksize: 该参数控制Kafka数据写入目标表的Block大小，超过该数值后，就将数据刷盘。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;步骤2创建存储kafka数据的目标表该表就是最终存储kafka数据-本文中采用mergetree来存储kafka数据&#34;&gt;步骤2：创建存储Kafka数据的目标表，该表就是最终存储Kafka数据 本文中，采用MergeTree来存储Kafka数据：&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-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;TABLE&lt;/span&gt; target
&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;`&lt;/span&gt;ts&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; DateTime, 
&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;`&lt;/span&gt;tag&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; 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;ENGINE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; MergeTree()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PARTITION &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; toYYYYMM(ts)
&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;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; tag
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;步骤3创建metrialized-view-抓取数据&#34;&gt;步骤3：创建Metrialized View 抓取数据&lt;/h3&gt;
&lt;p&gt;本文中，采用如下语句创建MV:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kafka 中的控制器组件</title>
      <link>https://leochu.work/blog/tech/bigdata/kafka%E6%8E%A7%E5%88%B6%E5%99%A8%E7%BB%84%E4%BB%B6/</link>
      <pubDate>Sun, 25 Dec 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/kafka%E6%8E%A7%E5%88%B6%E5%99%A8%E7%BB%84%E4%BB%B6/</guid>
      <description>&lt;p&gt;&lt;strong&gt;控制器组件（Controller），是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群&lt;/strong&gt;。集群中任意一台 Broker 都能充当控制器的角色，但是，在运行过程中，只能有一个 Broker 成为控制器，行使其管理和协调的职责。换句话说，每个正常运转的 Kafka 集群，在任意时刻都有且只有一个控制器。官网上有个名为 activeController 的 JMX 指标，可以帮助我们实时监控控制器的存活状态。这个 JMX 指标非常关键，你在实际运维操作过程中，一定要实时查看这个指标的值。下面，我们就来详细说说控制器的原理和内部运行机制。&lt;/p&gt;
&lt;p&gt;在开始之前，我先简单介绍一下 Apache ZooKeeper 框架。要知道，&lt;strong&gt;控制器是重度依赖 ZooKeeper&lt;/strong&gt; 的，因此，我们有必要花一些时间学习下 ZooKeeper 是做什么的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Apache ZooKeeper 是一个提供高可靠性的分布式协调服务框架&lt;/strong&gt;。它使用的数据模型类似于文件系统的树形结构，根目录也是以 “/” 开始。该结构上的每个节点被称为 znode，用来保存一些元数据协调信息。&lt;/p&gt;
&lt;p&gt;如果以 znode 持久性来划分，&lt;strong&gt;znode 可分为持久性 znode 和临时 znode&lt;/strong&gt;。持久性 znode 不会因为 ZooKeeper 集群重启而消失，==而临时 znode 则与创建该 znode 的 ZooKeeper 会话绑定，一旦会话结束，该节点会被自动删除==。&lt;/p&gt;
&lt;p&gt;==ZooKeeper 赋予客户端监控 znode 变更的能力，即所谓的 Watch 通知功能。一旦 znode 节点被创建、删除，子节点数量发生变化，抑或是 znode 所存的数据本身变更，ZooKeeper 会通过节点变更监听器 (ChangeHandler) 的方式显式通知客户端。==&lt;/p&gt;
&lt;p&gt;依托于这些功能，ZooKeeper 常被用来实现&lt;strong&gt;集群成员管理、分布式锁、领导者选举&lt;/strong&gt;等功能。==Kafka 控制器大量使用 Watch 功能实现对集群的协调管理==。我们一起来看一张图片，它展示的是 Kafka 在 ZooKeeper 中创建的 znode 分布。你不用了解每个 znode 的作用，但你可以大致体会下 Kafka 对 ZooKeeper 的依赖。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kafka 常见的脚本汇总</title>
      <link>https://leochu.work/blog/tech/bigdata/kafka%E5%B8%B8%E7%94%A8%E8%84%9A%E6%9C%AC%E6%B1%87%E6%80%BB/</link>
      <pubDate>Sun, 11 Dec 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/kafka%E5%B8%B8%E7%94%A8%E8%84%9A%E6%9C%AC%E6%B1%87%E6%80%BB/</guid>
      <description>&lt;h2 id=&#34;命令行脚本概览&#34;&gt;命令行脚本概览&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;Kafka 默认提供了很多个命令行脚本，用于实现各种各样的功能和运维管理。今天我以 2.2 版本为例，详细地盘点下这些命令行工具。下图展示了 2.2 版本提供的所有命令行脚本。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230328115823.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230328115823.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;从图中我们可以知道，2.2 版本总共提供了 30 个 SHELL 脚本。图中的 windows 实际上是个子目录，里面保存了 Windows 平台下的 BAT 批处理文件。其他的. sh 文件则是 Linux 平台下的标准 SHELL 脚本。&lt;/p&gt;
&lt;p&gt;默认情况下，不加任何参数或携带 &amp;ndash;help 运行 SHELL 文件，会得到该脚本的使用方法说明。下面这张图片展示了 kafka-log-dirs 脚本的调用方法。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230328115849.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230328115849.png&#34;&gt;
有了这些基础的了解，我来逐一地说明这些脚本的用途，然后再给你详细地介绍一些常见的脚本。&lt;/p&gt;
&lt;p&gt;我们先来说说 connect-standalone 和 connect-distributed 两个脚本。这两个脚本是 Kafka Connect 组件的启动脚本。在专栏第 4 讲谈到 Kafka 生态时，我曾说过社区提供了 Kafka Connect 组件，用于实现 Kafka 与外部世界系统之间的数据传输。Kafka Connect 支持单节点的 Standalone 模式，也支持多节点的 Distributed 模式。这两个脚本分别是这两种模式下的启动脚本。鉴于 Kafka Connect 不在我们的讨论范围之内，我就不展开讲了。&lt;/p&gt;
&lt;p&gt;接下来是 kafka-acls 脚本。它是用于设置 Kafka 权限的，比如设置哪些用户可以访问 Kafka 的哪些主题之类的权限。在专栏后面，我会专门来讲 Kafka 安全设置的内容，到时候我们再细聊这个脚本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>impala配置调优</title>
      <link>https://leochu.work/blog/tech/bigdata/impala%E9%85%8D%E7%BD%AE%E8%B0%83%E4%BC%98/</link>
      <pubDate>Sun, 27 Nov 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/impala%E9%85%8D%E7%BD%AE%E8%B0%83%E4%BC%98/</guid>
      <description>&lt;h6 id=&#34;impala-daemon-命令行参数高级配置代码段安全阀&#34;&gt;&lt;strong&gt;Impala Daemon 命令行参数高级配置代码段（安全阀）&lt;/strong&gt;&lt;/h6&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-use_local_tz_for_unix_timestamp_conversions=true
-convert_legacy_hive_parquet_utc_timestamps=true
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在hive中，一个中文字符长度为1&lt;/p&gt;
&lt;p&gt;在impala中，一个中文字符长度为3&lt;/p&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>hive设置spark参数</title>
      <link>https://leochu.work/blog/tech/bigdata/hive%E8%AE%BE%E7%BD%AEspark%E5%8F%82%E6%95%B0/</link>
      <pubDate>Sun, 02 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive%E8%AE%BE%E7%BD%AEspark%E5%8F%82%E6%95%B0/</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-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spark.master&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yarn-cluster;          &lt;span style=&#34;color:#75715e&#34;&gt;#设置spark提交模式&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;set hive.execution.engine&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;spark;         &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spark.yarn.queue&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;queue_name;      &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spark.app.name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;job_name;         &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spark.executor.instances&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;20;         &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spark.executor.cores&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;4;            &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spark.executor.memory&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;8g;         &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set mapred.reduce.tasks&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;600;           &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set spark.yarn.executor.memoryOverhead&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;2048;   &lt;span style=&#34;color:#75715e&#34;&gt;#设置每个executor的jvm堆外内存&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;set spark.memory.fraction&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;0.8;          &lt;span style=&#34;color:#75715e&#34;&gt;#设置内存比例(spark2.0+)&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;set spark.serializer&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;org.apache.serializer.KyroSerializer;  &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;</description>
    </item>
    <item>
      <title>Hive调优大全</title>
      <link>https://leochu.work/blog/tech/bigdata/hive%E8%B0%83%E4%BC%98%E5%A4%A7%E5%85%A8/</link>
      <pubDate>Sun, 18 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive%E8%B0%83%E4%BC%98%E5%A4%A7%E5%85%A8/</guid>
      <description>&lt;h1 id=&#34;调优具体细节&#34;&gt;调优具体细节&lt;/h1&gt;
&lt;h2 id=&#34;hive建表设计层面&#34;&gt;Hive建表设计层面&lt;/h2&gt;
&lt;p&gt;Hive 的建表设计层面调优，主要讲的怎么样合理的组织数据，方便后续的高效计算。比如建表的类型，文件存储格式，是否压缩等等。&lt;/p&gt;
&lt;h3 id=&#34;利用分区表优化&#34;&gt;利用分区表优化&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;关于 Hive 的表的类型有哪些？
1、分区表  
2、分桶表
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;分区表 是在某一个或者几个维度上对数据进行分类存储，一个分区对应一个目录。如果筛选条件里有分区字段，那么 Hive 只需要遍历对应分区目录下的文件即可，不需要遍历全局数据，使得处理的数据量大大减少，从而提高查询效率。&lt;/p&gt;
&lt;p&gt;也就是说：&lt;strong&gt;当一个 Hive 表的查询大多数情况下，会根据某一个字段进行筛选时，那么非常适合创建为分区表，该字段即为分区字段。&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;select1:  select ....  where country = &amp;#34;china&amp;#34;
select2:  select ....  where country = &amp;#34;china&amp;#34;
select3:  select ....  where country = &amp;#34;china&amp;#34;
select4:  select ....  where country = &amp;#34;china&amp;#34;
.....
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;分门别类：这个city字段的每个值，就单独形成为一个分区。其实每个分区就对应带HDFS的一个目录&lt;/p&gt;
&lt;p&gt;在创建表时通过启用 &lt;code&gt;partitioned by&lt;/code&gt; 实现，用来 partition 的维度并不是实际数据的某一列，具体分区的标志是由插入内容时给定的。当要查询某一分区的内容时可以采用 where 语句，形似 &lt;code&gt;where tablename.partition_column = a&lt;/code&gt; 来实现。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1、创建含分区的表：&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;TABLE&lt;/span&gt; page_view(viewTime INT, userid BIGINT,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       page_url STRING, referrer_url STRING,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       ip STRING &lt;span style=&#34;color:#66d9ef&#34;&gt;COMMENT&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;IP Address of the User&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PARTITIONED &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt;(date STRING, country STRING)
&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;ROW&lt;/span&gt; FORMAT DELIMITED FIELDS TERMINATED &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;1&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;AS&lt;/span&gt; TEXTFILE;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2、载入内容，并指定分区标志：&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hive常用参数语句</title>
      <link>https://leochu.work/blog/tech/bigdata/hive%E5%B8%B8%E7%94%A8%E5%8F%82%E6%95%B0%E8%AF%AD%E5%8F%A5/</link>
      <pubDate>Sun, 04 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive%E5%B8%B8%E7%94%A8%E5%8F%82%E6%95%B0%E8%AF%AD%E5%8F%A5/</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-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;SET&lt;/span&gt; hive.&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;dynamic&lt;/span&gt;.partition&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;true&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:#66d9ef&#34;&gt;SET&lt;/span&gt; hive.&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;dynamic&lt;/span&gt;.partition.&lt;span style=&#34;color:#66d9ef&#34;&gt;mode&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;nonstrict;
&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:#66d9ef&#34;&gt;SET&lt;/span&gt; hive.&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;dynamic&lt;/span&gt;.partitions&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100000&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:#66d9ef&#34;&gt;SET&lt;/span&gt; hive.&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;dynamic&lt;/span&gt;.partitions.pernode&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100000&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:#66d9ef&#34;&gt;SET&lt;/span&gt; hive.&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;.created.files&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100000&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2union-all并发执行&#34;&gt;2.union all并发执行&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:#75715e&#34;&gt;--在使用union all的时候，系统资源足够的情况下，为了加快hive处理速度，可以设置如下参数实现并发执行
&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:#66d9ef&#34;&gt;set&lt;/span&gt; mapred.job.priority&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;VERY_HIGH;
&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:#66d9ef&#34;&gt;set&lt;/span&gt; hive.&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt;.parallel&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;3设置map-reduce个数&#34;&gt;3.设置map reduce个数&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:#75715e&#34;&gt;-- 设置map capacity
&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:#66d9ef&#34;&gt;set&lt;/span&gt; mapred.job.&lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;.capacity&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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; mapred.job.reduce.capacity&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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 设置每个reduce的大小
&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:#66d9ef&#34;&gt;set&lt;/span&gt; hive.&lt;span style=&#34;color:#66d9ef&#34;&gt;exec&lt;/span&gt;.reducers.bytes.per.reducer&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;500000000&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;-- 直接设置个数
&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:#66d9ef&#34;&gt;set&lt;/span&gt; mapred.reduce.tasks &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;4文件合并&#34;&gt;4.文件合并&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:#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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; abaci.&lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt;.dag.job&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;false&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:#66d9ef&#34;&gt;set&lt;/span&gt; hive.merge.mapredfiles&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;true&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:#66d9ef&#34;&gt;set&lt;/span&gt; mapred.combine.&lt;span style=&#34;color:#66d9ef&#34;&gt;input&lt;/span&gt;.format.&lt;span style=&#34;color:#66d9ef&#34;&gt;local&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;only&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;false&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:#66d9ef&#34;&gt;set&lt;/span&gt; hive.merge.smallfiles.avgsize&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100000000&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;-- 在map only的情况下，如上的参数如果没有生效，可以设置如下
&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;-- 在HQL的最外层增加distribute by rand()
&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:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; XXX distribute &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; rand()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;5设置任务名称&#34;&gt;5.设置任务名称&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&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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; mapred.job.name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;${&lt;/span&gt;my_job&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;}&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;6设置引擎和指定队列&#34;&gt;6.设置引擎和指定队列&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;set&lt;/span&gt; hive.execution.engine&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mr;
&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:#66d9ef&#34;&gt;set&lt;/span&gt; mapreduce.job.queuename&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;bigdata;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Hive-mongo导入导出</title>
      <link>https://leochu.work/blog/tech/bigdata/hive-mongo%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA/</link>
      <pubDate>Sun, 21 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive-mongo%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA/</guid>
      <description>&lt;h4 id=&#34;1mongodb拉出到hive&#34;&gt;1.MongoDB拉出到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:#f92672&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;导入&lt;/span&gt;mongodb的包到hadoop
&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;add&lt;/span&gt; jar &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;var&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;lib&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;hadoop&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;bin&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;hive_mongoDB&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;mongo&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hadoop&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;core&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;.jar;
&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;add&lt;/span&gt; jar &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;var&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;lib&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;hadoop&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;bin&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;hive_mongoDB&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;mongo&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hadoop&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hive&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;.jar;
&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;add&lt;/span&gt; jar &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;var&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;lib&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;hadoop&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;hdfs&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;bin&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;hive_mongoDB&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;mongo&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;java&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;driver&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;.jar;
&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;set&lt;/span&gt; mongo.&lt;span style=&#34;color:#66d9ef&#34;&gt;input&lt;/span&gt;.split.create_input_splits&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;false&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:#66d9ef&#34;&gt;DROP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;IF&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;EXISTS&lt;/span&gt; ods.ods_ex_trade_mdb_wmb_rocket_waimao_company_info_mapping;
&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;drop&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; ods.ods_zxk_annualBusiness_mapping;
&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;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_annualBusiness_mapping(
&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;`&lt;/span&gt;_id&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt; string,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;companyName string,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Tel 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;com.mongodb.hadoop.hive.MongoStorageHandler&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;mongo.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;{&amp;#34;_id&amp;#34;:&amp;#34;_id&amp;#34;,&amp;#34;companyName&amp;#34;:&amp;#34;companyName&amp;#34;,&amp;#34;Tel&amp;#34;:&amp;#34;Tel&amp;#34;}&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;mongo.uri&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;mongodb://username:password@172.16.98.159:21000/annualReport.annualBusiness?authSource=admin&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 字段中文注释乱码</title>
      <link>https://leochu.work/blog/tech/bigdata/hive%E5%AD%97%E6%AE%B5%E4%B8%AD%E6%96%87%E6%B3%A8%E9%87%8A%E4%B9%B1%E7%A0%81%E4%BF%AE%E5%A4%8D/</link>
      <pubDate>Sun, 07 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive%E5%AD%97%E6%AE%B5%E4%B8%AD%E6%96%87%E6%B3%A8%E9%87%8A%E4%B9%B1%E7%A0%81%E4%BF%AE%E5%A4%8D/</guid>
      <description>&lt;p&gt;Hive 字段中文乱码，如执行 show create table xxx 时，表级别注释、字段级别注释发现有乱码现象（都是？？？？）， 一般都是由 hive 元数据库的配置不当造成的。 &lt;/p&gt;
&lt;p&gt;此时可按如下步骤进行配置调整：&lt;/p&gt;
&lt;p&gt;登录 hive 的元数据库 mysql 中：&lt;/p&gt;
&lt;p&gt;&lt;em&gt;1、设置 hive 元数据库字符集&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;show create database hive;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;查看为 utf8，需变更为 latin1&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;_alter database hive character set latin1; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;2、更改如下表字段为字符集编码为 utf8&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;①修改表字段注解和表注解&lt;br&gt;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8&lt;br&gt;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8&lt;br&gt;
② 修改分区字段注解：&lt;br&gt;
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;&lt;br&gt;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;&lt;br&gt;
③修改索引注解：&lt;br&gt;
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hive 数仓建表该选用 ORC 还是 Parquet，压缩选 LZO 还是 Snappy</title>
      <link>https://leochu.work/blog/tech/bigdata/hive%E5%BB%BA%E8%A1%A8%E6%A0%BC%E5%BC%8F%E9%80%89%E5%9E%8B-orc-parquet-lzo-snappy/</link>
      <pubDate>Sun, 24 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hive%E5%BB%BA%E8%A1%A8%E6%A0%BC%E5%BC%8F%E9%80%89%E5%9E%8B-orc-parquet-lzo-snappy/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;在数仓中，建议大家除了接口表（从其他数据库导入或者是最后要导出到其他数据库的表），其余表的存储格式与压缩格式保持一致。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在数仓中，建议大家除了接口表（从其他数据库导入或者是最后要导出到其他数据库的表），其余表的存储格式与压缩格式保持一致。&lt;/p&gt;
&lt;p&gt;我们先来说一下目前 Hive 表主流的存储格式与压缩方式&lt;/p&gt;
&lt;p&gt;从 Hive 官网得知，Apache Hive 支持 Apache Hadoop 中使用的几种熟悉的文件格式，如 &lt;code&gt;TextFile（文本格式）&lt;/code&gt;，&lt;code&gt;RCFile（行列式文件）&lt;/code&gt;，&lt;code&gt;SequenceFile（二进制序列化文件）&lt;/code&gt;，&lt;code&gt;AVRO&lt;/code&gt;，&lt;code&gt;ORC（优化的行列式文件）&lt;/code&gt;和&lt;code&gt;Parquet&lt;/code&gt; 格式，而这其中我们目前使用最多的是&lt;code&gt;TextFile&lt;/code&gt;，&lt;code&gt;SequenceFile&lt;/code&gt;，&lt;code&gt;ORC&lt;/code&gt;和&lt;code&gt;Parquet&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;下面来详细了解下这 2 种行列式存储。&lt;/p&gt;
&lt;h2 id=&#34;1orc&#34;&gt;1、ORC&lt;/h2&gt;
&lt;h3 id=&#34;11-orc-的存储结构&#34;&gt;1.1 ORC 的存储结构&lt;/h3&gt;
&lt;p&gt;我们先从官网上拿到 ORC 的存储模型图&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://www.doitedu.cn/wp-content/uploads/2021/12/a.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;看起来略微有点复杂，那我们稍微简化一下，我画了一个简单的图来说明一下&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://www.doitedu.cn/wp-content/uploads/2021/12/b-1024x456.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;但是由于索引的高成本，在**「目前的 Hive3.X 中，已经废除了索引」**，当然也早就引入了列式存储。&lt;/p&gt;
&lt;p&gt;列式存储的存储方式，是按照一列一列存储的，如上图中的右图，这样的话如果查询一个字段的数据，就等于是索引查询，效率高。但是如果需要查全表，它因为需要分别取所有的列最后汇总，反而更占用资源。于是 ORC 行列式存储出现了。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在需要全表扫描时，可以按照行组读取&lt;/li&gt;
&lt;li&gt;如果需要取列数据，在行组的基础上，读取指定的列，而不需要所有行组内所有行的数据和一行内所有字段的数据。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;了解了 ORC 存储的基本逻辑后，我们再来看看它的存储模型图。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://www.doitedu.cn/wp-content/uploads/2021/12/c.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;同时我也把详细的文字也附在下面，大家可以对照着看看：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;条带 (stripe)：ORC 文件存储数据的地方，每个 stripe 一般为 HDFS 的块大小。（包含以下 3 部分）&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;index data:保存了所在条带的一些统计信息,以及数据在 stripe中的位置索引信息。
rows data:数据存储的地方,由多个行组构成，每10000行构成一个行组，数据以流( stream)的形式进行存储。
stripe footer:保存数据所在的文件目录
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;文件脚注 (file footer)：包含了文件中 sipe 的列表, 每个 stripe 的行数, 以及每个列的数据类型。它还包含每个列的最小值、最大值、行计数、求和等聚合信息。&lt;/li&gt;
&lt;li&gt;postscript：含有压缩参数和压缩大小相关的信息&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以其实发现，ORC 提供了 3 级索引，文件级、条带级、行组级，所以在查询的时候，利用这些索引可以规避大部分不满足查询条件的文件和数据块。&lt;/p&gt;</description>
    </item>
    <item>
      <title>hadoop默认端口</title>
      <link>https://leochu.work/blog/tech/bigdata/hadoop%E9%BB%98%E8%AE%A4%E7%AB%AF%E5%8F%A3/</link>
      <pubDate>Sun, 10 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/hadoop%E9%BB%98%E8%AE%A4%E7%AB%AF%E5%8F%A3/</guid>
      <description>&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;9000&lt;/td&gt;
          &lt;td&gt;fs.defaultFS，如：hdfs://172.25.40.171:9000&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;9001&lt;/td&gt;
          &lt;td&gt;dfs.namenode.rpc-address，DataNode会连接这个端口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50070&lt;/td&gt;
          &lt;td&gt;dfs.namenode.http-address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50470&lt;/td&gt;
          &lt;td&gt;dfs.namenode.https-address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50100&lt;/td&gt;
          &lt;td&gt;dfs.namenode.backup.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50105&lt;/td&gt;
          &lt;td&gt;dfs.namenode.backup.http-address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50090&lt;/td&gt;
          &lt;td&gt;dfs.namenode.secondary.http-address，如：172.25.39.166:50090&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50091&lt;/td&gt;
          &lt;td&gt;dfs.namenode.secondary.https-address，如：172.25.39.166:50091&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50020&lt;/td&gt;
          &lt;td&gt;dfs.datanode.ipc.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50075&lt;/td&gt;
          &lt;td&gt;dfs.datanode.http.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50475&lt;/td&gt;
          &lt;td&gt;dfs.datanode.https.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;50010&lt;/td&gt;
          &lt;td&gt;dfs.datanode.address，DataNode的数据传输端口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8480&lt;/td&gt;
          &lt;td&gt;dfs.journalnode.rpc-address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8481&lt;/td&gt;
          &lt;td&gt;dfs.journalnode.https-address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8032&lt;/td&gt;
          &lt;td&gt;yarn.resourcemanager.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8088&lt;/td&gt;
          &lt;td&gt;yarn.resourcemanager.webapp.address，YARN的http端口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8090&lt;/td&gt;
          &lt;td&gt;yarn.resourcemanager.webapp.https.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8030&lt;/td&gt;
          &lt;td&gt;yarn.resourcemanager.scheduler.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8031&lt;/td&gt;
          &lt;td&gt;yarn.resourcemanager.resource-tracker.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8033&lt;/td&gt;
          &lt;td&gt;yarn.resourcemanager.admin.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8042&lt;/td&gt;
          &lt;td&gt;yarn.nodemanager.webapp.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8040&lt;/td&gt;
          &lt;td&gt;yarn.nodemanager.localizer.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8188&lt;/td&gt;
          &lt;td&gt;yarn.timeline-service.webapp.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;10020&lt;/td&gt;
          &lt;td&gt;mapreduce.jobhistory.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;19888&lt;/td&gt;
          &lt;td&gt;mapreduce.jobhistory.webapp.address&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2888&lt;/td&gt;
          &lt;td&gt;ZooKeeper，如果是Leader，用来监听Follower的连接&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3888&lt;/td&gt;
          &lt;td&gt;ZooKeeper，用于Leader选举&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2181&lt;/td&gt;
          &lt;td&gt;ZooKeeper，用来监听客户端的连接&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;60010&lt;/td&gt;
          &lt;td&gt;hbase.master.info.port，HMaster的http端口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;60000&lt;/td&gt;
          &lt;td&gt;hbase.master.port，HMaster的RPC端口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;60030&lt;/td&gt;
          &lt;td&gt;hbase.regionserver.info.port，HRegionServer的http端口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;60020&lt;/td&gt;
          &lt;td&gt;hbase.regionserver.port，HRegionServer的RPC端口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8080&lt;/td&gt;
          &lt;td&gt;hbase.rest.port，HBase REST server的端口&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;10000&lt;/td&gt;
          &lt;td&gt;hive.server2.thrift.port&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;9083&lt;/td&gt;
          &lt;td&gt;hive.metastore.uris&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&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>
    <item>
      <title>flume动态加载配置原理</title>
      <link>https://leochu.work/blog/tech/bigdata/flume%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BD%E9%85%8D%E7%BD%AE%E5%8E%9F%E7%90%86/</link>
      <pubDate>Sun, 12 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/flume%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BD%E9%85%8D%E7%BD%AE%E5%8E%9F%E7%90%86/</guid>
      <description>&lt;h2 id=&#34;flume-ng支持运行时动态修改配置的配置模块&#34;&gt;Flume NG支持运行时动态修改配置的配置模块&lt;/h2&gt;
&lt;p&gt;细说一下PollingPropertiesFileConfigurationProvider提供的运行时动态修改配置并生效的能力。&lt;/p&gt;
&lt;p&gt;要实现动态修改配置文件并生效，主要有两个待实现的功能&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;观察配置文件是否修改&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果修改，将修改的内容通知给观察者&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对于第一点，监控配置文件是否修改，Flume NG定义了一个FileWatcherRunnable对象来监控配置文件，启动了一个单独的线程采用定时轮询的方式来监控，轮询频率是30毫秒一次，比较file.lastModified属性与lastChange时间戳，当file.lastModified &amp;gt; lastChange时表示文件被修改&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-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FileWatcherRunnable&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;implements&lt;/span&gt; Runnable {
&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;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;final&lt;/span&gt; File file;
&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;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;final&lt;/span&gt; CounterGroup counterGroup;
&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:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; lastChange;
&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:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FileWatcherRunnable&lt;/span&gt;(File file, CounterGroup counterGroup) {
&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;super&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;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt; &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:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;counterGroup&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; counterGroup;
&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;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;lastChange&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 0L;
&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:#a6e22e&#34;&gt;@Override&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;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      LOGGER.&lt;span style=&#34;color:#a6e22e&#34;&gt;debug&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Checking file:{} for changes&amp;#34;&lt;/span&gt;, file);
&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;      counterGroup.&lt;span style=&#34;color:#a6e22e&#34;&gt;incrementAndGet&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file.checks&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:#66d9ef&#34;&gt;long&lt;/span&gt; lastModified &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; file.&lt;span style=&#34;color:#a6e22e&#34;&gt;lastModified&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:#66d9ef&#34;&gt;if&lt;/span&gt; (lastModified &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; lastChange) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        LOGGER.&lt;span style=&#34;color:#a6e22e&#34;&gt;info&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Reloading configuration file:{}&amp;#34;&lt;/span&gt;, file);
&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;        counterGroup.&lt;span style=&#34;color:#a6e22e&#34;&gt;incrementAndGet&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file.loads&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;        lastChange &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lastModified;
&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:#66d9ef&#34;&gt;try&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          eventBus.&lt;span style=&#34;color:#a6e22e&#34;&gt;post&lt;/span&gt;(getConfiguration());
&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;catch&lt;/span&gt; (Exception e) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          LOGGER.&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Failed to load configuration data. Exception follows.&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              e);
&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;catch&lt;/span&gt; (NoClassDefFoundError e) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          LOGGER.&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Failed to start agent because dependencies were not &amp;#34;&lt;/span&gt; &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:#e6db74&#34;&gt;&amp;#34;found in classpath. Error follows.&amp;#34;&lt;/span&gt;, e);
&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;catch&lt;/span&gt; (Throwable t) {
&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;// caught because the caller does not handle or log Throwables&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          LOGGER.&lt;span style=&#34;color:#a6e22e&#34;&gt;error&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Unhandled error&amp;#34;&lt;/span&gt;, t);
&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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// PollingPropertiesFileConfigurationProvider.start()启动一个单独的线程来监控properties配置文件&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;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;start&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    LOGGER.&lt;span style=&#34;color:#a6e22e&#34;&gt;info&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Configuration provider starting&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Preconditions.&lt;span style=&#34;color:#a6e22e&#34;&gt;checkState&lt;/span&gt;(file &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&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;The parameter file must not be null&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;    executorService &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Executors.&lt;span style=&#34;color:#a6e22e&#34;&gt;newSingleThreadScheduledExecutor&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;new&lt;/span&gt; ThreadFactoryBuilder().&lt;span style=&#34;color:#a6e22e&#34;&gt;setNameFormat&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;conf-file-poller-%d&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:#a6e22e&#34;&gt;build&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;    FileWatcherRunnable fileWatcherRunnable &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;new&lt;/span&gt; FileWatcherRunnable(file, counterGroup);
&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;    executorService.&lt;span style=&#34;color:#a6e22e&#34;&gt;scheduleWithFixedDelay&lt;/span&gt;(fileWatcherRunnable, 0, interval,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        TimeUnit.&lt;span style=&#34;color:#a6e22e&#34;&gt;SECONDS&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;    lifecycleState &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; LifecycleState.&lt;span style=&#34;color:#a6e22e&#34;&gt;START&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;    LOGGER.&lt;span style=&#34;color:#a6e22e&#34;&gt;debug&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Configuration provider started&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;对于第二点，利用Guava EventBus提供的发布订阅模式机制，将配置修改封装成事件传递给Application，来重新加载配置&lt;/p&gt;</description>
    </item>
    <item>
      <title>CDH组件参数调优</title>
      <link>https://leochu.work/blog/tech/bigdata/cdh%E7%BB%84%E4%BB%B6%E5%8F%82%E6%95%B0%E8%B0%83%E4%BC%98/</link>
      <pubDate>Sun, 29 May 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/cdh%E7%BB%84%E4%BB%B6%E5%8F%82%E6%95%B0%E8%B0%83%E4%BC%98/</guid>
      <description>&lt;h3 id=&#34;1yarn参数调优&#34;&gt;1.YARN参数调优&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;strong&gt;检查项&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;当前值&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;修改值&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;JobHistory Server 的 Java 堆栈大小&lt;/td&gt;
          &lt;td&gt;1GB&lt;/td&gt;
          &lt;td&gt;2GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;NodeManager 的 Java 堆栈大小&lt;/td&gt;
          &lt;td&gt;1GB&lt;/td&gt;
          &lt;td&gt;2GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ResourceManager 的 Java 堆栈大小&lt;/td&gt;
          &lt;td&gt;1GB&lt;/td&gt;
          &lt;td&gt;2GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;容器内存  yarn.nodemanager.resource.memory-mb&lt;/td&gt;
          &lt;td&gt;24GB&lt;/td&gt;
          &lt;td&gt;32GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;最小容器内存   yarn.scheduler.minimum-allocation-mb&lt;/td&gt;
          &lt;td&gt;10GB&lt;/td&gt;
          &lt;td&gt;8GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;最大容器内存  yarn.scheduler.maximum-allocation-mb&lt;/td&gt;
          &lt;td&gt;40GB&lt;/td&gt;
          &lt;td&gt;56GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Map 任务内存   mapreduce.map.memory.mb&lt;/td&gt;
          &lt;td&gt;0M&lt;/td&gt;
          &lt;td&gt;12GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Reduce 任务内存   mapreduce.reduce.memory.mb&lt;/td&gt;
          &lt;td&gt;0M&lt;/td&gt;
          &lt;td&gt;24GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Application Master容器内存  yarn.app.mapreduce.am.resource.mb&lt;/td&gt;
          &lt;td&gt;24GB&lt;/td&gt;
          &lt;td&gt;32GB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Map 任务 Java 选项库  mapreduce.map.java.opts&lt;/td&gt;
          &lt;td&gt;-Djava.net.preferIPv4Stack=true&lt;/td&gt;
          &lt;td&gt;-Dmapreduce.map.java.opts=-Xmx2048m&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Reduce 任务 Java 选项库  mapreduce.reduce.java.opts&lt;/td&gt;
          &lt;td&gt;-Djava.net.preferIPv4Stack=true&lt;/td&gt;
          &lt;td&gt;-Dmapreduce.reduce.java.opts=-Xmx2048m&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;yarn.resourcemanager.scheduler.class&lt;/td&gt;
          &lt;td&gt;org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler&lt;/td&gt;
          &lt;td&gt;org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;yarn.scheduler.capacity.root.queues:&lt;/p&gt;
&lt;p&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-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;configuration&amp;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;lt;property&amp;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;lt;name&amp;gt;&lt;/span&gt;yarn.scheduler.capacity.root.queues&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/name&amp;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;lt;value&amp;gt;&lt;/span&gt;default&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/value&amp;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;lt;/property&amp;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;lt;property&amp;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;lt;name&amp;gt;&lt;/span&gt;yarn.scheduler.capacity.root.capacity&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/name&amp;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;lt;value&amp;gt;&lt;/span&gt;100&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/value&amp;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;lt;/property&amp;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;lt;property&amp;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;lt;name&amp;gt;&lt;/span&gt;yarn.scheduler.capacity.root.default.capacity&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/name&amp;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;lt;value&amp;gt;&lt;/span&gt;100&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/value&amp;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;lt;/property&amp;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;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改值：&lt;/p&gt;</description>
    </item>
    <item>
      <title>CDH角色划分</title>
      <link>https://leochu.work/blog/tech/bigdata/cdh%E8%A7%92%E8%89%B2%E5%88%92%E5%88%86/</link>
      <pubDate>Sun, 15 May 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/cdh%E8%A7%92%E8%89%B2%E5%88%92%E5%88%86/</guid>
      <description>&lt;h3 id=&#34;1-服务器配置&#34;&gt;&lt;strong&gt;1. 服务器配置&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;主节点&#34;&gt;&lt;strong&gt;主节点：&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;hostname: m1,m2,m3&lt;/p&gt;
&lt;p&gt;vcore：48&lt;/p&gt;
&lt;p&gt;内存：128G&lt;/p&gt;
&lt;p&gt;SSD：1T（不算系统盘）&lt;/p&gt;
&lt;h4 id=&#34;工作节点&#34;&gt;&lt;strong&gt;工作节点：&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;hostname: n1,n2,n3,n4&lt;/p&gt;
&lt;p&gt;vcore : 48&lt;/p&gt;
&lt;p&gt;内存：256G&lt;/p&gt;
&lt;p&gt;SSD:1T（不算系统盘）&lt;/p&gt;
&lt;h3 id=&#34;2-节点职责描述&#34;&gt;&lt;strong&gt;2. 节点职责描述&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;m1: 控制核心；cdh核心，hadoop主节点&lt;/p&gt;
&lt;p&gt;m2: 网关入口；主节点高可用，一些组件的web ui，用户入口 ，（前期做计算任务的driver端，后期优化driver打散到各节点）&lt;/p&gt;
&lt;p&gt;m3: 后台服务；组件元数据库，任务的history服务 ，（后期做元数据HA）&lt;/p&gt;
&lt;p&gt;n1~n4: 算存一体；提供存储，计算等服务&lt;/p&gt;
&lt;h3 id=&#34;3角色分配策略&#34;&gt;&lt;strong&gt;3.角色分配策略&lt;/strong&gt;&lt;/h3&gt;
&lt;h4 id=&#34;一hdfs&#34;&gt;&lt;strong&gt;一、hdfs&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;NameNode一般在主节点上，初始化安装的时候没有高可用，所以有SecondaryNameNode的作为一个备份,NameNode它会将它拆分后进行分布式存储，其中的数据是分散在各个DataNode节点，且默认都会有3个副本，防止其中一台机器宕机使得数据缺失。balancer一般与namenode搭建在一起。&lt;/p&gt;
&lt;h4 id=&#34;二hive&#34;&gt;&lt;strong&gt;二、hive&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;hive metastore server与hiveServer2一般搭载一起上，但也可以分开，因为hive服务需要启动hiveServer2，访问sparksql需要启动metastore而hive gateway,事实上并不是真正的角色，也没有状态，但它们充当了告诉客户端配置应该放置在哪里。 添加Hive服务时，默认情况下会创建Hive网关。&lt;/p&gt;
&lt;h4 id=&#34;三cloudera-manager-server&#34;&gt;&lt;strong&gt;三、cloudera manager server&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这个可以根据实际搭建，这个相当于是集群的监听器，在网页上出现的的图表也就是这个监听器类似的，这个可以搭建在主节点上，但若是主节点上分配的角色过多会影响其服务器的性能。&lt;/p&gt;
&lt;h4 id=&#34;四spark&#34;&gt;&lt;strong&gt;四、spark&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这个角色可以分配这任意的机器上，按实际情况调整。spark-gateway全部部署在各个机器上，这个对于个人理解来说相当于spark、spark2机器之间的通信功能。&lt;/p&gt;
&lt;h4 id=&#34;五yarn&#34;&gt;&lt;strong&gt;五、yarn&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;jobhistory与resourcemanager进行通信，所以部署上一般在同一台机器上放在主节点上，而nodemanager分配在各个节点上&lt;/p&gt;
&lt;h4 id=&#34;六zookeeper&#34;&gt;&lt;strong&gt;六、zookeeper&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;这个若是机器足够一般是奇数的，所以部署在m节点上比较合适。&lt;strong&gt;奇数台、高可用、与管理角色共置&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&#34;七hue&#34;&gt;&lt;strong&gt;七、hue&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;会对外提供一个web ui，以便于数据分析和数据开发做即席查询。这个服务随意部署，根据自己的机器部署情况来看。&lt;/p&gt;
&lt;h3 id=&#34;4角色划分详情表&#34;&gt;&lt;strong&gt;4.角色划分详情表&lt;/strong&gt;&lt;/h3&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;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&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;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;控制核心&lt;/td&gt;
          &lt;td&gt;网关+入口&lt;/td&gt;
          &lt;td&gt;元数据+历史服务&lt;/td&gt;
          &lt;td&gt;存算一体&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;m1&lt;/td&gt;
          &lt;td&gt;m2&lt;/td&gt;
          &lt;td&gt;m3&lt;/td&gt;
          &lt;td&gt;n1&lt;/td&gt;
          &lt;td&gt;n2&lt;/td&gt;
          &lt;td&gt;n3&lt;/td&gt;
          &lt;td&gt;n4&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;cloudera management&lt;/td&gt;
          &lt;td&gt;Alert Publisher&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Event Server&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Host Monitor&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Service Monitor&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;hdfs&lt;/td&gt;
          &lt;td&gt;NameNode&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;JournalNode&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Failover Controller&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;HttpFs&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;DataNode&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;yarn&lt;/td&gt;
          &lt;td&gt;ResourceManager&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;NodeManager&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;JobHistory Server&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;hive&lt;/td&gt;
          &lt;td&gt;Hive MetaStore Server&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;HiveServer2&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;HiveGateway&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;spark&lt;/td&gt;
          &lt;td&gt;Spark History Server&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Spark Gateway&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;impala&lt;/td&gt;
          &lt;td&gt;Impala StateStore&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Impala catalog Server&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Impala Daemon&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;zookeeper&lt;/td&gt;
          &lt;td&gt;zk-node&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;hue&lt;/td&gt;
          &lt;td&gt;Hue Server&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Hue Load Balancer&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;✅&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;5-未来升级项&#34;&gt;5. 未来升级项&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;work节点扩展硬盘，只需将新盘挂载到新目录/hadoop/data2或/hadoop/data3，更新hdfs配置就能完成存储扩展（支持热加入）&lt;/p&gt;</description>
    </item>
    <item>
      <title>beeline导出数据</title>
      <link>https://leochu.work/blog/tech/bigdata/beeline%E5%AF%BC%E5%87%BA%E6%95%B0%E6%8D%AE/</link>
      <pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/beeline%E5%AF%BC%E5%87%BA%E6%95%B0%E6%8D%AE/</guid>
      <description>&lt;p&gt;beeline  -n  chutianyu -p chutianyu &amp;ndash;showHeader=false  &amp;ndash;outputformat=csv2  -e  &amp;ldquo;select * from smp.india_imp_json_test2mongo ;&amp;rdquo; &amp;gt;  india_imp_test1.json&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何重设消费者组位移</title>
      <link>https://leochu.work/blog/tech/bigdata/%E5%A6%82%E4%BD%95%E9%87%8D%E8%AE%BE%E6%B6%88%E8%B4%B9%E8%80%85%E7%BB%84%E4%BD%8D%E7%A7%BB/</link>
      <pubDate>Sun, 17 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/%E5%A6%82%E4%BD%95%E9%87%8D%E8%AE%BE%E6%B6%88%E8%B4%B9%E8%80%85%E7%BB%84%E4%BD%8D%E7%A7%BB/</guid>
      <description>&lt;h2 id=&#34;为什么要重设消费者组位移&#34;&gt;为什么要重设消费者组位移？&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;我们知道，Kafka 和传统的消息引擎在设计上是有很大区别的，其中一个比较显著的区别就是，Kafka 的消费者读取消息是可以重演的（replayable）。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;像 RabbitMQ 或 ActiveMQ 这样的传统消息中间件，它们处理和响应消息的方式是破坏性的（destructive），即一旦消息被成功处理，就会被从 Broker 上删除。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;反观 Kafka，由于它是基于日志结构（log-based）的消息引擎，消费者在消费消息时，仅仅是从磁盘文件上读取数据而已，是只读的操作，因此消费者不会删除消息数据。同时，由于位移数据是由消费者控制的，因此它能够很容易地修改位移的值，实现重复消费历史数据的功能。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;对了，之前有很多同学在专栏的留言区提问：&lt;em&gt;在实际使用场景中，我该如何确定是使用传统的消息中间件，还是使用 Kafka 呢？我在这里统一回答一下。如果在你的场景中，消息处理逻辑非常复杂，处理代价很高，同时你又不关心消息之间的顺序，那么传统的消息中间件是比较合适的；反之，如果你的场景需要较高的吞吐量，但每条消息的处理时间很短，同时你又很在意消息的顺序，此时，Kafka 就是你的首选。&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;重设位移策略&#34;&gt;重设位移策略&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;不论是哪种设置方式，重设位移大致可以从两个维度来进行。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;位移维度。这是指根据位移值来重设。也就是说，直接把消费者的位移值重设成我们给定的位移值。&lt;/li&gt;
&lt;li&gt;时间维度。我们可以给定一个时间，让消费者把位移调整成大于该时间的最小位移；也可以给出一段时间间隔，比如 30 分钟前，然后让消费者直接将位移调回 30 分钟之前的位移值。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下面的这张表格罗列了 7 种重设策略。接下来，我来详细解释下这些策略。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230328140507.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230328140507.png&#34;&gt;
Earliest 策略表示将位移调整到主题当前最早位移处。这个最早位移不一定就是 0，因为在生产环境中，很久远的消息会被 Kafka 自动删除，所以当前最早位移很可能是一个大于 0 的值。&lt;strong&gt;如果你想要重新消费主题的所有消息，那么可以使用 Earliest 策略&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Latest 策略表示把位移重设成最新末端位移。如果你总共向某个主题发送了 15 条消息，那么最新末端位移就是 15。&lt;strong&gt;如果你想跳过所有历史消息，打算从最新的消息处开始消费的话，可以使用 Latest 策略&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Current 策略表示将位移调整成消费者当前提交的最新位移&lt;/em&gt;。有时候你可能会碰到这样的场景：你修改了消费者程序代码，并重启了消费者，结果发现代码有问题，你需要回滚之前的代码变更，同时也要把位移重设到消费者重启时的位置，那么，Current 策略就可以帮你实现这个功能。&lt;/p&gt;
&lt;p&gt;表中第 4 行的 Specified-Offset 策略则是比较通用的策略，表示消费者把位移值调整到你指定的位移处。&lt;strong&gt;这个策略的典型使用场景是，消费者程序在处理某条错误消息时，你可以手动地 “跳过” 此消息的处理&lt;/strong&gt;。在实际使用过程中，可能会出现 corrupted 消息无法被消费的情形，此时消费者程序会抛出异常，无法继续工作。一旦碰到这个问题，你就可以尝试使用 Specified-Offset 策略来规避。&lt;/p&gt;
&lt;p&gt;如果说 Specified-Offset 策略要求你指定位移的&lt;strong&gt;绝对数值&lt;/strong&gt;的话，那么 Shift-By-N 策略指定的就是位移的&lt;strong&gt;相对数值&lt;/strong&gt;，即你给出要跳过的一段消息的距离即可。这里的 “跳” 是双向的，你既可以向前“跳”，也可以向后“跳”。比如，你想把位移重设成当前位移的前 100 条位移处，此时你需要指定 N 为 -100。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何调优 Kafka</title>
      <link>https://leochu.work/blog/tech/bigdata/kafka%E8%B0%83%E4%BC%98%E6%8C%87%E5%8D%97/</link>
      <pubDate>Sun, 03 Apr 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/kafka%E8%B0%83%E4%BC%98%E6%8C%87%E5%8D%97/</guid>
      <description>&lt;h2 id=&#34;调优目标&#34;&gt;调优目标&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;在做调优之前，我们必须明确优化 Kafka 的目标是什么。通常来说，调优是为了满足系统常见的非功能性需求。在众多的非功能性需求中，性能绝对是我们最关心的那一个。不同的系统对性能有不同的诉求，比如对于数据库用户而言，性能意味着请求的响应时间，用户总是希望查询或更新请求能够被更快地处理完并返回。&lt;/p&gt;
&lt;p&gt;对 Kafka 而言，性能一般是指吞吐量和延时。&lt;/p&gt;
&lt;p&gt;吞吐量，也就是 TPS，是指 Broker 端进程或 Client 端应用程序每秒能处理的字节数或消息数，这个值自然是越大越好。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;延时和我们刚才说的响应时间类似，它表示从 Producer 端发送消息到 Broker 端持久化完成之间的时间间隔。这个指标也可以代表端到端的延时（End-to-End，E2E），也就是从 Producer 发送消息到 Consumer 成功消费该消息的总时长&lt;/em&gt;。和 TPS 相反，我们通常希望延时越短越好。&lt;/p&gt;
&lt;p&gt;总之，高吞吐量、低延时是我们调优 Kafka 集群的主要目标，一会儿我们会详细讨论如何达成这些目标。在此之前，我想先谈一谈优化漏斗的问题。&lt;/p&gt;
&lt;h2 id=&#34;优化漏斗&#34;&gt;优化漏斗&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;优化漏斗是一个调优过程中的分层漏斗，我们可以在每一层上执行相应的优化调整。总体来说，层级越靠上，其调优的效果越明显，整体优化效果是自上而下衰减的，如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20230328142440.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020230328142440.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;第 1 层：应用程序层。它是指优化 Kafka 客户端应用程序代码。比如，使用合理的数据结构、缓存计算开销大的运算结果，抑或是复用构造成本高的对象实例等。这一层的优化效果最为明显，通常也是比较简单的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第 2 层：框架层。它指的是合理设置 Kafka 集群的各种参数。毕竟，直接修改 Kafka 源码进行调优并不容易，但根据实际场景恰当地配置关键参数的值，还是很容易实现的。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第 3 层：JVM 层。Kafka Broker 进程是普通的 JVM 进程，各种对 JVM 的优化在这里也是适用的。优化这一层的效果虽然比不上前两层，但有时也能带来巨大的改善效果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第 4 层：操作系统层。对操作系统层的优化很重要，但效果往往不如想象得那么好。与应用程序层的优化效果相比，它是有很大差距的。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;基础性调优&#34;&gt;基础性调优&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;接下来，我就来分别介绍一下优化漏斗的 4 个分层的调优。&lt;/p&gt;
&lt;h2 id=&#34;操作系统调优&#34;&gt;操作系统调优&lt;/h2&gt;
&lt;p&gt;我先来说说操作系统层的调优。在操作系统层面，你最好在挂载（Mount）文件系统时禁掉 atime 更新。atime 的全称是 access time，记录的是文件最后被访问的时间。记录 atime 需要操作系统访问 inode 资源，而禁掉 atime 可以避免 inode 访问时间的写入操作，减少文件系统的写操作数。你可以执行 &lt;code&gt;mount -o noatime&lt;/code&gt; 命令进行设置。&lt;/p&gt;</description>
    </item>
    <item>
      <title>取消HDP hive默认开启ACID配置</title>
      <link>https://leochu.work/blog/tech/bigdata/%E5%8F%96%E6%B6%88hdp-hive%E9%BB%98%E8%AE%A4%E5%BC%80%E5%90%AFacid%E9%85%8D%E7%BD%AE/</link>
      <pubDate>Sun, 20 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/%E5%8F%96%E6%B6%88hdp-hive%E9%BB%98%E8%AE%A4%E5%BC%80%E5%90%AFacid%E9%85%8D%E7%BD%AE/</guid>
      <description>&lt;h3 id=&#34;问题描述&#34;&gt;问题描述&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20231220150234.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020231220150234.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;原因排查&#34;&gt;原因排查&lt;/h3&gt;
&lt;p&gt;HDP 的 hive 使用的版本较高为3.1.0  ，默认建表都是使用 ACID 的事务表。而 HDP的spark版本较低为2.3 目前还不支持 hive 的 ACID 功能，因此无法读取 ACID 表的数据，准确来说是内表的数据。&lt;/p&gt;
&lt;h3 id=&#34;官方资料&#34;&gt;官方资料&lt;/h3&gt;
&lt;p&gt;spark issues 地址： &lt;a href=&#34;https://issues.apache.org/jira/browse/SPARK-15348&#34;&gt;SPARK-15348 Hive ACID&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;解决方案&#34;&gt;解决方案&lt;/h3&gt;
&lt;p&gt;修改hive以下配置，重启hive&lt;/p&gt;
&lt;p&gt;hive.strict.managed.tables =false&lt;br&gt;
hive.create.as.insert.only =false&lt;br&gt;
metastore.create.as.acid =false&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20231220150309.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020231220150309.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20231220150319.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020231220150319.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Pasted image 20231220150325.png&#34; loading=&#34;lazy&#34; src=&#34;https://leochu.work/blog/resource/Pasted%20image%2020231220150325.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;其他资料&#34;&gt;其他资料&lt;/h3&gt;
&lt;h4 id=&#34;hive-中支持的表类型和-acid-特性&#34;&gt;Hive 中支持的表类型和 ACID 特性&lt;/h4&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;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;/td&gt;
          &lt;td&gt;ACID&lt;/td&gt;
          &lt;td&gt;文件格式&lt;/td&gt;
          &lt;td&gt;插入&lt;/td&gt;
          &lt;td&gt;更新 / 删除&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;托管表：CRUD 事务&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;ORC&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;托管表：仅插入式事务&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;任意格式&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;没有&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;托管表：临时&lt;/td&gt;
          &lt;td&gt;没有&lt;/td&gt;
          &lt;td&gt;任意格式&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;没有&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;外部表&lt;/td&gt;
          &lt;td&gt;没有&lt;/td&gt;
          &lt;td&gt;任意格式&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;没有&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;查看表的属性，指令：&lt;code&gt;desc formatted tb_name&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>大数据常用命令</title>
      <link>https://leochu.work/blog/tech/bigdata/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</link>
      <pubDate>Sun, 06 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</guid>
      <description>&lt;h2 id=&#34;linuxvivim&#34;&gt;Linux（vi/vim）&lt;/h2&gt;
&lt;h3 id=&#34;一般模式&#34;&gt;一般模式&lt;/h3&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;yy&lt;/td&gt;
          &lt;td&gt;复制光标当前一行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;y数字y&lt;/td&gt;
          &lt;td&gt;复制一段（从第几行到第几行）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;p&lt;/td&gt;
          &lt;td&gt;箭头移动到目的行粘贴&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;u&lt;/td&gt;
          &lt;td&gt;撤销上一步&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;dd&lt;/td&gt;
          &lt;td&gt;删除光标当前行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;d数字d&lt;/td&gt;
          &lt;td&gt;删除光标（含）后多少行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;x&lt;/td&gt;
          &lt;td&gt;删除一个字母，相当于del&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;X&lt;/td&gt;
          &lt;td&gt;删除一个字母，相当于Backspace&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;yw&lt;/td&gt;
          &lt;td&gt;复制一个词&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;dw&lt;/td&gt;
          &lt;td&gt;删除一个词&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;shift+^&lt;/td&gt;
          &lt;td&gt;移动到行头&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;shift+$&lt;/td&gt;
          &lt;td&gt;移动到行尾&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;1+shift+g&lt;/td&gt;
          &lt;td&gt;移动到页头，数字&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;shift+g&lt;/td&gt;
          &lt;td&gt;移动到页尾&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;数字N+shift+g&lt;/td&gt;
          &lt;td&gt;移动到目标行&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;编辑模式&#34;&gt;编辑模式&lt;/h3&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;i&lt;/td&gt;
          &lt;td&gt;当前光标前&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;a&lt;/td&gt;
          &lt;td&gt;当前光标后&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;o&lt;/td&gt;
          &lt;td&gt;当前光标行的下一行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;I&lt;/td&gt;
          &lt;td&gt;光标所在行最前&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;A&lt;/td&gt;
          &lt;td&gt;光标所在行最后&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;O&lt;/td&gt;
          &lt;td&gt;当前光标行的上一行&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;指令模式&#34;&gt;指令模式&lt;/h3&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;:w&lt;/td&gt;
          &lt;td&gt;保存&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:q&lt;/td&gt;
          &lt;td&gt;退出&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:!&lt;/td&gt;
          &lt;td&gt;强制执行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;/要查找的词&lt;/td&gt;
          &lt;td&gt;n 查找下一个，N 往上查找&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;? 要查找的词&lt;/td&gt;
          &lt;td&gt;n是查找上一个，shift+n是往下查找&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:set nu&lt;/td&gt;
          &lt;td&gt;显示行号&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:set nonu&lt;/td&gt;
          &lt;td&gt;关闭行号&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;压缩和解压&#34;&gt;压缩和解压&lt;/h3&gt;
&lt;h4 id=&#34;gzipgunzip-压缩&#34;&gt;gzip/gunzip 压缩&lt;/h4&gt;
&lt;p&gt;（1）只能压缩文件不能压缩目录&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
