使用ambari 3000安装大数据平台相关组件

  1. 使用vagrant 创建三台虚拟机
    VagrantFile如下
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "generic/rocky8"
  # 配置所有节点共享的主机名解析(使用新IP段)
  hosts_entries = <<-HOSTS
192.168.0.101 vm1
192.168.0.102 vm2
192.168.0.103 vm3
HOSTS

  (1..3).each do |i|
    config.vm.define "vm#{i}" do |node|
      # 设置主机名(永久生效)
      node.vm.hostname = "vm#{i}"
      # 关键修改:配置桥接网络(使用宿主机物理网卡)
      node.vm.network "public_network",
        ip: "192.168.0.#{100+i}",             # 使用宿主机同网段IP(101-103)
        bridge: "enp8s0",                     # 需替换为宿主机的实际网卡名
        auto_config: true

      # 禁用默认共享文件夹(保持原配置)
      node.vm.synced_folder ".", "/vagrant", disabled: true

      # VirtualBox提供程序配置
      node.vm.provider "virtualbox" do |vb|
        vb.name = "vm#{i}"
        vb.cpus = 2
        vb.memory = 8192
        # 启用GUI调试(可选)
        vb.gui = false
                vb.customize ["createhd", "--filename", "disk-#{i}.vdi", "--size", 400 * 1024]
        vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", 1, "--device", 0, "--type", "hdd", "--medium", "disk-#{i}.vdi"]
      end

      # 主机名解析配置(更新为桥接网络IP)
      node.vm.provision "shell", inline: <<-SHELL
        # 永久设置主机名[9,10](@ref)
        sudo hostnamectl set-hostname vm#{i} --static

        # 更新/etc/hosts(包含所有节点)
        echo -e "#{hosts_entries}" | sudo tee -a /etc/hosts

        # 永久关闭 SELinux
        sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
        sudo setenforce 0
        # 禁用防火墙(测试环境推荐)[7](@ref)
        sudo systemctl stop firewalld
        sudo systemctl disable firewalld
      SHELL
    end
  end
end

这里使用的是Rocky Linux 8,官方文档里面明确写了支持的

  1. 启动虚拟机
    执行vagrant up等待虚拟机创建起来

  2. 配置root密码,并且运行root用户ssh登录
    在宿主机执行

vagrant ssh vm1
-- 设置密码
sudo passwd root

-- 允许 root 登录
sudo vi /etc/ssh/sshd_config
# 找到下面的配置
PermitRootLogin yes# 允许 root 登录
PasswordAuthentication yes# 启用密码认证

sudo systemctl restart sshd

vm2和vm3使用同样的方式操作

  1. 扩展磁盘容量
    使用root用户登录vm1,vm2,vm3
    执行
-- 初始化磁盘为物理卷(PV)
sudo pvcreate /dev/sdb
-- 扩展卷组(VG)
vgextend rl_rocky8 /dev/sdb
-- 扩展逻辑卷(LV)
lvextend -l +100%FREE /dev/rl_rocky8/root
-- 调整文件系统
 xfs_growfs /
-- 验证
df -h /

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rl_rocky8-root 525G 11G 514G 9% /
  1. root用户登录vm1,下载ambari 和bigtop相关的依赖,并创建本地repo
    执行:
dnf install createrepo
sudo mkdir -p /var/www/html/ambari-repo
sudo chmod -R 755 /var/www/html/ambari-repo

cd /var/www/html/ambari-repo
wget -r -np -nH --cut-dirs=4 --reject 'index.html*' https://www.apache-ambari.com/dist/ambari/3.0.0/rocky8/
wget -r -np -nH --cut-dirs=4 --reject 'index.html*' https://www.apache-ambari.com/dist/bigtop/3.3.0/rocky8/

--创建repository metadata
cd /var/www/html/ambari-repo
sudo createrepo .

-- 安装httpd服务
dnf install httpd -y
chown -R apache:apache /var/www/html/ambari-repo
chmod -R 755 /var/www/html/ambari-repo
systemctl restart httpd
systemctl enable httpd

-- 创建repo配置
vim /etc/yum.repos.d/ambari.repo

[ambari]
name=Ambari Repository
baseurl=http://IP/ambari-repo/ambari
enabled=1
gpgcheck=0

[bigtop]
name=Bigtop Repository
baseurl=http://IP/ambari-repo/bigtop
enabled=1
gpgcheck=0
  1. 其他一些准备操作
    禁用系统默认的mysql模块 dnf module disable mysql
    启用 EPEL 并刷新缓存
dnf install epel-release -y

dnf config-manager --set-enabled epel

dnf config-manager --set-enabled devel

dnf clean all

dnf makecache
  1. 免密登录配置
    root登录vm1,执行
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id vm1
ssh-copy-id vm2
ssh-copy-id vm3
  1. 安装ansible
sudo dnf install ansible-core -y
ansible-galaxy collection install community.mysql
  1. 添加自动部署文件
mkdir /opt/ambari-deploy
cd /opt/ambari-deploy
vi inventory.ini
-- 内容如下
[ambari-server]
vm1

[ambari-agent]
vm1
vm2
vm3


-- 添加playbook.yml
vim playbook.yml
-- 内容如下
---
- name: Setup Ambari Agent
  hosts: all
  become: true
  tasks:
    - name: Disable and stop firewalld
      ansible.builtin.service:
        name: firewalld
        state: stopped
        enabled: false

    - name: Install Ambari Agent
      ansible.builtin.dnf:
        name:
          - http://192.168.0.101/ambari-repo/ambari/ambari/ambari-agent-3.0.0.0-0.x86_64.rpm
          - python3-distro
          - java-17-openjdk-devel
          - java-1.8.0-openjdk-devel
        state: present
        disable_gpg_check: true

- name: Setup Ambari Server
  hosts: ambari-server
  vars:
    mysql_root_password: "MyNewPass4!"
    mysql_ambari_password: "AmbariPass4!"
    mysql_hive_password: "HivePass4!"
    mysql_ranger_password: "RangerPass4!"
    mysql_rangerkms_password: "RangerKMSPass4!"
    mysql_data_dir: /var/lib/mysql
    mysql_pid_dir: /var/run/mysqld
    mysql_log_path: /var/log/mysqld.log
  become: true
  tasks:
    - name: Disable and stop firewalld
      ansible.builtin.service:
        name: firewalld
        state: stopped
        enabled: false

    - name: Install Ambari Server
      ansible.builtin.dnf:
        name:
          - http://192.168.0.101/ambari-repo/ambari/ambari/ambari-server-3.0.0.0-0.x86_64.rpm
          - python3-psycopg2
          - python3-PyMySQL
          - https://mirrors.ustc.edu.cn/mysql-repo/mysql80-community-release-el8.rpm
        state: present
        disable_gpg_check: true

    - name: Install MySQL community server
      ansible.builtin.dnf:
        name: mysql-community-server
        state: present
        disable_gpg_check: true

    - name: Make sure MySQL directories exist
      ansible.builtin.file:
        path: "{{ item }}"
        owner: mysql
        group: mysql
        recurse: true
        state: directory
      loop:
        - "{{ mysql_pid_dir }}"
        - "{{ mysql_data_dir }}"

    - name: Make sure MySQL log file exists
      ansible.builtin.file:
        path: "{{ mysql_log_path }}"
        owner: mysql
        group: mysql
        state: touch

    - name: Initialize MySQL datadir
      ansible.builtin.shell:
        cmd: "mysqld --initialize-insecure --user=mysql"
        creates: "/var/lib/mysql/mysql"

    - name: Start and enable MySQL service
      ansible.builtin.systemd:
        name: mysqld
        state: started
        enabled: true

    - name: Set MySQL root password
      community.mysql.mysql_user:
        name: root
        plugin: caching_sha2_password
        plugin_auth_string: "{{ mysql_root_password }}"
        password_expire: never

    - name: Create user 'ambari'@'localhost'
      community.mysql.mysql_user:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        name: ambari
        plugin: caching_sha2_password
        plugin_auth_string: "{{ mysql_ambari_password }}"
        host: "localhost"
        priv: "*.*:ALL"

    - name: Create user 'ambari'@'%'
      community.mysql.mysql_user:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        name: ambari
        plugin: caching_sha2_password
        plugin_auth_string: "{{ mysql_ambari_password }}"
        host: "%"
        priv: "*.*:ALL"

    - name: Create Ambari database
      community.mysql.mysql_db:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        name:
          - ambari
          - hive
          - ranger
          - rangerkms
        state: present

    - name: Create user 'hive'@'%'
      community.mysql.mysql_user:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        name: hive
        plugin: caching_sha2_password
        plugin_auth_string: "{{ mysql_hive_password }}"
        host: "%"
        priv: "hive.*:ALL"

    - name: Create user 'ranger'@'%'
      community.mysql.mysql_user:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        name: ranger
        plugin: caching_sha2_password
        plugin_auth_string: "{{ mysql_ranger_password }}"
        host: "%"
        priv: "*.*:ALL,GRANT"

    - name: Create user 'rangerkms'@'%'
      community.mysql.mysql_user:
        login_user: root
        login_password: "{{ mysql_root_password }}"
        name: rangerkms
        plugin: caching_sha2_password
        plugin_auth_string: "{{ mysql_rangerkms_password }}"
        host: "%"
        priv: "rangerkms.*:ALL"

    - name: Init ambari database
      community.mysql.mysql_db:
        login_user: ambari
        login_password: "{{ mysql_ambari_password }}"
        state: import
        name: ambari
        target: /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql

    - name: Install mysql-connector-j
      ansible.builtin.dnf:
        name: mysql-connector-j
        state: present
        disable_gpg_check: true

    - name: Setup JDBC driver
      ansible.builtin.shell: ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar

    - name: Configure MySQL 8 compatibility
      ansible.builtin.lineinfile:
        path: /etc/ambari-server/conf/ambari.properties
        regexp: ^server\.jdbc\.url=
        line: server.jdbc.url=jdbc:mysql://localhost:3306/ambari?useSSL=true&verifyServerCertificate=false&enabledTLSProtocols=TLSv1.2

    - name: Configure Ambari server
      ansible.builtin.shell: >
        ambari-server setup -s \
        -j /usr/lib/jvm/java-1.8.0-openjdk \
        --ambari-java-home /usr/lib/jvm/java-17-openjdk \
        --database=mysql \
        --databasehost=localhost \
        --databaseport=3306 \
        --databasename=ambari \
        --databaseusername=ambari \
        --databasepassword={{ mysql_ambari_password }}

    - name: Add systemd wrapper for ambari-server
      copy:
        dest: /etc/systemd/system/ambari-server.service
        content: |
          [Unit]
          Description=Ambari Server Compatibility Wrapper
          After=network.target
          [Service]
          Type=forking
          ExecStart=/etc/init.d/ambari-server start
          ExecStop=/etc/init.d/ambari-server stop
          ExecReload=/etc/init.d/ambari-server restart
          PIDFile=/var/run/ambari-server/ambari-server.pid
          [Install]
          WantedBy=multi-user.target

    - name: Enable and start Ambari Server
      ansible.builtin.service:
        name: ambari-server
        state: started
        enabled: true
        daemon_reload: true

- name: Setup Ambari Agent
  hosts: all
  become: true
  tasks:
    - name: Edit ambari-agent configuration
      ansible.builtin.lineinfile:
        path: /etc/ambari-agent/conf/ambari-agent.ini
        regexp: '^hostname='
        line: hostname={{ groups['ambari-server'][0] }}

    - name: Add systemd wrapper for ambari-agent
      copy:
        dest: /etc/systemd/system/ambari-agent.service
        content: |
          [Unit]
          Description=Ambari Agent Compatibility Wrapper
          After=network.target
          [Service]
          Type=forking
          ExecStart=/etc/init.d/ambari-agent start
          ExecStop=/etc/init.d/ambari-agent stop
          ExecReload=/etc/init.d/ambari-agent restart
          PIDFile=/var/run/ambari-agent/ambari-agent.pid
          [Install]
          WantedBy=multi-user.target

    - name: Enable and start Ambari Agent
      ansible.builtin.service:
        name: ambari-agent
        state: started
        enabled: true
        daemon_reload: true
  1. 执行一键安装
ansible-playbook -i inventory.ini playbook.yml
  1. 等安装完毕之后,访问
    http://IP:8080 用户名和密码都是admin

  2. 初始化服务,可以先只安装HDFS,zookeeper,metrics这几个服务

  3. 如果出现服务启动异常,可以检查一下/etc/hosts中是否有127.0.1.1 vm1这样的配置,要去掉,三台虚拟机都需要检查一下,然后重启服务

  4. 如果安装router失败,报# Fail: The package hadoop-hdfs-dfsrouter is not supported by this version of the stack-select tool
    则vi /usr/lib/bigtop-select/distro-select
    在"leaves"中添加 "hadoop-hdfs-dfsrouter": "hadoop-hdfs",

  5. 如果都没问题了,接下来可以在界面继续添加其他需要的服务了,可能会遇到问题,可以请求ai的帮助,都能解决

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容