[TOC]
# 1. 虚拟机准备
需要至少3台虚拟机。
我已安装了一台centos7的虚拟机,并且这台虚拟机也已经安装了jdk和hadoop环境,下面通过复制这台虚拟机来创建另外三个虚拟机。
```java
如果你没有一台准备了jdk和hadoop环境的虚拟机,可以按照
【hadoop -> hadoop安装】一节来准备一台虚拟机。
```
**一:创建三台新的虚拟机**
1. 找到我们原先虚拟机文件的安装目录,拷贝3份文件夹并重命名
![](https://img.kancloud.cn/8d/18/8d1860366c34f35054c873bca863759e_1250x87.png)
2. 在VMware软件打开虚拟机
![](https://img.kancloud.cn/48/22/48225bab9b995c46b7df908c1c495604_1424x684.png)
3. 重命名三台虚拟机
![](https://img.kancloud.cn/fe/4d/fe4dd29c3c91e878e7d09db0e25f5308_1178x476.png)
4. 给新的虚拟机新生成一个MAC地址(以Centos7_102为例,剩余的两台也是同样的步骤进行配置)
![](https://img.kancloud.cn/e0/74/e0740f57c12d217ea3aafe41c69f6dd8_1092x819.png)
5. 开启虚拟机
![](https://img.kancloud.cn/9e/9b/9e9b36d925720d42c76886cbb703e6f2_1220x350.png)
输入账号和密码登录,与原虚拟机一致
![](https://img.kancloud.cn/dc/c9/dcc93d3b297ca67ce5829599594eb8ed_1073x327.png)
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 ,显示如下
![](https://img.kancloud.cn/0f/16/0f16dc5d34f5ebe2beae4c5e50753e85_1132x299.png)<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#/ ,显示如下
![](https://img.kancloud.cn/32/cc/32cc304228ace46b6fcd51b986c35082_1536x523.png)
<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。
![](https://img.kancloud.cn/3c/37/3c3710e34fea2beb02fc5a9191f555a1_933x43.png)
2. 在VMware软件中打开该虚拟机并重名为Centos_105
![](https://img.kancloud.cn/d1/4b/d14b9a089b626466dec75e961146c680_1409x693.png)
![](https://img.kancloud.cn/b0/e0/b0e05c58ca7d7285636852cfd0570866_1146x305.png)
3. 生成新的MAC地址
![](https://img.kancloud.cn/e0/74/e0740f57c12d217ea3aafe41c69f6dd8_1092x819.png)
4. 开启虚拟机
要将原来的hadoop102关闭掉然后才能开启。
![](https://img.kancloud.cn/9e/9b/9e9b36d925720d42c76886cbb703e6f2_1220x350.png)
输入账号和密码登录,与原虚拟机一致
![](https://img.kancloud.cn/dc/c9/dcc93d3b297ca67ce5829599594eb8ed_1073x327.png)
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工具