社交用户画像之集群搭建【二】_社交类用户画像建设实例

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

  • 要为所有节点配置环境, 例如关闭防火墙之类的
  • 要在所有节点中安装 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. 自动创建虚拟机

  • 目标
    • 能够通过自动化的方式创建虚拟机
  • 步骤
    1. 什么是 Vagrant
    2. 安装 Vagrant 和概念介绍
    3. 使用 Vagrant 构建一个虚拟机集群
3.1. 什么是 Vagrant

从现在就开始要搭建一个测试集群了, 回顾前面的课程, 先来说说虚拟机的痛点

  • 安装麻烦
    • 建立虚拟机的时候, 我的网段好像写错了, 和别人的 IP 不一样, 总是操作失误
    • 虚拟机弄好以后, 还需要安装操作系统, 步骤那么多, 怎么可能不出错呢, 老师你肯定没讲清楚
    • WC, 虚拟机终于装好了!! 什么? 还需要安装 Hadoop, 几十个步骤!!!
  • 工程和环境分离
    • 唉, 又要学习新项目了, 又要折腾环境, 算了, 请一天假放松放松
  • 分发困难
    • 为啥老师发给我的虚拟机我运行不起来? 这是为什么!!!
    • 可能因为你和老师的环境不同. 什么!? 又是环境不同!!!

卒😩

为了解决这些问题, 本项目中为大家引入 Vagrant

  • Vagrant 可以通过一个脚本配置虚拟机的参数
  • Vagrant 可以帮助我们自动创建一个虚拟机
  • Vagrant 可以帮助我们自动安装操作系统
  • Vagrant 可以帮助我们配置网络
  • Vagrant 可以帮助我们把文件拷贝到创建好的虚拟机上
  • Vagrant 可以在创建虚拟机后, 执行我们制定的自动化脚本, 安装服务
  • 我们可以使用 Vagrant 的命令登录到虚拟机中
  • 我们可以使用 Vagrant 的命令开启或者关闭虚拟机

大家想一下, 如果我们可以通过 Vagrant, 使用一个配置文件来创建虚拟机, 是不是就能做到如下事情

  • 创建一个项目, 顺手写一个脚本, 需要运行项目的时候, 让同事执行脚本即可
  • 虚拟机中的程序版本变化了, 修改一下脚本, 同事重新运行一下脚本即可同步环境变动
  • 再也不用担心虚拟机关闭以后再也打不开, 重新运行一下就好, 也就一分钟

所以, 不仅仅是为了让大家学习, 很多企业中也使用 Vagrant 构建测试环境, 保证每个人的环境一致

3.2. 安装 Vagrant 和概念介绍

安装步骤如下

  1. 下载 VirtualBox, 因为 VMWare 是收费的, Vagrant 不允许我们使用破解版, 有版权问题
  2. 安装 VirtualBox
  3. 下载 Vagrant, 地址是 https://releases.hashicorp.com/vagrant/2.2.7/vagrant_2.2.7_x86_64.msi
  4. 安装 Vagrant
  5. 考虑到大家网络比较慢, 已经将下载过的 Vagrant 相关的安装包放在了 Files/Setup

Vagrant 中的概念

作用: 帮助我们管理虚拟机, 自动化的创建虚拟机, 自动化的初始化虚拟机, 提供了命令帮助我们管理虚拟机

  • Vagrantfile, 这个文件是虚拟机的配置文件
  • vagrant up, 使用这个命令, 即可创建一个符合 Vagrantfile 配置的虚拟机
  • Provision, 当 Vagrant 建立虚拟机后, 会执行通过 Provision 配置的自动化脚本, 自动化的安装服务

Vagrant 初体验, 创建一个虚拟机

步骤

  1. 编写脚本, 配置虚拟机

    1. 定义 Vagrant 配置
    2. 新增一台虚拟机的配置
    3. 配置虚拟机所使用的操作系统
    4. 配置网络
    5. 配置虚拟机的硬件配置
  2. 执行命令创建虚拟机

  3. 登入虚拟机, 查看同步的目录

  4. 编写脚本

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

  1. 在脚本所在目录执行命令
# 因为用到了修改磁盘大小的插件, 需要安装
vagrant plugin install vagrant-disksize

# 建立虚拟机
vagrant up

  1. 登入虚拟机, 查看同步的目录
# 登录
vagrant ssh edge

# 查看同步的目录
cd /vagrant

Vagrant 还有一个很强大的功能, 就是在创建虚拟机完毕时, 执行初始化任务

  1. 关闭已经创建的虚拟机
vagrant destroy

  1. 编写脚本
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

  1. 编写 Shell 脚本
echo "Hello everyone"

  1. 运行查看
vagrant up

目前, 除了 Shell 的 Provision, Vagrant 还支持 Ansible, Chef, Docker, Puppet 等

3.3. 使用 Vagrant 构建一个虚拟机集群

接下来, 要使用 Vagrant 构建一个集群了, 在开始之前, 根据我们的情况, 要规划一下集群

主机名角色配置
master01Master1 cores, 16G -> 6G, 32G -> 8G
workder 01 - 02Worker1 cores, 16G -> 4G, 32G -> 5G
  • 如果只有 8G 内存, 建议去下载 Cloudera quick start vm
  • Cloudera CDH 的每一个服务的内存配置, 是按照比例来的

然后, 进行集群搭建

  1. 编写脚本
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

  1. 运行集群
vagrant up

这个时候, 我们已经建立起来了测试集群, 但是有一个问题, 似乎无法在外部登录

  1. 使用 MobaXterm 使用 SSH 登录虚拟机
  2. 发现无法登录

原因是, Vagrant 自动创建出来的虚拟机是关闭了 SSH 登录功能的, 只能使用 vagrant ssh 登录, 这是为了保障安全性, 但是测试集群的话, 其实我们还是需要它方便, 解决办法也很简单, 修改 SSH 配置, 再打包一下系统, 让 Vagrant 下次创建的时候使用我们修改过的系统

  1. 修改 SSH 登录
# 修改文件 /etc/ssh/sshd\_config
PasswordAuthentication no

  1. 打包
vagrant package

  1. 脚本中使用
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 服务
  • 步骤
    1. 痛点和 Ansible
    2. 使用 Vagrant 整合 Ansible
    3. 离线安装 Ansible
4.1. 痛点和 Ansible

好了, 我们现在要开始安装 CM 服务了, 大概有如下步骤

  1. 配置好每一台机器的系统环境

    1. 修改主机名
    2. 关闭防火墙
    3. 关闭 SELinux
    4. 安装 JDK
    5. 安装 MySQL
    6. … 一上午过去了
  2. 在每一台机器上安装 SCM Agents

    1. Master 01 上下载 Agents
    2. Worker 01上下载 Agents
    3. Worker 02 上下载 Angents
    4. 配置 Master 01
    5. 配置 Worker 01
    6. 配置 Worker 02
    7. 启动 Maser 01 的 Agents
    8. … 一小时又过去了, 逐渐恼怒 😡
  3. 在 Master 01 上安装 SCM

    1. 创建 Linux 用户, hadoop, hive, yarn, hdfs, oozie 等所有服务都要有一个系统用户
    2. 创建 MySQL 用户, 大概六七个
    3. 安装 SCM
    4. 启动
    5. 报错
    6. … 一下午过去了, 老子不学习! 😡😡
  4. 安装 CDH …

好了, 这些痛点我们都懂, 于是引入 Ansible, Ansible 非常重要, 几乎是运维领域的银弹, 但是如果大家不打算在运维领域发展, 了解即可, Ansible 可以帮助我们做如下事情

  • 上述所有步骤, Ansible 可以帮助我们以配置的形式编写
  • Ansible 可以帮助我们在多台机器上执行配置文件表示的过程

Ansible 有如下概念

名称解释
Playbook剧本, 是 Ansible 中的总控, 根配置文件比如说这次运行 Ansible 的最终任务是搭建好一个 CM 集群, 那我们应该就有一个 Playbook 叫做 cm_playbook.yml
RolesAnsible 任务中的角色例如为了完成 CM 集群的搭建, 可能要配置操作系统, 那应该就把配置操作系统所需要执行的所有配置都放在一个叫做 system_common 的 Roles 中
InventoryAnsible 中的服务器地址配置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 中配置
  • hostsyum_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

  1. 在 13 台机器中, 选择一台作为主控
  2. 在主控机器中放入 Ansible 脚本
  3. 执行命令运行 Ansible, Ansible 会在 Playbook 中标示的机器上运行
ansible-playbook --inventory-file=/vagrant/inventory -v /vagrant/playbooks/cdh_cm.yml

明白了如何在正式环境使用 Ansible 以后, 使用 Vagrant 搭建测试环境的时候也可以使用 Ansible 脚本, Vagrant 提供了对应的 Provision

  1. 编写 Ansible playbook, 文件名为 testing.yml
- hosts: worker_servers
  tasks:
    debug:
      msg: "Hello from {{ inventory\_hostname }}"

  1. 编写 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

  1. 编写 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

  1. 运行查看结果

当然, 我们也可以使用 Roles 来封装一下这个任务

  1. 创建 roles/hello/tasks 目录
  2. 编写 Roles
- name: Hello
	debug:
		msg: "Hello from {{ inventory\_hostname }}"

  1. 修改 Playbook
- hosts: worker_servers
  roles:
  	- hello

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值