最近做了一个大数据项目,研究了下集群的搭建,现在将集群搭建整理的资料与大家分享一下!如有疑问可在评论区回复。
1前置配置
Centos7系统,每台系统都有java运行环境
全程使用root用户,避免安装过程中出现权限不足等情况
1.1 关闭防火墙
所有节点都要设置
Centos 7 命令
查看防火墙状态
firewall-cmd --state
systemctl disable firewalld
systemctl stop firewalld
Centos 6 命令
chkconfig iptables off
/etc/init.d/iptables stop
1.2 修改主机名
(首先所有节点如果没有vim工具,先进行安装:yum install vim -y)
#Master
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master
#Slave1
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=slave1
#Slave2
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=slave2
1.3 修改HOST
#Master、Slave1、Slave2
vim /etc/hosts
192.168.11.35 master
192.168.11.32 slave1
192.168.11.33 slave2
192.168.11.34 slave3
1.4 关闭Selinux所有机器
master、slave1、slave2
vim /etc/sysconfig/selinux
selinux=disabled
修改配置文件后需要重启机器
reboot
1.5 开启NTP服务
所有集群上节点都需要操作
Centos 7 命令
yum -y install ntp
systemctl is-enabled ntpd
systemctl enable ntpd
systemctl start ntpd
Centos 6 命令
yum install ntpd
chkconfig --list ntpd
chkconfig ntpd
service ntpd start
1.6 检查最大打开文件描述符
推荐的最大打开文件描述符数为10000或更多。要检查为打开的文件描述符的最大数量设置的当前值,请在每个主机上执行以下shell命令:
ulimit -Sn
ulimit -Hn
如果输出不大于10000,请运行以下命令将其设置为合适的默认值:
ulimit -n 10000
1.7 设置服务器允许其他服务ssh免密链接
1.7.1 确认系统已经安装了SSH。
rpm -qa | grep openssh
rpm -qa | grep rsync
-->出现如下图的信息表示已安装
假设没有安装ssh和rsync,可以通过下面命令进行安装。
安装SSH协议
yum install ssh
rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件
yum install rsync
-->启动服务
service sshd restart
1.7.2 生成密钥对
每台服务器分别执行
ssh-keygen -t rsa -P ''
直接回车生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/root/.ssh"目录下。
把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改授权key的权限
chmod 600 ~/.ssh/authorized_keys
使用root用户修改配置文件
vim /etc/ssh/sshd_config
取消该三个属性的注释
测试连接
重启ssh服务
service sshd restart
切换成普通用户
su zchx
连接普通用户测试
ssh localhost
1.7.3 相互追加Key
#Master
ssh slave1 cat /root/.ssh/authorized_keys >> /root/.ssh/authorized_keys
ssh slave2 cat /root/.ssh/authorized_keys >> /root/.ssh/authorized_keys
ssh slave3 cat /root/.ssh/authorized_keys >> /root/.ssh/authorized_keys
#Slave1
ssh master cat /root/.ssh/authorized_keys > /root/.ssh/authorized_keys
#Slave2
ssh master cat /root/.ssh/authorized_keys > /root/.ssh/authorized_keys
#Slave3
ssh master cat /root/.ssh/authorized_keys > /root/.ssh/authorized_keys
1.8 JAVA开发环境JDK安装
1.8.1 安装JDK
安装环境:CentOS7 (后台)
1.检查系统中的jdk版本
显示:
2.检测jdk安装包
(如果显示有预装JDK需要进行卸载,如果没有显示就进行下一步)
rpm -qa|grep java
显示:
3.卸载openjdk
4.yum remove *openjdk*
检查:
rpm -qa|grep java
显示:
5.所有节点在usr目录下创建一个java文件夹
cd usr
mkdir java
6.所有节点将下好的JDK安装包放进java文件夹下并解压
通过ftp工具连接虚拟机将安装包(tar -zxvf jdk-8u11-linux-x64.tar.gz)上传到各个节点的/urs/java路径下
7.切换目录:cd /usr/java
8.解压:tar -zxvf jdk-8u11-linux-x64.tar.gz
1.8.2 配置JDK环境变量
vi /etc/profile
·进入编辑模式:点击i
新增如下配置:
export JAVA_HOME=/usr/java/jdk1.8.0_11
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
退出编辑模式 esc
保存退出:wq
执行profile文件
source /etc/profile
9检查新安装的jdk
2 安装pdsh RPM
master节点
使用root用户安装pdsh RPM的EPEL存储库
在master服务器执行
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
接下来执行安装程序命令
yum -y install pdsh-rcmd-ssh
3 集群节点配置
3.1 安装Ambari库
master节点对slave1的配置
pdsh -w slave1 "wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.2.1.0/ambari.repo -O /etc/yum.repos.d/ambari.repo"
pdsh -w slave1 "yum -y install ambari-agent"
在节点上设置ambari服务器主机名
pdsh -w slave1 "sed -i 's/hostname=localhost/hostname=master/g' /etc/ambari-agent/conf/ambari-agent.ini"
pdsh -w slave1 "service ambari-agent start" | sort
master节点对slave2的配置
pdsh -w slave2 "wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.2.1.0/ambari.repo -O /etc/yum.repos.d/ambari.repo"
pdsh -w slave2 "yum -y install ambari-agent"
pdsh -w slave2 "sed -i 's/hostname=localhost/hostname=master/g' /etc/ambari-agent/conf/ambari-agent.ini"
pdsh -w slave2 "service ambari-agent start" | sort
3.2 安装Ambari服务器
master节点上执行命令:
wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.2.1.0/ambari.repo -O /etc/yum.repos.d/ambari.repo
yum -y install ambari-server
yum -y install ambari-agent
service ambari-agent start
3.3 配置Ambari
ambari-server setup
下面为图文描述
Using python /usr/bin/python2
Setup ambari-server
Checking SELinux...
SELinux status is 'disabled'
Customize user account for ambari-server daemon [y/n] (n)? y
Enter user account for ambari-server daemon (root):root
Adjusting ambari-server permissions and ownership...
Checking firewall status...
Redirecting to /bin/systemctl status iptables.service
Checking JDK...
[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
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: /usr/java/jdk1.8.0_11
Validating JDK on Ambari Server...done.
Completing setup...
Configuring database...
Enter advanced database configuration [y/n] (n)? y
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 (1): 1
Database name (ambari): ambari
Postgres schema (ambari): ambari
Username (ambari): ambari
Enter Database Password (bigdata): bigdata
Default properties detected. Using built-in database.
Configuring ambari database...
Checking PostgreSQL...
Running initdb: This may take upto a minute.
Initializing database ... OK
About to start PostgreSQL
Configuring local database...
Connecting to local database...done.
Configuring PostgreSQL...
Restarting PostgreSQL
Extracting system views...
ambari-admin-2.2.1.0.161.jar
......
Adjusting ambari-server permissions and ownership...
Ambari Server 'setup' completed successfully.
3.4 启动Amabri
执行启动命令,启动Ambari服务
ambari-server start
成功启动后在浏览器输入Ambari地址:
http://192.168.11.35:8080/
admin/admin
登录成功后出现下面的界面,至此Ambari的安装成功
4 安装HDP 2.4.0配置集群
点击上面登录成功页面的Launch Install Wizard 按钮进行集群配置
4.1 设置集群名称
4.2 设置HDP安装源
选择HDP2.4 ,并且设置Advanced Repository Options 的信息,本次使用本地源,所以修改对用系统的安装源为本地源地址。
4.3 设置集群机器 (私钥文件地址/root/.ssh/id_rsa)
more /root/.ssh/id_rsa
私钥文件从master节点中选取,复制文件内容粘贴到输入框中
提示主机名无效,直接点击确定
4.4 Host 确认
C:\Windows\System32\drivers\etc\hosts
修改本地host文件地址
添加如下配置
192.168.11.35 master
192.168.11.32 slave1
192.168.11.33 slave2
192.168.11.34 slave3
确认前面配置集群中hosts列表中的机器是否都可用,也可以移除相关机器,集群中机器Success后进行下一步操作。
如果有异常提示的话,需要根据异常类型和相关提示解决方案处理,处理完成后再次进行验证,此处为告警,不影响后续服务所以直接下一步
4.5 选择要安装的服务
服务较多,目前先安装zoopekker和Ambari Metrics,后续在根据需要安装其他服务
4.6 各个服务Master配置
4.7 服务的Slaves和Clients节配置
4.8 服务的客制化配置,这些参数待集群建好后都是可以再调整的。(有些组件需要让你设定密码,例如hive)
4.9 修改项
4.9.1 HDFS hdfs-site
修改hdfs-site.xml增加如下选项
4.9.1.1 无法写入
环境中有4个datanode,备份数量设置的是3。在写操作时,它会在pipeline中写3个机器。默认replace-datanode-on-failure.policy是DEFAULT,如果系统中的datanode大于等于3,它会找另外一个datanode来拷贝。目前机器只有3台,因此只要一台datanode出问题,就一直无法写入成功。
对于dfs.client.block.write.replace-datanode-on-failure.enable,客户端在写失败的时候,是否使用更换策略,默认是true没有问题。
对于,dfs.client.block.write.replace-datanode-on-failure.policy,default在3个或以上备份的时候,是会尝试更换结点尝试写入datanode。而在两个备份的时候,不更换datanode,直接开始写。对于3个datanode的集群,只要一个节点没响应写入就会出问题,所以可以关掉。
解决办法:修改hdfs-site.xml文件,添加或者修改如下两项:
4.9.1.2 root用户没有hdfs目录的操作权限
通过ambari后台HDFS-Configs-Advanced-Advanced hdfs-site 配置项
dfs.permissions.enabled属性设置为 false
问题原因为hdfs服务在不修改权限认证的情况下,只接受hdfs用户操作,改选项在系统安装完毕后需要关闭,或者在安装前自定义设置时直接关闭
4.9.1.3 数据备份修改
数据默认备份三份,放在不同节点,项目对数据的备份要求不高,所以需要修改数据备份份数为一份.
修改方式:在 ambari界面中的HDFS选项的Config界面中的Advanced配置中修改,General下的Block replication值为1(设置备份数据的份数为1)
并且修改Adcance hdfs-site配置下的dfs.replication.max值为1(设置最大的本分数据的分数)
注:如果该数据块
的副本经常丢失,导致在环境中太多的节点处复制了超过dfs.replication.max的副本数,那么就不再复制了。
4.9.2 HDFS core-site
添加hadoop.proxyuser.root.groups属性设置为 *
添加hadoop.proxyuser.root.hosts属性设置为 *
“*”表示可通过超级代理“xxx”操作hadoop的用户、用户组和主机
主要原因是hadoop引入了一个安全伪装机制,使得hadoop 不允许上层系统直接将实际用户传递到hadoop层,而是将实际用户传递给一个超级代理,由此代理在hadoop上执行操作,避免任意客户端随意操作hadoop
该选项在系统安装完毕后扩展,或者在安装前自定义设置时直接添加
此处有提示,可以直接运行,也可以按照提示的参数修改为推荐值
4.9.3 spark运行内存
修改spark的配置项,
Advanced spark-thrift-sparkconf
将spark.executor.memory配置项的值由1g修改为4g
此处修改根据服务器内存大小动态配置,内存越大spark内存可缓存数据量越大,处理速度越快
Hbase配置
自定义 hbase-site 添加
# zookeeper服务自动拉起
hbase.reginserver.restart.on.zk.expire=true
Server配置
HBase Master Maximum Memory 设置成4G
# RegionServer处理个数
Number of Handlers per RegionServer设置成100
Timeouts配置
Zookeeper Session Timeout设置成2分钟超时
HBase RPC Timeout 设置成2分钟超时
4.10 显示配置信息
4.11 开始安装
安装完毕
4.12 安装其他组件
此时选择安装spark和spark依赖的一些服务,服务可以分散化,避免master节点消耗过多
安装hive需要hive数据库
此时需要修改postgres数据库的外网访问权限
vim /var/lib/pgsql/data/pg_hba.conf
在文件末尾追加一行
host all all 0.0.0.0/0 md5
表示允许地址在0.0.0.0-255.255.255.255范围内的客户端,通过MD5加密的密码,使用任意用户连接任意数据库。
修改完成之后,重启一下数据库
查看可执行命令
service postgresql –help
执行重启命令
service postgresql restart
将数据库的jdbc驱动文件上传到master节点下
创建目录,将驱动jar包上传到该目录下
/usr/drivers/postgres
在master服务器调用命令指定服务使用的驱动jar
ambari-server setup --jdbc-db=postgres --jdbc-driver=/usr/drivers/postgres/postgresql-9.3-1102-jdbc4.jar
建立数据库表
首先修改一下master节点数据库的登录名的密码
sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'postgres';
\q
然後使用数据库连接工具进行数据库连接:
IP:master节点的ip
端口号:5432(默认)
维护数据库:postgres
用户名:postgres
密码postgers
连接数据库后新建一个hive数据表
链接测试通过
准备安装
安装完毕之后需要重新启动其他服务
5 后置工作
5.1 python环境配置修改
#集群每个节点都执行该语句
sed -i 's/verify=platform_default/verify=disable/' /etc/python/cert-verification.cfg
禁用Python的验证,避免系统重启后集群无法验证导致各个节点服务无法通信
修改完成后可以尝试强行断开服务器电源导致服务器关机等场景测试服务器启动后是否可以正常连接集群
6 服务操作
6.1 集群监听服务
监听服务相关命令
[root@slave1 ~]# ambari-agent help
Usage: /usr/sbin/ambari-agent {start|stop|restart|status|reset
6.2 集群管理服务
集群管理服务相关命令
[root@master ~]# ambari-server help
Using python /usr/bin/python2
Usage: /usr/sbin/ambari-server
{start|stop|restart|setup|setup-jce|upgrade|status|upgradestack|setup-ldap|sync-ldap|set-current|setup-security|refresh-stack-hash|backup|restore|update-host-names} [options]
Use usr/sbin/ambari-server
Or, simply invoke ambari-server.py --help to print the options.
6.3 最新版安装方式
wget -nv http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.6.2.0/ambari.repo -O /etc/yum.repos.d/ambari.repo
修改repo文件里的资源路径到本地路径
将安装包放到http服务中
http://master/ambari/centos7/2.6.2.0-155/
选择本地化redhat7的资源
http://master/HDP/centos7/2.6.5.0-292/
http://master/HDP-GPL/centos7/2.6.5.0-292/
http://master/HDP-UTILS/
Ambari:安装包
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.6.2.0/ambari-2.6.2.0-centos7.tar.gz
HDP-2.6.5.0资源
HDP:http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.6.5.0/HDP-2.6.5.0-centos7-rpm.tar.gz
HDP-UTILS:http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.22/repos/centos7/HDP-UTILS-1.1.0.22-centos7.tar.gz
HDP-GPL:http://public-repo-1.hortonworks.com/HDP-GPL/centos7/2.x/updates/2.6.5.0/HDP-GPL-2.6.5.0-centos7-gpl.tar.gz