一、项目背景
公司是一家以女装销售及网红孵化为主的大型电商公司,一年的GMV大约在30亿左右。公司的数据存在多个业务系统(ERP、WMS、SCM、OA)中,由于数据比较大而且分散,收集和分析都比较困难。因此想搭建基于hadoop的数据仓库,并能实时的将数据展示到BI及报表系统中。
二、项目需求及架构设计
2.1项目需求
1.数据采集平台搭建
2.实现业务数据仓库的分层搭建
3.针对数据仓库的数据进行,留存、复购、活跃、GMV、库存等数据分析
2.2技术框架
2.2.1技术选型
1.数据采集传输:Sqoop
2.数据存储:MySql、HDFS
3.数据计算:Hive
4.数据可视化:finebi、finereport
2.2.2流程设计
2.2.3 集群规模(3台服务器每台3T,64G内存)
(1)每天大约500多万条数据,每条数据约1K=5000000/1024/1024=约5G
(2)1年的数据量:5*356/1024=1.8T
(3)保存3副本=3*1.8=5.4T
(4)预留20%空间=5.4/0.7=7.8T
三、组件安装
3.1.1 环境准备
1.创建xiaohu用户
2.配置xiaohu用户具有root权限
3.在opt目录下创建文件夹
(1)在opt目录下创建software,module文件夹
sudo mkdir software
sudo mkdir module
(2)修改software,module文件夹的所有者xiaohu
sudo chown xiaohu:xiaohu module/ software/
3.1.2 安装JDK
1.卸载现有JDK
rpm -qa | grep java
sudo rpm -e 软件包
2.用SecureCRT工具将JDK导入到opt目录下面的software文件夹下面
3.解压 JDK 到opt/module目录下
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
4.配置环境变量
sudo vi /etc/profile
//在文件末尾添加
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
5.保存后退出
source /etc/peofile
6.测试是否安装成功
java -version
3.1.3 安装hadoop
1. 用SecureCRT工具将hadoop-2.7.2.tar.gz导入到opt目录下面的software文件夹下面
2.将Hadoop解压到/opt/module目录下
tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
3.添加Hadoop环境变量
export HADOOP_HOME=/opt/module/hadoop-2.7.2
expoer PATH=$PATH:HADOOP_HOME/bin
4.退出
source /etc/profile
3.1.4 集群配置
(1) 配置:hadoop-env.sh
#修改JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
(2) 配置core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(3) 配置hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
(4) 配置yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(5) 配置yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
(6) 配置mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(7) 配置mapred-site.xml
#修改文件名
cp mapred-site.xml.template mapred-site.xml
—
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(8)编写分发脚本
1.创建文件
cd
mkdir bin
cd bin/
touch xsync
vi xsync
2.编写脚本
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
3.执行脚本
xsync /opt/module/hadoop-2.7.2/
(9) SSH无密登录配置
生成公钥和私钥:
cd /.ssh
ssh-keygen -t rsa#按3次回车
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
#同样要在其他机器上操作
(10) 配置slaves
vi /opt/module/hadoop-2.7.2/etc/hadoop/slaves
在文件增如下内容
hadoop102
hadoop103
hadoop104
3.1.5 启动集群
(1) 第一次启动需格式化
cd /opt/module/hadoop102 hadoop-2.7.2
bin/hdfs namenode -format
(2) 启动HDFS
start-dfs.sh
(3)在hadoop103中启动YARN
start-yarn.sh
(4)jps 查看启动结果
3.2 Zookeeper安装
1.解压安装
tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
2.配置服务器编号
(1)在/opt/module/zookeeper-3.4.10/这个目录下创建zkData
(2)在/opt/module/zookeeper-3.4.10/zkData目录下创建一个myid的文件
(3)编辑myid文件
(4)在文件中添加与server对应的编号:2 —其他两台机器也要修改 分别为 3、4
3.配置zoo.cfg文件
(1)重命名/opt/module/zookeeper-3.4.10/conf这个目录下的zoo_sample.cfg为zoo.cfg
(2)修改配置
dataDir=/opt/module/zookeeper-3.4.10/zkData
#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
4.同步
xsync /opt/module/zookeeper-3.4.10
5.集群启动
bin/zkServer.sh start
3.3 hive安装
1.解压软件到 /opt/moudle 下
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/
2. 修改apache-hive-1.2.1-bin的名称为hive
mv apache-hive-1.2.1-bin/ hive
3.修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh
mv hive-env.sh.template hive-env.sh
4.配置hive-env.sh文件
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export HIVE_CONF_DIR=/opt/module/hive/conf
3.4 sqoop安装
1.解压sqoop安装包到 /opt/moudle下
tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/
2.修改配置文件
#重命名
mv sqoop-env-template.sh sqoop-env.sh
#修改配置
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
export HIVE_HOME=/opt/module/hive
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
export HBASE_HOME=/opt/module/hbase
3.拷贝JDBC驱动
cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
四、数据仓库分层建设(以订单数据为例)
总共将数仓分为 ODS(原始层)、DWD(明细层)、DWS(汇总层)、ADS(应用层)
4.1 ODS(原始层)数据导入
4.1.1 api_trade(订单明细表)数据导入
/opt/module/sqoop/bin/sqoop import job --creat job -- import
--connect jdbc:mysql://host:3306/db_name
--username *****
--password ****
--target-dir /origin_data/$db_name/db/$1/$db_date
--delete-target-dir
--num-mappers 1
--fields-terminated-by "t"
--query "$2"' and $CONDITIONS;'
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/notes/172270.html