Cloudera建议在生产系统中使用Cloudera Manager与CDH所支持 (经过全面测试) 的操作系统。目前EDH 5.4前的版本官方支持RHEL 6.5,EDH 5.4+ 支持 RHEL 6.6。目前某银行系统普遍采用RHEL 6.6。
域名正向/反向解析通过DNS执行。管理节点域名为 hods-n01和hods-n02;计算节点域名为hods-d01、hods-d02、hods-d03和hods-d04。
Hadoop集群中的所有机器必须使用同样的时间 (包括时区)。Cloudera建议使用网络时间协议 (Network Time Protocol,简称NTP)作集群间节点的时间同步。
Cloudera一般建议用户关闭SELinux。某银行并不使用SELiunx。
Cloudera一般建议用户关闭IP tables (防火墙)。某银行要求使用IP tables。为了保证集群中服务的正常通信,需要在集群机器上打开相应端口保证集群服务可以绕过防火墙。具
体
端
口
号
参
见
官
方
文
档
http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cm_ig_ports.html。
1.1.1.2 集群部署
Cloudera Manager Alert Publisher Event Server Host Monitor Service Monitor Reports Manager Navigator Cloudera Database Zookeeper hods-n01, hods-n02, hods-d01 Embedded hods-n01 hods-n01 hods-n01 5
NameNode HDFS Failover Controller JournalNode DataNode ResourceManager NodeManager HBase Master HBase RegionServer Sentry Server Oozie Server Hue Server Impala Catalog Server Impala StateStore Impala Daemon Hive Gateway hods-n01, hods-n02 hods-n01, hods-n02, hods-d01 hods-d02, hods-d03, hods-d04 hods-n01, hods-n02 hods-d02, hods-d03, hods-d04 hods-n01, hods-n02 hods-d02, hods-d03, hods-d04 hods-n01 hods-n01 hods-n01 hods-n01 hods-n01 hods-d02, hods-d03, hods-d04 hods-n01, hods-n02, hods-d01, hods-d02, hods-d03, hods-d04 注:在POC测试环境中并没有设计边缘节点,因此Hadoop服务的客户端配置部署在集群的所有机器上。
1.1.1.3 POC测试
1.1.1.3.1 数据加载测试 HDFS数据加载
测试步骤:
1. 对测试数据 (57GB 2014年交易流水表) 通过命令md5sum计算校验码 2. 将测试数据直接通过命令 “hdfs dfs -put” 上传至HDFS
6
3. 使用命令 ”hdfs dfs -get” 导出数据,并使用命令md5sum重新计算校验码 4. 确认两次计算的校验码完全一致
上传时间:4.8m
执行过程中,无论磁盘、CPU、网络都没有出现瓶颈。
其他数据加载的方案讨论:
1. 将不同数据文件放在不同磁盘上提高磁盘吞吐量
2. 定制Java程序:在上传文件过程中,对数据分片(e.g. 10GB),并使用Snappy压缩
HBase数据加载
测试步骤:
1. 使用Impala(或者hive)对要导入的数据进行ETL 2. 将生成的大表利用HBase bulkload导入HBase
Impala ETL时间 (参考, 不作为测试依据):4.2h,生成数据行数为1,986,709,856 (文件格式Parquet,文件大小171GB)
HBase bulkload时间:6.8h,生成HFile的大小为887.9GB
1.1.1.3.2 数据导出测试
Hive表数据导出
7
测试步骤:
1. Hive创建一张与待导出表完全相同的数据表export,并设置对应的数据格式 (例如使
用‘|’作为分隔符)
2. HiveETL 将数据导入到export表中
3. 使用 “hdfs dfs -get” 从HDFS中导出数据
Snappy+Parquet => txt “Group by” 13.31s SQL “Join” SQL
HBase表数据导出
测试步骤:
1. Hive中创建一张数据表,映射到HBase
2. Hive中创建一张与HBase映射表完全一致的数据表export,并设置对应的数据格式
(例如使用‘|’作为分隔符) 3. Hive ETL将数据导入到export表中
4. 使用 “hdfs dfs -get” 从HDFS中导出数据
Hive ETL时间:11.4h,生成文件大小971.1GB HDFS导出数据时间:59.8m
38.38s 25s 57152010 3.3GB 导出txt 到本地磁盘 11s 导出数据 行数 18336384 导出数据 文件大小 837MB 8
1.1.1.3.3 统计分析性能
Hive/Impala的测试包括两类非常典型的SQL操作:使用group by的聚合操作以及使用join的关联操作: select his.tran_date, his.branch, his.tran_type, sum(his.tran_amt), count(*), count(distinct his.base_acct_no), his.cr_dr_maint_ind, his.ccy from sym_rb_tran_hist his group by his.tran_date, his.branch, his.tran_type, his.cr_dr_maint_ind, his.ccy; select fmc.client_no, acct.base_acct_no, trans.tran_amt, trans.tran_date, acct.internal_key from sym_fm_client fmc left join sym_rb_acct acct on fmc.client_no = acct.client_no left join sym_rb_tran_hist trans on acct.internal_key = trans.internal_key where fmc.acct_exec in ('0101', '0201', '2801') and fmc.client_type in ('100', '300') and acct.acct_desc like '%对私%';
测试HBase时,首先需要对3张表进行汇总,生成一张大表用于HBase的数据导入与查询: drop table if exists tran_hist_hbase; create table tran_hist_hbase row format delimited fields terminated by '|' stored as textfile as select fmc.client_no, fmc.client_grp, fmc.client_name, fmc.client_type, fmc.rep_doc_id, trans.* from sym_fm_client_snappy fmc 9