前期准备:
1.我这里用了三台虚拟机,.默认已经配置好静态IP和IP域名映射,它们相互之间可以ping通
第一台:192.168.174.131 hadoopNumber01.medal.com
第二台:192.168.174.132 hadoopNumber02.meda.com
第三台:192.168.174.133 hadoopNumber03.medal.com
2.虚拟机一定不可以上网,因为我们后面用的是离线方式安装
一、搭建前的系统设置
1.将三台虚拟机切换到root用户,禁用IPv6
命令是:#echo "alias net-pf-10 off" >> /etc/modprobe.d/dist.conf
#echo "alias ipv6 off" >> /etc/modprobe.d/dist.conf
2.配置普通用户的sudo权限
命令是:#chmod u+w /etc/sudoers
#vi /etc/sudoers
在第一行加上:用户名 ALL=(root)NOPASSWD:ALL
因为我是以xunzhang这个用户登录的,所以我加上xunzhang ALL=(root)NOPASSWD:ALL
#chmod u-w /etc/sudoers
3.关闭防火墙
命令是:$sudo service iptables stop
$sudo chkconfig iptables off
4.禁用selinux
命令是:$sudo vi /etc/sysconfig/selinux
修改内容:SELINUX= disabled
5.卸载JdK
命令是:$sudo rpm -qa | grep java
$sudo rpm -e --nodeps xxx yyy zzz
6.设置文件打开数量和用户最大进程数
命令是:$sudo vi /etc/security/limits.conf
加上内容:
* soft nofiles 65535
* hard nofiles 65535
* soft nproc 32000
* hard nproc 32000
7.设置集群时间同步(ntp)
比如说我现在设置第二台和第三台虚拟机与第一台虚拟机进行时间同步,
1>首先检查第一台虚拟机有没有安装ntp软件,命令是:#rpm -qa | grep ntp,默认系统已经自带了
2>编辑配置文件ntp.conf
命令是:#vi /etc/ntp.conf
去掉一行注释,将#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap,去掉注释,并将其改成192.168.174.0,因为我的ip是在这个网段里面
加上三行注释,将service 0.centos.pool.ntp.ort和service 1.centos.pool.ntp.org还有service 2.centos.pool.ntp.org这三行注释掉
去掉两行注释,将末尾的server 127.127.1.0 #local clock和fudge 127.127.1.0 stratum 10这两行的注释去掉
3>编辑配置文件ntpd
命令是:#vi /etc/sysconfig/ntpd
内容是:# Drop root to id 'ntp:ntp' by default.
SYNC_HWCLOCK =yes
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g"
4>启动服务
命令是:#service ntpd start
#chkconfig ntpd on
5>在另外两台虚拟机上,写脚本,进行时间的同步
在第二台虚拟机上,切换到root用户,设置同步
命令是:crontab -e
加上如下内容:
0-59/10 * * * * /usr/sbin/ntpdate hadoopNumber01.medal.com
注意:在这里每个*号之间有一个空格,后面这个域名是我第一台主机的主机名
在第三台虚拟机上,也做如第二台虚拟机相同的操作
二、离线搭建
方式一:利用rpm包进行搭建
1、启动本地Apache服务器(系统自带Apache服务器)
命令是:sudo service httpd start
sudo chkconfig httpd on
2.搭建本地源
1>软件下载
cm-5.3.6 bin文件 http://archive.cloudera.com/cm5/installer/5.3.6/cloudera-manager-installer.bin
cm-5.3.6 依赖rpm包 http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.3.6/RPMS/x86_64/
依赖其它包 postgresq-libs和repo-libs
2>安装cm-5.3.6
命令:cd /var/www/html
sudo mkdir -p cm5/redhat/6/x86_64/cm/5/RPMS/x86_64/,然后,将上面下载的依赖rpm包,全部放在这个目录下
3>设置域名映射
命令:sudo vi /etc/hosts
加上:192.168.174.131 archive.cloudera.com
4>修改本地源
命令:cd /etc/yum.repos.d
sudo rm -rf ./*
touch cloudera-manager.repo
然后将http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/cloudera-manager.repo里面的内容写入cloudera-manager.reop文件中,并将最后倒数第三行的https修改成http,将倒数第二行改成enable=1,倒数第一行改成gpgcheck=0
完成后,再创建一个名RPM-GPG-KEY-cloudera文件
切换到cm5/redhat/6/x86_64/cm/目录下
执行命令:sudo touch RPM-GPG-KEY-cloudera
并把http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/RPM-GPG-KEY-cloudera里面的内容,写入这个文件中
5>安装依赖包repo-libs
进入postgresq-libs目录下
执行命令:chmod u+x ./*
sudo rpm -ivh ./*
进入repo-libs目录下
执行命令:chmod u+x ./*
sudo rpm -ivh ./*.rpm
安装完成后,切换到/var/www/html/cm5/redhat/6/x86_64/cm/5下
执行命令:sudo createrepo .
3.安装cm-5.3.6
执行:cm-5.3.6 bin文件
切换到cm-5.3.6 bin文件所在的目录
执行命令:
sudo ./cloudera-manager-installer.bin
然后一直下一步,下一步,就安装好了.安装完成后,运行命令:sudo netstat -tnlp,看看7180端口,有没有打开,如果开启了,就可以访问web页面,没有开启,就查看你的cloudera 服务有没有打开,执行命令:sudo service cloudera-scm-server status,如果服务正在运行,等待一会儿就好了
至此,cloudera manager集群搭建完成,接着搭建cdh集群了
4.搭建cdh集群
1> 将cdh的两个文件,放到/opt/cloudera/parcel-repo/目录下
命令:cd /opt/cloudera/parcel-repo/
sudo cp /opt/softwares/cdh-5.3.6 /* ./
2> 修改cloudera-manager.repo文件
命令:cd /etc/yum.repos.d
然后将archive.cloudera.com改成你的主机名
3> 将第2步的cloudera-manager.repo文件,在另外两台虚拟机上也创建出来
第二台虚拟机:
命令:cd /etc/yum.repo.d
sudo rm -rf ./*
sudo touch cloudrea-manager.repo
最后将第一台虚拟机里面cloudera-manager.repo中的内容,复制到这个里面
第三台虚拟机,也做第二台虚拟机相同的操作
4>用浏览器访问你虚拟机的主机名:hadoopNumber01.medal.com:7180,用户名是:admin,密码是:admin,这个是初始的用户名和密码,大家设置好后,可以修改的,选择免费版,继续,继续,然后把这三台虚拟机的主机名或ip,填进去,继续,点击“自定义存储库”,在下面的方框中,输入“https://hadoopNumber01.medal.com/cm5/redhat/6/x86_64/cm/5/”,就是开始我们的cloudera-manager.repo里面的倒数第三行的内容,继续,安装Oracle,继续, 其他用户,xunzhang,输入你的用户密码,同时安装数量为3,继续,然后集群安装,下一步,下一步,最后的你cdh就装好了
5、中间的黄色警告:
1>修改你的hosts文件
2>三台虚拟机都要做
$ sudo sysctl -w vm.swappiness=0
# echo "vm.swappiness=0" >> /etc/sysctl.conf
3>三台虚拟机都要做
# echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
将“echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag” 追加到/etc/rc.local中
方式二:利用tar包进行搭建
0.克隆虚拟机,重新生成mac地址,设置静态ip,命令:
#vi /etc/udev/rules.d/70-persistent-net.rules
#vi /etc/sysconfig/network-scripts/if-cfg-eth0
DEVICE=eth0 |
1.配置ssh面密钥登陆
1>切换到家目录
2>执行ssh-keygen -t rsa ,然后4个回车
3>进入.ssh目录,执行ssh-copy-id 目标主机
2.在所有节点上安装jdk(最好是1.7以上),安装jdk,在这里,我就不赘述了
3.安装mysql(master节点)
4.安装cloudera manager server 和 agent
1>解压tar包,将/opt/software/下的cloudera-manager-el6-cm5.12.0_×86_64.tar.gz解压到/opt/目录下
2>为cloudera manager 5建立数据库
将准备好的mysql-connector-java-5.1.27-bin.jar文件放到/opt/cm-5.12.0/share/cmf/lib/中
在master节点初始化cm5的数据库
命令:
/opt/cm-5.12.0/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -proot --scm-host localhost scm scm scm
说明:
/opt/cm-5.12.0/share/cmf/schema/scm_prepare_database.sh 这个是固定的
mysql 是指mysql数据库,如果你是oracle,那么这里就是oracle
cm 是创建的数据库名
3>配置Agent
修改/opt/cm-5.12.0/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名master
命令:vi /opt/cm-5.12.0/etc/cloudera-scm-agent/config.ini
#Hostname of the CM server.
server_host=master
注意:这里的master是你的主机名,我的主机名是hadoopNumber01.medal.com,所以是server_host=hadoopNumber01.medal.com
同步Agent到其它节点
命令:
scp -r /opt/cm-5.12.0/ 用户名@主机名:/opt/
4>在所有节点上创建cloudera-scm用户
命令:useradd --system --home=/opt/cm-5.12.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
5>准备Parcels,用以安装CDH5
将CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中(parcel-repo需要手动创建)。
相关的文件如下:
CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha1
CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel
manifest.json
后将CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha1,重命名为CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha1,这点必须注意,否则,系统会重新下载CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha文件。
6>执行启动脚本
在master节点上启动服务端
命令:
/opt/cm-5.12.0/etc/init.d/cloudera-scm-server start
在所有节点启动Agent
命令:
/opt/cm-5.12.0/etc/init.d/cloudera-scm-agent start
以上脚本是启动命令,相关停止或重启命令仅需将start变成stop或restart即可。
7>配置cdh集群
Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了。
在浏览器打开http://master:7180进入CDH管理界面,由于CM Server的启动需要花点时间,这里可能要等待一会才能访问,默认的用户名和密码均为admin。
选择安装的集群,这里注意只有已启动cloudera-scm-agent的主机才能被CM管理。
选择我们安装需要的Parcel包,这里可以看到我们已准备好的CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel包,若没有,就检查相关文件是否正确放入/parcel-repos中,且CDH-5.12.0-1.cdh5.12.0.p0.5-el6.parcel.sha1是否正确重命名。
继续,如果上一步检查配置没问题,这里的第一个进度条应该瞬间完成,CM不需要再向用品下载Parcel,然后等待CM将Parcel分发到各slave节点上并激活。
CM会检测集群很多环境项,此处如果出现这样的警告,是一个默认环境变量的问题,Cloudera建议将/proc/sys/vm/swappiness设置为0,当前设置为 60。在所有节点执行这个命令: # echo 0 > /proc/sys/vm/swappiness,这个命令在方式一中已经说明了
所安装的角色有些需要用到数据库,则在mysql中新建相应数据库即可。进行下一步之前必须测试数据库的连通性,以hive举例:
mysql -h localhost -u root -p
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
设置服务所需的目录结构,若无特殊需求这里也可以保持默认目录结构。
在这之间可能会出现以下错误:
Logon denied for user/password. Able to find the database server and database, but logon request was rejected
解决办法:
登陆进mysql,然后use mysql,设置root授权访问所有的数据库: grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;
刷新:flush privileges;
接下来就等待初始化和启动服务,这里可能会遇到Hive报错的问题,因为我们选择了Mysql作为hive的元数据存储,查看日志知道是Hive初始化Mysql的时候找不到jar文件,将mysql-connector-java-5.1.33-bin.jar拷贝到hive存放jar文件的目录重试即可。
cp /opt/cm-5.12.0/share/cmf/lib/mysql-connector-java-5.1.27-bin.jar /opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.12/lib/hive/lib/
安装spark完成后,运行bin/spark-shell,也许会出现以下错误:
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream
解决办法:
进入/opt/cloudera/parcels/CDH/etc/spark/conf.dist目录下,编辑spark-env.sh文件,加入export SPARK_DIST_CLASSPATH=$(hadoop classpath),然后保存退出
如果服务都启动成功,这个集群已安装上所需要的Hadoop服务,整个部署过程结束。