在线和离线安装Cloudera CDH 5.6.0
1. 介绍
在实验室安装过社区版的Hadoop,当时用的是普通PC机,安装的过程遇到了好多问题。当解决了大部分的安装问题之后由于实验室的需求,需要安装一个商业发行版的Hadoop ,我们就采用的Cloudera 公司发行的版本。首先要说明的是CDH对内存要求比较高,当我们采用原来的4G内存的PC机,只要启动基本内存就满了,并且会拖慢整个集群的运算速度。所以说安装CDH对硬件的要求比较高。安装CDH 有三种安装方式:在线安装、半离线安装、离线安装。在线安装和离线安装我都安装过,虽然在线安装貌似简单但是实际用起来还是没有离线安装方便,我还是建议大家采用离线安装的方式。不过下面都会介绍在线安装的方式和离线安装的方式。希望对别人有所帮助。
2.0 硬件基础:
64G内存和4TSATA硬盘的服务器两台,一台32G内存的工作站
操作系统为Ubuntu14.04LTS系统,一个master节点带2 个slave节点
3. 准备工作:系统环境配置
以下操作皆在root用户下操作 没有注明仅在主节点操作时,在所有节点都要执行
3.1 安装Ubuntu14.04系统
在线安装时,注意在分区时一定要把硬盘空间主要分到/根节点下,因为采用Cloudera Manger 的在线安装方式,是把所有的软件安装在根节点下面。
3.2 设置hosts
root@master: vi /etc/hosts
192.168.1.10 mster
192.168.1.11 slave1
192.168.1.12 slave2
192.168.1.13 slave3
3.3 关闭防火墙
root@master:ufw disable
3.4 设置静态IP
root@master:sudo vi /etc/network/interfaces
添加如下
auto eth0
iface eth0 inet static
address 192.168.0.117
gateway 192.168.0.1 #
netmask 255.255.255.0
3.5 安装Oracle JDK 7(所有节点)
CDH要求至少是Oracle JDK7Ubuntu自带的是OpenJDK,而Ubuntu没有自带的Oracle JDK,需要添加PPP源,添加 PPA repository 到系统
root@master:add-apt-repository ppa:webupd8team/java
root@master:apt-get update
root@master:sudo apt-get upgrade
root@master:apt-get install oracle-java7-installer
root@master:apt-get install oracle-java7-set-default
root@master:java -version
3.6 所有节点免密码SSH登陆
使用ssh-keygen 和ssh-copy-id 实现SSH无密码登陆
- 在各个节点使用产生公钥私钥对
bigdata@master:ssh-keygen -t rsa -P
- 将各个节点上公钥复制到主节点
bigdata@slave1:ssh-copy-id -i ~/.ssh/id_rsa.pub master
- 查看各个节点的公钥是否追加到了主节点上
bigdata@master:cat ~/.ssh/authorized_keys
- 把主节点上的authorized_keys文件发送到各个节点实现无密码登陆
bigdata@master:scp ~/.ssh/authorized_keys bigdata@slave1:/home/bigdata/.ssh/
- 修改ssh配置文件使能够在root用户也能免密码采用(所有节点)不然后面安装会报错
root@master:vi /etc/ssh/sshd_config
找到PermitRootlogin
一行把后面修改成yes - 重启ssh
root@master:/etc/init.d/ssh restart
或者service ssh restart
- 注意查看ssh是否启动成功
3.7 建立数据库(仅主机)
数据库用来存储Cloudera Manager 的配置信息和集群状况和任务进程的信息,用来管理整个集群。所以采用最方便的MySQL
安装MySQL:
root@master:apt-get install mysql-server
安装MySQL JDBC驱动
root@master:apt-get install libmysql-java
创建后继安装的需要的数据库,不过目前这一环节可以放在后面使用数据库是再建立,下面给出创建后面需要的数据库的例子:
root@master:mysql -u root -p
## Cloudera manager db user, database and grant
mysql> create user 'cmf'@'%' identified by 'xyz';
mysql> create database cmf DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> grant all privileges on cmf.* to 'cmf'@'%' identified by 'xyz';
## For activity monitor
mysql> create user 'amon'@'%' identified by 'xyz';
mysql> create database amon DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> grant all privileges on amon.* to 'amon'@'%' identified by 'xyz';
## Hive Meta store
mysql> create user 'hive'@'%' identified by 'xyz';
mysql> create database metastore DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> grant all privileges on metastore.* to 'hive'@'%' identified by 'xyz';
## Flush all changes
mysql> FLUSH PRIVILEGES;
3.8 设置集群时间同步(所有节点)
root@mater: apt-get install ntp
3.9 修改linux swap空间的swappiness
Cloudera 建议将 /proc/sys/vm/swappiness 设置为 0。
修改swappiness的值为零:
root@master:cat /proc/sys/vm/swappiness
root@master:sysctl vm.swappiness=0
root@master:echo 0 > /proc/sys/vm/swappiness
4. 离线安装CDH
4.1 相关软件和下载
Cloudera Manager : http://archive.cloudera.com/cm5/cm/5/
Cloudera CDH:http://archive.cloudera.com/cdh5
MySql的JDBC驱动jar包
根据系统下载所响应的版本,下载的文件如下
cloudera-manager-trusty-cm5.6.0_amd64.tar.gz
CDH-5.6.0-1.cdh5.6.0.p0.45-trusty.parcel
CDH-5.6.0-1.cdh5.6.0.p0.45-trusty.parcel.sha
manifest.json
mysql-connector-java-5.1.38-bin.jar
4.2 解压 cloudera-manager-trusty-cm5.6.0_amd64.tar.gz 到 /opt 目录下
tar -xcvf cloudera-manager-trusty-cm5.6.0_amd64.tar.gz /opt
4.3 添加mysql connector包
mv mysql-connector-java-5.1.38-bin.jar /opt/cm-5.6.0/share/cmf/lib
4.4 创建用户(所有节点)
创建cloudera-scm用户 useradd --system --home=/opt/cm-5.6.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
4.5 初始化CM5的数据库数据库(仅主节点)
/opt/cm-5.6.0/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -p123456 --scm-host localhost scm scm
4.6 Agent 配置
将/opt/cm-5.6.0/etc/cloudera-scm-agent/config.ini
中的server_host为主节点的主机名 vi /opt/cm-5.6.0/etc/cloudera-scm-agent/config.ini
4.7 Parcels离线包设置(仅主节点)
将下载好的CDH-5.6.0-1.cdh5.6.0.p0.45-trusty.parcel
文件移至
CDH-5.6.0-1.cdh5.6.0.p0.45-trusty.parcel.sha
manifest.json/opt/cloudera/parcel-repo/
中,没有这个目录的话,手动创建。
4.8 启动Cloudera Manager
主节点 /opt/cm-5.6.0/etc/init.d/cloudera-scm-server start
/opt/cm-5.6.0/etc/init.d/cloudera-scm-agent start
从节点 /opt/cm-5.6.0/etc/init.d/cloudera-scm-agent start
注:查看安装目录下log文件夹下cloudera-scm-agent/cloudera-scm-agent.out 看Agent 是否启动成功 。
当cloudera-scm-server、cloudera-scm-agent start启动成功之后,可通过http://主节点IP:7180来访问CM,用户名密码都为admin。剩下的就是一直点下一步和根据具体的需求来配置集群了。
5 添加节点
集群添加节点较为容易,只需要在待添加的主机上安装Cloudera Manager 上的Agent,然后在Cloudera Manager web 界面上向集群添加主机。
5.1 重复 第三步 准备工作:系统环境配置,仅在主机的上操作跳过
5.2 启动Cloudera Manager 客户端
重复4.2、4.4 和4.6步之后: /opt/cm-5.6.0/etc/init.d/cloudera-scm-agent start
5.3 在web 端添加主机
- 由于已经将cm agent拷贝到各机器并启动了,此处不是通过IP或hostname查找的(即使查出来也无法选择),而是已存在的主机里面选择,选择新加的agent,点继续
- 出现下载parcel的界面(离线安装的方式parce包不需要下载)
- 检查主机正确性
- 选择主机模板-此处可选择要安装的组件
5.向集群中添加主机
6.启动
当集群出现错误时,试了各种办法还是不能解决时,可以多次重启机器。自己屡次成功。
6 在线安装Cloudera CDH
6.1 将CDH5的软件源添加到Apt中(所有节点)
root@master: curl "http://archive.cloudera.com/cm5/ubuntu/trusty/amd64/cm/cloudera.list" -o /etc/apt/sources.list.d/cloudera_trusty.list
root@master: curl -s http://archive.cloudera.com/cdh5/ubuntu/trusty/amd64/cdh/archive.key | sudo apt-key add -
root@master: apt-get update
6.2 安装Cloudera Manager(所有节点)
root@mater:~# apt-get install cloudera-manager-daemons cloudera-manager-server
6.3 修改Cloudera-Manager-Server的配置文件
修改Cloudera-Manager-Server的配置文件db.properties,设置刚才我们在Mysql中创建的cmf数据库、用户名、密码
root@master:vi /etc/cloudera-scm-server/db.properties
#使用mysql 来管理cloudera-manager
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=master
com.cloudera.cmf.db.name=cmf
com.cloudera.cmf.db.user=cmf
com.cloudera.cmf.db.password=xyz
6.4 设置集群时间同步(所有节点)
root@mater: apt-get install ntp
6.5 主节点启动Cloudera Manager Server
root@mater:~# service cloudera-scm-server start
Starting cloudera-scm-server: * cloudera-scm-server started
查看Cloudera manager的启动日志,看是否启动成功
tailf -100 /var/log/cloudera-scm-server/cloudera-scm-server.log
6.6 从节点启动Cloudera Manager Client
root@master:service cloudera-scm-agent start
查看cloudera agent的启动日志,
6.7 通过Web方式继续安装
6.7.1创建update-alternatives工具在/usr/sbin/下创建软链
root@m1:~# sudo ln -s /usr/bin/update-alternatives /usr/sbin/update-alternatives
6.7.2 打开浏览器,输入 http://master:7180/ 开始安装
初始账号和密码都是admin
6.7.3 选择安装的CDH版本
安装Cloudera Express版本
6.7.4 为CDH安装指定主机
选择IP进行搜索就行
6.7.5 选择安装方式
选择方法采用Pacrcel方式
选择安装Agent为cloudera Manager Server 的匹配发行版
6.7.6 指定主机的SSH登录方式
通过root用户,采用密码方式密码设为bigdata
6.7.7 安装过程中常见问题
此时如果出现无法启动hosts之类的问题,查看ssh的配置文件是否更改为允许root用户登陆
如果出现检测不到agent,首先查看IP地址是否正确查看cloudera-scm-agent 是否启动。如果没有启动查看日志
6.7.8出现ImportError: No module named _io
错误
这是因为CDH5使用的Python版本问题。执行完下面的脚本后,点击重试就可以顺利的完成安装了
root@master:~# mv /usr/lib/cmf/agent/build/env/bin/python /usr/lib/cmf/agent/build/env/bin/python.bak
root@master:~# cp /usr/bin/python2.7 /usr/lib/cmf/agent/build/env/bin/python
6.7.9继续安装群集安装成功之后检测主机性能时
出现Cloudera 建议将 /proc/sys/vm/swappiness 设置为 0。
修改swappiness的值为零:
root@master:cat /proc/sys/vm/swappiness
root@master:sysctl vm.swappiness=0
root@master:echo 0 > /proc/sys/vm/swappiness
6.7.10数据库设置
此时用到的数据库正是我们前面创建的数据库
7 向集群添加节点:
- 在主机上重复搭建环境部分中的1-6步和第8步,不需要建立mysql
- 重复搭建Cloudera CDH环节中的第1步、第4步、第7步。
- 把主机
/opt/cloudera/parcels
复制到从节点相应的目录 - 在管理界面点击向集群添加主机
- 此后按照之前的方法进行安装