ECS搭建hadoop大数据环境有感

马上要毕业了,正是毕业设计和毕业论文的高峰期,本人定题仓库管理系统,相对来说业务方面比较简单,于是我便想着把自己的课设变得更加有挑战性。看到自己仓库的出入库记录,想起自己的数据库出入库信息表中的记录是个庞大的数据量,便想着在阿里云上面搭一个简单的大数据环境,进行一系列的数据分析。

在网上看了许多的资料,然后我就开始构思,搭建这个环境的难点在于,服务器的内存只有2g,怎样能让环境顺利的跑起来,多少的数据量是可接受范围内的。于是我便尽量减少结点数,让自己的环境跑起来,进行了繁杂的步骤之后,我的环境跑起来了,自拟了几个报表的需求,我就开始构思业务所需的中间表,用beeline在hive上建好了表,便开始完完整整走一遍ETL。当然第一步是想好自己需要数据库(MySQL)中的几张表,然后怎样把自己数据库(MySQL)的数抽取到HDFS,这个时候我想到了DataX,我用java写的单行插入,10分钟大概可以查两万万条数据(两张表各一万),然后我就开始了记录:


2万条数据, 用时10分钟插入到MySQL,dataX抽数到HDFS一张表用时14s,领一张表用时23s

20万条数据,用时快两个小时插入到MySQL,dataX用时一张15s,一张12s(没啥太大差别)

200万条数据,用时16小时插入到MySQL,dataX用时依然是十几秒

ECS搭建hadoop大数据环境有感

下面是我操作将近300万条数据用时:

ECS搭建hadoop大数据环境有感

由于内存有限,而且结点频繁挂掉,我就没有再做进一步尝试了

整个过程还是充满惊喜的,自己也学到了很多,比如这个过程编写了很多Linux 脚本啊,编写ETL工作流啊,设置shell脚本定时任务啊 当然整个过程最大的无奈是,想拓宽自己的内存,却又舍得花钱(狗头)。

下面附上我的ETL脚本示例:

E:

#!/bin/bash

PATH="/opt/java/jdk1.8.0_151/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"

echo "======================to do truncate=========================="

cd docker-hive

echo "truncate in background"

docker-compose exec -d hive-server env LANG=C.UTF-8 bash -c '/opt/hive/bin/beeline -u jdbc:hive2://localhost:10000 -e "truncate table ods_wms.record_in;"'

sleep 30

echo "======================to do extract=========================="

ip=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-hive_namenode_1`

/opt/datax/bin/datax.py --jvm="-Xms200M -Xmx200M" -p"-Dip=$ip" /opt/datax/job/imp_wms_record_in.job


T:

#!/bin/bash

PATH="/opt/java/jdk1.8.0_151/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"

echo "======================to do transform=========================="

cd docker-hive

echo "transform in background"

docker-compose exec -d hive-server env LANG=C.UTF-8 bash -:'/opt/hive/bin/beeline -u jdbc:hive2://localhost:10000 -e "insert overwrite table ads_wms.goods_sells_info

select g.goods_id goods_id,

g.goods_name goods_name,

nvl(ro.out_count, 0) out_count

from ods_wms.goods g left join (select goods_id,

sum(out_count) out_count

from ods_wms.record_out

where out_time >= add_months(current_timestamp(), -1)

group by goods_id) ro

on g.goods_id = ro.goods_id;"'


L: 

#!/bin/bash

PATH="/opt/java/jdk1.8.0_151/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"

echo "======================to do load=========================="

ip=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker-hive_namenode_1`

/opt/datax/bin/datax.py --jvm="-Xms200M -Xmx200M" -p"-Dip=$ip" /opt/datax/job/exp_goods_sells_info.job


上一篇:Android API中文文档(111) —— MailTo


下一篇:攻防实战:巧用Cain破解MYSQL数据库密码