在学习CDH之前,我们首先可以考虑如下问题:
个人考量
搭建hdfs ->搭建哪个版本->哪个模式(单机,伪分布式,完全分布式)->ha
nfs/jn 用于同名 nn 之间的数据信息
hadoop软件选择什么版本?去哪下?如何进行编译安装 ? 集群搭建?
搭建成功运行效率异常(分钟级别-> 小时级别>)日志分析(数据倾斜? shiffer)
如何将合适的版本启动安装, 集群异常预警, 版本自动兼容
这些都是在搭建大数据环境下架构师需要考虑的事情
补充: 为什么 在 Hadoop 2.x 中 HDFS 中有 ZKFC 进程,而 yarn 却没有? 在 Hadoop 1.x 升级到 Hadoop 2.x 的过程中,考虑到向下兼容的问题, NameNode 进程没有嵌入 ZKFC 中的代码,而另外开辟一个进程 ZKFC 。 再者由于 Hadoop 1.x 中没有 yarn 组件,Hadoop 2.x 中才出现的 yarn 组件, 所以 yarn 不用考虑向下兼容的问题,即 ResourceManager 进程就直接嵌入 ZKFC 中的代码,只运行一个进程。
Cloudera’s Distribution Including Apache Hadoop: 简称“CDH”, 是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建, 是由cloudera进行开发的大数据一站式平台管理解决方案 基于Web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop,简化了大数据平台的安装、使用难度。点击查看官网
特性
个人理解
CDH: 类比Linux的安装光盘 安装源
CM : 代替人做很多事情
CMS: 反馈集群运维信息
优点
省去在官网下载源码的编译工作
考虑软件兼容问题
监控io,容量,故障预警
缺点
轻开源( 没有相关索引的创建. API的包装 )
Apache Hadoop 不足之处
Hadoop 发行版
微观架构
宏观架构
CDH5.4 http://archive.cloudera.com/cdh5/
Cloudera Manager5.4.3: http://www.cloudera.com/downloads/manager/5-4-3.html
环境搭建
本次模拟集群环境使用三个节点node01,node02,node03 运行内存16G 则虚拟机内存分配10 2 2 运行内存为8G 则虚拟机内存分配4 1 1 剩余的2G留给操作系统
# 使用 xshell 登录时
# 不能 open 方式登录,可能会影响后面 ssh 免密
# 而是采用 ssh 方式登录
ssh root@node01,node02,node03
#1、网络配置
# ip配置
vi /etc/sysconfig/network
# host地址映射配置(添加node节点和对应ip的配置)
vi /etc/hosts
# 2、SSH免密钥登录
## 确保没有这个目录
cd /root/.ssh
## 利用下面命令自动创建.ssh目录, 进入到这个目录下输入下面命令创建免密钥文件
ssh localhost
## 创建密钥,复制
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
## 输入下面命令以后, .ssh目录下会生成authorized_keys文件,用于存放公钥信息
ssh-copy-id node1/node2/node3
## 两两免密 ,每个人都要将自己的公钥发给其他节点
node1->23
node2->13
node3->12
## 两两免密可以可以这样规划
node1->node2,node2->node2, node3->node2, 然后将node2生成authorized_keys分发到node1和node3即可
# 3、防火墙关闭
service iptables stop
chkconfig iptables off
# 4、SELINUX关闭
setenforce 0
vi /etc/selinux/config
SELINUX=disabled
# 5、安装JDK配置环境变量
export JAVA_HOME=/usr/java/jdkXXX
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 6、安装NTP(时间同步服务)
## 获取阿里云
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
## 更新 yum 缓存
yum makecache
yum install -y ntp
## 设置开机启动
chkconfig ntpd on
## 启动 ntpd 服务
service ntpd start
## 设置时间同步
ntpdate ntp1.aliyun.com
# 7、安装配置mysql
## 安装
yum install -y mysql-server
## 授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
##刷新
flush privileges
# 8、下载第三方依赖包
yum install -y chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb
cloudera Manager 安装
集群分发时,一定要先分发,后启动
HOST | node01 | node02 | node03 |
---|---|---|---|
Server | * | ||
Agent | * | * | * |
# node1上传所需要的所有资料( 图1 )
# 1、安装Cloudera Manager Server、Agent(所有节点: 这个是需要自己推敲的)
mkdir /opt/cloudera-manager # (node01,node02,node03)
tar zxf cloudera-manager*.tar.gz -C /opt/cloudera-manager(图2)
# 2、配置CM Agent # (node1)
修改文件/opt/cloudera-manager/cm-5.4.3/etc/cloudera-scm-agent/config.ini中server_host
server.host=node1
server.port=7182 (无需记忆,这个是cm和web页面通信的端口)
# 3、创建用户cloudera-scm # (所有节点都要添加---没有家目录,没有解释器,不能够登陆)
useradd --system --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
# 4. 创建Parcel目录
## Server节点(node01)
mkdir -p /opt/cloudera/parcel-repo
### 更改文件的角色与权限
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
## Agent节点, 被分发后节点存放文件的目录(node01,node02,node03)
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
# 5、配置CM Server数据库 # (node01)
## 拷贝mysql jar文件到目录.没有请创建
/usr/share/java/
## 上传并修改mysql的驱动jar名称, 注意jar包名称要修改为
mysql-connector-java.jar
# 进入到node01的MySQL中
## 授权
grant all on *.* to 'temp'@'%' identified by 'temp' with grant option;
## 进入到cm的指定目录
cd /opt/cloudera-manager/cm-5.4.3/share/cmf/schema/
## 运行脚本文件
./scm_prepare_database.sh mysql temp -h node1-utemp -ptemp --scm-host node1scm scm scm
### 格式:数据库类型、数据库、数据库服务器、用户名、密码、cm server服务器
# 6、制作CDH本地源 #(node01)
## 将上传好的文件 CDH-5.4.0-1.cdh5.4.0.p0.27-el6.parcel 以及 manifest.json,将放到server节点的/opt/cloudera/parcel-repo下。
### mv xx ./ 移动到当前目录下, 这一步的目的是完成server持有本地cdh的安装源的配置
### 打开manifest.json文件,里面是json格式的配置, 自行配置的方式是:找到与下载版本相对应的hash码,新建文件,文件名与你的parel包名一致,并加上.sha后缀,将hash码复制到文件中保存。
# 7、分发
cd /opt/cloudera-manager/
scp -r ./* root@node02:`pwd`
scp -r ./* root@node03:`pwd`
## 在复制时, 可以将标准输出扔到黑洞中, 但是异常仍会打印在Xshell窗口
scp -r ./* root@node03:`pwd` 1> dev/null
# 7、启动CM Server、Agent(图3)
cd /opt/cloudera-manager/cm-5.4.3/etc/init.d/
./cloudera-scm-server start
## 注意!!! Sever首次启动会自动创建表以及数据,不要立即关闭或重启,否则需要删除所有表及数据重新安装
./cloudera-scm-agent start
## 8. 访问( 图4, 图5 )
node1:7180/cmf/login
web页面操作CDH进行集群配置见第九阶段第五节
小技巧:
Ctrl + C
不能中断停止,可使用 Ctrl + Z
将当前任务放到后台进行,从而不阻塞当前 shell 窗口,然后输入 jobs -l
,显示当前任务作业的状态及进程号,由 kill -9 进程号
,强制终止任务作业
netstat -natp |grep 进程号
,查看某个进程使用的端口号
du -sh ./
: 统计当前目录的大小
du -sh ./*
: 统计当前目录下每个目录的大小
ll | wc -l
: 统计当前目录下文件的个数
图1
图2
图3
图4
图5
主机 - host 机架 - rack 集群 - Cluster 服务 - service 服务实例 - service instance 角色 - role 角色实例 - role instance 角色组 - role group 主机模板 - host template parcel 静态服务池 - static service pool 动态资源池 - dynamic resource pool
通过Web页面来管理ClouderManager
Hue是一个开源的Apache Hadoop UI系统。 通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据。 例如操作HDFS上的数据、运行Hive脚本、管理Oozie任务等等。 是基于Python Web框架Django实现的。 支持任何版本Hadoop
Hue 的特点:
安装 Hue
图形化操作,点点点… 小插曲: 什么叫解耦底层技术的平台产品 ? 直接屏蔽底层的实现
图形化操作
中间要 Hive 在关系型数据库建立表,并授权
create database hive DEFAULT CHARACTER SET utf8;
grant all on hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
同样图形化操作
中间要为 OOZIE 在关系型数量库建立库,并授权
create database oozie DEFAULT CHARACTER SET utf8;
grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie';
Cloudera 公司推出,提供对 HDFS 、HBase 数据的高性能、低延迟的交互式 SQL 查询功能 基于 Hive 使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等特点 是 CDH 平台首选的 PB 级大数据实时查询分析引擎
Catalog Server 安装在 node01 机器上 StateStore 安装在 node01 机器上 Daemon 安装在 node02、node03 机器上
Impala 的使用 SQL 与 Hive 的使用类似,但是不支持 Hive 一些特殊操作,如: UDF等。
impala-shell -p 显示 sql 执行计划
impala-shell -i host 登录指定 impala
impala-shell -q sql(语句) 不进入交互界面,图1
-B 去掉表格美化的样式(去除制表符,图2 )
-f sql 文件的位置(结合脚本使用)
-o 输出文件
-c 查询失败后继续执行
使用 impala-shell 打开,进入 impala 交互界面
show tables;
特殊用法
help
connect <hostname:port>连接主机, 默认端口为21000
refresh <tablename> 增量刷新元数据库
invalidate metadata 全量刷新元数据库,将 Hive 的元数据同步刷新到 impala
explain <sql> 显示查询执行计划,步骤
shell <shell> 不退出 impala—shell ,执行 Linux 命令
profile (查询完成后执行)查询最近一次查询的底层信息,[事后诸葛亮]
压缩数据文件的好处:
图1
图2
银行中存放的数据类型一般为 Parquet
与 Hive 和 HBase 整合类似
Oozie 是用于 Hadoop 平台的开源的工作流调度引擎, 用来管理 Hadoop 作业 属于 web 应用程序,由 Oozie Client 和 Oozie Server 两个组件构成。 Oozie Server 运行于 Java Servlet 容器(tomcat) 中的 web 程序 官网: https://oozie.apache.org
作用
架构
Oozie 启动成功后,打开 Web 的 UI 界面
解决方法:
yum -y install unzip
unzip ext-2.2.zip -d /var/lib/oozie
nameNode=hdfs://node01:8020
jobTracker=node01:8032 # 代表ResourceManager端口号
queueName=default
exampleRoot=examples
oozie.wf.application.path=${nameNode}/user/
<workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node><${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>echo</exec>
<argument>hi shell in oozie</argument>
</shell>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>
Map/Reduce failed, error message [${wf:errorMessgae(wf:lastErrorNode())}]
</message>
</kill>
<end name="end" />
</workflow-app>
Oozie Cli 命令
hdfs上传脚本文件 Oozie cli 运行脚本
点击WebUI 页面, 查看脚本任务执行详情
查看执行的节点以及执行的详细信息
查看该任务的MapReduce
查看MapReduce中的Map任务
查看map 任务的日志信息
通过标准输出查看workflow.xml 定义的工作流结果
注意:如果出现了错误信息, 也是通过这样的方式进行追错!!!
使用Oozie 图形化编辑器执行(Workflow 工作流)
链接:https://pan.baidu.com/s/1K699SW7RiD7zfDGnGs2JOA 提取码:ysao