大数据平台架构实战-原型项目工程结构(一)
一、原型项目工程结构
了解完系统架构之后,我们来看一下整个原型项目的工程结构,原型项目已在 GitHub上开源,整个工程便用 Maven构建,一共由9个子项目(模块)组成,分别如下:
- bdp-metric:这是一个用来模拟外部数据源的项目,主要用于生成dummy metric数据,然后写入一个 MySQL 数据库,该项目主要由 Shell 脚本组成;
- bdp-import:负责丛外部数据源以批量方式采集数据,基干 Sqoop;
- bdp-collect:负责从外部数据源以批量方式采集数据,基于Camel开发;
- bdp-dwh:负责构建数据仓库,是批处理的核心项目,基于Spark SQL 开发;
- bdp-master-server:主数据系统的服务器端,负责维护主数据,它有两个存储介质:一个是MySQL 数据库,另一个是Redis 数据库,前者用于主数据的持久化存储,后者作为Cache为实时流处理提供主数据查询服务;
- bdp-master-client:专门为读取主数据开发的客户端程序,它从 bdp-master-server维护的Redis数据库上读取数据,供流处理项目bdp-stream使用:
- bdp-stream:负责实时流处理,是实时处理的核心项目,基于Spark Streaming开发;
- bdp-workflow:负责所有批处理的作业编排和调度,基于Oozie开发;
- bdp-parent:负责统一维护以上所有项目的依赖类库和插件版本,这是 Maven项目中常见的做法。
这些项目在架构中承担的职责或者说负责的范围如下图所示。
没有在上图中体现出来的是 bdp-metric 和 bdp-master-client,前者将 dummy metric 数据写入 bdp_metric 数据库,后者作为 jar 被 bdp-stream 引用。
二、部署原型项目
配置服务器
首先,我们需要在目标服务器上做一些必要配置。
在远程服务器上建立应用程序专有账号
在Linux上部署应用程序有一些最佳实践,其中一项就是为每个应用程序创建专有的Linux账号,这个账号一般与应用同名,程序部署在这个专有账号的home目录下,所有程序文件的owner 都是这个专有账号,同时用这个专有账号来启动应用程序。原型项目中除去 bdp-parent和 bdip-master-client,其他子项目都会单独部署,创建的账号如表示。
项目名称 | Linux专有账号 | 账号密码 | 用户home目录 |
---|---|---|---|
bdp-collect | bdp-collect | Bdpp1234! | /home/bdp-collect |
bdp-dwh | bdp-dwh | Bdpp1234! | /home/bdp-dwh |
bdp-import | bdp-dwh | Bdpp1234! | /home/bdp-dwh |
bdp-master-server | bdp-master-server | Bdpp1234! | /home/bdp-master-server |
bdp-metric | bdp-metric | Bdpp1234! | /home/bdp-metric |
bdp-stream | bdp-stream | Bdpp1234! | /home/bdp-stream |
bdp-workflow | bdp-workflow | Bdpp1234! | /home/bdp-workflow |
这些项目都将部署到 gateway1 节点上,所以,我们只需在gateway1 节点上创建上述账号即可,有两点需要特别解释一下。
- bdp-import 项目使用的账号是 bdp-dwh,而非 bdp-import。
- 对于 bdp-stream账号,除了要建在 gateway1 节点上,还要在 work1、work2和work3节点上创建,并配置免密登录,原因是bdp-stream 需要远程登录这些节点进行日志文件操作。
以下是用于创建上述所有账号的脚本,在gateway1 节点上使用root 账号执行即可完成所有账号的创建工作。create_account.sh
# Run as 'root'
# add group if not exists
group=bdp
egrep "^$group\:" /etc/group >& /dev/null
if [ "$?" != "0" ]
then
groupadd "$group"
echo "Group: $group is added."
fi
users=(bdp-metric bdp-collect bdp-dwh bdp-master-server bdp-stream bdp-workflow)
password='Bdpp1234!'
for user in ${users[@]}
do
# add user if not exists and set password
egrep "^$user\:" /etc/passwd >& /dev/null
if [ "$?" != "0" ]
then
useradd -g "$group" "$user"
echo "User: $user is added."
echo "$user:$password"|chpasswd
echo "User: $user, password is reset."
fi
done
# enable all users of bdp group can sudo as hdfs.
echo '%bdp ALL = (hdfs) NOPASSWD: ALL'>/etc/sudoers.d/bdp
运行:
vi create_user.sh
[root@centos01 bdp-test]# chmod +x create_user.sh
[root@centos01 bdp-test]# bash create_user.sh
Group: bdp is added.
User: bdp-metric is added.
User: bdp-metric, password is reset.
User: bdp-collect is added.
User: bdp-collect, password is reset.
User: bdp-dwh is added.
User: bdp-dwh, password is reset.
User: bdp-master-server is added.
User: bdp-master-server, password is reset.
User: bdp-stream is added.
User: bdp-stream, password is reset.
User: bdp-workflow is added.
User: bdp-workflow, password is reset.
在HDFS上为程序专有账号创建Home目录
项目的部分应用程序需要使用HDFS读写文件,为此需要在HDFS上为这些程序的专有账号创建Home目录,CDH为HDFS用户规划了特定根目录/user,一般用户的 home 目录都建在/user下,需要在HDFS创建用户 home 目录的用户包括 bdp-dwh、bdp-stream和bdp-workflow,在gateway1 节点上使用root账号执行以下脚本,即可创建出所有的目录。
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)