[TOC]
# 1. 虛擬機準備
需要至少3臺虛擬機。
我已安裝了一臺centos7的虛擬機,并且這臺虛擬機也已經安裝了jdk和hadoop環境,下面通過復制這臺虛擬機來創建另外三個虛擬機。
```java
如果你沒有一臺準備了jdk和hadoop環境的虛擬機,可以按照
【hadoop -> hadoop安裝】一節來準備一臺虛擬機。
```
**一:創建三臺新的虛擬機**
1. 找到我們原先虛擬機文件的安裝目錄,拷貝3份文件夾并重命名

2. 在VMware軟件打開虛擬機

3. 重命名三臺虛擬機

4. 給新的虛擬機新生成一個MAC地址(以Centos7_102為例,剩余的兩臺也是同樣的步驟進行配置)

5. 開啟虛擬機

輸入賬號和密碼登錄,與原虛擬機一致

6. 修改網卡
```xml
-- 修改/etc/sysconfig/network-scripts/ifcfg-eno16777736 配置文件
# 修改為上面剛生成的MAC地址
HWADDR="00:50:56:20:74:F0"
# 更改為一個新的ip地址,我給139
IPADDR="192.168.64.139"
-- 重啟網絡
# systemctl restart network
-- 查看ip是否已經發生變化,我的由原來的138變成了139,修改成功
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:20:74:f0 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.146/24 brd 192.168.64.255 scope global dynamic eno16777736
valid_lft 1442sec preferred_lft 1442sec
inet 192.168.64.139/24 brd 192.168.64.255 scope global secondary eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe20:74f0/64 scope link
valid_lft forever preferred_lft forever
```
將剩余的兩臺也重新生成一個MAC地址,分別修改ip為192.168.64.140、192.168.64.141。<br/>
**二:配置上面創建的三臺虛擬機**
給三臺虛擬機分配的主機名分別為hadoop102、hadoop103、hadoop104。
下面以Centos7_102的配置為例,剩余的兩臺也按照如下步驟更改。
1. 修改主機和進行端口映射
```xml
-- 在 /etc/hostname 配置文件中更改主機名
hadoop102
-- 在每臺虛擬機的 /etc/hosts/ 將三臺虛擬機的端口映射
192.168.64.139 hadoop102
192.168.64.140 hadoop103
192.168.64.141 hadoop104
-- 重啟虛擬機
# reboot
```
<br/>
# 2. SSH無密碼登錄配置
注意:下面的配置有些虛擬機要配置,而有些不需要。
1. 生成公鑰和私鑰(三臺設備均需要執行)
```xml
# cd /root/.ssh
# ssh-keygen -t rsa
-- 接著輸入3個回車
# ls
--生成如下三個文件
id_rsa(私鑰) id_rsa.pub(公鑰) known_hosts(記錄ssh訪問過計算機的公鑰)
```
2. 合并公鑰(僅需在其中一臺虛擬機操作即可,我在hadoop102進行操作)
```xml
# cd /root/.ssh
# ssh root@hadoop102 cat ~/.ssh/id_rsa.pub > authorized_keys
# ssh root@hadoop103 cat ~/.ssh/id_rsa.pub >> authorized_keys
# ssh root@hadoop104 cat ~/.ssh/id_rsa.pub >> authorized_keys
```
3. 把hadoop102 服務器的 authorized_keys、known_hosts 復制到 hadoop103、hadoop104服務器的 /root/.ssh 目錄
```xml
-- 在hadoop102執行下面的命令,然后在hadoop103和hadoop104服務器就有一個authorized_keys文件
# scp authorized_keys root@hadoop103:/root/.ssh/
# scp authorized_keys root@hadoop104:/root/.ssh/
# scp known_hosts root@hadoop103:/root/.ssh/
# scp known_hosts root@hadoop104:/root/.ssh/
```
4. 測試
完成上面的配置后,三臺虛擬機可以相互訪問,并且不輸入任何密碼。
```xml
# ssh hadoop102
# ssh hadoop103
# ssh hadoop104
```
<br/>
# 3. 單節點安裝及資源分發
進行資源分發,只需要在其中一臺虛擬機上操作即可,我選hadoop102。
```xml
-- /opt/install/hadoop/是安裝hadoop的目錄
# scp -r /opt/install/hadoop/ root@hadoop103:/opt/install
# scp -r /opt/install/hadoop/ root@hadoop104:/opt/install
```
<br/>
# 4. 集群配置
集群部署規劃如下表
| | hadoop102 | hadoop103 | hadoop104 |
| --- | --- | --- | --- |
| HDFS | NameNode<br/>DataNode | DataNode | SecondaryNameNode<br/>DataNode |
| YARN | NodeManager | ResourceManager<br/>NodeManager | NodeManager |
先在hadoop102上進行配置,然后分發到hadoop103和hadoop104機器上。
**一:HDFS的配置**
1. 在 {hadoop_home}/etc/hadoop/core-site.xml 指定NameNode地址。
```xml
<!-- 指定HDFS中NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/install/hadoop/data/tmp</value>
</property>
```
2. 在 {hadoop_home}/etc/hadoop/hadoop-env.sh 中找到jdk安裝目錄
```xml
# The java implementation to use.
export JAVA_HOME=/usr/local/software/jdk1.8.0_171
```
3. 在 {hadoop_home}/etc/hadoop/hdfs-site.xml 中指定副本數量和副本主服務器
```xml
<!--因為配置了3臺虛擬機,所以 指定HDFS副本的數量為3,默認就是3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定副本主服務器為hadoop104 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
```
**二:yarn的配置**
1. 在 {hadoop_home}/etc/hadoop/yarn-env.sh 中指定jdk環境。
```xml
# some Java parameters
export JAVA_HOME=/usr/local/software/jdk1.8.0_171/
```
2. 在 {hadoop_home}/etc/hadoop/yarn-site.xml 指定ResourceManager的地址。
```xml
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
```
**三:mapreduce的配置**
1. 在 {hadoop_home}/etc/hadoop/mapred-env.sh 中指定jdk環境。
```xml
export JAVA_HOME=/usr/local/software/jdk1.8.0_171/
```
2. 在 {hadoop_home}/etc/hadoop/mapred-site.xml 中指定mapreduce運行在yarn上。
```xml
<!-- 指定MapReduce運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
```
**四:在hadoop102上將上面的配置分發到hadoop103、hadoop104**
```xml
# scp -r /opt/install/hadoop/etc/hadoop/* root@hadoop103:/opt/install/hadoop/etc/hadoop/
# scp -r /opt/install/hadoop/etc/hadoop/* root@hadoop104:/opt/install/hadoop/etc/hadoop/
```
<br/>
# 5. 集群測試
**一:啟動集群**
1. 在 {hadoop_home}/etc/hadoop/slaves 文件中配置slave(在hadoop102操作)
```xml
# 將localhost刪除
hadoop102
hadoop103
hadoop104
```
2. 啟動HDFS集群(在hadoop102操作)
```xml
-- 回到hadoop102中hadoop的安裝目錄下執行下面命令
-- 首次啟動集群需要格式化,后面如果再格式化可能會導致無法啟動
# bin/hdfs namenode -format
-- 啟動集群
# sbin/start-dfs.sh
```
3. 在三個虛擬機上查看啟動情況
```xml
-- 查看啟動情況,到hadoop安裝目錄下執行
[root@hadoop102 hadoop]# jps
4166 NameNode
4482 Jps
4263 DataNode
[root@hadoop103 hadoop]# jps
3218 DataNode
3288 Jps
[root@hadoop104 hadoop]# jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
```
4. 啟動yarn
在配置ResourceManager的機器上啟動yarn,我的是在hadoop103。
```xml
# sbin/start-yarn.sh
```
5. web端查看SecondaryNameNode
瀏覽器訪問:http://hadoop104:50090/status.html ,顯示如下
<br/>
**二:測試**
```xml
-- 在hdfs文件系統上創建一個input目錄
# bin/hdfs dfs -mkdir -p /user/hadoop/input
-- 將測試文件內容上傳到文件系統上
# bin/hdfs dfs -put wcinput/wc.input /user/hadoop/input/
```
瀏覽器訪問HDFS系統 http://hadoop102:50070/explorer.html#/ ,顯示如下

<br/>
# 6. 集群時間同步
時間同步的方式:找一個機器,作為時間服務器,所有的機器與這臺集群時間進行定時的同步,比如,每隔十分鐘,同步一次時間。
我選擇hadoop102作為時間服務器,讓hadoop103與hadoop104每10min自動與時間服務器hadoop102同步一次。
下面是hadoop103的配置,hadoop104也需要進行相同配置。
```xml
# crontab -e
-- 添加如下腳本
*/10 * * * * /usr/sbin/ntpdate hadoop102
-- 為了看到效果,我將hadoop103機器的時間改為2017-9-11 11:11:11
-- 當前時間為2020-12-1 18:30:30
# date -s "2017-9-11 11:11:11"
-- 10min后查看時間是否同步了
# date
```
<br/>
# 7. 添加新數據節點
隨著數據量越來越大,原有的數據節點的容量不能滿足存儲數據的需求的情況下,需要在原有集群基礎上動態添加新的數據節點。
**一:虛擬機配置**
1. 基于hadoop102虛擬機克隆一臺新的虛擬機
克隆hadoop102是因為在上面的配置中,將hadoop102作為NameNode節點配置了。
復制hadoop102的安裝目錄,重命名為Centos7105。

2. 在VMware軟件中打開該虛擬機并重名為Centos_105


3. 生成新的MAC地址

4. 開啟虛擬機
要將原來的hadoop102關閉掉然后才能開啟。

輸入賬號和密碼登錄,與原虛擬機一致

5. 修改網卡
```xml
-- 修改/etc/sysconfig/network-scripts/ifcfg-eno16777736 配置文件
# 修改為上面剛生成的MAC地址
HWADDR="00:50:56:3D:63:9A"
# 更改為一個新的ip地址,我給142
IPADDR="192.168.64.142"
-- 重啟網絡
# systemctl restart network
-- 查看ip是否已經發生變化,我的由原來的139變成了142,修改成功
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:20:74:f0 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.146/24 brd 192.168.64.255 scope global dynamic eno16777736
valid_lft 1442sec preferred_lft 1442sec
inet 192.168.64.142/24 brd 192.168.64.255 scope global secondary eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe20:74f0/64 scope link
valid_lft forever preferred_lft forever
```
6. 在 /etc/hostname 修改主機名為hadoop105
```xml
hadoop105
```
7. 在每臺機器上的 /etc/hosts 中添加相關機器的端口映射
在hadoop102、hadoop103、hadoop104、hadoop105都添加如下端口映射。
```xml
192.168.64.139 hadoop102
192.168.64.140 hadoop103
192.168.64.141 hadoop104
192.168.64.142 hadoop105
-- 添加完成后重啟每臺虛擬機
# reboot
```
8. 給hadoop105配置ssh無密碼登錄
```xml
# cd /root/.ssh
-- 1. 生成公鑰和私鑰
# ssh-keygen -t rsa
-- 接著輸入3個回車
# ls
-- 2. 生成如下三個文件
id_rsa(私鑰) id_rsa.pub(公鑰) known_hosts(記錄ssh訪問過計算機的公鑰)
-- 3. 合并公鑰(需要將所有的虛擬機開啟)
# ssh root@hadoop105 cat ~/.ssh/id_rsa.pub > authorized_keys
# ssh root@hadoop104 cat ~/.ssh/id_rsa.pub > authorized_keys
# ssh root@hadoop103 cat ~/.ssh/id_rsa.pub > authorized_keys
# ssh root@hadoop102 cat ~/.ssh/id_rsa.pub > authorized_keys
-- 4. 把hadoop105 的 authorized_keys、known_hosts 復制到hadoop102、
-- hadoop103、hadoop104的 /root/.ssh 目錄
# scp authorized_keys root@hadoop102:/root/.ssh/
# scp authorized_keys root@hadoop103:/root/.ssh/
# scp authorized_keys root@hadoop104:/root/.ssh/
# scp known_hosts root@hadoop102:/root/.ssh/
# scp known_hosts root@hadoop103:/root/.ssh/
# scp known_hosts root@hadoop104:/root/.ssh/
-- 5. 測試,完成上面的配置后,四臺虛擬機可以相互訪問
# ssh hadoop102
# ssh hadoop103
# ssh hadoop104
# ssh hadoop105
```
9. 刪除hadoop105上殘留的HDFS文件
```xml
-- 我將HDFS運行時生成的文件放在data目錄下
# rm -rf /opt/install/hadoop/data
```
**二:添加新節點**
下面沒有特別說明,都是在hadoop105機器上操作。
我的hadoop安裝目錄在 /opt/install/hadoop 目錄,所以所有已有的配置文件都在 /opt/install/hadoop/etc/hadoop/ 目錄下
1. 創建 /opt/install/hadoop/etc/hadoop/dfs.hosts 文件并添加所有主機名
```xml
# touch /opt/install/hadoop/etc/hadoop/dfs.hosts
-- 在新建的dfs.hosts文件中添加所有主機名
hadoop102
hadoop103
hadoop104
hadoop105
```
2. 在 hdfs-site.xml 文件添加dfs.hosts屬性
```xml
<property>
<name>dfs.hosts</name>
<value>/opt/install/hadoop/etc/hadoop/dfs.hosts</value>
</property>
```
3. 切換到hadoop102刷新節點
```xml
-- 切換到hadoop102的hadoop安裝目錄
# cd /opt/install/hadoop
-- 刷新namenode節點
# hdfs dfsadmin -refreshNodes
-- 更新resourcemanager節點
# yarn rmadmin -refreshNodes
```
4. 在hadoop002的 /opt/install/hadoop/etc/hadoop/slaves 文件中新增hadoop105節點
```xml
hadoop102
hadoop103
hadoop104
hadoop105
```
5. 切換到hadoop105進行測試
```xml
-- 切換到hadoop安裝目錄
# cd /opt/install/hadoop
-- 啟動hadoop105的datanode節點
# sbin/hadoop-daemon.sh start datanode
-- 啟動hadoop105的nodemanager節點
# sbin/yarn-daemon.sh start nodemanager
```
瀏覽器訪問:
6. 切換到hadoop102執行面命令實現數據均衡
```xml
-- 切換到hadoop安裝目錄
# cd /opt/install/hadoop
# sbin/start-balancer.sh
```
- Hadoop
- hadoop是什么?
- Hadoop組成
- hadoop官網
- hadoop安裝
- hadoop配置
- 本地運行模式配置
- 偽分布運行模式配置
- 完全分布運行模式配置
- HDFS分布式文件系統
- HDFS架構
- HDFS設計思想
- HDFS組成架構
- HDFS文件塊大小
- HDFS優缺點
- HDFS Shell操作
- HDFS JavaAPI
- 基本使用
- HDFS的I/O 流操作
- 在SpringBoot項目中的API
- HDFS讀寫流程
- HDFS寫流程
- HDFS讀流程
- NN和SNN關系
- NN和SNN工作機制
- Fsimage和 Edits解析
- checkpoint時間設置
- NameNode故障處理
- 集群安全模式
- DataNode工作機制
- 支持的文件格式
- MapReduce分布式計算模型
- MapReduce是什么?
- MapReduce設計思想
- MapReduce優缺點
- MapReduce基本使用
- MapReduce編程規范
- WordCount案例
- MapReduce任務進程
- Hadoop序列化對象
- 為什么要序列化
- 常用數據序列化類型
- 自定義序列化對象
- MapReduce框架原理
- MapReduce工作流程
- MapReduce核心類
- MapTask工作機制
- Shuffle機制
- Partition分區
- Combiner合并
- ReduceTask工作機制
- OutputFormat
- 使用MapReduce實現SQL Join操作
- Reduce join
- Reduce join 代碼實現
- Map join
- Map join 案例實操
- MapReduce 開發總結
- Hadoop 優化
- MapReduce 優化需要考慮的點
- MapReduce 優化方法
- 分布式資源調度框架 Yarn
- Yarn 基本架構
- ResourceManager(RM)
- NodeManager(NM)
- ApplicationMaster
- Container
- 作業提交全過程
- JobHistoryServer 使用
- 資源調度器
- 先進先出調度器(FIFO)
- 容量調度器(Capacity Scheduler)
- 公平調度器(Fair Scheduler)
- Yarn 常用命令
- Zookeeper
- zookeeper是什么?
- zookeeper完全分布式搭建
- Zookeeper特點
- Zookeeper數據結構
- Zookeeper 內部原理
- 選舉機制
- stat 信息中字段解釋
- 選擇機制中的概念
- 選舉消息內容
- 監聽器原理
- Hadoop 高可用集群搭建
- Zookeeper 應用
- Zookeeper Shell操作
- Zookeeper Java應用
- Hive
- Hive是什么?
- Hive的優缺點
- Hive架構
- Hive元數據存儲模式
- 內嵌模式
- 本地模式
- 遠程模式
- Hive環境搭建
- 偽分布式環境搭建
- Hive命令工具
- 命令行模式
- 交互模式
- Hive數據類型
- Hive數據結構
- 參數配置方式
- Hive數據庫
- 數據庫存儲位置
- 數據庫操作
- 表的創建
- 建表基本語法
- 內部表
- 外部表
- 臨時表
- 建表高階語句
- 表的刪除與修改
- 分區表
- 靜態分區
- 動態分區
- 分桶表
- 創建分桶表
- 分桶抽樣
- Hive視圖
- 視圖的創建
- 側視圖Lateral View
- Hive數據導入導出
- 導入數據
- 導出數據
- 查詢表數據量
- Hive事務
- 事務是什么?
- Hive事務的局限性和特點
- Hive事務的開啟和設置
- Hive PLSQL
- Hive高階查詢
- 查詢基本語法
- 基本查詢
- distinct去重
- where語句
- 列正則表達式
- 虛擬列
- CTE查詢
- 嵌套查詢
- join語句
- 內連接
- 左連接
- 右連接
- 全連接
- 多表連接
- 笛卡爾積
- left semi join
- group by分組
- having刷選
- union與union all
- 排序
- order by
- sort by
- distribute by
- cluster by
- 聚合運算
- 基本聚合
- 高級聚合
- 窗口函數
- 序列窗口函數
- 聚合窗口函數
- 分析窗口函數
- 窗口函數練習
- 窗口子句
- Hive函數
- Hive函數分類
- 字符串函數
- 類型轉換函數
- 數學函數
- 日期函數
- 集合函數
- 條件函數
- 聚合函數
- 表生成函數
- 自定義Hive函數
- 自定義函數分類
- 自定義Hive函數流程
- 添加JAR包的方式
- 自定義臨時函數
- 自定義永久函數
- Hive優化
- Hive性能調優工具
- EXPLAIN
- ANALYZE
- Fetch抓取
- 本地模式
- 表的優化
- 小表 join 大表
- 大表 join 大表
- 開啟Map Join
- group by
- count(distinct)
- 笛卡爾積
- 行列過濾
- 動態分區調整
- 分區分桶表
- 數據傾斜
- 數據傾斜原因
- 調整Map數
- 調整Reduce數
- 產生數據傾斜的場景
- 并行執行
- 嚴格模式
- JVM重用
- 推測執行
- 啟用CBO
- 啟動矢量化
- 使用Tez引擎
- 壓縮算法和文件格式
- 文件格式
- 壓縮算法
- Zeppelin
- Zeppelin是什么?
- Zeppelin安裝
- 配置Hive解釋器
- Hbase
- Hbase是什么?
- Hbase環境搭建
- Hbase分布式環境搭建
- Hbase偽分布式環境搭建
- Hbase架構
- Hbase架構組件
- Hbase數據存儲結構
- Hbase原理
- Hbase Shell
- 基本操作
- 表操作
- namespace
- Hbase Java Api
- Phoenix集成Hbase
- Phoenix是什么?
- 安裝Phoenix
- Phoenix數據類型
- Phoenix Shell
- HBase與Hive集成
- HBase與Hive的對比
- HBase與Hive集成使用
- Hbase與Hive集成原理
- HBase優化
- RowKey設計
- 內存優化
- 基礎優化
- Hbase管理
- 權限管理
- Region管理
- Region的自動拆分
- Region的預拆分
- 到底采用哪種拆分策略?
- Region的合并
- HFile的合并
- 為什么要有HFile的合并
- HFile合并方式
- Compaction執行時間
- Compaction相關控制參數
- 演示示例
- Sqoop
- Sqoop是什么?
- Sqoop環境搭建
- RDBMS導入到HDFS
- RDBMS導入到Hive
- RDBMS導入到Hbase
- HDFS導出到RDBMS
- 使用sqoop腳本
- Sqoop常用命令
- Hadoop數據模型
- TextFile
- SequenceFile
- Avro
- Parquet
- RC&ORC
- 文件存儲格式比較
- Spark
- Spark是什么?
- Spark優勢
- Spark與MapReduce比較
- Spark技術棧
- Spark安裝
- Spark Shell
- Spark架構
- Spark編程入口
- 編程入口API
- SparkContext
- SparkSession
- Spark的maven依賴
- Spark RDD編程
- Spark核心數據結構-RDD
- RDD 概念
- RDD 特性
- RDD編程
- RDD編程流程
- pom依賴
- 創建算子
- 轉換算子
- 動作算子
- 持久化算子
- RDD 與閉包
- csv/json數據源
- Spark分布式計算原理
- RDD依賴
- RDD轉換
- RDD依賴
- DAG工作原理
- Spark Shuffle原理
- Shuffle的作用
- ShuffleManager組件
- Shuffle實踐
- RDD持久化
- 緩存機制
- 檢查點
- 檢查點與緩存的區別
- RDD共享變量
- 廣播變量
- 累計器
- RDD分區設計
- 數據傾斜
- 數據傾斜的根本原因
- 定位導致的數據傾斜
- 常見數據傾斜解決方案
- Spark SQL
- SQL on Hadoop
- Spark SQL是什么
- Spark SQL特點
- Spark SQL架構
- Spark SQL運行原理
- Spark SQL編程
- Spark SQL編程入口
- 創建Dataset
- Dataset是什么
- SparkSession創建Dataset
- 樣例類創建Dataset
- 創建DataFrame
- DataFrame是什么
- 結構化數據文件創建DataFrame
- RDD創建DataFrame
- Hive表創建DataFrame
- JDBC創建DataFrame
- SparkSession創建
- RDD、DataFrame、Dataset
- 三者對比
- 三者相互轉換
- RDD轉換為DataFrame
- DataFrame轉換為RDD
- DataFrame API
- DataFrame API分類
- Action 操作
- 基礎 Dataset 函數
- 強類型轉換
- 弱類型轉換
- Spark SQL外部數據源
- Parquet文件
- Hive表
- RDBMS表
- JSON/CSV
- Spark SQL函數
- Spark SQL內置函數
- 自定SparkSQL函數
- Spark SQL CLI
- Spark SQL性能優化
- Spark GraphX圖形數據分析
- 為什么需要圖計算
- 圖的概念
- 圖的術語
- 圖的經典表示法
- Spark Graphix簡介
- Graphx核心抽象
- Graphx Scala API
- 核心組件
- 屬性圖應用示例1
- 屬性圖應用示例2
- 查看圖信息
- 圖的算子
- 連通分量
- PageRank算法
- Pregel分布式計算框架
- Flume日志收集
- Flume是什么?
- Flume官方文檔
- Flume架構
- Flume安裝
- Flume使用過程
- Flume組件
- Flume工作流程
- Flume事務
- Source、Channel、Sink文檔
- Source文檔
- Channel文檔
- Sink文檔
- Flume攔截器
- Flume攔截器概念
- 配置攔截器
- 自定義攔截器
- Flume可靠性保證
- 故障轉移
- 負載均衡
- 多層代理
- 多路復用
- Kafka
- 消息中間件MQ
- Kafka是什么?
- Kafka安裝
- Kafka本地單機部署
- Kafka基本命令使用
- Topic的生產與消費
- 基本命令
- 查看kafka目錄
- Kafka架構
- Kafka Topic
- Kafka Producer
- Kafka Consumer
- Kafka Partition
- Kafka Message
- Kafka Broker
- 存儲策略
- ZooKeeper在Kafka中的作用
- 副本同步
- 容災
- 高吞吐
- Leader均衡機制
- Kafka Scala API
- Producer API
- Consumer API
- Kafka優化
- 消費者參數優化
- 生產者參數優化
- Spark Streaming
- 什么是流?
- 批處理和流處理
- Spark Streaming簡介
- 流數據處理架構
- 內部工作流程
- StreamingContext組件
- SparkStreaming的編程入口
- WordCount案例
- DStream
- DStream是什么?
- Input DStream與Receivers接收器
- DStream API
- 轉換操作
- 輸出操作
- 數據源
- 數據源分類
- Socket數據源
- 統計HDFS文件的詞頻
- 處理狀態數據
- SparkStreaming整合SparkSQL
- SparkStreaming整合Flume
- SparkStreaming整合Kafka
- 自定義數據源
- Spark Streaming優化策略
- 優化運行時間
- 優化內存使用
- 數據倉庫
- 數據倉庫是什么?
- 數據倉庫的意義
- 數據倉庫和數據庫的區別
- OLTP和OLAP的區別
- OLTP的特點
- OLAP的特點
- OLTP與OLAP對比
- 數據倉庫架構
- Inmon架構
- Kimball架構
- 混合型架構
- 數據倉庫的解決方案
- 數據ETL
- 數據倉庫建模流程
- 維度模型
- 星型模式
- 雪花模型
- 星座模型
- 數據ETL處理
- 數倉分層術語
- 數據抽取方式
- CDC抽取方案
- 數據轉換
- 常見的ETL工具