CDH (Cloudera's Distribution, includingApache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。
Cloudera Manager(本文以下简称为CM)则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的组件,对集群中主机、Hadoop、Hive、Spark等服务的安装配置管理做了极大简化。
服务器环境:Linux物理机
服务器配置:内存:64G,CPU:32Core
操作系统:CentOS release 6.9 x64 (64位)
Cloudera Manager:5.10.0
CDH: 5.8.4
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
#打开注释:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
#注释掉
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
安装MySql
建议将mysql安装到CM的主服务器上,安装之前检查下机器是否已经安装mysql:
卸载自带mysql:
$sudo rpm -e –nodeps mysql-libs-5.1.73-8.el6_8.x86_64 mysql-server-5.1.73-8.el6_8.x86_64 mysql-5.1.73-8.el6_8.x86_64 mysql-devel-5.1.73-8.el6_8.x86_64
安装方式一:参考http://www.2cto.com/kf/201609/550880.html
本次采用安装方式二(更换yum源安装,需要联网):
1)下载mysql的yum源, yum源仓库位置 /etc/yum.repos.d
cd /etc/yum.repos.d
wget http://dev.mysql.com/get/mysql57-community-release-el6-8.noarch.rpm
sudo rpm -Uvh mysql57-community-release-el6-8.noarch.rpm
2)更新mysql源配置文件
sudo vi mysql-community.repo
5.6 enabled=1
5.7 enabled=0
sudo vi mysql-community-source.repo
5.6 enabled=1
3)更新下yum缓存 #sudo yum makecache
4)查看根据当前yum源情况可以安装的mysql版本
yum repolist enabled | grep mysql
5)安装mysql
sudo yum -y install mysql-community-server
安装完成后,如下:
检测安装是否正确:
sudo service mysqld status
启动数据库:
sudo service mysqld start
开机启动mysql : # sudo chkconfig mysqld on
注意:如果之前安装过数据库,此处可能启动不成功
MySQL日志文件的默认路径是/var/log/mysqld.log
Yum安装的mysql在/var/lib/mysql下,删除目录下的ib_logfile0 ib_logfile1即可启动mysql
如果还是不行,删除/var/lib/mysql目录下所有
(参考:http://blog.csdn.net/e_zhiwen/article/details/17414779)
mysql_secure_installation mysql初始化设置(可以设置密码):
如果没有在初始化时设置密码,首次登陆root没有密码,需要设置:
mysql> select Host,User,Password from user where user =’root’
mysql> use mysql;
mysql> update user set Password=password(‘root’) where User=’root’;
6)创建mysql数据库
1 . –hive 数据库
mysql> create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
2 . –集群监控数据库 amon
mysql> create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
3 . –hue 数据库
mysql> create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
4 . –oozie 数据库
mysql> create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
6)为新创建的库赋权限
如果对mysql数据库权限要求比较高的话可以手动单独处理 如果要求不是很高,直接使用以下命令即可:
授权root用户在主节点(cloud032)拥有所有数据库的访问权限
mysql> grant all privileges on . to ‘root’@’cloud032’ identified by ‘root’ with grant option;
mysql> flush privileges;
下载mysql connector包 ,由于我的CM以及其他CDH组件存储元数据等信息使用的是mysql,所以此处需要准备jdbc连接mysql相关的包,如果使用其他的数据库,请准备相对应的包。 此处我使用的是 mysql-connector-java-5.1.34.jar
由于此次安装mysql我使用的是yum的方式,所以此处未单独下载相关的软件包,另外,建议使用yum或者rpm的方式安装mysql以及jdk,这样jdk以及mysql会安装到默认位置上,由于CM自身机制的问题,如果这两个软件未安装到默认的位置上会导致许多额外的配置以及很多不期而遇的问题。
下载CM安装包
CM的安装包 ,下载地址: http://archive.cloudera.com/cm5/cm/5/
对应的文件是 cloudera-manager-el6-cm5.10.0_x86_64.tar.gz
由于是离线安装,需要配置本地源,需要下载相关的包,本地源的安装包 下载地址是:
http://archive-primary.cloudera.com/cdh5/parcels/5.10.0/
由于系统是CentOS6.9,所以对应的文件是:
CDH-5.10.0-1.cdh5.10.0.p0.42-el6.parcel
CDH-5.10.0-1.cdh5.10.0.p0.42-el6.parcel.sha1
manifest.json
命令选项说明:
mysql:数据库类型是MySQL
-h localhost:数据库所在主机localhost
--scm-host localhost:cloudera service运行的主机是localhost
scm scm scm:最后三个参数,数据库名称 账户 密码
Cloudera Management Service 可作为一组角色实施各种管理功能:
Activity Monitor - 收集有关 MapReduce 服务运行的活动的信息。默认情况下未添加此角色。
Host Monitor - 收集有关主机的运行状况和指标信息
Service Monitor - 收集有关服务的运行状况和指标信息以及 YARN 和 Impala 服务中的活动信息
Event Server - 聚合 relevant Hadoop 事件并将其用于警报和搜索
Alert Publisher - 为特定类型的事件生成和提供警报
Reports Manager - 生成报告,它提供用户、用户组和目录的磁盘使用率的历史视图,用户和 YARN 池的处理活动,以及 HBase 表和命名空间。此角色未在 Cloudera Express 中添加。
配置使用默认配置,接着接着CM会启动CMservice相关服务:
Service启动成功后可以在主页查看:
此时查看集群资源使用情况,如下(此时集群尚未安装hadoop相关服务组件):
(参考:http://blog.csdn.net/team77/article/details/50547075)
Zookeeper的数据存放目录:/var/lib/zookeeper
Zk的默认环境配置位置 /usr/bin/:
关于HttpFS的使用说明参考:
http://debugo.com/hdfs-httpfs/?utm_source=tuicool
关于hdfs NFS Gateway的使用参考:
http://blog.csdn.net/xichenguan/article/details/38732537
启用hdfs的HA:
运行应用程序测试yarn是否可用:
首先通过设置临时变量的方式,让系统用户针对hadoop临时变为hdfs用户(最好所有节点都设置)
# export HADOOP_USER_NAME=hdfs
上传本地测试文件到hdfs上:
# hadoop dfs -put manifest.json /test(此处的hadoop命令已经deprecated)
或者
# hdfs dfs -put manifest.json
运行如下测试类:
$ hadoop jar /opt/cloudera/parcels/CDH-5.8.4-1.cdh5.8.4.p0.5/lib/hadoop-0.20-mapreduce/hadoop-examples-2.6.0-mr1-cdh5.8.4.jar wordcount /test/manifest.json /test/out
测试结果正常:
查看输出结果:$ hadoop dfs -cat /test/out/part-r-00046
Resourcemanager主界面:
查看rm节点服务状态:
# yarn rmadmin -getServiceState rm275
(rm275为resourmanager集群之一的名字,在hadoop配置文件yarn-site.xml中查看)
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。
所以这里要配置HBase高可用的话,只需要启动两个HMaster,让Zookeeper自己去选择一个Master Acitve。
启动RestServer进程与ThriftServer进程主要是便于后边用于hue访问,部在031上,
HRegionServer在三个节点上:
启用复制hbase.replication:
hbase主界面:
在hbase提供的shell client测试hbase集群:
两个HMaster同时只有一个active,当两个HMaster都挂掉的时候:
查看cdh支持的压缩算法:
配置Hstore的压缩算法:
在CDH中,Kafka作为一个分布式的parcel,单独出来作为parcel分发安装包。需要我们把分离开的kafka的服务描述jar包和服务parcel包下载下来。参考链接(CM官网):
https://www.cloudera.com/documentation/kafka/latest/topics/kafka_installing.html#concept_m2t_d45_4r
也可在已安装的CM的如下位置直接下载(需要联网,不过较慢):
此处我采用第一种方式,下载好kafka jar包下载地址:http://archive.cloudera.com/csds/kafka/,与parcel文件,
下载地址:http://archive.cloudera.com/kafka/parcels/2.0.2/
(参考:http://blog.csdn.net/u012599619/article/details/51243397:)
上传 jar包到CM的主节点下的 /opt/cloudera/csd目录下:
Parcel包和校验文件上传到/opt/cloudera/parcel-repo目录下并把KAFKA-2.0.2-1.2.0.2.p0.5-el6.parcel.sha1改成KAFKA-2.0.2-1.2.0.2.p0.5-el6.parcel.sha:
检查新parcel,分配并激活parcel包,注意一定要激活才能用:
在主节点CM安装目录查看已安装的kafka( /opt/cloudera/parcels):
然后添加kafka服务如下步骤:
选择需要安装的kafka broker节点,暂时不安装MirrorMaker,这是一个kafka集群备份的功能:(MirrorMaker使用参考:
http://blog.csdn.net/rkjava/article/details/51771466)
设置kafka消息副本数为3:
数据存放位置以及其他配置采用默认配置,然后启动kafka集群:
测试kafka:
创建一个topic:
$ kafka-topics –create –zookeeper 10.43.1.30:2181 –replication-factor 1 –partitions 1 –topic testTopic
查看kafka中已创建topic(任意一台kafka节点):
$ kafka-topics –list –zookeeper 10.43.1.31:2181
测试显示:1-2个kafka节点挂掉之后,kafka集群依然可以使用:
注意:
1.如果所有kafka集群节点挂掉,报错如下:
ERROR admin.TopicCommand$: kafka.admin.AdminOperationException: replication factor: 1 larger than available brokers: 0
2.初始的kafka的JVM堆内存分配为50M(启动时会出现out of memery问题,设置为256M重启即可)
异常处理:
将mysql驱动包放到对应的服务器的安装目录下,再启动hive即可:
$ sudo cp mysql-connector-java-5.1.34.jar /opt/cloudera/parcels/CDH-5.8.4-1.cdh5.8.4.p0.5/lib/hive/lib/
Flume配置目录说明:
1、data/log-ID,这种类型的文件存放的是put、take、commit、rollback的操作记录及数据。
2、checkpoint/checkpoint存放的是event在那个data文件logFileID,的什么位置offset等信息。
2、checkpoint/inflightTakes存放的是事务take的缓存数据,每隔段时间就重建文件。
3、checkpoint/inflightPuts存放的是事务对应的put缓存数据,每隔段时间就重建文件。
4、checkpoint/checkpoint.meta主要存储的是logfileID及对应event的数量等信息。
5、data/log-ID.meta,主要记录log-ID下一个写入位置以及logWriteOrderID等信息。
6、每个data目录里data文件保持不超过2个。
7、putList和takeList是缓存存储的是相应的FlumeEventPointer,但是inflightTakes和inflightPuts其实也是缓存存储的也是相应的信息,只不过比两者多存一些信息罢了,功能重合度很高,为什么会这样呢?我想是一个只能在内存,一个可以永久存储(当然是不断重建的),后者可以用来进行flume再启动的恢复。
测试flume:
安装apache服务(30上): # yum -y install httpd
启动apache服务: # sudo service httpd start
创建静态页面: # sudo vi /var/www/html/index.html
查看日志文件: # tail -f /var/log/httpd/access_log
给一般用户配置日志目录访问权限(root权限):
# chmod 755 /var/log/httpd
配置conf/flume.conf文件,
# Please paste flume.conf here. Example:
# Sources, channels, and sinks are defined per
# agent name, in this case 'tier1'.
tier1.sources = source1
tier1.channels = channel1
tier1.sinks = sink1
# For each source, channel, and sink, set
# standard properties.
tier1.sources.source1.type = exec
tier1.sources.source1.shell = /bin/bash -c
tier1.sources.source1.command = tail -f /var/log/httpd/access_log
tier1.sources.source1.channels = channel1
tier1.channels.channel1.type = memory
tier1.sinks.sink1.type = logger
tier1.sinks.sink1.channel = channel1
# Other properties are specific to each type of
# source, channel, or sink. In this case, we
# specify the capacity of the memory channel.
tier1.channels.channel1.capacity = 100
启动flume后,查看后台日志:
发现报错如下:
ERROR org.apache.flume.lifecycle.LifecycleSupervisor: Unable to start EventDrivenSourceRunner: { source:Avro source src_dev_front: { bindAddress: 0.0.0.0, port: 27001 } } - Exception follows.
java.lang.OutOfMemoryError: Direct buffer memory
发现是堆内存问题,将flume agent的最大堆内存大小从50M调整为1G,设置如下:
然后重启即可!
注意:在安装hue服务之前需要安装oozie
添加hue服务
最后在查看下以上服务安装完成后的资源使用情况:
以上就是基于CM5.10.0搭建大数据平台的整个过程!
ps:在使用cm安装spark时,使用的是spark 1.6版本,由于本人尝试在CM上安装spark 2.0版本没有安装成功,所有另外搭建了一个spark2.0.1版本的集群.