先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
正文
- 要为所有节点配置环境, 例如关闭防火墙之类的
- 要在所有节点中安装 Hadoop, Hive, HBase, Spark 等
二 : 想要部署 CDH 集群, 其实也并不容易, 因为 CM 是主从结构的, 分为如下两个部分
- Cloudera Manager Server, 简称 SCM
- Cloudera Manager Agents, 简称 SCM Agents
所以, 我们需要做如下这件事
- 要为所有节点配置环境, 例如关闭防火墙之类的
- 要为所有节点安装 Agents
- 要在主节点安装 SCM
- 访问 SCM 部署 CDH 集群
三 : 想要部署 HDP 的集群, 理论上比 CM 更难一些
- 要为所有节点配置环境, 例如关闭防火墙之类的
- 要为所有节点安装 Ambari Agents
- 要在主节点安装 Ambari Server
- 访问 Ambari Server 建立集群
四 : 大家有没有发现, 这三种部署方式都有一个事情要做
- 在所有节点执行 xxx 命令
想象一下, 4000 个节点, 你准备怎么处理?
- 使用自动化运维工具, 自动的在所有节点执行相同的操作
例如, 在 4000 个节点中执行同样的 Shell 脚本, 无论怎么做, 其实都挺折腾的, 不是吗?
五 : 那为什么我们不能直接使用 Apache 版本的工具, 使用 Shell 脚本去安装呢?
- 集群部署出来以后, 可能会出错, 如何运维
- 集群部署出来以后, 可能配置文件要修改, 难道再在所有节点修改一遍吗?
- 集群部署出来以后, 我不知道它出错没, 需要监控
而上述这些功能, Ambari 和 SCM 都提供了, 所以我们当时的生产环境中, 运行的是 Cloudera Manager
3. 自动创建虚拟机
- 目标
- 能够通过自动化的方式创建虚拟机
- 步骤
- 什么是 Vagrant
- 安装 Vagrant 和概念介绍
- 使用 Vagrant 构建一个虚拟机集群
3.1. 什么是 Vagrant
从现在就开始要搭建一个测试集群了, 回顾前面的课程, 先来说说虚拟机的痛点
- 安装麻烦
- 建立虚拟机的时候, 我的网段好像写错了, 和别人的 IP 不一样, 总是操作失误
- 虚拟机弄好以后, 还需要安装操作系统, 步骤那么多, 怎么可能不出错呢, 老师你肯定没讲清楚
- WC, 虚拟机终于装好了!! 什么? 还需要安装 Hadoop, 几十个步骤!!!
- 工程和环境分离
- 唉, 又要学习新项目了, 又要折腾环境, 算了, 请一天假放松放松
- 分发困难
- 为啥老师发给我的虚拟机我运行不起来? 这是为什么!!!
- 可能因为你和老师的环境不同. 什么!? 又是环境不同!!!
卒😩
为了解决这些问题, 本项目中为大家引入 Vagrant
- Vagrant 可以通过一个脚本配置虚拟机的参数
- Vagrant 可以帮助我们自动创建一个虚拟机
- Vagrant 可以帮助我们自动安装操作系统
- Vagrant 可以帮助我们配置网络
- Vagrant 可以帮助我们把文件拷贝到创建好的虚拟机上
- Vagrant 可以在创建虚拟机后, 执行我们制定的自动化脚本, 安装服务
- 我们可以使用 Vagrant 的命令登录到虚拟机中
- 我们可以使用 Vagrant 的命令开启或者关闭虚拟机
大家想一下, 如果我们可以通过 Vagrant, 使用一个配置文件来创建虚拟机, 是不是就能做到如下事情
- 创建一个项目, 顺手写一个脚本, 需要运行项目的时候, 让同事执行脚本即可
- 虚拟机中的程序版本变化了, 修改一下脚本, 同事重新运行一下脚本即可同步环境变动
- 再也不用担心虚拟机关闭以后再也打不开, 重新运行一下就好, 也就一分钟
所以, 不仅仅是为了让大家学习, 很多企业中也使用 Vagrant 构建测试环境, 保证每个人的环境一致
3.2. 安装 Vagrant 和概念介绍
安装步骤如下
- 下载 VirtualBox, 因为 VMWare 是收费的, Vagrant 不允许我们使用破解版, 有版权问题
- 安装 VirtualBox
- 下载 Vagrant, 地址是
https://releases.hashicorp.com/vagrant/2.2.7/vagrant_2.2.7_x86_64.msi
- 安装 Vagrant
- 考虑到大家网络比较慢, 已经将下载过的 Vagrant 相关的安装包放在了
Files/Setup
中
Vagrant 中的概念
作用: 帮助我们管理虚拟机, 自动化的创建虚拟机, 自动化的初始化虚拟机, 提供了命令帮助我们管理虚拟机
- Vagrantfile, 这个文件是虚拟机的配置文件
vagrant up
, 使用这个命令, 即可创建一个符合 Vagrantfile 配置的虚拟机- Provision, 当 Vagrant 建立虚拟机后, 会执行通过 Provision 配置的自动化脚本, 自动化的安装服务
Vagrant 初体验, 创建一个虚拟机
步骤
-
编写脚本, 配置虚拟机
- 定义 Vagrant 配置
- 新增一台虚拟机的配置
- 配置虚拟机所使用的操作系统
- 配置网络
- 配置虚拟机的硬件配置
-
执行命令创建虚拟机
-
登入虚拟机, 查看同步的目录
-
编写脚本
Vagrant.configure("2") do |config|
config.vm.define "edge" do |config|
config.vm.box = 'centos/7'
config.disksize.size = '50GB'
config.vm.network 'private\_network', ip: '192.168.56.101'
config.vm.hostname = 'edge'
config.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'edge'
vb.memory = 2048
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
end
- 在脚本所在目录执行命令
# 因为用到了修改磁盘大小的插件, 需要安装
vagrant plugin install vagrant-disksize
# 建立虚拟机
vagrant up
- 登入虚拟机, 查看同步的目录
# 登录
vagrant ssh edge
# 查看同步的目录
cd /vagrant
Vagrant 还有一个很强大的功能, 就是在创建虚拟机完毕时, 执行初始化任务
- 关闭已经创建的虚拟机
vagrant destroy
- 编写脚本
Vagrant.configure("2") do |config|
config.vm.define "edge" do |config|
config.vm.box = 'centos/7'
config.disksize.size = '50GB'
config.vm.network 'private\_network', ip: '192.168.56.101'
config.vm.hostname = 'edge'
config.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'edge'
vb.memory = 2048
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
config.vm.provision "shell", path: "script.sh"
end
end
- 编写 Shell 脚本
echo "Hello everyone"
- 运行查看
vagrant up
目前, 除了 Shell 的 Provision, Vagrant 还支持 Ansible, Chef, Docker, Puppet 等
3.3. 使用 Vagrant 构建一个虚拟机集群
接下来, 要使用 Vagrant 构建一个集群了, 在开始之前, 根据我们的情况, 要规划一下集群
主机名 | 角色 | 配置 |
---|---|---|
master01 | Master | 1 cores, 16G -> 6G, 32G -> 8G |
workder 01 - 02 | Worker | 1 cores, 16G -> 4G, 32G -> 5G |
- 如果只有 8G 内存, 建议去下载 Cloudera quick start vm
- Cloudera CDH 的每一个服务的内存配置, 是按照比例来的
然后, 进行集群搭建
- 编写脚本
Vagrant.configure("2") do |config|
config.vm.define "master01" do |master01|
master01.vm.box = 'centos/7'
master01.disksize.size = '50GB'
master01.vm.network 'private\_network', ip: '192.168.56.101'
master01.vm.hostname = 'master01'
master01.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'master01'
vb.memory = 6000
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "worker01" do |worker01|
worker01.vm.box = 'centos/7'
worker01.disksize.size = '50GB'
worker01.vm.network 'private\_network', ip: '192.168.56.102'
worker01.vm.hostname = 'worker01'
worker01.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'worker01'
vb.memory = 2048
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "worker02" do |worker02|
worker02.vm.box = 'centos/7'
worker02.disksize.size = '50GB'
worker02.vm.network 'private\_network', ip: '192.168.56.103'
worker02.vm.hostname = 'worker02'
worker02.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'worker02'
vb.memory = 2048
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "edge" do |edge|
edge.vm.box = 'centos/7'
edge.disksize.size = '50GB'
edge.vm.network 'private\_network', ip: '192.168.56.104'
edge.vm.hostname = 'edge'
edge.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'edge'
vb.memory = 1024
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
end
- 运行集群
vagrant up
这个时候, 我们已经建立起来了测试集群, 但是有一个问题, 似乎无法在外部登录
- 使用 MobaXterm 使用 SSH 登录虚拟机
- 发现无法登录
原因是, Vagrant 自动创建出来的虚拟机是关闭了 SSH 登录功能的, 只能使用 vagrant ssh
登录, 这是为了保障安全性, 但是测试集群的话, 其实我们还是需要它方便, 解决办法也很简单, 修改 SSH 配置, 再打包一下系统, 让 Vagrant 下次创建的时候使用我们修改过的系统
- 修改 SSH 登录
# 修改文件 /etc/ssh/sshd\_config
PasswordAuthentication no
- 打包
vagrant package
- 脚本中使用
Vagrant.configure("2") do |config|
config.ssh.password = "vagrant" # 此处使用密码登录
config.vm.define "master01" do |master01|
master01.vm.box = './pkgs/package.box' # 此处引用打包好的 box
master01.disksize.size = '50GB'
master01.vm.network 'private\_network', ip: '192.168.56.101'
master01.vm.hostname = 'master01'
master01.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'master01'
vb.memory = 6000
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "worker01" do |worker01|
worker01.vm.box = './pkgs/package.box'
worker01.disksize.size = '50GB'
worker01.vm.network 'private\_network', ip: '192.168.56.102'
worker01.vm.hostname = 'worker01'
worker01.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'worker01'
vb.memory = 2048
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "worker02" do |worker02|
worker02.vm.box = './pkgs/package.box'
worker02.disksize.size = '50GB'
worker02.vm.network 'private\_network', ip: '192.168.56.103'
worker02.vm.hostname = 'worker02'
worker02.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'worker02'
vb.memory = 2048
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "edge" do |edge|
edge.vm.box = './pkgs/package.box'
edge.disksize.size = '50GB'
edge.vm.network 'private\_network', ip: '192.168.56.104'
edge.vm.hostname = 'edge'
edge.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'edge'
vb.memory = 1024
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
edge.vm.provision "shell" do |s|
s.path = "install\_ansible.sh"
s.privileged = true
end
end
end
下面再次查看, 即可使用 MobaXterm 登录虚拟机
4. 自动化部署服务 (了解, 运维领域)
- 目标
- 能够通过自动化脚本安装 CM 服务
- 步骤
- 痛点和 Ansible
- 使用 Vagrant 整合 Ansible
- 离线安装 Ansible
4.1. 痛点和 Ansible
好了, 我们现在要开始安装 CM 服务了, 大概有如下步骤
-
配置好每一台机器的系统环境
- 修改主机名
- 关闭防火墙
- 关闭 SELinux
- 安装 JDK
- 安装 MySQL
- … 一上午过去了
-
在每一台机器上安装 SCM Agents
- Master 01 上下载 Agents
- Worker 01上下载 Agents
- Worker 02 上下载 Angents
- 配置 Master 01
- 配置 Worker 01
- 配置 Worker 02
- 启动 Maser 01 的 Agents
- … 一小时又过去了, 逐渐恼怒 😡
-
在 Master 01 上安装 SCM
- 创建 Linux 用户, hadoop, hive, yarn, hdfs, oozie 等所有服务都要有一个系统用户
- 创建 MySQL 用户, 大概六七个
- 安装 SCM
- 启动
- 报错
- … 一下午过去了, 老子不学习! 😡😡
-
安装 CDH …
好了, 这些痛点我们都懂, 于是引入 Ansible, Ansible 非常重要, 几乎是运维领域的银弹, 但是如果大家不打算在运维领域发展, 了解即可, Ansible 可以帮助我们做如下事情
- 上述所有步骤, Ansible 可以帮助我们以配置的形式编写
- Ansible 可以帮助我们在多台机器上执行配置文件表示的过程
Ansible 有如下概念
名称 | 解释 |
---|---|
Playbook | 剧本, 是 Ansible 中的总控, 根配置文件比如说这次运行 Ansible 的最终任务是搭建好一个 CM 集群, 那我们应该就有一个 Playbook 叫做 cm_playbook.yml |
Roles | Ansible 任务中的角色例如为了完成 CM 集群的搭建, 可能要配置操作系统, 那应该就把配置操作系统所需要执行的所有配置都放在一个叫做 system_common 的 Roles 中 |
Inventory | Ansible 中的服务器地址配置Ansible 需要在多个主机中执行任务, Inventory 的作用就是告诉 Ansible 主机的地址等信息 |
首先来看看 PlayBook
- name: Create hosts file in locally
hosts: 192.168.56.101
any\_errors\_fatal: True
become: yes
roles:
- hosts
- name: Set yum locally
hosts: cdh_cluster
any\_errors\_fatal: True
become: yes
roles:
- yum_locally
- 在
192.168.56.101
中配置 hosts 文件 - 在
cdh_cluster
所对应的机器中配置本地 Yum 仓库 cdh_cluster
是一个分组, 这个分组在Inventory
中配置hosts
和yum_locally
就是角色
然后再来看看 Roles yum_locally
- name: Set yum repo locally
yum\_repository:
name: itcast-locally
description: Local yum repo
baseurl: http://master01/
failovermethod: priority
file: itcast
priority: 1
gpgcheck: no
enabled: yes
- name: Clean yum meata
command: yum clean all
- 第一个任务是通过 Ansible 提供的 Yum repository 插件, 配置本地 Yum 仓库
- 第二个任务是执行一个命令
yum clean all
清理 Yum 缓存
4.2. 使用 Vagrant 整合 Ansible
Ansible 是一个非常知名的自动化运维工具, 不仅仅只是为了搭建测试环境, 在测试环境和正式环境中, 其应用都很广泛, 先来看看在正式环境中该如何使用 Ansible
- 在 13 台机器中, 选择一台作为主控
- 在主控机器中放入 Ansible 脚本
- 执行命令运行 Ansible, Ansible 会在 Playbook 中标示的机器上运行
ansible-playbook --inventory-file=/vagrant/inventory -v /vagrant/playbooks/cdh_cm.yml
明白了如何在正式环境使用 Ansible 以后, 使用 Vagrant 搭建测试环境的时候也可以使用 Ansible 脚本, Vagrant 提供了对应的 Provision
- 编写 Ansible playbook, 文件名为
testing.yml
- hosts: worker_servers
tasks:
debug:
msg: "Hello from {{ inventory\_hostname }}"
- 编写 Inventory, 文件名为
inventory
[master_servers]
master01 ansible_host=192.168.56.101 ansible_user=vagrant ansible_ssh_pass=vagrant
[worker_servers]
worker01 ansible_host=192.168.56.102 ansible_user=vagrant ansible_ssh_pass=vagrant
worker02 ansible_host=192.168.56.103 ansible_user=vagrant ansible_ssh_pass=vagrant
- 编写 Vagrantfile
Vagrant.configure("2") do |config|
config.ssh.password = "vagrant"
config.vm.define "master01" do |master01|
master01.vm.box = './pkgs/package.box'
master01.disksize.size = '50GB'
master01.vm.network 'private\_network', ip: '192.168.56.101'
master01.vm.hostname = 'master01'
master01.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'master01'
vb.memory = 6000
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "worker01" do |worker01|
worker01.vm.box = './pkgs/package.box'
worker01.disksize.size = '50GB'
worker01.vm.network 'private\_network', ip: '192.168.56.102'
worker01.vm.hostname = 'worker01'
worker01.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'worker01'
vb.memory = 2048
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "worker02" do |worker02|
worker02.vm.box = './pkgs/package.box'
worker02.disksize.size = '50GB'
worker02.vm.network 'private\_network', ip: '192.168.56.103'
worker02.vm.hostname = 'worker02'
worker02.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'worker02'
vb.memory = 2048
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
config.vm.define "edge" do |edge|
edge.vm.box = './pkgs/package.box'
edge.disksize.size = '50GB'
edge.vm.network 'private\_network', ip: '192.168.56.104'
edge.vm.hostname = 'edge'
edge.vm.provider 'virtualbox' do |vb|
vb.gui = false
vb.name = 'edge'
vb.memory = 1024
vb.cpus = 1
vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
machine.vm.provision :ansible\_local do |ansible|
ansible.playbook = "testing.yml"
ansible.verbose = true
ansible.install = true
ansible.limit = "all" # or only "nodes" group, etc.
ansible.inventory_path = "inventory"
end
end
end
- 运行查看结果
当然, 我们也可以使用 Roles 来封装一下这个任务
- 创建
roles/hello/tasks
目录 - 编写 Roles
- name: Hello
debug:
msg: "Hello from {{ inventory\_hostname }}"
- 修改 Playbook
- hosts: worker_servers
roles:
- hello
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
.verbose = true
ansible.install = true
ansible.limit = “all” # or only “nodes” group, etc.
ansible.inventory_path = “inventory”
end
end
end
4. 运行查看结果
当然, 我们也可以使用 Roles 来封装一下这个任务
1. 创建 `roles/hello/tasks` 目录
2. 编写 Roles
- name: Hello
debug:
msg: “Hello from {{ inventory_hostname }}”
3. 修改 Playbook
- hosts: worker_servers
roles:- hello
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
[外链图片转存中...(img-QI6m64yE-1713419871656)]
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**