1. 环境
平台使用 Centos 7 64位作为系统环境。采用1个Master节点与3个Slave节点搭建成为分布式集群,详情见表 1。
2. 基础安装
2.1. 安装CentOS 7
拷制U盘启动后,选择开机使用U盘启动,进入主引导装机页面如下图。
选择Test this medis & install CentOS Linux 7,进入下面界面:
稍等片刻后,进入CenOS7可视化安装界面,选择中文。
点击Continue后,进入安装信息摘要界面,选择日期和时间为亚洲/上海 时区,主要保持每个服务器的时区一致,软件选择为最小安装,点击安装位置后如图 12所示,根据需要选择自动分区或者手动分区,这里为自动分区。点击完成后,回到图 11,点击开始安装。
安装进行过程中提示用户设置如下图,点击ROOT密码,为ROOT用户设置密码,如需要创建其他用户,可点击创建用户,新增其他用户。
之上内容设置完成后,点击重启,完成系统安装。
2.2. 配置网络
设置各节点静态IP
修改hostname:
$ vi /etc/hostname #编辑配置文件
Master
2.3. 关闭防火墙和SeLinux
CentOS 7.0默认使用的是firewall作为防火墙,默认为最小化安装时,系统没有安装防火墙,安装完可视化界面后,可能防火墙也会被安装上,因此需要关闭防火墙。
1 | systemctl stop firewalld.service #停止firewall |
使用sestatus -v 命令,查看Selinux状态。如果不是disable状态,编辑/etc/sysconfig/selinux 文件。
1 | vi /etc/sysconfig/selinux |
2.4. SSH免密码登录
SSH免密码登录,因为Hadoop需要通过SSH登录到各个节点进行操作,我用的是root用户,每台服务器都生成公钥,再合并到authorized_keys
(1) CentOS默认没有启动ssh无密登录,去掉/etc/ssh/sshd_config其中2行的注释,每台服务器都要设置,
1 | vi /etc/ssh/sshd_config |
(2) 输入命令,ssh-keygen -t rsa
,生成key,都不输入密码,一直回车,/root就会生成.ssh文件夹,每台服务器都要设置。
1 | ssh-keygen -t rsa |
(3) 合并公钥到authorized_keys文件,在Master服务器,进入/root/.ssh目录,通过SSH命令合并
1 | cat id_rsa.pub>> authorized_keys |
(4) 把Master服务器的authorized_keys、known_hosts复制到Slave服务器的/root/.ssh目录
1 | scp authorized_keys root@192.168.0.165:~/.ssh |
(5) 完成,ssh Slave1、ssh Slave2、ssh Slave3就不需要输入密码了
2.5. 安装JDK
安装JDK,Hadoop2.7需要JDK7,由于我的CentOS是最小化安装,所以没有OpenJDK,直接解压下载的JDK并配置变量即可
(1)下载“jdk-7u79-linux-x64.gz”,放到/home/java目录下
(2)解压,输入命令,tar -zxvf jdk-7u79-linux-x64.gz
(3)编辑/etc/profile
1 | export JAVA_HOME=/home/java/jdk1.7.0_79 |
(4)使配置生效,输入命令,source /etc/profile
(5)输入命令,java -version
,完成
3. 数据库安装
1) 下载安装包
http://dev.mysql.com/downloads/mysql/#downloads
推荐下载通用安装方法的tar.gz包
2) 检查库文件是否存在,如有删除。
$ rpm -qa | grep mysql
mysql-libs-5.1.52-1.el6_0.1.x86_64
$ rpm -e mysql-libs-5.1.52.x86_64 –nodeps
3) 检查mysql组和用户是否存在,如无创建。
1 | cat /etc/group | grep mysql |
以上为默认存在的情况,如无,执行添加命令:
1 | groupadd mysql |
//useradd -r参数表示mysql用户是系统用户,不可用于登录系统。
4) 解压TAR包,更改所属的组和用户
1 | cd /usr/local/ |
5) 安装和初始化数据库
1 | bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ |
6) 改写配置文件
1 | cp -a ./support-files/my-default.cnf /etc/my.cnf |
修改my.cnf的内容如下
[mysql]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
skip-name-resolve
port=3306
socket=/var/lib/mysql/mysql.sock
basedir=/usr/local/mysql # 设置mysql的安装目录
datadir=/usr/local/mysql/data # 设置mysql数据库的数据的存放目录
max_connections=200 # 允许最大连接数
character-set-server=utf8
default-storage-engine=INNODB # 创建新表时将使用的默认存储引擎
lower_case_table_names=1
max_allowed_packet=16M
7) 启动数据库服务并设置服务开机自动启动
1 | ./mysqld_safe --user=mysql & |
8) 初始化密码
1 | cat /root/.mysql_secret |
# Password set for user 'root@localhost' at 2016-06-01 15:23:25
,xxxxxR5H9
$ mysql -uroot –p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.12
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> SET PASSWORD = PASSWORD(‘123456’);
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
9) 添加远程访问权限
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set host = ‘%’ where user = ‘root’;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select host, user from user;
+———–+———–+
| host | user |
+———–+———–+
| % | root |
| localhost | mysql.sys |
+———–+———–+
mysql> quit$ /etc/init.d/mysqld restart
//一定要重启才会生效。
4. Ambari安装
由于在线安装容易受到网络不稳定等方面影响,因此采用平台选用离线安装的方式。
4.1. 搭建Yum源服务器
1) 安装httpd服务
检查是否已经安装apache http服务。
1 | which httpd |
如果没有出现目录信息,则说明没有安装。通过下面的语句进行安装。
1 | sudo yum install httpd |
安装成功之后,apache工作目录默认在/var/www/html。检查如没有此目录,需要手动创建相同目录结构。检查端口是否占用,http服务使用80端口
1 | netstat -nltp | grep 80 |
如果有占用情况,安装完毕之后需要修改apache http服务的端口号:
1 | $ sudo vi /etc/httpd/conf/httpd.conf |
修改监听端口,Listen 80为其他端口。
为了加快安装速度和防止超时错误,建议为HDP配置本地源,请在事先在网上下载HDP、HDP-UTILS和Ambari,本例中几个组件版本为HDP-2.6.0,HDP-UTILS-1.1.0.21和Ambari-2.5.1.0。此处把slave3服务器做为源服务器。以下操作在slave3机器运行。
2) 下载压缩包
首先下载包含必要软件的压缩包(tarball)到本地,在https://docs.hortonworks.com/HDPDocuments/Ambari-2.5.1.0/bk_ambari-installation/content/ambari_repositories.html中,查看需要下载的tarball。下表为本平台所用的内容:
服务内容 Tarball源地址
Ambari http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.5.1.0/ambari-2.5.1.0-centos7.tar.gz
HDP http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.6.1.0/HDP-2.6.1.0-centos7-rpm.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
建立本地仓库,这里使用 httpd 来建立,安装启动httpd省略。解压三个包到 /var/www/html 目录下。
1 | $ tar -zxvf ambari-2.5.1-centos7.tar.gz -C /var/www/html/ |
3) 修改Repo
修改 ambari.repo,使之与 yum源机器匹配。
1 | $ cd /etc/yum.repos.d |
1 | $vi ambary.repo |
修改 HDP-UTILS.repo,使之与 yum源机器匹配。
1 | $vi ambary.repo |
4.2. 安装Ambari Server
在上述内容配置完成后,安装ambari-service。出现Complete! 则可
1 | $ yum install ambari-server |
启动Ambari-server服务,出现提示后,根据提示填写相应的回答。
1 | $ ambari-server setup |
看到以上结果后,安装成功。
上面出现如下错误
下载mysql_jdbc驱动,放到/usr/share/java/目录,并重命名为mysql-connector-java.jar,否则后面安装会报错。
下载:https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
4.3. 初始化数据库
1 | cd /var/lib/ambari-server/resources/ |
没初始化数据库,启动服务会报如下错误
4.4. 启动服务
ambari-server start启动服务。
此时,登录192.168.1.168:8080,即可看到ambari的页面,如下:
4.5. 安装 HDP 集群
在ambari的登录页面中输入用户名:admin,密码:admin,即可开始准备创建集群。
1) 点击 launch install wizard ,开始创建一个集群,输入集群名称:BasicPlatform。
2) 修改下面红框的内容,选择HDP的版本为2.6,修改HDP-2.6的数据源Base URL为http://192.168.1.3/HDP/centos7/,修改HDP-UTILS的数据源Base URL为http://192.168.1.3/HDP-UTILS-1.1.0.21-centos7/。
3) 设置集群机器:输入Target Hosts如下:
备注,必须安装如下格式,不能使用hadoop2
hadoop2.zhjx
hadoop3.zhjx
hadoop4.zhjx
从master中拷贝出来id_rsa文件,通过选择文件,上传到ambari中。
点击确认后,开始向每个机器中安装ambari-client,稍等到下面页面,即可显示安装完成。
问题1:
centos7.3/4安装ambari2.6以上版本报EOF occurred in violation of protocol (_ssl.c:579)
解决办法:
4) 选择要安装的服务,与下图中的一致。
可先按照如下组件
HDFS、Hive、HBase、Sqoop、ZooKeeper、Flume
这里选择默认了,也可以自己调整
配置标红的组件,进行修改配置
5) 各个服务Master配置
详见附件2
6) 服务的Slaves 和 Clients节配置:
详见附件3
7) 服务详情配置
看到如下界面后,如有红色警告提示,根据警告修改服务详情内容,注意把Ooize等服务中使用的数据库改为MySQL数据库。
待确定完修改后的配置时,开始安装:
全部安装成功界面如下:
点击下一步,确定安装内容后,即可看到集群情况。
、Hadooop开启高可用(现在安装好Hadoop是不支高可用的,下面准备开启Hadoop高可用)
1、 开启高可用开关
3、 设置高可用名称(如果hbase是启动的话请关闭在开启HA高可用)
5. 安装ELK
5.1. 安装Elasticsearch
- 安装elasticsearch
下载地址: https://www.elastic.co/downloads/elasticsearch
下载对应的版本,下载后解压到想安装的文件夹中,因为es是绿色版本所以解压后就可以使用
./bin/elasticsearch其实是一个shell脚本,最终还是启动在java的虚拟机环境中,并加入了一定参数。
1 |
可执行文件目录:/usr/share/elasticsearch/
配置文件目录: /etc/elasticsearch/
日志文件目录:/var/log/elasticsearch/
data文件目录:/var/lib/elasticsearch/
pid文件路径:/var/run/elasticsearch/
日志文件:/var/log/elasticsearch/
- 启动elasticsearch
守护进程 ./bin/elasticsearch -d
前台运行 ./bin/elasticsearch
配合elasticsearch-servicewrapper 插件将脚本服务化更易管理 (2.x加不再支持,弃用)。
运行日志在../log/下,每一个索引一个文件,每日一个文件,包括运行的慢日志和服务日志。 - 测试elasticsearch
curl -XGET http://xxx:9200/?pretty5.2. 安装Kibana
下载页面:https://www.elastic.co/cn/downloads/kibana
安装rpm包,我的电脑是x64的所以下载64位的安装包,rpm包安装完毕后会自动在/etc/init.d/下生成执行脚本,提供给service/chkconfig,更方便我们使用。
1 |
5.3. 安装x-pack插件
官方下载地址:https://www.elastic.co/downloads/x-pack
官方文档地址:https://www.elastic.co/guide/en/x-pack/current/xpack-introduction.html
https://www.elastic.co/gu ide/en/x-pack/6.0/setting-up-authentication.html#set-built-in-user-passwords
- elasticsearch安装x-pack插件
如果是集群架构,则每一台新机器都需要安装插件。
kibana安装了x-pack,elasticsearch也必须要安装。
1 | /usr/share/elasticsea rch/bin/elasticsearch-plugin install x-pack |
- 其他安装
6.1. 安装VNC Service
由于165、166、167当做服务器的同时,也作为外网开发机使用,为了建立远程可编程环境,加入了可视化桌面也远程桌面,需要在每个机器上安装VNC Service。
1) 安装 X-Window
由于我们安装操作系统为最小化版本,因此首先需要安装 X-Window,在终端中运行下面的命令,安装会花费一点时间。
1 | $ yum check-update |
待安装完成后,修改系统启动界面为图形界面。
1 | $ unlink /etc/systemd/system/default.target |
重启电脑,重启完成后即可进入图形化界面。
2) 安装 VNC 服务器
1 | $ yum install tigervnc-server -y |
安装完成后后,我们需要在 /etc/systemd/system/ 目录里创建一个配置文件。我们可以将 /lib/systemd/sytem/vncserver@.service 拷贝一份配置文件范例过来。
1 | $cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver @:1.service |
打开 /etc/systemd/system/vncserver@:1.service ,找到下面这几行,用自己的用户名
1 | ExecStart=/sbin/runuser -l hadoop -c "/usr/bin/vncserver %i" |
如果是 root 用户则替换内容如下:
1 | ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i" |
修改完成后,按Esc退出编辑模式,!wq保存,下面重启 systemd。
1 | systemctl daemon-reload |
最后还要设置一下用户的 VNC 密码。要设置某个用户的密码,必须要有能通过 sudo 切换到用户的权限。这里我们用的root用户,直接输入一下代码即可。
1 | sudo vncpasswd |
3) 开启服务
用下面的命令(永久地)开启服务:
1 | sudo systemctl enable vncserver@:1.service |
启动服务。
1 | sudo systemctl start vncserver@:1.service |
4) 用 VNC 客户端连接服务器
要使用 VNC 连接服务器,我们还需要一个在本地计算机上安装的仅供连接远程计算机使用的 VNC 客户端。
可以用像 Tightvnc viewer 和 Realvnc viewer 的客户端来连接到服务器。此处用RealVNC Viewer连接,配置如下:
要用更多的用户连接,需要创建配置文件和端口,请回到第2步,添加一个新的用户和端口。你需要创建 vncserver@:2.service 并替换配置文件里的用户名和之后步骤里相应的文件名、端口号。请确保你登录 VNC 服务器用的是你之前配置 VNC 密码的时候使用的那个用户名。
VNC 服务本身使用的是5900端口。鉴于有不同的用户使用 VNC ,每个人的连接都会获得不同的端口。配置文件名里面的数字告诉 VNC 服务器把服务运行在5900的子端口上。在我们这个例子里,第一个 VNC 服务会运行在5901(5900 + 1)端口上,之后的依次增加,运行在5900 + x 号端口上。其中 x 是指之后用户的配置文件名 vncserver@:x.service 里面的 x 。
在建立连接之前,我们需要知道服务器的 IP 地址和端口。IP 地址是一台计算机在网络中的独特的识别号码。我的服务器的 IP 地址是96.126.120.92,VNC 用户端口是1。
附件1:账户密码表
表 2 系统用户表
Hostname 角色 登录名/密码 备注
Master root root/123456
Slave1 root root/123456 系统管理员
Slave2 root root/123456 系统管理员
Slave3 root root/123456 系统管理员
注*:大小写敏感
表 3 数据库用户表
数据库 角色 登录名/密码 作用域 备注
MySQL DBA root/ localhost
MySQL DBA zhjx/1234 %
注*:大小写敏感
表 4 服务用户表
服务名称 角色 登录名/密码 作用域 备注
Ambari superuser admin/admin
HUE DBA root/123456 %
注:大小写敏感