Hadoop集群部署
1、Hadoop集群配置
1)网络配置:为每台机器配置号固定IP、设置开机自动连接
查看网卡的信息找到激活的网卡:
dmesg | grep -i ‘eth‘
通过ethtool $ethx来查看网卡详细信息,x为网卡编号:
# ethtool eth4
[[email protected] network-scripts]# vi /etc/sysconfig/network-scripts/ifcfg-p4p1
DEVICE="p4p1"
BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="d7092751-dc05-4113-8365-249f18c43247"
HWADDR=78:45:C4:18:27:71
DNS1=8.8.8.8
IPADDR=192.168.4.240
PREFIX=24
NETMASK=255.255.255.0
GATEWAY=192.168.4.254
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System p4p1"
2)修改主机名(hostname)、重启生效
#vi /etc/sysconfig/network
HOSTNAME=cloud240
3)关闭selinux(必须) 、重启生效
#vi /etc/selinux/config
将SELINUX改为disabled(进入vi编辑界面后,按i进行编辑,编辑完成后,按ESC、:wq保存。)
注释掉SELINUX=enforcing
添加SELINUX=disabled
实际操作:
4)子节点互通配置
#vi /etc/hosts
添加节点IP 对应主机名(一个主机信息算一行)按“o”切换一行
重要!!!
注:执行安装cloudera-manager-installer.bin文件时需要在/etc/hosts文件中加“本地源IP archive.cloudera.com”,在安装完这个之后注释掉该行。
实际操作:
注:若此192.168.4.239本地源IP地址为集群中的某一slave(节点),则需要同时写上“本地源IP archive.cloudera.com”、“本地源IP 本地源主机”于/etc/hosts文件内,并且必须在cloudera-manager-installer.bin安装完成后删除“本地源IP archive.cloudera.com”再开始安装CDH(否则可能会出错,至少会出现该节点在集群中的主机名变为archive.cloudera.com)。
5)用户sudo功能设置
#vi /etc/sudoers
添加行:systemuserName ALL=(ALL) NOPASSWD:ALL
本文采用:boco ALL=(ALL) NOPASSWD:ALL
实际操作:
vi /etc/sudoers
6)配置yum源(此步骤的测试最好等配置完所有再进行)
验证yum源:
#yum clean all
#yum makecache
#yum list
注意:若安装bin文件或CDH出现问题请将上述搭建本地yum源时的目录中的5.X改为5再重新执行#createrepo .
Web页面查看
A、搭建本地yun源
1上传以下5个文件至/home/boco
createrepo-0.9.8-5.el6.noarch.rpm
deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
ftp-0.17-51.1.el6.x86_64.rpm
python-deltarpm-3.5-0.5.20090913git.el6.x86_64.rpm
vsftpd-2.2.2-11.el6.x86_64.rpm
2安装rpm包
rpm -ivh --force --nodeps *.rpm
3创建数据源(注:此路径中最好将5.3改为5)
# mkdir -p /var/www/html/centos/cm5/redhat/6/x86_64/cm/5.3/RPMS/x86_64/
# mkdir /var/www/html/centos/cm5/redhat/6/x86_64/cm/5.3/repodata/
# mkdir -p /var/www/html/centos/cdh5/parcels/5.3.0/
# mkdir /var/www/html/centos/mysql/
传以下文件至/var/www/html/centos/cm5/redhat/6/x86_64/cm/5.3/RPMS/x86_64/
cloudera-manager-agent-5.4.5-1.cm545.p0.5.el6.x86_64.rpm
cloudera-manager-daemons-5.4.5-1.cm545.p0.5.el6.x86_64.rpm
cloudera-manager-server-5.4.5-1.cm545.p0.5.el6.x86_64.rpm
cloudera-manager-server-db-2-5.4.5-1.cm545.p0.5.el6.x86_64.rpm
enterprise-debuginfo-5.4.5-1.cm545.p0.5.el6.x86_64.rpm
oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
传以下文件至/var/www/html/centos/cm5/redhat/6/x86_64/cm/5.3/repodata/
filelists.xml.gz filelists.xml.gz.asc
primary.xml.gz primary.xml.gz.asc
传以下文件至/var/www/html/centos/cdh5/parcels/5.3.0/
CDH-5.3.0-1.cdh5.3.0.p0.30-el6.parcel manifest.json
传以下文件至/var/www/html/centos/mysql/
mysql-connector-java-5.1.12-2.el6.x86_64.rpm
mysql-connector-java-5.1.17-6.el6.noarch.rpm(有效)
传一下文件至/var/www/html/centos/cm5/redhat/6/x86_64/cm(签名密钥)
RPM-GPG-KEY-cloudera
4进入目录/var/www/html/centos/
执行命令:# createrepo . (执行此命名令是为了让以上配置生效可用)
B、数据源指向配置(把/etc/yum.repos.d/ *.repo文件发送到其他节点)
注:在利用浏览器检测验证时若yum源存在
每个节点操作:
以某台Linux主机作为这些节点的源(创建/修改cetos.repo文件)
#vi /etc/yum.repos.d/cetos.repo
[centos]
name=centos
baseurl=http://192.168.4.242/centos/
enabled=1
gpgcheck=0
#vi /etc/yum.repos.d/cloudera.repo
[cloudera-manager]
name = Cloudera Manager, Version cm5.3
baseurl = http://192.168.4.242/centos/cm5/redhat/6/x86_64/cm/5.3/
gpgcheck = 0
实际操作:
7)关闭防火墙(centos6和centos7不同)
Centos6方式:
#service iptables stop #service ip6tables stop
#service iptables status #service ip6tables status(查看状态)
设置为开机自动关闭防火墙
#vi /etc/rc.local
添加行:service iptables stop(最好再加一行chkconfig iptables off)
centos7方式:
systemctl start firewalld.service#启动firewall
systemctl stop firewalld.service#停止firewall
systemctl disable firewalld.service#禁止firewall开机启动
8)配置ssh免key
ssh无密码访问(第1条在每台虚拟机上执行完后,再执行第2条,在不同用户下都要执行):
ssh-keygen -t rsa(一路回车)
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@主机名(将rsa密钥分别copy到所有主机,包括自己)
9)配置时间同步(可采用多种方式,以某一台节点为标准做同步)
采用NTP server同步
一台节点作为NTP服务器,其余节点作为NTP客户端
NTP服务器配置:
#vi /etc/ntp.conf
服务:添加 restrict 192.168.8.1/24 mask 225.225.225.0 nomodify
service time.nist.gov(且注释原有的service)
NTP客户端配置:
客户端:添加:servier 服务端ip iburst
以上配置完成后,重启ntp服务,执行service ntpd restart,并设置开机自启。
scp 192.168.8.233:/etc/ntp.conf /etc ——scp 目标文件 传到目的路径
scp -r /etc/ntp.conf 192.168.8.101:/etc/
时钟同步检测
1.启动ntpd服务:
# service ntpd start(客户端/服务端 都执行)
2.同步客户端时间:
# ntpdate -u 192.168.8.161(服务端IP)
硬件时间与系统时间同步
hwclock –systohc
设置硬件时间
hwclock --set --date="03/24/14 22:22:00"
显示硬件时间
hwclock
同步系统时钟与硬件时钟
hwclock --hctosys
10)安装系统默认jdk
获取Rpm包的方法:Scp,FTP上传,wget
(http://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5/RPMS/x86_64/oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm)
安装rpm包命令:rpm -ivh --nodeps --force oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
- 寻找JDK(查询某个文件命令:find /var/www/html/ -name "ora*.rpm")
- 发送jdk到各自主机
- 安装:# rpm -ivh --nodeps --force oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
此处建议使用环境所需/最稳定版本,如jdk1.7.0_51
A、建议采用rpm包直接安装,然后配置环境变量
B、也可采用解压包的方式,如tar -zxvf jdk1.7.0_51.tar.gz(注意:若用解压缩方式,需要解压至/usr/目录下,因为cloudera-manager默认从/usr/目录下寻找JAVA_HOME,并且寻找的优先级按系统默认à版本高低检测,如其在/usr/目录下找不到合适的JAVA_HOME则会报错找不到JAVA,服务将无法启动)
查找rpm包的安装路径:(rpm -qpql oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm)
root用户执行:
第一句:系统jdk提名 第二句:实际采用默认jdk
update-alternatives --install /usr/bin/java java /usr/share/jdk1.7.0_51/bin 300
update-alternatives --config java
如此使得自己所选定的jdk版本作为系统所有用户默认。
环境变量配置
#vi /etc/profile
export JAVA_HOME="/usr/java/jdk1.7.0_67-cloudera"
###export JAVA_HOME="/usr/java/jdk1.8.0_144"
export PATH="$PATH:$JAVA_HOME/bin"
export JRE_HOME="$JAVA_HOME/jre"
export CLASSPATH=".:$JAVA_HOME/lib:$JRE_HOME/lib"
#source /etc/profile(让该文件生效)
11)安装mysql的jdbc驱动
#yum clean all
#yum makecache
#yum install mysql-connector-java
此步骤为Hive、Oozie、Activity Monitor配置mysql数据库连接做准备
12)安装mysql(centos6)/ mariadb(centos7)数据库
此步骤为配置自定义数据库mysql准备,centos7中将mysql更名为mariadb。
Centos7 mariadb 安装步骤
1.安装数据库
yum install -y mariadb
yum install -y mariadb-server
2.查看数据库状态
service mariadb status
3.卸载数据库
(1).把原来的软件卸载掉
rpm -qa | grep mariadb*
rpm -e mariadb-devel(后面自己一个一个卸载)
(2).删除之前卸载残留及配置文件
find / -name "mariadb" -exec rm -rf {} \;
rpm -e mysql-community-client-5.7.16-1.el7.x86_64
Centos6 mysql 安装步骤
1.安装数据库(yum源方式安装)
(1).安装mysql服务器端
yum -y install mysql-server
yum -y install mysql-devel
(2).安装mysql客户端:
yum -y install mysql
2.卸载数据
若之前通过yum源安装过mysql,可以通过命令卸载:yum remove mysql-server
13).安装 cloudera-manager-agent 依赖的包mod_ssl-2.2.15-15.el6.centos.1.x86_64
rpm -ivh --nodeps --force mod_ssl-2.2.15-15.el6.centos.1.x86_64
2、CM、CDH安装
1.重启节点 reboot
注意:全程保证防火墙关闭、httpd服务的开启
确保ntp和http服务开机自启:
Httpd服务重启:service httpd restart
ntpd 服务重启:service ntpd restart(时间同步)
节点自启设置
# chkconfig ntpd on
# chkconfig httpd on
端口监听: lsof -i:8080(端口号)
1)配置CM、CDH数据包作为本地yum源、启动http服务器
数据源指向即/etc/yum.repos.d/centos的文件内容配置
#service httpd start
2)安装CM(boco用户操作)
A、下载cloudera-manager-installer.bin 至/home/boco
#wget http://archive.cloudera.com/cm5/installer/5.3.0/cloudera-manager-installer.bin
(可本地由官网下载上传,也可配进数据源wget)
执行安装引导程序命令:./cloudera-manager-installer.bin
如果没反应,应该是权限不足 chmod 777 cloudera-manager-installer.bin
或chmod +x cloudera-manager-installer.bin
B、给cloudera-manager-installer.bin文件赋权限
#sudo chmod 777 cloudera-manager-installer.bin
C、执行cloudera-manager-installer.bin文件以安装CM
#sudo ./cloudera-manager-installer.bin
之后所有操作都直接点击下一步。
验证yum需要的一个包是否安装(mod_ssl-2.2.15-15.el6.centos.1.x86_64.rpm)
# rpm -qa | grep mod_ssl-2.2.15-15.el6.centos.1.x86_64
# rpm -ivh --nodeps --force mod_ssl-2.2.15-15.el6.centos.1.x86_64.rpm
# rpm -qa | grep mod_ssl-2.2.15-15.el6.centos.1.x86_64
如果中途安装错误:
3)安装CDH
A、登陆web页面
用哪个主机作为主节点(安装CM的节点),就用哪个IP登陆 IP:7180
登陆用户名、密码:admin/admin
B、点击继续直至为CDH集群安装指定主机
C、为CDH集群安装指定主机
输入所有主机IP或hostname,点击搜索,主机准备就绪后继续下一步
D、数据包选取
按照yum源的数据包配置填写
A、使用parcel包
添加一个路径http://192.168.4.242/centos/cdh5/parcels/5.3/
http://192.168.8.124/centos/cdh5/parcels/5/
解释(主要是需找Parent Directory文件)
B、自定义Cloudera Manager Agent的存储库
使用yum源配置的地址:
Agent包
http://192.168.4.242/centos/cm5/redhat/6/x86_64/cm/5.3.0/
签名密钥
http://192.168.4.242/centos/cm5/redhat/6/x86_64/cm/RPM-GPG-KEY-cloudera
E、提供ssh登陆凭据
选择其他用户,如boco。
本步骤结束后,开始下载安装
F、选取服务
选择自定义添加服务,手动添加所需服务
G、数据库设置
(先采取默认选择,安装成功后再配置Hive连接mysql)
使用默认的嵌入式数据库,测试连接,执行下一步。
H、群集设置
自定义角色分配,根据各服务间依赖选择
I、审核配置更改
一般只修改HDFS的角色目录,即将/dfs/XX的目录配置改为/home/dfs/XX
J、启动群集服务
K、CDH安装成功
实际操作:
数据库设置
这一步选择使用嵌入式数据库,则在集群部署好之后重新配置mysql,即执行3、配置问题 1)操作;
若选用自定义mysql数据库,则先做3、配置问题 1)操作前4步,执行完毕后在下面页面选择自定义数据库-mysql,页面配置成功后测试连接校验。
此步骤根据个人习惯选择
3、配置问题
1)自定义数据库--配置mysql/mariadb
(1)、安装mysql-connector-java(yum安装成功的前提)
#yum install mysql-connector-java
(2)、创建软链接:
(上传mysql-connector-java-XXX.jar到目录/user/share/java/)
#cd /user/share/java/
#ln -s mysql-connector-java-5.1.17.jar mysql-connector-java.jar
该步骤操作与否取决于系统是否自动执行,一般安装mysql-connector-java后系统会自动做这些操作,但是也有例外。
(3)、mysql/mariadb数据库配置
A、进入mysql
>MySQL -u root -p 123456(设置连接密码)
http://blog.chinaunix.net/uid-23215128-id-2951624.html
命令行输入mysql
下面命令含义是创建hive数据库、建立hive用户,密码也为hive,且支持远程访问
B、创建所需数据库
mysql> create database hive DEFAULT CHARACTER SET utf8;
C、给该数据库对所有用户授权
mysql>grant all privileges on hive.* to ‘hive‘@‘节点IP‘ identified by ‘hive‘;
(4)、刷新使生效
Mysql>FLUSH PRIVILEGES;(在mysql中执行)
(5)、web页面配置修改hive数据库
配置更改后,部署客户端配置,在Hive服务停止状态下,点击操作,执行弹出的创建Hive Metastore 数据库表,成功后重启Hive服务。
2)安装redis(boco用户操作)
A、下载redis包
#cd /home/boco
#mkdir redis
#wget http://redis.googlecode.com/files/redis-2.8.2.tar.gz
B、解压缩
#tar -xvf redis-2.8.2.tar.gz
C、编译
#cd /home/boco/redis/redis-2.8.2
#make
#make install
D、修改配置文件redis.conf
#vi /home/boco/redis/redis-2.8.2/redis.conf
将daemonize no改为daemonize yes
如下:
E、将redis-benchmark、redis-cli、redis.conf、redis-server复制至/usr/local/redis
# sudo mkdir /usr/local/redis
# sudo cp src/redis-benchmark /usr/local/redis/
# sudo cp src/redis-cli /usr/local/redis/
# sudo cp src/redis-server /usr/local/redis/
# sudo cp redis.conf /usr/local/redis/
F、启动redis服务
#/usr/local/redis/redis-server /usr/local/redis/redis.conf或
#cd /home/boco/redis/redis-2.8.2/src #./redis-server
G、连接redis
#/usr/local/redis/redis-cli或
#cd /home/boco/redis/redis-2.8.2/src #./redis -cli
H、设置连接密码
# vi /redis/redis.conf
修改# requirepass foobared为requirepass ocob,ocob即为密码
I、重新登录用法
# /usr/local/redis/redis-cli -h 192.168.8.161 -p 6379 -a ocob
3)配置Oozie连接mysql
A、web页面修改Oozie的默认数据库为mysql
B、复制mysql的jdbc驱动包
/opt/cloudera/parcels/CDH/lib/oozie/libserver
一般安装了mysql-connector-java后该包会在/usr/share/java目录下
#cd /usr/share/java/
#cp mysql-connector-java-5.1.17.jar /opt/cloudera/parcels/CDH/lib/oozie/libserver
#cd /opt/cloudera/parcels/CDH/lib/oozie/libserver
#ln -s mysql-connector-java-5.1.17.jar mysql-connector-java.jar
C、创建所需数据库
mysql -u root –p
mysql> create database hive DEFAULT CHARACTER SET utf8;
mysql>grant all privileges on oozie.* to ‘oozie‘@‘节点IP‘ identified by ‘oozie‘;
mysql>FLUSH PRIVILEGES;
D、开启oozie管理界面
将ext2.2文件夹放入/var/lib/oozie/
E、安装共享库
4)安装greenplum-db库(gpadmin用户操作)
A、操作系统信息
# cat /etc/issue # uname -a
B、创建用户和组gpadmin
C、配置内核参数
修改内核参数配置
# vi /etc/sysctl.conf
所示参数可以根据自己系统配置做适当修改
手工执行命令,让参数生效
# sysctl -p
在limits.conf文件中添加如下配置
修改内核参数,添加如下配置,调整IO调度算法:(重启系统才能生效)
设置磁盘预读,优化磁盘IO效率(重启系统才能生效)
重启机器
# reboot
验证内核参数配置是否生效:
# cat /sys/block/*/queue/scheduler
……
noop anticipatory deadline [cfq]
输出的行应该含有[deadline]
验证磁盘预读配置:
# blockdev --getra /dev/sd*
修改磁盘预读配置前
修改磁盘预读配置前
证明修改磁盘预读配置成功。
D、配置域名解析
此处采用的是单机测试环境,选择使用hosts来解析
# vi /etc/hosts
修改主机名,本文采用主机名为cloud239
E、配置用户无密码登陆
F、安装
解压GP软件
# unzip greenplum-db-4.3.0.0-build-3-RHEL5-x86_64.zip
得到greenplum-db-4.3.5.1-build-1-RHEL5-x86_64.bin和README_INSTALL
执行安装操作
# ./greenplum-db-4.3.5.1-build-1-RHEL5-x86_64.bin
安装结束.bin文件结束创建创建所需目录
创建所需目录/home/gpadmin/tol/master、/home/gpadmin/tol/data/gp[1~4](4个)
以上目录的位置是自己定义,切记别创建在主分区,即/tol/XXX,否则会导致主分区剩余空间不足,从而影响其他程序的使用。
G、修改gpadmin用户环境配置
编辑.bash_profile文件
# cd /home/gpadmin
# vi .bash_profile
使上一步操作生效:
# . .bash_profile
编辑all_hosts_file文件,添加如下内容:
# cd /home/gpadmin
# vi all_hosts_file
执行如下命令验证用户等效性:
# gpssh-exkeys -f all_hosts_file
H、初始化系统
编辑系统初始化的参数文件
这个文件的编辑可以使用模版,模板文件所在目录如下:
操作如图:
注意去掉DATABASE_NAME前面的#号
编辑seg_hosts_file文件:
# vi seg_hosts_file
执行初始化系统命令:
# gpinitsystem -c gpinitsystem_config -h seg_hosts_file
系统开始初始化,之后会看到如下提示:
Continue with Greenplum creation Yy/Nn>
输入 Y ,按回车,系统会初始化完成
初始化完成就可以查看/home/gpadmin/tol/data/gp*/多出文件
安装结束后可以连接GP数据库了:
Greenplum库安装完成
5 ) 在hdfs上创建目录
[[email protected] ~]$ sudo -u hdfs hadoop fs -mkdir /user/boco
[[email protected] ~]$ sudo -u hdfs hadoop fs -chown boco:boco /user/boco
[[email protected] ~]$ sudo -u hdfs hadoop fs -mkdir /user/root
[[email protected] ~]$ sudo -u hdfs hadoop fs -chown root:root /user/root
6)参数优化
此参数为128G内存,48核,7*1T硬盘服务器部署的Hadoop集群
4、注意事项
1)Hadoop 删除垃圾箱的方法
hadoop fs -ls .Trash
hadoop fs –rmr .Trash/*
2)查看8920端口使用情况
netstat -apn |grep 8920
3)服务都变成绿色的办法
点击主机------à编辑与配置---------à监控
5、FAQ
5.1 CDH安装时报错之下图
详细信息中有mod_ssl字段
原因:缺少 mod_ssl 的包
解决方法:安装mod_ssl,执行#rpm -ivh mod_ssl-2.2.15-26.el6.centos.x86_64.rpm
5.2 安装CDH时出现Hash认证失败
分析原因可能是CDH的parcel包传输损坏,重新替换该parcel包,若仍失败则卸载cloudera和CDH重新安装。
5.3 安装CDH时出现下图相关现象
问题描述:若图中使用Parcel(建议)里所配置的parcel路径中的CDH的parcel包名和选择CDH版本处的包名不一致,并且安装出现问题,则请检查manifest.json是否正确(json文件描述版本同parcel包一致),若不一致,从官网重新下载manifest.json替换当前。
5.4 安装CDH时群集安装失败,卸载重试仍失败
问题描述:若详细信息里有lock字样,卸载重试失败
解决方式:则删除失败节点的/tmp/.scm_prepare_node.lock文件重试(rm -rf /tmp/.scm_prepare_node.lock)
5.5 重新起停CDH
1.启动顺序
启动:1、server-db 2、server 3、agent
2.停止顺序
停止集群之前先在页面点击停止所有服务,再在命令行操作停止客户端、服务端、数据库
停止:1、agent 2、server 3、server-db
注:agent是客户端,集群中每个机器都有,server和server-db一般都在CM的那台机器上
/etc/init.d/cloudera-scm-agent status/stop/start/restart
/etc/init.d/cloudera-scm-server status/stop/start/restart
/etc/init.d/cloudera-scm-server-db status/stop/start/restart
(2).单独启动CDH组件的顺序:
先zookeeper 、hdfs 、yarn 、hive 、impal 、spark 、kafka
5.6 No space left on device 错误
查看磁盘容量,一般都是磁盘容量不够,检查外挂硬盘是否有问题。
1.查看磁盘容量状态
(1).df –h
5.7 以下情况都是由于hostname配置问题导致
情况1:datanode爆红
情况2:直接修改主机的host文件
情况3:一台主机使用外网其它两台内网时会出现如下问题
情况4:若采用主机都为阿里云或金山云情况,安装环境还是在外网的情况,host必须全部使用外网,下图是采用三台主机host中都是配置内网IP,所产生的问题。
6【完全卸载】 cloudera-manager与CDH
请参考:http://blog.csdn.net/wulantian/article/details/42706777