大数据处理流程:
数据采集 -> 清洗标注 -> 存储聚合 -> 分析挖掘 -> 数据应用
平台架构示例:
数据集成技术栈:
-
shell脚本
定制shell脚本将数据导入到HDFS- hadoop fs -put
- 适用场景:
- 离线处理,实时性要求不高
- 简单的数据源
- Webserver Log
- RDMS
- Application Log
-
flume
作为一个数据管道将数据导入各种应用,起到数据集成的作用。还可用于做HA -
sqoop
主要用于在hadoop和关系型数据库中传递数据。可以方便的将数据从关系型数据库导入到HDFS,或将数据从HDFS导出到关系型数据库
-
kafka
scala编写,做为java组件使用。
用于数据的聚合,不同的数据源作为生产者写入到kafka集群,各个数据服务作为消费者读取集群中数据,这样数据就流动起来。
kafka可以降低系统耦合度。所有应用接入到kafka集群即可。kafka可进行横向扩展,可着增强分布式处理能力,降低数据丢失的几率。
数据存储技术栈: -
HDFS
是hadoop的核心组件,解决大数据的存储问题。只适合离线批量的计算,不适合随机读取
-
HBASE
是一个分布式的,面向列的开源数据库。属于KV结构数据,原生不支持标准sql。可满足随机读写的需求,弥补HDFS的不足。
数据计算技术栈 -
YARN/MapReduce
YARN是Hadoop的核心组件,解决大数据的资源调度问题;MapReduce解决大数据计算问题
-
Spark
用于构建大型的,低延迟的数据分析应用程序。hadoop适用于离线计算
一个软件栈满足不同的应用场景的理念 -
Storm
是一个类似于hadoop的实时数据处理框架。使用Clojure语言实现,该语言也是运行于java虚拟机之上。
流式计算:先计算,后存储。也可以不存储,按照时间窗口去使用数据,像实时搜索,高频交易,社交网络,都在使用流式计算解决问题。
Nimbus:控制节点,Supervisor:工作节点
SQL on Hadoop技术栈:
-
hive
一个基于hadoop的数据仓库,可将结构化的数据文件映射为一张数据表。并提供完整的SQL查询功能,可以将sql转换为MapReduce任务并进行运行。
hive2.0:
不再只是将SQL转化为MapReduce,Tez:旨在解决MapReduce的效率问题。
优化了hive的性能问题。
-
presto
是一个分布式的SQL查询引擎,它被设计为用来专门进行高速,实时的数据分析 ,解决hive的效率问题。京东用的较多。
-
Impala
是一个针对hadoop的开源的交互式SQL查询引擎,使用c++开发。
数据可视化技术栈: -
echarts
基于Canvas的,纯js的图表库,提供直观,生动,可交互,可个性化的数据可视化图表
-
D3.js
是一个js库,可以用数据来操作文档,D3可以通过使用HTML,SVG和CSS把数据现货形象地展现。定制化程度较高
集群管理技术栈
- Ambari
hadoop生态的集群管理,监控,部署的工具,支持大量的hadoop组件
- zookeeper
分布式的服务框架,用来解决分布式应用中常遇到的数据管理问题;
如:统一命名服务,状态同步服务,集群管理,分布式应用配置项的管理等。
典型应用场景:配置文件的管理,集群管理,同步锁,leader选举,队列管理等
zookeeper配置文件管理:
网站流量统计:
先使用淘宝基于nginx的tengine构建web项目
编译项目:
yum install gcc gcc-c++ automake autoconf libtool openssl-devel pcre-devel -y
cd /tengine
//开始编译
./configure
make install
//启动nginx
/sbin/nginx -t
//封装shell死循环,访问web项目
vim curl.sh
i = 0
while [TRUE]
do
((i=$i+1))
uid = echo $i | md5sum | cut -d '' -f 1`
surl -s -o /dev/null -H "User-AgentMozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/69.0" "http://127.0.0.1/?dd=ss&ss=dd"
if [$i -gt 2000]; then
i = 0
fi
sleep 5
done
//后台启动
nohup sh ./curl.sh &
数据生成到log文件中,然后编写shell脚本上传到hdfs