本篇是云上大数据系列第一篇文章,主要介绍开发测试环境的搭建。在后续的文章中,我们还将会分享更多关于云上大数据系统的性能分析和调优经验,敬请期待。
大数据系统是典型的复杂分布式系统,搭建一套大数据系统不但需要大量的资源,还需要对大数据系统本省有一定的了解。云计算的普及使得大数据系统的快速部署,甚至一键部署成为可能。笔者在阿里云上尝试搭建了一套大数据系统,将部署的过程和大家分享一下。
- 资源环境:
ecs.d1.6xlarge × 5
- 软件系统:
CDH 5.14.2
- 操作系统:
CentOS 7.3
以下教程基于Cloudera
官方教程,结合笔者实际部署过程中遇到的问题编写而成。读者在实践的过程中可以将本文和官方教程结合来参考。官方教程点这里查看。
教程特点(做好心理准备):
需要下载 cloudera-manager-daemons
包(744M),cloudera-manager-agent
包(788M),下载过程比较慢,且中途容易出错,需要多次重试。
如果对上述部署方式不满意,还可以尝试官方的第三种方式(预下载安装包并手动安装):
https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_ig_install_path_c.html#cmig_topic_6_7
第一步:购买ECS
资源:
在阿里云官方网站上购买5台规格为ecs.d1.6xlarge
的机器。注意两点:
- 修改机器名称以区分不同的角色:1台
master
,4台worker
,例如cdh-m1, cdh-w1, cdh-w2, cdh-w3, cdh-w4
; - 点击下单前选择密码登录,并记住登录密码。
第二步:简单配置集群
- 为所有结点设置免密登录(百度搜索“ssh免密登录”)
- 修改所有结点
hostname
:
hostname cdh-m1
并同步修改 /etc/hostname
文件
- (optional) 为所有结点配置pdsh,方便批量操作。pdsh的基本命令:
pdsh -w cdh-w[1-4] cmd
- (可以放在第四步的间隙来做)配置本地数据盘(格式化,挂载,开启自动挂载)
点击这里下载 format.sh
脚本。
for i in {1..4}; do scp format.sh root@cdh-w$i:/root; done
pdsh -w cdh-w[1-4] bash /root/format.sh
检查一下是否配置成功(输出为所有 worker
结点本地盘数量总和,4结点是48):
pdsh -w cdh-w[1-4] df -h | grep "5.1T" | wc -l
其中“5.1T”为数据盘大小,可以根据本地数据盘做修改。
第三步:安装基础服务
-
登录到
master
结点,安装MySQL
:详细教程点击这里。对照教程,完成:- 配置
my.cnf
(只需要照着它的推荐配置配就可以了); - 备份
ib_logfile
; - 修改
root
用户登录密码; - 添加到开机自启动;
- 下载
jdbc
; - 创建一些数据库:在
MySQL
中执行脚本:create_databases.sql
。点击这里下载脚本。
- 配置
- 配置Cloudera源:
下载(点击下载)并将cloudera-manager.repo
文件拷贝到/etc/yum.repos.d/
- 安装jdk-1.7:(下载速度较慢,15min)
sudo yum install oracle-j2sdk1.7
第四步:安装CDH
- 安装
Cloudera Manager Server Packages
:(下载速度较慢,中途可能失败,需要反复重试,利用这个时间空隙,可以完成第二步第4小步)
sudo yum install cloudera-manager-daemons cloudera-manager-server
- 为
Cloudera Manager
配置本地数据库:
在 MySQL中创建一个服务于 cloudera manager
的数据库,起名叫 cloudera_manager
(小写):
create database cloudera_manager DEFAULT CHARACTER SET utf8;
连接到该数据库:
/usr/share/cmf/schema/scm_prepare_database.sh mysql cloudera_manager root password
- 启动
Cloudera Manager Server
:
sudo service cloudera-scm-server start
- 在浏览器中打开
http://cdh-m1:7180
,此时无响应,需要做端口映射:详细教程可以点击这里了解更多。
我的做法:开两个命令窗口,分别跑两个进程:
ssh -i id_rsa -ND 7180 root@cdh-m1
其中“7180”是准备映射的端口。
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --proxy-server="socks5://localhost:7180" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" --user-data-dir=/tmp/
-
刷新刚才的页面:
http://cdh-m1:7180
,用户名和密码都是admin。按照提示开始安装过程。由于每台机器都需要安装jdk
和cloudera-manager-agent
,这两个包的下载速度非常慢,过程可能长达数小时。需要提前做好心里准备(其他准备也做不了)。安装过程中需要注意几个问题:- 在主机检查阶段,确保所有项目都checked,如果没有,按照提示逐一修复;
- 在服务选择阶段,可以自定义服务,根据需要选择相应的服务,而无需选择所有服务。也可以直接选择所有服务,安装完成后手动停掉不需要的服务,我选择了所有服务(后来我又把不需要的服务都手工删掉了,衰);
- 在数据库连接阶段,打开
create_databases.sql
文件,并对照填写相应的内容;如果在上一步中选择了Hue
和Oozie
服务,那么这里需要为这两个服务配置相应的数据库,详细教程见这里:
Hue
:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/hue_dbs_mysql.html#hue_dbs_mysqlOozie
:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/install_oozie_ext_db.html#admin_oozie_ext_db
如果配置 Oozie
的时候需要JDBC
,那么建立软链:
ln -s /usr/share/java/mysql-connector-java.jar /opt/cloudera/parcels/CDH/lib/oozie/lib/mysql-connector-java.jar
- 停止或者删除不需要的服务,并根据
Cloudera Manager
的建议,修复一些其他问题。
第五步:验证安装是否成功:
- 登录到
master
结点,以hive
用户连接到HiveServer2
:
beeline -u "jdbc:hive2://localhost:10000/default" -n hive
- 创建一张叫
table_name
的ORC
事务表:
CREATE TABLE table_name (id int, name string)
CLUSTERED BY (id) INTO 2 BUCKETS
STORED AS ORC
TBLPROPERTIES ("transactional"="true",
"compactor.mapreduce.map.memory.mb"="2048",
"compactorthreshold.hive.compactor.delta.num.threshold"="4",
"compactorthreshold.hive.compactor.delta.pct.threshold"="0.5"
);
- 插入一条记录并读取:
insert into table_name(id, name) values('1', 'Alex');
select * from table_name;
- 验证
Hive-on-Spark
是否正常:
set hive.execution.engine=spark;
select count(*) from table_name;
如果输出的结果为1, 那么表明安装正常。
到此为止,我们已经成功在ECS上搭建起了一套大数据系统。