一、目的:
为了实现公司项目对海量业务数据、文件进行存储,系统间共享,并且达到以下几点要求,可行方案hadoop集群。
数据安全
需要实现数据冗余,避免数据的单点故障
可线性扩展
当数据增长到TB、甚至PB以上时,存储方案需要支持可线性扩展
存储高可用
某个存储服务宕掉时,不影响整体存储方案的可用
性能
性能达到应用要求
二、版本选择:
目前而言,不收费的Hadoop版本主要有三个(均是国外厂商),分别是:
Apache(最原始的版本,所有发行版均基于这个版本进行改进)。
Hortonworks版本(Hortonworks Data Platform,简称“HDP”)。
Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称CDH)。
对比:
(1)Apache版本建议学习使用,不建议在生产环境使用。
(2)Hortonworks 主打产品是Hortonworks Data Platform (HDP),也同样是100%开源的产品,HDP除了常见的项目外还包含了Ambari,一款开源的安装和管理系统。HCatalog,一个元数据管理系统。
(3)Cloudera 最成型的发行版本,拥有最多的部署案例。提供强大的部署、管理和监控工具。Cloudera开发并贡献了可实时处理大数据的Impala项目,Cloudera有免费版和企业版,企业版只有60天试用期,不过基本上免费版也满足生产环境的使用,监控工具为中文,不过Cloudera的代码不开源,只能通过产生本身的BUG修改补丁升级等。
三、hortonworks简介
需求使用到的分别为Apache Ambari和HDP和HDP-UTILS。
Apache Ambari是一个基于web的工具,用于配置、管理和监视Apache Hadoop集群,支持Hadoop HDFS,、Hadoop MapReduce、Hive、HCatalog,、HBase、ZooKeeper、Oozie、Pig和Sqoop。Ambari同样还提供了集群状况仪表盘,比如heatmaps和查看MapReduce、Pig、Hive应用程序的能力,以友好的用户界面对它们的性能特性进行诊断。
HDP是hortonworks的软件栈,里面包含了hadoop生态系统的所有软件项目,比如HBase,Zookeeper,Hive,Pig等等。
HDP-UTILS是工具类库。
四、准备工作:
4.1、Ambari、HDP版本介绍
Ambari 2.7.3仅支持HDP-3.1.0,HDP-3.0.1,HDP-3.0.0使用以下URL确定对每个产品版本的支持https://supportmatrix.hortonworks.com/,以及下载报告
4.2、工具包:
ambari-2.7.3.0
HDP-3.1.0
HDP-UTILS-1.1.0.22
JDK:1.8版本
操作系统:centos7任意版本,系统为英文,64位,内存最好每台都10G以上。
4.3、修改网络配置(所有机器)
4.3.1进入网络配置文件目录
首先,确保在root用户下进行操作。进入网络配置文件network-scripts目录下。
[root@localhost /]# cd /etc/sysconfig/network-scripts/
4.3.2找到我们需要修改的配置文件
使用ls命令,列出该目录下的文件。其中“ifcfg-ens33”的文件,为我们需要修改的网络配置文件。
4.3.3修改配置文件
使用vim命令(vi命令也可以),对文件进行配置。
- 修改BOOTPROTO="static"也就是将dhcp改为static
- 修改ONBOOT=“yes” 意思是将网卡设置 为开机启用
同时在文字下方添加(IP需要改为本机IP)
IPADDR=192.168.0.230 #静态IP
GATEWAY=192.168.0.1 #默认网关
NETMASK=255.255.255.0 #子网掩码
#DNS1=192.168.0.1 #DNS 配置
ESC :+WQ,保存退出!
4.3.4重启网络服务
使用命令,重启网络服务
[root@localhost /]# service network restart
4.3.5查看我们改动后的效果
因为现在是Centos7所以我们使用新的命令,我们输入ip addr进行查看
4.4、服务器防火墙关闭
4.4.1、关闭掉linux防火墙(所有机器)
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
4.5、修改主机名及机器隐射(hosts)
4.5.1通过vi /etc/hostname 进行修改
各个节点修改成相应的名称,vm1,vm2,vm3,vm4,vm5修改完reboot
4.5.2、修改/etc/hosts文件(所有机器)
[root@vm1 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#所有节点IP对应名称
172.16.6.151 vm1
172.16.6.152 vm2
172.16.6.153 vm3
172.16.6.154 vm4
172.16.6.155 vm5
4.5.3、修改主机为英文,如果是英文呢则不需要处理
[root@vm1 ~]# vi /etc/locale.conf
LANG="en_US.UTF-8"
4.6、服务器的免登陆(所有机器)
4.6.1配置master节点无密码登录到其他节点,在master节点上操作
生成密钥对(所有机器)
[root@vm1 ~]# ssh-keygen -t rsa ## 一路回车即可(每个机器执行此操作)
4.6.2 在主节点上将公钥拷到一个特定文件authorized_keys中。
[root@vm1 ~]# cd .ssh
[root@vm1 .ssh]# ls
id_rsa id_rsa.pub
[root@vm1 .ssh]# cp id_rsa.pub authorized_keys
[root@vm1 .ssh]# ls
authorized_keys id_rsa id_rsa.pub
4.6.3 修改文件权限
[root@vm1 ~]# chmod 700 ~/.ssh
[root@vm1 ~]# chmod 600 ~/.ssh/authorized_keys
4.6.4 将authorized_keys文件拷到下一个节点,并将该节点的ssh密钥id_rsa.pub加入该文件中在(每一个机器重复该步骤)
#在vm1上使用scp命令实现远程文件拷贝
[root@vm1 .ssh]# scp authorized_keys root@vm2:/root/.ssh/
The authenticity of host 'vm2(192.168.44.11)' can't be established.
ECDSA key fingerprint is SHA256:MyB1zs0E3J/fm8pC0AN8ycsgEIBNHtUqd9xS0WAyv3s.
ECDSA key fingerprint is MD5:88:48:3a:ba:3e:14:a7:d7:86:f6:51:74:00:10:f9:00.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop02,192.168.44.11' (ECDSA) to the list of known hosts.
root@vm2's password:
authorized_keys 100% 395 306.2KB/s 00:00
#登录vm2主机
[root@vm2~]# cd .ssh/
[root@vm2.ssh]# ls
authorized_keys id_rsa id_rsa.pub
[root@vm2.ssh]# cat id_rsa.pub >> authorized_keys #使用cat追加方式
4.6.5 重复上一步的操作,依次将vm3、vm4、vm5节点的ssh密钥加入到authorized_keys文件中,并将vm5节点生成的authorized_keys文件拷贝到其他四个节点(vm1、vm2、vm3、vm4)即可
[root@vm5 .ssh]# scp authorized_keys root@vm1:/root/.ssh/
[root@vm5 .ssh]# scp authorized_keys root@vm2:/root/.ssh/
[root@vm5 .ssh]# scp authorized_keys root@vm4:/root/.ssh/
[root@vm5 .ssh]# scp authorized_keys root@vm4:/root/.ssh/
4.6.6 验证免密登录
使用ssh 用户名@节点名或ssh ip地址命令验证免密码登录。
[root@vm5 .ssh]# ssh vm1
4.6.7 将创建的秘钥拷贝出来
因为后面ambari安装的时候需要上传这个秘钥。创建秘钥是在隐藏文件夹/root/.ssh/下面的,所以需要先把秘钥拷贝到可见区域,我们这边把它拷贝到/home/tools下 ,也拷贝到本地桌面一份
[root@vm1~]# mkdir /home/tools
[root@vm1~]# cp /root/.ssh/id_rsa /home/tools/
[root@vm1~]# ls /home/tools
id_rsa
注:是id_rsa,而不是id_rsa.pub,之前就因为这个复制错了导致我重新安装集群。
4.7 安装JDK(所有机器)
上传jdk到/home/tools/目录下
[root@vm1~]# cd /home ###所有机器
[root@vm1 tools]# mkdir tools ###所有机器创建tools文件夹
[root@vm1~]# cd /home/tools
#把JDK复制到其他四个机器然后解压
[root@vm1 tools]# scp -r /home/tools/ root@vm2:/home/tools
[root@vm1 tools]# tar -zxvf jdk-8u271-linux-x64.tar.gz
[root@vm1 tools]# rm -rf jdk-8u271-linux-x64.tar.gz
进入配置JAVA环境(所有机器) 添加环境配置
[root@vm1 tools]# vi /etc/profile
###添加环境变量配置
JAVA_HOME=/home/tools/jdk1.8.0_271
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
###使环境变量生效
[root@vm1 tools]# source /etc/profile
###查看jdk安装版本
[root@vm1 tools]# java -verison
4.8、服务器时间同步
4.8.1、安装ntp服务(所有机器)
###进入tools文件夹 创建ntp文件夹 (所有机器一起安装)
[root@vm1 ~]# cd /home/tools
[root@vm1 ~]# mkdir ntp
###上传三个rpm包到ntp文件夹
### ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
### autogen-libopts-5.18-5.el7.x86_64.rpm
### ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
### 依次安装
[root@vm1 ~]# rpm -ivh ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
[root@vm1 ~]# rpm -ivh autogen-libopts-5.18-5.el7.x86_64.rpm
[root@vm1 ~]# rpm -ivh ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
4.8.2、设置vm1为主服务器,开启nptd服务(主服务器)
[root@vm1 ~]# vi /etc/ntp.conf
红色框内是需要修改的部份:
restrict 192.168.0.0 mask 255.255.255.0
#注释掉其他上游时间服务器
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
新增:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
4.8.3、启动服务
[root@vm1 ~]# systemctl start ntpd.service
4.8.4、开机自启动:
[root@vm1 ~]# systemctl enable ntpd.service
4.8.5、子节点设置同步(子节点)
主服务器开启ntp服务器以后,子节点就不需要开启了,因为当server与client之间的时间误差过大时(可能是1000秒),处于对修改时间可能对系统和应用带来不可预知的问题,NTP将停止时间同步!所以如果发现NTP启动之后时间并不进行同步时,应该考虑到可能是时间差过大引起的,此时需要先手动进行时间同步!所以直接使用定时手动同步的方式就可以了。
添加任务计划实时同步master服务器时间:
[root@vm2~]# crontab -e
0-59/10 * * * * /usr/sbin/ntpdate vm1
[root@vm2~]# crontab -l
0-59/10 * * * * /usr/sbin/ntpdate vm1
4.9、禁用SELinux和PackageKit将检查umask值
4.9.1、禁用sellinux(所有机器)
[root@vm1 ~]# vi /etc/selinux/config
# 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 three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
主要就是把SELINUX改为disabled。
4.9.2、umask值(所有机器)
[root@vm1 ~]# sudo sh -c "echo umask 0022 >> /etc/profile"
[root@vm1 ~]# source /etc/profile
4.10、服务器的文件句柄数设置
4.10.1、永久设置(所有机器)
[root@master ~]# vi /etc/security/limits.conf
# End of file
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
4.10.2、关闭当前shell窗口或者reboot,重新打开熟人ulimit -a查看是否设置成功
[root@master ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7217
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 131072
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可见这两个参数值已经修改好了:
open files (-n) 65536
max user processes (-u) 131072
4.11、修改yum源,实现离线安装
把设置好的yum文件,复制到每个机器的/etc/yum.repos.d/
[root@vm1 ~]# yum clean all
[root@vm1 ~]# yum makecache
[root@vm1 ~]# yum repolist
五、开始安装ambari-server
5.1、首先 yum -y install ambari-server 下载ambari-server
[root@vm1 ~]# yum -y install ambari-server
###安装完成找到sql文件 创建mysql数据库导入sql 作为ambari的后台库
###将mysql的驱动包放到/usr/share/java
[root@vm1 ~]# cd /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
5.2、初始化设置ambari-server并启动
5.2.1、开始配置ambari
开始配置ambari
[root@master ~]# ambari-server setup
下面是配置执行流程,按照提示操作
(1) 提示是否自定义设置。输入:y
Customize user account for ambari-server daemon [y/n] (n)? y
(2)ambari-server 账号。
Enter user account for ambari-server daemon (root):
如果直接回车就是默认选择root用户
如果输入已经创建的用户就会显示:
Enter user account for ambari-server daemon (root):ambari
Adjusting ambari-server permissions and ownership...
(3)检查防火墙是否关闭
Adjusting ambari-server permissions and ownership...
Checking firewall...
WARNING: iptables is running. Confirm the necessary Ambari ports are accessible. Refer to the Ambari documentation for more details on ports.
OK to continue [y/n] (y)?
直接回车
(4)设置JDK。输入:2
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] Custom JDK
==============================================================================
Enter choice (1): 2
如果上面选择3自定义JDK,则需要设置JAVA_HOME。输入:/home/tools/jdk1.8.0_271
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: /home/tools/jdk1.8.0_271
Validating JDK on Ambari Server...done.
Completing setup...
Checking GPL software agreement...
GPL License for LZO: https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
Enable Ambari Server to download and install GPL Licensed LZO packages [y/n] (n)? n
Completing setup...
Configuring database...
(5)数据库配置。选择:y
Configuring database...
Enter advanced database configuration [y/n] (n)? y
(6)选择数据库类型。输入: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
(7)设置数据库的具体配置信息,根据实际情况输入,如果和括号内相同,则可以直接回车。如果想重命名,就输入。
Hostname (localhost):
Port (3306):
Database name (ambari):
Username (ambari):
Enter Database Password (bigdata):ambarizk123
Re-Enter password: ambarizk123
Should ambari use existing default jdbc /usr/share/java/mysql-connector-java.jar [y/n] (y)? y
/usr/share/java/mysql-connector-java.jar
Configuring remote database connection properties...
(8)将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)?
启动
[root@master ~]# ambari-server start
启动日志查看
[root@master ~]# tail -f /var/log/ambari-server/ambari-server.log
然后再进入ambari-server管理界面账号密码默认都为admin
http://192.168.0.171:8080
5.2.2、安装hive的话一定要执行
安装hive的话一定要执行
[root@nd-00 ~]# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
六、安装配置部署HDP集群
安装时候发现/etc/yum.repos.d文件夹下“ambari-hdp-1.repo”内生成的"baseURL"为空。
解决方法:
a)删除掉/etc/yum.repos.d的“ambari-hdp-1.repo”文件
根据错误“Cannot find a valid baseurl for repo: HDP-3.1-repo-1”,在所有集群机器上修改,打开/etc/yum.repos.d
vim /etc/yum.repos.d
#查看文件夹下是不是多了一个文件“ambari-hdp-1.repo”,直接在所有集群机器上删除掉就可以了
rm -rf ambari-hdp-1.repo
b)使用`grep 'baseurl' /etc/yum.repos.d/* | grep -i HDP`查看baseurl是不是为空
c)`yum install hdp-select -y`查看报什么错误
d)修改ambari`app.js`文件:
cd /usr/lib/ambari-server/web/javascripts
先备份cp app.js app.js_backup
跳转到app.js约39892行,把
/**
* Use Local Repo if some network issues exist
*/
onNetworkIssuesExist: function () {
if (this.get('networkIssuesExist')) {
this.get('content.stacks').forEach(function (stack) {
stack.setProperties({
usePublicRepo: false,
useLocalRepo: true
});
stack.cleanReposBaseUrls();
});
}
}.observes('networkIssuesExist'),
改成:
/**
* Use Local Repo if some network issues exist
*/
onNetworkIssuesExist: function () {
if (this.get('networkIssuesExist')) {
this.get('content.stacks').forEach(function (stack) {
if(stack.get('useLocalRepo') != true){
stack.setProperties({
usePublicRepo: false,
useLocalRepo: true
});
stack.cleanReposBaseUrls();
}
});
}
}.observes('networkIssuesExist'),
进去mysql手动改yum地址
select * from repo_definition;
update repo_definition set base_url='<你的baseURL地址>' where id=<THE CORESPONDING ID>;
重启启动`ambari-server` `ambari-server start`
6.1、访问Ambari web页面
默认端口8080,Username:admin;Password:admin;http://192.168.0.171:8080
6.2、开始集群安装
点击启用安装向导,只有在没有安装过HDP集群的才有这个界面。
6.3、配置集群名称
6.4、版本选择
6.5、集群目前拥有的节点和密钥配置
6.6、主机确认
6.7、选择需要安装的组件
6.8、资源节点分配
6.9、分配从属和客户端
6.10、定制服务
整体的机器概况
可以下载蓝图,打印,点击部署等
6.11、安装完成后下一步则进入监控界面
注意:安装集群过程中如果出现错误可以执行以下操作
1.清除数据库。
2.执行以下命令
[root@master ~]# ambari-server stop
[root@master ~]# ambari-server reset
[root@master ~]# ambari-server setup