Cloudera介绍
Hadoop是一个能够对海量数据进行分布式处理的系统架构开源项目,其框架的核心是:HDFS和MapReduce。
Cloudera对Hadoop进行了商业化,简化了安装过程,并对hadoop做了一些封装。CDH (Cloudera’s
Distribution, including Apache Hadoop),CDH是Cloudera公司对整体hadoop集群环境进行监控与管
理的企业级大数据管理平台,是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache
Hadoop构建,并集成了很多补丁,可直接用于生产环境。Cloudera Manager则是为了便于在集群中进行
Hadoop等大数据处理相关的服务安装和监控管理的组件,对集群中主机、Hadoop、Hive等服务的安装配置
管理做了极大简化。
Cloudera Manager分为:
● Cloudera Manager Server:对整个集群提供监控与管理操作。Cloudera Manager Server通过部
署在不同设备上的Cloudera Manager Agent进行管理整体集群。Cloudera Manager Server需要部署在
一台设备上。
● Cloudera Manager Agent:部署在每个需要监控与管理的设备上。负责采集运行数据与执行下发的管
理命令。
● DataBase:关系型数据库是Cloudera Manager执行管理操作时,存储整体集群情况数据。
Cloudera有两个版本:
● Cloudera Express 版本是免费的
● Cloudera Enterprise (60天试用期)需要购买许可
HDFS分布式文件系统:
MapReduce分布式处理框架:
环境介绍
1,本次安装采用VMware虚拟机的方式进行,系统采用CentOS7.5。
2,所有虚拟机配置4个vCPU,32G内存,100G磁盘
3,关闭防火墙和SElinux。因为需要配置的端口太多,为了方便演示,这里我们关闭了防火墙和SElinux。
4,集群一共部署5个节点,主机名和IP地址配置如下:
● master.cloudera.local 172.16.60.80
● node1.cloudera.local 172.16.60.81
● node2.cloudera.local 172.16.60.82
● node3.cloudera.local 172.16.60.83
● node4.cloudera.local 172.16.60.84
5,安装说明,本次安装参考官方安装说明:
https://www.cloudera.com/documentation/enterprise/5-13-x/topics/installation.html
官方共给出了3中安装方式:
● 第一种方法 必须要求所有机器都能连网
● 第二种方法 需要手动下载很多包
● 第三种方法 使用parcel实现离线安装
由于安装包很大,综合考虑这里我们采用第三种安装方法。
6,安装包下载,for CentOS7版本的。
Cloudera Manager下载地址:
http://archive-primary.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.15.1\_x86\_64.tar.gz
CDH安装包地址:
http://archive.cloudera.com/cdh5/parcels/latest/
下载如下包:
CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel
CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sh1
manifest.json
安装环境准备
1,确保IP地址以及hostname配置正确
2,修改所有节点的hosts文件,确认节点之间可以ping通主机名
vi /etc/hosts
172.16.60.80 master.cloudera.local master
172.16.60.81 node1.cloudera.local node1
172.16.60.82 node2.cloudera.local node2
172.16.60.83 node3.cloudera.local node3
172.16.60.84 node4.cloudera.local node4
3,配置SSH免密码登录
在master节点上生成秘钥对
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
ssh-copy-id node4
4,验证在master节点可以不需要密码直接登录其它节点
5,安装Oracle Java(所有节点)
由于运行CDH5需要使用Oracle的Jdk,所以我们需要先卸载CenOS自带的OpenJDK,然后安装Oracle Java。
使用rpm -qa grep java查询java相关的包,然后使用rpm -e –nodeps逐一卸载
在Oracle的官网下载jdk的rpm安装包。
安装JDK
rpm –ivh jdk-8u191-linux-x64.rpm
配置环境变量
由于是rpm包并不需要我们来配置环境变量,我们只需要配置一个全局的JAVA_HOME变量即可,执行命令:
echo “JAVA_HOME=/usr/java/latest/“ >> /etc/environment
6,在Master节点配置数据库,数据库我们采用mariaDB。
yum install -y mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
mysql -u root -p
7,创建数据库
如下图,创建hive,oozie,repmgr,hue数据库
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database repmgr DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
设置root授权访问以上所有的数据库
MariaDB [(none)]> grant all privileges on . to ‘root‘@’master.cloudera.local’ identified by ‘123456’ with grant option;
MariaDB [(none)]> grant all on . TO ‘root‘@’%’ IDENTIFIED BY ‘123456’;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
8,配置NTP服务
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。NTP配置可以参考下面的文章:如果
环境中没有NTP服务器,可以将master节点配置成NTP服务器,其它节点通过master同步时间。
NTP配置方法
配置完成后确认所有节点己通过NTP服务器同步时间
安装Cloudera Manager Server和Agent
1,将前面下载的安装包拷贝到master节点,可以使用WinSCP。
2,将cloudera-manager-centos7-cm5.15.1_x86_64.tar.gz解压,然后将解压出来的cloudera和
cm-5.15.1拷贝到/opt目录下。/opt是cloudera manager的默认目录。
3,为Cloudera Manager 5建立数据库
● 首先需要去MySql的官网下载JDBC驱动
https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.13.tar.gz
● 解压后,将mysql-connector-java-8.0.13.jar放到/opt/cm-5.15.1/share/cmf/lib/中
4,初始化CM5的数据库:
/opt/cm-5.15.1/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot
-p123456 –scm-host localhost scm scm scm
5,Agent配置
修改/opt/cm-5.15.1/etc/cloudera-scm-agent/config.ini中的server_host为master节点的主机名
6,同步Agent到其它节点
scp -r /opt/cm-5.15.1 root@node1.cloudera.local:/opt/
scp -r /opt/cm-5.15.1 root@node2.cloudera.local:/opt/
scp -r /opt/cm-5.15.1 root@node3.cloudera.local:/opt/
scp -r /opt/cm-5.15.1 root@node4.cloudera.local:/opt/
7,在所有节点上创建cloudera-scm用户
useradd –system –home=/opt/cm-5.11.0/run/cloudera-scm-server/ –no-create-home
--shell=/bin/false –comment “Cloudera SCM User” cloudera-scm
准备Parcels,用以安装CDH5
1,将前面下载的CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中
相关的文件如下:
CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel
CDH-5.15.1-1.cdh5.15.1.p0.4-el7.parcel.sh1
manifest.json
2,将.sha1重命名为.sha。否则,系统会重新下载parcel文件。
3,启动Server及Agent
master节点:
通过/opt/cm-5.11.0/etc/init.d/cloudera-scm-server start 启动服务端
通过/opt/cm-5.11.0/etc/init.d/cloudera-scm-agent start 启动Agent服务
其它节点:
通过/opt/cm-5.11.0/etc/init.d/cloudera-scm-agent start 启动Agent服务
安装配置CDH5
Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了。
1,通过浏览器访问master节点的7180端口,默认用户名和密码均为admin。注意,CM Server启动可能需要
几分钟的时间,如果web页面访问有问题,可以等待几分钟后再试。
2,登录成功后,先是一个欢迎向导,这里我们可以看到各版本之间的区别。这里我们使用的是Cloudera
Enterprise的60天试用版
3,所有Agent节点正常启动后,可以在当前管理的主机列表中看到对应的节点。选择要安装的节点,
点击继续
4,接下来,出现以下包名,说明本地Parcel包配置无误,直接点继续就可以了。
5,如果配置本地Parcel包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配、
解压和激活的过程完成。安装时间取决于节点之间的网络速度,我这里花费了10分钟左右。
6,接下来是服务器检查,可能会遇到以下问题:按提示解决即可,注意每个问题下面会显示受影响的节点,
所以只需要在受影响的节点上解决报告的问题。
● Cloudera 建议将 /proc/sys/vm/swappiness 设置为 0
通过echo 0 > /proc/sys/vm/swappiness即可解决
● 已启用透明大页面压缩,可能会导致重大性能问题
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
● 另外几个问题都是关于JAVA版本不一致的问题,确保所有节点都正确安装了Oracle Java JDK就
可以解决。
解决完所有问题后,点击”重新运行”,确认全部正确后,点击完成。
7,选择安装服务,这里我们选择”核心Hadoop”,包括:HDFS、YARN(包括MapReduce 2)、zookeeper、
Hive和Hue
8,集群角色分配,Cloudera Manager会根据机器的配置自动进行配置。也可以自己修改,这里我们就使
用自动分配的角色即可。
9,数据库设置,填入前面我们创建的数据库的相关信息,验证通过后点击下一步。
10,集群设置的审查页面,这里先保持默认配置即可
11,开始安装服务
注意,这里安装Hive或oozie的时候可能会报错,这是因为我们使用了MySql作为元数据存储,由于默认没
有带mysql的驱动,可以通过以下命令进行拷贝:
cp /opt/cm-5.15.1/share/cmf/lib/mysql-connector-java-8.0.13.jar /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/oozie/lib/
cp /opt/cm-5.15.1/share/cmf/lib/mysql-connector-java-8.0.13.jar /var/lib/oozie/
cp /opt/cm-5.15.1/share/cmf/lib/mysql-connector-java-8.0.13.jar /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hive/lib/
cp /opt/cm-5.15.1/share/cmf/lib/mysql-connector-java-8.0.13.jar /var/lib/hive/
cp /opt/cm-5.15.1/share/cmf/lib/mysql-connector-java-8.0.13.jar /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hue/lib/
cd /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/
12,等待安装完成,然后就可以进入集群web界面查看状态了
13,如上图,刚进入页面时,由于服务还在陆续启动中,可能有会显示一些错误或者警告信息,这时先不要
急着进行修改,可以耐心等待一会儿,刷新页面后,如果配置正确,就会显示所有服务状态正常
14,在主机页面,确认所有主机状态正常
任务测试
1,在集群中任意一台节点上执行以下模拟Pi的示例程序(用Hadoop计算PI值,圆周率):
sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
最后面2个数字参数的含义: 10指的是要运行10次map任务,100指的是每个map任务要投掷多少次,2个参数
的乘积就是总的投掷次数。
MapReduce执行过程中终端的输出如下:
[root@node1 ~]# sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
Number of Maps = 10
Samples per Map = 100
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Starting Job
18/10/24 14:58:52 INFO client.RMProxy: Connecting to ResourceManager at master.cloudera.local/172.16.60.80:8032
18/10/24 14:58:53 INFO input.FileInputFormat: Total input paths to process : 10
18/10/24 14:58:53 INFO mapreduce.JobSubmitter: number of splits:10
18/10/24 14:58:53 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1540287931815_0004
18/10/24 14:58:53 INFO impl.YarnClientImpl: Submitted application application_1540287931815_0004
18/10/24 14:58:53 INFO mapreduce.Job: The url to track the job: http://master.cloudera.local:8088/proxy/application\_1540287931815\_0004/
18/10/24 14:58:53 INFO mapreduce.Job: Running job: job_1540287931815_0004
18/10/24 14:58:58 INFO mapreduce.Job: Job job_1540287931815_0004 running in uber mode : false
18/10/24 14:58:58 INFO mapreduce.Job: map 0% reduce 0%
18/10/24 14:59:03 INFO mapreduce.Job: map 10% reduce 0%
18/10/24 14:59:04 INFO mapreduce.Job: map 30% reduce 0%
18/10/24 14:59:06 INFO mapreduce.Job: map 40% reduce 0%
18/10/24 14:59:07 INFO mapreduce.Job: map 60% reduce 0%
18/10/24 14:59:09 INFO mapreduce.Job: map 70% reduce 0%
18/10/24 14:59:10 INFO mapreduce.Job: map 90% reduce 0%
18/10/24 14:59:12 INFO mapreduce.Job: map 100% reduce 0%
18/10/24 14:59:15 INFO mapreduce.Job: map 100% reduce 100%
18/10/24 14:59:16 INFO mapreduce.Job: Job job_1540287931815_0004 completed successfully
18/10/24 14:59:17 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=100
FILE: Number of bytes written=1648636
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=2760
HDFS: Number of bytes written=215
HDFS: Number of read operations=43
HDFS: Number of large read operations=0
HDFS: Number of write operations=3
Job Counters
Launched map tasks=10
Launched reduce tasks=1
Data-local map tasks=10
Total time spent by all maps in occupied slots (ms)=22166
Total time spent by all reduces in occupied slots (ms)=2267
Total time spent by all map tasks (ms)=22166
Total time spent by all reduce tasks (ms)=2267
Total vcore-milliseconds taken by all map tasks=22166
Total vcore-milliseconds taken by all reduce tasks=2267
Total megabyte-milliseconds taken by all map tasks=22697984
Total megabyte-milliseconds taken by all reduce tasks=2321408
Map-Reduce Framework
Map input records=10
Map output records=20
Map output bytes=180
Map output materialized bytes=340
Input split bytes=1580
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=340
Reduce input records=20
Reduce output records=0
Spilled Records=40
Shuffled Maps =10
Failed Shuffles=0
Merged Map outputs=10
GC time elapsed (ms)=678
CPU time spent (ms)=6940
Physical memory (bytes) snapshot=5599420416
Virtual memory (bytes) snapshot=30737854464
Total committed heap usage (bytes)=7442792448
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=1180
File Output Format Counters
Bytes Written=97
Job Finished in 24.391 seconds
Estimated value of Pi is 3.14800000000000000000
2,任务的执行情况可以在YARN页面上进行确认
3,通过YARN的后台也可以看到MapReduce的执行状态:
圆周率测试结果:
可以看到根据调整map任务数和投掷次数,可以不断提高计算的精度。
map=10 reduce=100
Estimated value of Pi is 3.14800000000000000000
map=100 reduce=1000
Estimated value of Pi is 3.14120000000000000000
map=1000 reduce=10000
Estimated value of Pi is 3.14158440000000000000
map=5000 reduce=10000
Estimated value of Pi is 3.14159448000000000000