基于Ambari搭建大数据分析平台

一、部署工具简介

1. Hadoop生态系统

Hadoop big data ecosystem in Apache stack

2. Hadoop的发行版本

Hadoop的发行版除了Apache的开源版本之外,国外比较流行的还有:Cloudera发行版(CDH )、Hortonworks发行版(HDP)、MapR等,所有这些发行版均是基于Apache Hadoop衍生出来的,因为Apache Hadoop的开源协议允许任何人对其进行修改并作为开源或者商业产品发布。

国内主流的商业版Hadoop平台:

  • 华为------FusionInsight HD(简称FI)
  • 腾讯------Tbds
  • 阿里------飞天(相对其他版本,修改比较大)
  • 明略------Nest
  • 星环------Tdc
  • 浪潮------云海Insight
  • CDH是Cloudera基于Apache Hadoop衍生出的发行版,其代码部分开源,提供了管理布置工具ClouderaManager

  • HDP是Hortonworks公司(2018年并入cloudera公司)基于Apache Hadoop衍生出的发行版,其代码全部开源,采用Ambari进行管理和部署

3. 部署工具介绍

大数据集群管理方式分为手工方式(Apache hadoop)和工具方式(Ambari + hdp 和Cloudera Manger + CDH)。手工方式太过复杂,是一个艰辛的过程,在企业应用中,一般采用工具部署方式。Ambari和Cloudera Manager这两个系统,目的就是简化Hadoop生态集群的安装、配置,同时提高Hadoop运维效率,以及对Hadoop集群进行监控。

(1)Ambari是Apache软件基金顶级项目,它是一个基于web的工具,用于安装、配置、管理和监视Apache Hadoop集群,支持Hadoop HDFS,、Hadoop MapReduce、Hive、HCatalog,、HBase、ZooKeeper、Oozie、Pig和Sqoop。Ambari同样还提供了集群状况仪表盘,比如heatmaps和查看MapReduce、Pig、Hive应用程序的能力,以友好的用户界面对它们的性能特性进行诊断。

Apache Ambari 项目旨在通过开发用于配置,管理和监控 Apache Hadoop 集群的软件来简化 Hadoop 管理。Ambari 提供了一个直观,易用的 Hadoop 管理 Web UI。

Ambari提供了如下功能:

  • 提供了跨任意数量的主机安装 Hadoop 服务的分步向导。
  • 处理群集的 Hadoop 服务配置。
  • 提供集中管理,用于在整个集群中启动,停止和重新配置 Hadoop 服务。
    提供了一个仪表板,用于监控 Hadoop 集群的运行状况和状态。
  • 利用 Ambari 指标系统进行指标收集。
  • 利用 Ambari Alert Framework 进行系统警报,并在需要您注意时通知您(例如,节点出
    现故障,剩余磁盘空间不足等)。

(2)Cloudera Manager是cloudera公司的一个产品,着重于帮助大家管理自己的CDH集群,通过Cloudera Manager统一的UI界面来快速地自动配置和部署CDH和其相关组件,同时Cloudera Manager还提供了各种丰富的可自定义化的监视诊断和报告功能,集群上统一的日志管理功能,统一的集群配置管理和实时配置变更功能,多租户功能,高可用容灾部署功能和自动恢复功能等, 方便企业统一管理和维护自己的数据中心。Cloudera Manager产品也是我们主要的安装内容和介绍对象。它细分为免费的Express版本和功能完全并提供众多增值服务的收费版本Enterprise

(3)Ambari VS ClouderaManager

主要的不同点 apache Ambari ClouderaManager Express(免费版)
配置版本控制和历史记录 支持 不支持
二次开发 支持 不支持
集成 支持 no (不支持redis、kylin、es)
维护 依靠社区力量 cloudera做了一些定制开发,自行维护或打patch会离社区越来越远
权限控制 ranger(相对简单) sentry(复杂)
视图定制 支持创建自己的视图,添加自定义服务 不支持

二、准备工作

1.基础环境

  • 操作系统(CentOS 7)

  • 数据库(MySQL)

  • 浏览器

  • JDK

https://supportmatrix.hortonworks.com

=>

https://supportmatrix.cloudera.com/#Hortonworks




本手册选择CentOS7 + Ambari 2.6 + HDP 2.6.3

HDP:http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.6.3.0/HDP-2.6.3.0-centos7-rpm.tar.gz

ambari:http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.6.0.0/ambari-2.6.0.0-centos7.tar.gz

HDP-UTILS:http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.21/repos/centos7/HDP-UTILS-1.1.0.21-centos7.tar.gz

相关软件资源可在文末百度网盘资源中进行下载,

2.系统最小要求

  • 软件需求

  • 内存需求

  • 最大打开文件需求

2.1 软件需求

On each of your hosts:

  • yum and rpm (RHEL/CentOS/Oracle/Amazon Linux)

  • zypper and php_curl (SLES)

  • apt (Debian/Ubuntu)

  • scp, curl, unzip, tar, wget, and gcc*

  • OpenSSL (v1.01, build 16 or later)

  • Python (with python-devel)*

*Ambari Metrics Monitor uses a python library (psutil) which requires gcc and python-devel packages.

2.2 内存需求

Ambari主机应该至少有1 GB RAM,500 MB空闲

检测可用内存

sh 复制代码
free -m

运行 AMC(Ambari Metrics Collector)主机的内存和硬盘要求:

Number of hosts Memory Available Disk Space
1 1024MB 10GB
10 1024MB 20GB
50 2048MB 50GB
100 4096MB 100GB
300 4096MB 100GB
500 8096MB 200GB
1000 12288MB 200GB
2000 16384MB 500GB

3.环境准备

主机规划

IP hostname memory disk space 功能
192.168.91.128 master 2G 30G
192.168.91.129 slave1 1G 30G
192.168.91.130 slave2 1G 30G

3.1 安装虚拟机

  • VMware Workstation

  • VBox

  • VMware Player

  • Hyper-V

    下载文末网盘资源中的文件vmware_177981.zipCentOS-7-x86_64-Minimal-2009.iso

(1)安装虚拟机软件VMware

  • 安装增强型键盘驱动程序选中后,在虚拟机中使用键盘更加流畅
  • 在最后一步时,点击许可,输入如下的某一条许可即可

    ZF3R0-FHED2-M80TY-8QYGC-NPKYF
    YF390-0HF8P-M81RQ-2DXQE-M2UT6
    ZF71R-DMX85-08DQY-8YMNC-PPHV8
    

(2) 创建虚拟电脑

  • 点击"创建新的虚拟机"
  • 选择典型模式创建虚拟电脑
  • 选择系统的安装文件,这里不设置,然后创建虚拟机后再进行相应设置
  • 对虚拟机命名,注意位置的设置,尽量选择剩余空间多的盘符
  • 磁盘大小设置,这里设为30G
  • 最后点完成即可。

(3) 安装CentOS

  • 选择Install CentOS 7开始安装虚拟机
  • 选择语言,选择English即可
  • 选择时区、硬盘分区、网卡信息
  • 设置ROOT账户密码
  • 重启,完成安装

3.2 安装初始软件

shell 复制代码
yum -y install ntp openssh wget  vim  openssh-clients openssl gcc openssh-server  python-devel 

3.3 安装JDK

下载文末网盘资源中的文件:jdk-8u112-linux-x64.tar.gz

借助工具(比如xftp, lrzsz, Winscp)将上面文件上传到虚拟机master

(1)安装

解压jdk-8u112-linux-x64.tar.gz

shell 复制代码
tar -xvf jdk-8u112-linux-x64.tar.gz -C /opt 

运行命令 vi /etc/profile修改环境变量,在文件末尾添加如下内容

shell 复制代码
export JAVA_HOME=/opt/jdk1.8.0_112
export PATH=${JAVA_HOME}/bin:$PATH

执行如下命令使生效

shell 复制代码
source /etc/profile

(2) 测试

shell 复制代码
java -version

3.4 关闭防火墙

SHELL 复制代码
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld  #关闭开机启动
systemctl status firewalld	#查看防火墙状态

3.5 关闭SELinux、PackageKit、检测umask值

(1)使用如下命令关闭SELinux

sh 复制代码
setenforce 0

修改配置文件进行配置: vim /etc/selinux/config

shell 复制代码
# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#   enforcing - SELinux security policy is enforced.

#   permissive - SELinux prints warnings instead of enforcing.

#   disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:

#   targeted - Targeted processes are protected,

#   mls - Multi Level Security protection.

SELINUXTYPE=targeted

(2)如果系统有安装 PackageKit,需要修改配置文件vim /etc/yum/pluginconf.d/refresh-packagekit.conf

enabled=0

(3)确保umask值为0022

shell 复制代码
#查看
umask
#修改为0022
umask 0022

针对所有交互用户进行永久性修改

shell 复制代码
echo umask 0022 >> /etc/profile

3.6 最大文件描述

最大文件描述至少需要10000,可通过如下命令查看

shell 复制代码
ulimit -Sn

ulimit -Hn

可通过如下命令修改

shell 复制代码
ulimit -n 65535

ulimit为shell内建指令,可用来控制shell执行程序的资源, 可用ulimit -a 查看资源限制的设定

另外,也可以通过修改配置文件vi /etc/security/limits.conf,在文件尾部添加如下代码即可:

# End of file
* soft nofile 65535
* hard nofile 65535
* soft nproc 131072
* hard nproc 131072

3.7 修改网络配置

(1)修改IP地址

修改配置文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.91.129"
NETMASK="255.255.255.0"
GATEWAY="192.168.91.2"
DNS1="114.114.114.114"
DNS2="8.8.8.8"

注意,IP段需要查看VMware的虚拟网络配置情况,可以通过菜单编辑 -> 虚拟网络编辑器 -> VMnet8查看

如下图所示的配置截图,则需要把上面配置项修改为

IPADDR="192.168.121.129"
GATEWAY="192.168.121.2"

重启网络

shell 复制代码
/etc/init.d/network  restart

(2) 修改主机名

shell 复制代码
 hostnamectl --static set-hostname slave1

centos7后,可以使用hostnamectl命令进行主机的配置,实际上是修改的/etc/hostname文件

3.8 克隆主机

根据slave1主机,克隆master和slave2主机,以下步骤以克隆slave2为例,类似配置master主机

首先关闭slave1主机

shell 复制代码
shutdown -h nowshe

右键主机slave1, 选择管理 -> 克隆 进入克隆向导

...略

克隆好slave2主机后,启动slave2, 并按3.7步骤一样修改ip为192.168.91.130和主机名slave2

克隆好master主机后,启动master, 并按3.7步骤一样修改ip为192.168.91.128和主机名master

4.集群准备

IP hostname memory disk space 功能
192.168.91.128 master 2G 30G
192.168.91.129 slave1 1G 30G
192.168.91.130 slave2 1G 30G

注意:内存允许的情况下,建议适当增加虚拟机内存。

4.1 hosts配置

**目的:**实现通过名称来查找相应的服务器

在主机master配置vi /etc/hosts,在文件末尾添加如下内容:

192.168.91.128 master
192.168.91.129 slave1
192.168.91.130 slave2

使用scp同步到salve1, slave2

shell 复制代码
scp /etc/hosts root@slave1:/etc/
scp /etc/hosts root@slave2:/etc/

注意:在远程拷贝过程中,需要输入远程主机的密码

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

语法:

shell 复制代码
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2

简易写法:

shell 复制代码
scp [可选参数] file_source file_target

可以参考菜鸟教程:https://www.runoob.com/linux/linux-command-manual.html

4.2 同步时钟

**目的:**在master服务器上启动ntp服务,然后slave1和slave2每10分钟同步一次时间

  • master主机:

配置vi /etc/ntp.conf

shell 复制代码
systemctl start ntpd.service       #启动服务
systemctl enable ntpd.service      #开机启动
  • slave1、slave2主机

    在slave2和slave2的主机上运行如下命令,可以让它们的时间与master服务器同步

    shell 复制代码
    ntpdate master

    将时间同步设为定时任务,运行如下命令设置定时任务

    crontab -e
    

    编辑如下内容

    */10 * * * * /usr/sbin/ntpdate master
    

Linux crontab是用来定期执行程序的命令。

当安装完成操作系统之后,默认便会启动此任务调度命令。

crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

参考菜鸟教程:https://www.runoob.com/linux/linux-comm-crontab.html

4.3 免密登录

配置master节点无密码登录到其他节点,在master节点上操作

shell 复制代码
ssh-keygen -t rsa       #一直Enter键
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

测试,如果不需要输入密码而顺利打印出时间信息,则免密登录设置成功

shell 复制代码
 ssh slave1 date; ssh slave2 date; ssh master date;

三、创建本地源

这部分操作只需要在master主机上操作即可

下载文末网盘资源中的文件:ambari-2.6.0.0-centos7.tar.gzHDP-2.6.3.0-centos7-rpm.tar.gzHDP-UTILS-1.1.0.21-centos7.tar.gz

借助工具(比如xftp, lrzsz, Winscp)上传到虚拟机master的/root目录。

1. 安装httpd服务

shell 复制代码
yum -y install httpd      #安装httpd
systemctl restart httpd.service   #开启httpd服务
systemctl enable httpd.service    #开机启动

2. 将包放到/var/www/html目录

shell 复制代码
tar -zxvf /root/ambari-2.6.0.0-centos7.tar.gz -C /var/www/html/
tar -zxvf /root/HDP-2.6.3.0-centos7-rpm.tar.gz -C /var/www/html/
mkdir /var/www/html/HDP-UTILS
tar -zxvf /root/HDP-UTILS-1.1.0.21-centos7.tar.gz -C /var/www/html/HDP-UTILS

试试能否成功访问:http://192.168.91.128

3. 制作本地源

3.1 安装本地源制作相关工具

shell 复制代码
yum install yum-utils createrepo yum-plugin-priorities repolist -y
createrepo /var/www/html

3.2 修改源地址

(1) 修改ambari.repo

shell 复制代码
vi  /var/www/html/ambari/centos7/2.6.0.0-267/ambari.repo

修改内容如下:

#VERSION_NUMBER=2.6.0.0-267
[ambari-2.6.0.0]
name=ambari Version - ambari-2.6.0.0
baseurl=http://master/ambari/centos7/2.6.0.0-267
gpgcheck=1
gpgkey=http://master/ambari/centos7/2.6.0.0-267/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
shell 复制代码
cp /var/www/html/ambari/centos7/2.6.0.0-267/ambari.repo  /etc/yum.repos.d/

(2) 修改hdp.repo

shell 复制代码
vi /var/www/html/HDP/centos7/2.6.3.0-235/hdp.repo

内容如下

#VERSION_NUMBER=2.6.3.0-235
[HDP-2.6.3.0]
name=HDP Version - HDP-2.6.3.0
baseurl=http://master/HDP/centos7/2.6.3.0-235
gpgcheck=1
gpgkey=http://master/HDP/centos7/2.6.3.0-235/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1

[HDP-UTILS-1.1.0.21]
name=HDP-UTILS Version - HDP-UTILS-1.1.0.21
baseurl=http://master/HDP-UTILS
gpgcheck=1
gpgkey=http://master/HDP-UTILS/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
shell 复制代码
cp /var/www/html/HDP/centos7/2.6.3.0-235/hdp.repo /etc/yum.repos.d/

上面就创建好了主机上的文件,然后可以通过下面命令清除yum的缓存

shell 复制代码
yum clean all
yum makecache
yum repolist

可以打开浏览器查看一下:

http://master/ambari/centos7/

http://master/HDP/centos7/

如果希望在本地计算机上使用http://master/ambari/centos7/和http://master/HDP/centos7/访问, 需要配置本机的hosts文件

C:\Windows\System32\drivers\etc\hosts, 添加如下内容即可:

192.168.91.128 master
192.168.91.129 slave1
192.168.91.130 slave2

3.3 同步源文件

将创建好的源文件拷贝到子节点

shell 复制代码
cd /etc/yum.repos.d
scp ambari.repo slave1:/etc/yum.repos.d/ambari.repo
scp ambari.repo slave2:/etc/yum.repos.d/ambari.repo
scp hdp.repo slave1:/etc/yum.repos.d/hdp.repo
scp hdp.repo slave2:/etc/yum.repos.d/hdp.repo

四、安装Ambari

Ambari有两种安装模式

  • 一种是使用默认postgresql数据库的存储安装元数据
  • 使用第三方数据库作为Ambari元数据库

我们这里使用mysql数据库作为Ambari元数据库

下载文末网盘资源中的文件:ambari-2.6.0.0-centos7.tar.gzMySQL-5.6.46-1.el7.x86_64.rpm-bundle.tarmysql-connector-java-5.1.40.jar

借助工具(比如xftp, lrzsz, Winscp)上传到虚拟机master的/root目录。

1. 安装Ambari服务

shell 复制代码
 yum -y install ambari-server

如果出现安装失败,请检查本地源创建是否成功

2.配置Ambari

2.1 卸载MariaDB 和 已有MySQL

shell 复制代码
rpm -qa | grep -i mariadb
shell 复制代码
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64

同样的方法卸载已有的MySQL

删除服务

shell 复制代码
systemctl list-unit-files --type=service | grep -i mysql

如果查找到mysql服务,使用下面的命令进行删除

shell 复制代码
chkconfig --del mysql

2.2 安装mysql数据库

  1. 下载安装包: https://dev.mysql.com/downloads/mysql/5.6.html#downloads

    本文末尾的网盘资源中已经提供了相应安装包MySQL-5.6.46-1.el7.x86_64.rpm-bundle.tar,请使用相应工具(比如winscp)将该文件上传到目录/root

  2. 安装依赖

    shell 复制代码
    yum -y install perl autoconf
  3. 安装

    shell 复制代码
    tar -xvf MySQL-5.6.46-1.el7.x86_64.rpm-bundle.tar
    rpm -ivh MySQL-client-5.6.46-1.el7.x86_64.rpm
    rpm -ivh MySQL-server-5.6.46-1.el7.x86_64.rpm
    
    #查看安装时产生的随机密码
    cat /root/.mysql_secret
    
    #启动mysql
    service mysql start    
    
    
    mysql -uroot -p    #登入mysql
    Enter password:    #输入刚才查看的随机密码
    mysql> set password for 'root'@'localhost' = password('123456');   #修改密码
    mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
    mysql> flush privileges;   #刷新
    mysql> exit
    
    #MySQL服务自启动
    chkconfig mysql on

这里选择的是离线安装,如果使用在线安装,可以使用如下命令

shell 复制代码
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

rpm -ivh mysql-community-release-el7-5.noarch.rpm	

yum -y install mysql mysql-server mysql-devel	#安装Mysql

systemctl start mysqld.service		#启动mysql服务
systemctl enable mysqld.service		#开机启动

mysqladmin  -uroot password '123456'		# 设置密码

2.3 MySQL 中 user 表中主机配置

sql 复制代码
mysql -uroot -p123456

mysql> show databases;   #显示数据库

mysql> use mysql;		#使用mysql数据库

mysql> show tables;		#显示数据库mysql中的所有表

mysql> desc user;		#显示user表的结构

mysql> select User,Host,Password from user;   #查看User表

mysql> update user set host='%' where host='localhost';     #修改 user 表,把 Host 表内容修改为%

# 删除 root 用户的其他 host
mysql> 
delete from user where Host='master';
delete from user where Host='127.0.0.1';
delete from user where Host='::1';

mysql> flush privileges;   #刷新

mysql> quit;

2.4 配置Mysql驱动

请使用相应工具(比如winscp)将文件mysql-connector-java-5.1.40.jar上传到目录/root (官方下载地址:http://central.maven.org/maven2/mysql/mysql-connector-java/ )

shell 复制代码
mkdir /usr/share/java
cp /root/mysql-connector-java-5.1.40.jar  /usr/share/java/mysql-connector-java.jar

修改ambari.properties,添加mysql驱动路径

shell 复制代码
vi /etc/ambari-server/conf/ambari.properties

添加如下内容:

server.jdbc.driver.path=/usr/share/java/mysql-connector-java.jar

2.5 在MySQL中创建数据库

mysql 复制代码
mysql -uroot -p123456

mysql> CREATE DATABASE ambari;  
mysql> use ambari;  
mysql> CREATE USER 'ambari'@'%' IDENTIFIED BY 'ambarizk123';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';  
mysql> CREATE USER 'ambari'@'localhost' IDENTIFIED BY 'ambarizk123';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'localhost';  
mysql> CREATE USER 'ambari'@'master' IDENTIFIED BY 'ambarizk123';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'master';  
mysql> FLUSH PRIVILEGES;  
mysql> source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql  
mysql> show tables;  
mysql> use mysql;  
mysql> select Host,User,Password from user where user='ambari';  
mysql> CREATE DATABASE hive;  
mysql> use hive;  
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%';  
mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'localhost';  
mysql> CREATE USER 'hive'@'master' IDENTIFIED BY 'hive';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'master';  
mysql> FLUSH PRIVILEGES;  
mysql> CREATE DATABASE oozie;  
mysql> use oozie;  
mysql> CREATE USER 'oozie'@'%' IDENTIFIED BY 'oozie';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'oozie'@'%';  
mysql> CREATE USER 'oozie'@'localhost' IDENTIFIED BY 'oozie';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'oozie'@'localhost';  
mysql> CREATE USER 'oozie'@'master' IDENTIFIED BY 'oozie';  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'oozie'@'master ';  
mysql> FLUSH PRIVILEGES; 

2.6 配置Ambari

执行

shell 复制代码
ambari-server setup

下面是配置执行流程,按照提示操作

(1)提示是否自定义设置。输入: y

Customize user account for ambari-server daemon [y/n] (n)? y

(2) ambari-server 账号, 如果直接回车就是默认选择 root 用户

Enter user account for ambari-server daemon (root):

(3)设置JDK。输入:3

Checking JDK...
Do you want to change Oracle JDK [y/n] (n)? y
[1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
[2] Oracle JDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7
[3] Custom JDK
==================================================================
============
Enter choice (1): 3

如果上面选择 3 自定义 JDK,则需要设置 JAVA_HOME。输入:/opt/jdk

WARNING: JDK must be installed on all hosts and JAVA_HOME must be valid on all hosts.
WARNING: JCE Policy files are required for configuring Kerberos security. If you plan to use
Kerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files are valid on all
hosts.
Path to JAVA_HOME: /opt/jdk
Validating JDK on Ambari Server...done.
Completing setup...

(4)数据库配置。选择:y

Configuring database...
Enter advanced database configuration [y/n] (n)? y

(5)选择数据库类型。输入:3

Configuring database...
==================================================================
============
Choose one of the following options:
[1] - PostgreSQL (Embedded)
[2] - Oracle
[3] - MySQL
[4] - PostgreSQL
[5] - Microsoft SQL Server (Tech Preview)
[6] - SQL Anywhere
==================================================================
============
Enter choice (3): 3

(6)设置数据库的具体配置信息,根据实际情况输入,如果和括号内相同,则可以直接回车。

如果想重命名,就输入。

Hostname (localhost): master    
Port (3306):
Database name (ambari):
Username (ambari): 
Enter Database Password (bigdata):ambarizk123    (这里输入时不会显示)
Re-enter password:ambarizk123 (这里输入时不会显示)

(7)将 Ambari 数据库脚本导入到数据库

WARNING: Before starting Ambari Server, you must run the following DDL against the
database to create the schema: /var/lib/ambari-server/resources/Ambari-DDL-MySQL-
CREATE.sql
Proceed with configuring remote database connection properties [y/n] (y)?

如果使用自己定义的数据库,必须在启动 Ambari 服务之前导入 Ambari 的 sql 脚本。

3. 启动 Ambari

shell 复制代码
ambari-server start 

成功启动后在浏览器输入Ambari地址测试:http://master:8080 (需要配置hosts, 没配置时可以直接访问 192.168.91.128:8080)

4. 错误处理

如果出现错误,请注意查看日志,根据具体的错误内容进行处理,默认ambari-server的日志在/var/log/ambari-server/ambari-server.log里面。如果在处理日志的过程中或者后面安装的过程中出现一些莫名的错误,可以重置的安装。如果上面进行的默认数据库的配置,可以使用下面的代码重置ambari-server

shell 复制代码
ambari-server stop
ambari-server reset
ambari-server setup

如果选择的是第二种方式,就需要先执行上面的语句,然后手动将mysql里面创建的数据库进行删除。然后再重新执行第2步的操作

sql 复制代码
mysql -uroot -p123456

mysql> show databases;

mysql> drop database ambari;

五、搭建集群

1. 登录

登录界面,默认管理员账户登录http://master:8080/ (需要配置hosts, 没配置时可以访问 192.168.91.128:8080), 账户:admin 密码:admin

注意,如果在windows上要访问master,需要配置 C:\Windows\System32\drivers\etc\hosts

2. 安装向导

2.1 配置集群的名字为hadoop

2.2 选择版本和本地库

在redhat7后面填写:

http://192.168.91.128/HDP/centos7/2.6.3.0-235
http://192.168.91.128/HDP-UTILS

2.3 安装配置

填写主机地址以及主节点的id.rsa文件

需要首先把master节点为的私密(/root/.ssh/id.rsa)拷贝到windows:

2.4 安装ambari的agent,同时检查系统问题

如果失败,根据错误日志。

  • 出现如下错误:

    ERROR 2020-12-26 05:23:37,117 NetUtil.py:96 - EOF occurred in violation of protocol (_ssl.c:618)
    ERROR 2020-12-26 05:23:37,117 NetUtil.py:97 - SSLError: Failed to connect. Please check openssl library versions.

修改 /etc/ambari-agent/conf/ambari-agent.ini, 在[security]添加如下信息:

[security]
force_https_protocol=PROTOCOL_TLSv1_2

2.5 选择要安装的服务

2.6 分配主节点

虚拟机的配置有限,实验时采用默认的方式即可。

2.7 分配从节点

2.8 自定义服务

如果前面安装的服务有Hive或者Oozie

2.9 检查

Admin Name : admin

Cluster Name : hadoop

Total Hosts : 3 (3 new)

Repositories:

redhat7 (HDP-2.6):
http://192.168.91.128/HDP/centos7/2.6.3.0-235
redhat7 (HDP-UTILS-1.1.0.21):
http://192.168.91.128/HDP-UTILS
Services:

HDFS
DataNode : 3 hosts
NameNode : master
NFSGateway : 0 host
SNameNode : slave1
YARN + MapReduce2
App Timeline Server : slave1
NodeManager : 3 hosts
ResourceManager : slave1
Tez
Clients : 3 hosts
HBase
Master : master
RegionServer : 3 hosts
Phoenix Query Server : 0 host
Pig
Clients : 3 hosts
Sqoop
Clients : 3 hosts
ZooKeeper
Server : 3 hosts
Flume
Flume : 3 hosts
Ambari Metrics
Metrics Collector : slave2
Grafana : master
Kafka
Broker : master
SmartSense
Activity Analyzer : master
Activity Explorer : master
HST Server : master
Slider
Clients : 3 hosts

2.10 安装

注释掉 /usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py文件的533行

# package_version = None

遇到出错,需要查看日志文件,进行相应解决

如果没修改 /usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py,可能会有如下错误:

shell 复制代码
Traceback (most recent call last):
File "/var/lib/ambari-agent/cache/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py", line 73, in <module>
 HdfsClient().execute()
File "/usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py", line 367, in execute
 method(env)
File "/var/lib/ambari-agent/cache/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py", line 37, in install
 self.install_packages(env)
File "/usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py", line 803, in install_packages
 name = self.format_package_name(package['name'])
File "/usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py", line 538, in format_package_name
 raise Fail("Cannot match package for regexp name {0}. Available packages: {1}".format(name, self.available_packages_in_repos))
resource_management.core.exceptions.Fail: Cannot match package for regexp name hadoop_${stack_version}. Available packages: ['accumulo', 'accumulo-conf-standalone', 'accumulo-source', 'accumulo_2_6_3_0_235', 'accumulo_2_6_3_0_235-conf-standalone', '
123456789101112

2.11 查看&管理集群

2.12 添加服务

我们将要添加hive服务,先运行如下命令:

ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar

(1)选择要添加的服务:

(2)分配主机

(3)分配从服务器和客户端

(4)设置Hive服务

(5)略...

(6)安装

六、常用命令练习

1. HDFS命令练习

掌握常用hdfs操作命令(hdfs dfs),执行并查看结果(可以在终端输入hdfs dfs -help查询命令用法)。

先通过vi在Linux本地创建三个文本文件:txt1.txt、txt2.txt、txt3.txt。文件文件里面随意输入些内容。

(1) 列出子目录或子文件

shell 复制代码
# 查看HDFS根目录下的文件或目录
hdfs dfs  -ls 
#递归列出子目录文件
hdfs dfs  -ls -R /

hadoop fs [generic options] -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [ ...]

(2) 创建目录

shell 复制代码
hdfs dfs -mkdir  /001

hdfs dfs -mkdir /001/mydemo2
 
# -p表示父目录都会创建
hdfs dfs -mkdir  -p  /001/mydemo/x/y/z

hdfs dfs -mkdir /001/mydemo3 /001/mydemo4 /001/mydemo5

#检查创建结果
hdfs dfs -ls /001/mydemo

hdfs dfs -ls -R  /001/mydemo

hadoop fs [generic options] -mkdir [-p] ...

(3) 上传文件

shell 复制代码
# 将本地目录txt1.txt文件上传到HDFS上并重命名为hdfs1.txt:

hdfs dfs -put txt1.txt  /001/mydemo/hdfs1.txt

hdfs dfs -copyFromLocal txt2.txt /001/mydemo/hdfs2.txt

(4) 本地文件移动到HDFS

shell 复制代码
 hdfs dfs -moveFromLocal txt3.txt  /001/mydemo/hdfs3.txt

(5) 下载文件

shell 复制代码
#将HDFS中的file2文件复制到本地系统并命名为txt3.txt:

hdfs dfs -get  /001/mydemo/hdfs1.txt  txt11.txt

hdfs dfs -copyToLocal  /001/mydemo/hdfs3.txt  txt3.txt

(6) 查看文件

shell 复制代码
#查看HDFS下/001/mydemo/hdfs2.txt文件中的内容:

hdfs dfs -cat  /001/mydemo/hdfs2.txt

hdfs dfs -text  /001/mydemo/hdfs2.txt

(7) 删除文件

shell 复制代码
# 删除HDFS下名为file1的文件(参数r为递归删除)

hdfs dfs -rm -r /001/mydemo/hdfs3.txt

(8) 复制和移动

shell 复制代码
#复制
hdfs dfs -cp  /001/mydemo/hdfs1.txt  /001/mydemo/hdfs3.txt

#移动
hdfs dfs -mv  /001/mydemo/hdfs3.txt  /001/mydemo/hdfs4.txt

(9) 创建一个空文件

shell 复制代码
hdfs dfs -touchz  /001/mydemo/hdfs5.txt

(10) 追加文件

shell 复制代码
hdfs dfs -appendToFile txt1.txt /001/mydemo/hdfs5.txt

(11) 文件合并再下载

shell 复制代码
hdfs dfs -getmerge  /001/mydemo merge.txt

(12) count统计

shell 复制代码
# (显示:目录个数, 文件个数, 文件总计大小 输入路径)

hdfs dfs -count  /001/mydemo

(13) 查看文件大小

shell 复制代码
hdfs dfs -du  /001/mydemo

(14) 设置扩展属性,获取扩展属性

shell 复制代码
hdfs dfs -setfattr -n user.from -v http://www.baidu.com /001/mydemo/hdfs1.txt

hdfs dfs -getfattr -d  /001/mydemo/hdfs1.txt

2. HBase练习

启动 HBase Shell,运行如下命令:

hbase shell

(1) 一般操作

#查询服务器状态
status

#查询 Hbase 版本
version

#查看所有表
list

(2) 增删改

hbase 复制代码
# 创建一个表
create 'member001','member_id','address','info'

# 获得表的描述
describe 'member001'

# 添加一个列族
alter 'member001', 'id'

# 添加数据, 在 HBase shell 中,我们可以通过 put 命令来插入数据。列簇下的列不需要提前创建,在需要时通过:来指定即可。添加数据如下:
put 'member001', 'debugo','id','11'
put 'member001', 'debugo','info:age','27'
put 'member001', 'debugo','info:birthday','1991-04-04'
put 'member001', 'debugo','info:industry', 'it'
put 'member001', 'debugo','address:city','Shanghai'
put 'member001', 'debugo','address:country','China'
put 'member001', 'Sariel', 'id', '21'
put 'member001', 'Sariel','info:age', '26'
put 'member001', 'Sariel','info:birthday', '1992-05-09'
put 'member001', 'Sariel','info:industry', 'it'
put 'member001', 'Sariel','address:city', 'Beijing'
put 'member001', 'Sariel','address:country', 'China'
put 'member001', 'Elvis', 'id', '22'
put 'member001', 'Elvis','info:age', '26'
put 'member001', 'Elvis','info:birthday', '1992-09-14'
put 'member001', 'Elvis','info:industry', 'it'
put 'member001', 'Elvis','address:city', 'Beijing'
put 'member001', 'Elvis','address:country', 'china'

# 查看表数据
scan 'member001'

# 删除一个列族
alter 'member001', {NAME => 'member_id', METHOD => 'delete'}

# 删除列
# a)通过 delete 命令,我们可以删除 id 为某个值的'info:age'字段,接下来的 get 就无值了:
delete 'member001','debugo','info:age'
get 'member001','debugo','info:age'

# b)删除整行的值,用 deleteall 命令:
deleteall 'member001','debugo'
get 'member001','debugo'

# 通过 enable 和 disable 来启用/禁用这个表,相应的可以通过 is_enabled 和
is_disabled 来检查表是否被禁用
is_enabled 'member001'
is_disabled 'member001'

# 使用 exists 来检查表是否存在
exists 'member001'

# 删除表需要先将表 disable。
disable 'member001'
drop 'member001'

(3) 查询

hbase 复制代码
# 查询表中有多少行,用 count 命令:
count 'member001'

# get
# a)获取一个 id 的所有数据:
get 'member001', 'Sariel'

# b)获得一个 id,一个列簇(一个列)中的所有数据:
get 'member001', 'Sariel', 'info'

# 查询整表数据
scan 'member001'

# 扫描整个列簇
scan 'member001', {COLUMN=>'info'}

# 指定扫描其中的某个列
scan 'member001', {COLUMNS=> 'info:birthday'}

# 除了列(COLUMNS)修饰词外,HBase 还支持 Limit(限制查询结果行数),STARTROW(ROWKEY 起始行。会先根据这个 key 定位到 region,再向后扫描)、STOPROW(结束行)、TIMERANGE(限定时间戳范围)、VERSIONS(版本数)、和 FILTER(按条件过滤行)等。比如我们从 Sariel 这个 rowkey 开始,找下一个行的最新版本:
scan 'member001', { STARTROW => 'Sariel', LIMIT=>1, VERSIONS=>1}


# Filter 是一个非常强大的修饰词,可以设定一系列条件来进行过滤。比如我们要限制某个列的值等于 26。
scan 'member001', FILTER=>"ValueFilter(=,'binary:26')"

# 值包含 6 这个值:
scan 'member001', FILTER=>"ValueFilter(=,'substring:6')"

# 列名中的前缀为 birth 的:
scan 'member001', FILTER=>"ColumnPrefixFilter('birth') "

#FILTER 中支持多个过滤条件通过括号、AND 和 OR 的条件组合:
scan 'member001', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter ValueFilter(=,'substring:1988')"

# PrefixFilter是对 Rowkey 的前缀进行判断,这是一个非常常用的功能。
scan 'member001', FILTER=>"PrefixFilter('E')"

附、网盘资源

链接:https://pan.baidu.com/s/18SGZkYnyq9AAjp5SLYqpZA?pwd=jiau

提取码:jiau

相关推荐
Hsu_kk1 小时前
Hive 查询用户连续三天登录的所有记录
数据仓库·hive·hadoop
kakwooi4 小时前
Hadoop---MapReduce(3)
大数据·hadoop·mapreduce
windy1a5 小时前
【c知道】Hadoop工作原理。
hadoop
油头少年_w10 小时前
大数据导论及分布式存储HadoopHDFS入门
大数据·hadoop·hdfs
工业互联网专业12 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
bigdata-余建新21 小时前
HDFS和HBase跨集群数据迁移 源码
hadoop·hdfs·hbase
Mephisto.java21 小时前
【大数据学习 | kafka高级部分】文件清除原理
大数据·hadoop·zookeeper·spark·kafka·hbase·flume
m0_3755997321 小时前
Hadoop:单节点配置YARN
hadoop·yarn
大数据魔法师1 天前
Hadoop生态圈框架部署(五)- Zookeeper完全分布式部署
hadoop·分布式·zookeeper
数据要素X1 天前
【数据仓库】Hive 拉链表实践
大数据·数据库·数据仓库·人工智能·hive·hadoop·安全