基于Hadoop生态圈的数据仓库实践 —— 环境搭建(二)

二、安装Hadoop及其所需的服务

1. CDH安装概述

CDH的全称是Cloudera‘s Distribution Including Apache Hadoop,是Cloudera公司的Hadoop分发版本。有三种方式安装CDH:

. Path A - 通过Cloudera Manager自动安装

. Path B - 使用Cloudera Manager Parcels或Packages安装

. Path C - 使用Cloudera Manager Tarballs手工安装

不同方式的安装步骤总结如下:


步骤


步骤 1: 安装 JDK

Cloudera Manager Server、Management Service和CDH需要安装JDK。


有两个选项:

. 使用Cloudera Manager安装程序在集群中的所有主机的/usr/java下安装一个Oracle JDK的支持版本。

. 使用命令行在所有主机上安装一个Oracle JDK的支持版本,并且设置JAVA_HOME环境变量为JDK的安装目录。


步骤 2: 设置数据库

Cloudera Manager Server、Cloudera Management Service和某些CDH的可选服务需要安装、配置和启动数据库。


有两个选项:

. 使用Cloudera Manager安装程序安装、配置和启动一个内嵌的PostgreSQL数据库。

. 使用诸如yum这样的命令行包安装工具安装、配置和启动数据库。


Path A


Path B


Path


步骤 3: 安装Cloudera Manager服务器

在一台主机上安装和启动Cloudera Manager服务器。


使用Cloudera Manager安装程序安装服务器。需要该主机的sudo权限并能访问互联网。


使用Linux包安装命令(如yum)安装Cloudera Manager服务器。

修改数据库属性。

使用service命令启动Cloudera Manager服务器。


使用Linux命令解包,并且使用service命令启动服务。


步骤 4: 安装Cloudera Manager代理

在所有主机上安装并启动Cloudera Manager代理。


使用Cloudera Manager安装向导在所有主机上安装代理。


有两个选项:

. 使用Linux包安装命令(如yum)在所有主机上安装Cloudera Manager代理。

. 使用Cloudera Manager安装向导在所有主机上安装代理。


使用Linux命令在所有主机上解包并启动代理。


步骤 5: 安装CDH和服务

在所有主机上安装CDH及其服务。


使用Cloudera Manager安装向导安装CDH及其服务。


有两个选项:

. 使用Cloudera Manager安装向导安装CDH及其服务。

. 使用Linux包安装命令(如yum)在所有主机上安装CDH及其服务。


使用Linux命令在所有主机上解包,并使用service命令启动CDH及其服务。


步骤 6: 建立、配置并启动CDH和服务

在所有主机上配置并启动CDH及其服务。


使用Cloudera Manager安装向导给主机赋予角色并配置集群。许多配置是自动的。


使用Cloudera Manager安装向导给主机授予角色并配置集群。许多配置是自动的。


使用Cloudera Manager安装向导给主机赋予角色并配置集群。许多配置是自动的。也可以使用Cloudera Manager API管理一个集群,这对于脚本预配置部署是很有用的。

2. 实验环境

主机信息:


主机名                      


IP地址                                              


CDH1


172.16.1.101


CDH2


172.16.1.102


CDH3


172.16.1.103


CDH4


172.16.1.104

硬件配置:

每台主机:CPU4核、内存8G、硬盘100G

软件版本:


名称                                                    


版本                                                                               


操作系统


CentOS release 6.4 (Final) 64位


JDK


1.7.0_80


数据库


MySQL 5.6.14


JDBC


MySQL Connector Java 5.1.38


Cloudera Manager


5.7.0


CDH


5.7.0

3. 安装配置

(1)安装前准备(都是使用root用户在集群中的所有4台主机配置)

. 从以下地址下载所需要的安装文件

http://archive.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.7.0_x86_64.tar.gz

http://archive.cloudera.com/cdh5/parcels/5.7/CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel

http://archive.cloudera.com/cdh5/parcels/5.7/CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel.sha1

http://archive.cloudera.com/cdh5/parcels/5.7/manifest.json

  • 使用下面的命令检查OS依赖包,xxxx换成包名

rpm -qa | grep xxxx

以下这些包必须安装:

chkconfig

python (2.6 required for CDH 5)

bind-utils

psmisc

libxslt

zlib

sqlite

cyrus-sasl-plain

cyrus-sasl-gssapi

fuse

portmap (rpcbind)

fuse-libs

redhat-lsb

  • 配置域名解析

vi /etc/hosts

# 添加如下4行内容

172.16.1.101 cdh1

172.16.1.102 cdh2

172.16.1.103 cdh3

172.16.1.104 cdh4

  • 安装JDK

CDH5推荐的JDK版本是1.7.0_67、1.7.0_75、1.7.0_80,这里安装1.7.0_80

注意:所有主机要安装相同版本的JDK;安装目录为/usr/java/jdk-version

mkdir /usr/java/

mv jdk-7u80-linux-x64.tar.gz /usr/java/

cd /usr/java/

tar -zxvf jdk-7u80-linux-x64.tar.gz

chown -R root:root jdk1.7.0_80/

vi /etc/profile.d/java.sh

# 添加如下3行内容

export JAVA_HOME=/usr/java/jdk1.7.0_80

export CLASSPATH=.:$JAVA_HOME/jre/lib/*:$JAVA_HOME/lib/*

export PATH=$PATH:$JAVA_HOME/bin

# 使环境变量生效

source /etc/profile.d/java.sh

  • 安装、配置并启动NTP服务

yum install ntp

chkconfig ntpd on

ntpdate -u 202.112.29.82

vi /etc/ntp.conf

# 添加如下8行内容

driftfile /var/lib/ntp/drift

restrict default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

restrict 127.0.0.1

restrict -6 ::1

server 202.112.29.82

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

# 启动NTP服务

service ntpd start

  • 建立CM用户

useradd --system --home=/opt/cm-5.7.0/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

usermod -a -G root cloudera-scm

echo USER=\"cloudera-scm\" >> /etc/default/cloudera-scm-agent

echo "Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin" >> /etc/sudoers

  • 安装配置MySQL数据库(为了后面配置方便,这里每个主机都装了)

rpm -ivh MySQL-5.6.14-1.el6.x86_64.rpm

vi /etc/profile.d/mysql.sh

# 添加如下2行内容

export MYSQL_HOME=/home/mysql/mysql-5.6.14

export PATH=$PATH:$MYSQL_HOME/bin

# 使环境变量生效

source /etc/profile.d/mysql.sh

# 修改root密码

mysqladmin -u root password

# 编辑配置文件

vi /etc/my.cnf

# 内容如下

[mysqld]

transaction-isolation = READ-COMMITTED

log_bin=/data/mysql_binary_log

binlog_format = mixed

innodb_flush_log_at_trx_commit  = 2

innodb_flush_method = O_DIRECT

key_buffer = 16M

key_buffer_size = 32M

max_allowed_packet = 32M

thread_stack = 256K

thread_cache_size = 64

query_cache_limit = 8M

query_cache_size = 64M

query_cache_type = 1

max_connections = 550

read_buffer_size = 2M

read_rnd_buffer_size = 16M

sort_buffer_size = 8M

join_buffer_size = 8M

innodb_flush_log_at_trx_commit  = 2

innodb_log_buffer_size = 64M

innodb_buffer_pool_size = 4G

innodb_thread_concurrency = 8

innodb_log_file_size = 512M

[mysqld_safe]

log-error=/data/mysqld.err

pid-file=/data/mysqld.pid

sql_mode=STRICT_ALL_TABLES

# 添加开机启动

chkconfig mysql on

# 启动MySQL

service mysql restart

# 根据需要建立元数据库

mysql -u root -p -e "create database hive DEFAULT CHARACTER SET utf8;create database rman DEFAULT CHARACTER SET utf8;create database oozie DEFAULT CHARACTER SET utf8;grant all on *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘mypassword‘;"

  • 安装MySQL JDBC驱动

tar -zxvf mysql-connector-java-5.1.38.tar.gz

cp ./mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar /usr/share/java/mysql-connector-java.jar

  • 配置免密码ssh(这里配置了任意两台机器都免密码)

# 分别在四台机器上生成密钥对:

cd ~

ssh-keygen -t rsa

# 然后一路回车

# 在cdh1上执行:

cd ~/.ssh/

ssh-copy-id cdh1

scp /root/.ssh/authorized_keys cdh2:/root/.ssh/

# 在cdh2上执行:

cd ~/.ssh/

ssh-copy-id cdh2

scp /root/.ssh/authorized_keys cdh3:/root/.ssh/

#在cdh3上执行:

cd ~/.ssh/

ssh-copy-id cdh3

scp /root/.ssh/authorized_keys cdh4:/home/grid/.ssh/

#在cdh4上执行:

cd ~/.ssh/

ssh-copy-id cdh4

scp /root/.ssh/authorized_keys cdh1:/root/.ssh/

scp /root/.ssh/authorized_keys cdh2:/root/.ssh/

scp /root/.ssh/authorized_keys cdh3:/root/.ssh/

(2)在cdh1上安装Cloudera Manager

tar -xzvf cloudera-manager*.tar.gz -C /opt/

# 建立cm数据库

/opt/cm-5.7.0/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -pmypassword --scm-host localhost scm scm scm

# 配置cm代理

vi /opt/cm-5.7.0/etc/cloudera-scm-agent/config.ini

# 将cm主机名改为cdh1

server_host=cdh1

# 将Parcel相关的三个文件拷贝到/opt/cloudera/parcel-repo

cp CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel /opt/cloudera/parcel-repo/

cp CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel.sha1 /opt/cloudera/parcel-repo/

cp manifest.json /opt/cloudera/parcel-repo/

# 改名

mv /opt/cloudera/parcel-repo/CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel.sha1 /opt/cloudera/parcel-repo/CDH-5.7.0-1.cdh5.7.0.p0.45-el6.parcel.sha

# 修改属主

chown -R cloudera-scm:cloudera-scm /opt/cloudera/

chown -R cloudera-scm:cloudera-scm /opt/cm-5.7.0/

# 将/opt/cm-5.7.0目录拷贝到其它三个主机

scp -r -p /opt/cm-5.7.0 cdh2:/opt/

scp -r -p /opt/cm-5.7.0 cdh3:/opt/

scp -r -p /opt/cm-5.7.0 cdh4:/opt/

(3)在每个主机上建立/opt/cloudera/parcels目录,并修改属主

mkdir -p /opt/cloudera/parcels

chown cloudera-scm:cloudera-scm /opt/cloudera/parcels

(4)在cdh1上启动cm server

/opt/cm-5.7.0/etc/init.d/cloudera-scm-server start

# 此步骤需要运行一些时间,用下面的命令查看启动情况

tail -f /opt/cm-5.7.0/log/cloudera-scm-server/cloudera-scm-server.log

(5)在所有主机上启动cm agent

mkdir /opt/cm-5.7.0/run/cloudera-scm-agent

chown cloudera-scm:cloudera-scm /opt/cm-5.7.0/run/cloudera-scm-agent

/opt/cm-5.7.0/etc/init.d/cloudera-scm-agent start

(6)登录cm控制台,安装配置CDH5及其服务

打开控制台

http://172.16.1.101:7180/

页面如下图所示。

缺省的用户名和密码都是admin,登录后进入欢迎页面。勾选许可协议,如下图所示,点继续。

进入版本说明页面,如下图所示,点继续。

进入服务说明页面,如下图所示,点继续。

进入选择主机页面,如下图所示,全选四个主机,点继续。

进入选择存储库页面,如下图所示,点继续。

进入集群安装页面,如下图所示,点继续。

进入验证页面,如下图所示,点完成。

进入集群设置页面,如下图所示,根据需要选择服务,点继续。

进入自定义角色分配页面,如下图所示,保持不变,点继续。

进入数据库设置页面,填写相关信息,点测试连接,如下图所示,点继续。

进入审核更改页面,保持不变,点继续。

进入首次运行页面,等待运行完,如下图所示,点继续。

进入安装成功页面,如下图所示,点完成。

进入安装成功页面,如下图所示。

至此,CDH安装完成,主机和角色对应如下表所示。


服务                                           


角色                                                                          


主机                                     


HDFS


DataNode


cdh1


cdh3


cdh4


NameNode


cdh2


SecondaryNameNode


cdh2


Hive


Hive Metastore Server


cdh2


HiveServer2


cdh2


Hue


Hue Server


cdh2


Impala


Impala Catalog Server


cdh2


Impala Daemon


cdh1


cdh3


cdh4


Impala StateStore


cdh2


Oozie


Oozie Server


cdh2


Sqoop 2


Sqoop 2 Server


cdh2


YARN


JobHistory Server


cdh2


NodeManager


cdh1


cdh3


cdh4


ResourceManager


cdh2

CDH的官方安装文档URL地址为:

http://www.cloudera.com/documentation/enterprise/latest/topics/installation.html

时间: 2024-11-08 21:36:01

基于Hadoop生态圈的数据仓库实践 —— 环境搭建(二)的相关文章

基于Hadoop生态圈的数据仓库实践 —— 环境搭建(三)

三.建立数据仓库示例模型 Hadoop及其相关服务安装配置好后,下面用一个小而完整的示例说明多维模型及其相关ETL技术在Hadoop上的具体实现. 1. 设计ERD 操作型系统是一个销售订单系统,初始时只有产品.客户.订单三个表,ERD如下图所示. 多维数据仓库包含有一个销售订单事实表,产品.客户.订单.日期四个维度表,ERD如下图所示. 作为示例,上面这些ERD里的属性都很简单,看属性名字便知其含义.维度表除了日期维度外,其它三个表都在源表的基础上增加了代理键.版本号.生效日期.过期日期四个属

基于Hadoop生态圈的数据仓库实践 —— 概述(二)

二.在Hadoop上实现数据仓库 (大部分翻译自<Big Data Warehousing>) 数据仓库技术出现很长时间了,现在为什么要从传统数据库工具转为使用Hadoop呢?答案就是最引人关注的流行词汇 -- 大数据.对许多组织来说,传统关系数据库已经不能够经济地处理他们所面临的数据量.而Hadoop生态圈就是为了能够廉价处理大量数据的目的应运而生的.下面看看大数据是怎么定义的. 1. 大数据的定义 虽然数据仓库技术自诞生之日起的二十多年里一直被用来处理大数据,但"大数据"

基于Hadoop生态圈的数据仓库实践 —— ETL

使用Hive转换.装载数据 1. Hive简介 (1)Hive是什么         Hive是一个数据仓库软件,使用SQL读.写.管理分布式存储上的大数据集.它建立在Hadoop之上,具有以下功能和特点: 通过SQL方便地访问数据,适合执行ETL.报表.数据分析等数据仓库任务. 提供一种机制,给各种各样的数据格式加上结构. 直接访问HDFS的文件,或者访问如HBase的其它数据存储. 可以通过MapReduce.Spark或Tez等多种计算框架执行查询.         Hive提供标准的SQ

基于Hadoop生态圈的数据仓库实践 —— ETL(一)

一.使用Sqoop抽取数据 1. Sqoop简介 Sqoop是一个在Hadoop与结构化数据存储(如关系数据库)之间高效传输大批量数据的工具.它在2012年3月被成功孵化,现在已是Apache的顶级项目.Sqoop有Sqoop1和Sqoop2两代,Sqoop1最后的稳定版本是1.4.6,Sqoop2最后版本是1.99.6.需要注意的是,1.99.6与1.4.6并不兼容,而且截止目前为止,1.99.6并不完善,不推荐在生产环境中部署. (1)Sqoop1 Sqoop1的架构图如下所示. 第一代Sq

基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(三)

三.Impala OLAP实例        本节使用前面销售订单的例子说明如何使用Impala做OLAP类型的查询,以及实际遇到的问题及解决方案.为了处理SCD和行级更新,我们前面的ETL使用了Hive ORCFile格式的表,可惜到目前为止,Impala还不支持ORCFile.用Impala查询ORCFile表时,错误信息如下图所示. 这是一个棘手的问题.如果我们再建一套和dw库中表结构一样的表,但使用Impala能够识别的文件类型,如Parquet,又会引入两个新的问题:一是CDH 5.7

基于Hadoop生态圈的数据仓库实践 —— 进阶技术(四)

四.角色扮演维度        当一个事实表多次引用一个维度表时会用到角色扮演维度.例如,一个销售订单有一个是订单日期,还有一个交货日期,这时就需要引用日期维度表两次.        本节将说明两类角色扮演维度的实现,分别是表别名和数据库视图.这两种都使用了Hive的功能.表别名是在SQL语句里引用维度表多次,每次引用都赋予维度表一个别名.而数据库视图,则是按照事实表需要引用维度表的次数,建立相同数量的视图.1. 修改数据库模式        使用下面的脚本修改数据库模式.分别给数据仓库里的事实

基于Hadoop生态圈的数据仓库实践 —— 进阶技术(三)

三.维度子集        有些需求不需要最细节的数据.例如更想要某个月而不是某天的记录.再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等.这些特定维度包含在从细节维度选择的行中,所以叫维度子集.维度子集比细节维度的数据少,因此更易使用,查询也更快.        本节中将准备两个特定维度,它们均取自现有的维度:月份维度(日期维度的子集),Pennsylvania州客户维度(客户维度的子集). 1. 建立月份维度表        执行下面的脚本建立月份维度表.注意月份维度不包含pr

基于Hadoop生态圈的数据仓库实践 —— 进阶技术(五)

五.快照        前面实验说明了处理维度的扩展.本节讨论两种事实表的扩展技术.        有些用户,尤其是管理者,经常要看某个特定时间点的数据.也就是说,他们需要数据的快照.周期快照和累积快照是两种常用的事实表扩展技术.        周期快照是在一个给定的时间对事实表进行一段时期的总计.例如,一个月销售订单周期快照汇总每个月底时总的销售订单金额.        累积快照用于跟踪事实表的变化.例如,数据仓库可能需要累积(存储)销售订单从下订单的时间开始,到订单中的商品被打包.运输和到达

基于Hadoop生态圈的数据仓库实践 —— 进阶技术(一)

一.增加列         数据仓库最常碰到的扩展是给一个已经存在的维度表和事实表添加列.本节说明如何在客户维度表和销售订单事实表上添加列,并在新列上应用SCD2,以及对定时装载脚本所做的修改.假设需要在客户维度中增加送货地址属性,并在销售订单事实表中增加数量度量值.        先看一下增加列时模式发生的变化.        修改后源数据库模式如下图所示. 修改后DW数据库模式如下图所示. 1. 修改数据库模式        使用下面的SQL脚本修改源数据库模式. USE source; A