PHP+Hadoop实现数据统计分析_饼Bing的博客-CSDN博客_大数据统计系统 php


本站和网页 https://blog.csdn.net/hao508506/article/details/63002073 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

PHP+Hadoop实现数据统计分析_饼Bing的博客-CSDN博客_大数据统计系统 php
PHP+Hadoop实现数据统计分析
饼Bing
于 2017-03-18 00:08:09 发布
12968
收藏
分类专栏:
大数据
大数据
专栏收录该内容
1 篇文章
0 订阅
订阅专栏
记一次完全独立完成的统计分析系统的搭建过程,主要用到了PHP+Hadoop+Hive+Thrift+Mysql实现
安装
Hadoop安装: http://www.powerxing.com/install-hadoop/ Hadoop集群配置: http://www.powerxing.com/install-hadoop-cluster/ Hive安装: https://chu888chu888.gitbooks.io/hadoopstudy/content/Content/8/chapter0807.html
安装具体教程请看上面链接,本地测试只用了单机配置,集群配置(后面的flume用到)看上面的详细链接, 因为之前没有接触过java的相关,这里说下遇到的几个问题.
Hadoop和Hive的1.x和2.x版本要对应JAVA/Hadoop相关的环境变量配置,习惯了PHP的童鞋在这块可能容易忽略启动Hadoop提示Starting namenodes on [],namenodes为空,是因为没有指定ip或端口,修改hadoop/core-site.xml如下
<configuration>
<property>
<name>dfs.namenode.rpc-address</name> <value>127.0.0.0:9001</value> </property> </configuration>
安装完成后输入jps可以查看到NameNode,DataNode等
上报和接收
swoole和workerman都有简单版本实现的数据监控,包括上报,接收,存储,展示, 主要使用udp上传(swoole版本已升级为tcp长连接),redis缓存,文件持久化,highcharts展示,可以作为思路参考 swoole-statistics : https://github.com/smalleyes/statistics workerman-statistics : https://github.com/walkor/workerman-statistics本例使用swoole提供的接口实现UDP传输,因为上报数据是一定程度可以容错,所以选择UDP效率优先接收数据临时存储在Redis中,每隔几分钟刷到文件中存储,文件名按模块和时间分割存储,字段|分割(后面与hive对应)
数据转存
创建Hive数据表
根据文件数据格式编写Hive数据表, TERMINATED BY字段与前面文件字段分隔符想对应对表按日期分区PARTITIONED BY
CREATE TABLE login (
time int comment '登陆时间', type string comment '类型,email,username,qq等', device string comment '登陆设备,pc,android,ios', ip string comment '登陆ip', uid int comment '用户id', is_old int comment '是否老用户' ) PARTITIONED BY ( `date` string COMMENT 'date' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|';
定时(Crontab)创建hadoop分区
hive -e "use web_stat; alter table login add if not exists partition (date='${web_stat_day}')"
转存
Flume监听文件目录,将数据传输到能访问Hdfs集群的服务器上,这里传输到了224机器的7000端口
#agent3表示代理名称 login
agent3.sources=source1
agent3.sinks=sink1
agent3.channels=channel1
#配置source1
agent3.sources.source1.type=spooldir
agent3.sources.source1.spoolDir=/data/releases/stat/Data/10001/ agent3.sources.source1.channels=channel1 agent3.sources.source1.fileHeader = false #配置sink1 agent3.sinks.sink1.type=avro agent3.sinks.sink1.hostname=192.168.23.224 agent3.sinks.sink1.port=7000 agent3.sinks.sink1.channel=channel1 #配置channel1 agent3.channels.channel1.type=file agent3.channels.channel1.checkpointDir=/data/flume_data/checkpoint_login agent3.channels.channel1.dataDirs=/data/flume_data/channelData_login
启动flume
# 加到supervisor守护进程
/home/flume/bin/flume-ng agent -n agent3 -c /home/flume/conf/ -f /home/flume/conf/statistics/login_flume.conf -Dflume.root.logger=info,console
224机器监听7000端口,将数据写到hdfs集群
#agent1表示代理名称
agent4.sources=source1
agent4.sinks=sink1
agent4.channels=channel1
#配置source1
agent4.sources.source1.type=avro
agent4.sources.source1.bind=192.168.23.224 agent4.sources.source1.port=7000 agent4.sources.source1.channels=channel1 #配置sink1 agent4.sinks.sink1.type=hdfs agent4.sinks.sink1.hdfs.path=hdfs://hdfs/umr-ubvzlf/uhiveubnhq5/warehouse/web_stat.db/login/date\=%Y-%m-%d agent4.sinks.sink1.hdfs.fileType=DataStream agent4.sinks.sink1.hdfs.filePrefix=buffer_census_ agent4.sinks.sink1.hdfs.writeFormat=TEXT agent4.sinks.sink1.hdfs.rollInterval=30 agent4.sinks.sink1.hdfs.inUsePrefix = . agent4.sinks.sink1.hdfs.rollSize=536870912 agent4.sinks.sink1.hdfs.useLocalTimeStamp = true agent4.sinks.sink1.hdfs.rollCount=0 agent4.sinks.sink1.channel=channel1 #配置channel1 agent4.channels.channel1.type=file agent4.channels.channel1.checkpointDir=/data/flume_data/login_checkpoint agent4.channels.channel1.dataDirs=/data/flume_data/login_channelData
启动
# 加到supervisor守护进程
/usr/local/flume/bin/flume-ng agent -n agent4 -c /usr/local/flume/conf/ -f /usr/local/flume/conf/statistics/login_flume.conf -Dflume.root.logger=info,console
清洗数据
通过Thrift的PHP扩展包调用Hive,编写类SQL的HQL转换为MapReduce任务读取计算HDFS里的数据, 将结果存储在MySQL中 php-thrift-client下载地址: https://github.com/garamon/php-thrift-hive-client
define('THRIFT_HIVE' , ROOT .'/libs/thrift');
$GLOBALS['THRIFT_ROOT'] = THRIFT_HIVE . '/lib'; require_once $GLOBALS['THRIFT_ROOT'] . '/packages/hive_service/ThriftHive.php'; require_once $GLOBALS['THRIFT_ROOT'] . '/transport/TSocket.php'; require_once $GLOBALS['THRIFT_ROOT'] . '/protocol/TBinaryProtocol.php'; require_once THRIFT_HIVE . '/ThriftHiveClientEx.php'; $transport = new \TSocket('127.0.0.1', 10000); $transport->setSendTimeout(600 * 1000); $transport->setRecvTimeout(600 * 1000); $this->client = new \ThriftHiveClientEx(new \TBinaryProtocol($transport)); $this->client->open(); $this->client->execute("show databases"); $result = $this->client->fetchAll(); var_dump($result); $this->client->close();
HQL语法说明: https://chu888chu888.gitbooks.io/hadoopstudy/content/Content/8/chapter0803.html注意的是,尽量要将HQL语句能转换为MapReduce任务,不然没利用上Hadoop的大数据计算分析,就没意义例如下面的逻辑,取出来在内存里分析,这样的逻辑尽量避免,因为sql在hive里执行就是普普通通的数据,没有转换为mapreduce
select * from login limit 5;
// php处理
$count = 0;
foreach ($queryResult as $row) { $count ++; }
一次性转换为MapReduce,利用Hadoop的计算能力
select type,count(*) from login group by type; // 这样就用到了
建表使用了PARTITIONED BY分区断言后,查询就可以利用分区剪枝(input pruning)的特性,但是断言字段必须离where关键字最近才能被利用上
// 如前面的login表使用到了date分区断言,这里就得把date条件放在第一位
select count(*) from login where date='2016-08-23' and is_old=1;
Hive中不支持等值连表,如下
select * from dual a,dual b where a.key = b.key;
应写为:
select * from dual a join dual b on a.key = b.key;
Hive中不支持insert,而且逻辑上也不允许,应为hadoop是我们用来做大数据分析,而不应该作为业务细分数据
数据报表展示
这一步就简单了,读取MySQL数据,使用highcharts等工具做各种展示,也可以用crontab定时执行php脚本发送日报,周报等等
后续更新
最近看一些资料和别人沟通发现,清洗数据这一步完全不用php,可以专注于HQL实现清洗逻辑,将结果保存在hadoop中,再用Sqoop将hadoop数据和MySQL数据同步。即简化了流程,免去mysql手工插入,又做到了数据更实时,为二次清洗逻辑的连表HQL做了铺垫
饼Bing
关注
关注
点赞
收藏
评论
PHP+Hadoop实现数据统计分析
记一次完全独立完成的统计分析系统的搭建过程,主要用到了PHP+Hadoop+Hive+Thrift+Mysql实现安装Hadoop安装: http://www.powerxing.com/install-hadoop/Hadoop集群配置: http://www.powerxing.com/install-hadoop-cluster/Hive安装: htt
复制链接
扫一扫
专栏目录
PHP做大数据量实时分析
11-25
(吕毅)PHP做大数据量实时分析(吕毅)PHP做大数据量实时分析(吕毅)PHP做大数据量实时分析(吕毅)PHP做大数据量实时分析
JAVA毕业设计大数据在线考试系统在线阅卷系统及大数据统计分析计算机源码+lw文档+系统+调试部署+数据库
sheji112的博客
09-14
18
JAVA毕业设计大数据在线考试系统在线阅卷系统及大数据统计分析计算机源码+lw文档+系统+调试部署+数据库。springboot基于springboot的健身俱乐部综合管理系统。springboot疫情期间中小学生作业线上管理系统设计与实现。springboot基于B_S架构的视频监控系统的设计与实现。springboot基于VUE的个人记账管理系统。springboot基于Vue框架的养生系统。ssm基于JavaEE的疆域特色农家乐系统。ssm基于HTML的游戏网站设计与实现。
评论 1
您还未登录,请先
登录
后发表或查看评论
php 使用hadoop,PHP来操作Hadoop
weixin_35755640的博客
03-09
665
还是按上次安装的Hadoopcd /home/hadoopmkdir testvi user.txt:1,张三,23,beijing,10086,2,李四,34,shanghai,10000,3,王五,20,beijing,10010,vi mapper.php:#!/usr/bin/php$count = 0;while($line = fgets(STDIN)) {$line = trim($...
Hadoop大数据处理与分析教程
最新发布
m0_51338409的博客
10-19
100
本文所需文件(Vmware虚拟机、密匙、乌班图系统、JDK、Hadoop)链接:https://pan.baidu.com/s/1yU5s36Rgl_jE_mAmHsJBfQ?pwd=i5s6提取码:i5s6。
PHP来操作Hadoop
junqing124的专栏
02-18
5229
还是按上次安装的Hadoop
cd /home/hadoop
mkdir test
vi user.txt:
1,张三,23,beijing,10086,
2,李四,34,shanghai,10000,
3,王五,20,beijing,10010,
vi mapper.php:
#!/usr/bin/php
$count = 0;
while($line = fgets(S
php数据分析系统能怎么用,用 PHP 使 Web 数据分析进入更高境界_PHP
weixin_29327977的博客
03-17
141
设计您的数据分析,做比简单原始计数更多的事对 Web 数据进行有效和多层次的分析是许多面向 Web 企业能够生存的关键因素,数据分析检验的设计(和决策)通常是系统管理员和内部应用程序设计人员的工作,而他们可能除了能够把原始计数制成表格之外,对统计学没有更多的了解。在本文中,Paul Meagher 向 Web 开发人员传授了将推论统计学应用到 Web 数据流所需的技能和概念。动态网站不断生成大量的...
php mysql 统计_PHP实现的统计数据功能详解
weixin_42127937的博客
01-19
595
本文实例讲述了PHP实现的统计数据功能。分享给大家供大家参考,具体如下:统计,就是把基本的数据,整合起来。用到sql的,有group by 功能,count功能,order by功能等等。sql将收集的数据,进行统计分析。一般情况下,sql处理后得到的数据,还要通过php的逻辑来进行整理。以一定的格式,展示到前台。一般都是以数组的方式展示,这也是数据结构的概念。看这张图片,基本想想结构大概为{上线...
基于ThinkPhp6+Vue+ElementUI低代码开发平台
西里古里的博客
02-23
3622
一款 PHP 语言基于 ThinkPhp6.x + Vue + ElementUI等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的RBAC权限架构和常规基础模块,前端Vue端支持多主题切换,可以根据自己喜欢的风格选择想一个的主题,实现了个性化呈现的需求;
php 使用hadoop,php能用hadoop吗
weixin_42516581的博客
03-09
113
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。虽然Hadoop是用java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API,,允许用户使用任何语言编写map函数和reduce函数。 (推荐学习:PHP视频教程)Hadoop流动关键是,它使用UNIX标准流作为程...
PHP+Hadoop项目
web15085181368的博客
04-07
609
1.应用场景
学习使用PHP+Hadoop已经相关技术进行[分布式]开发.
2.学习/操作
1.PHP+Hadoop实现数据统计分析
https://blog.csdn.net/hao508506/article/details/63002073
后续补充

3.问题
TBD
4.参考
https://blog.csdn.net/hao508506/article/details/63002073
后续补充

...
php写hadoop,Hadoop --Streaming--PHP
weixin_42522045的博客
03-20
56
Hadoop 支持各种语言的模型.之前的实例中都是用 JAVA 写的:http://blog.sina.com.cn/s/blog_5f54f0be0101f6sj.html,然后打包成JAR, 再用 hadoop jar 来执行。我们还可以用其它语言写,然后通过 Streaming加载进去。Hadoop Streaming 使用 Unix 中的流与程序进行交互。如:[root@localhost...
利用php怎么进行数据库分析,PHP利用把session存入数据库的深入分析
weixin_32701893的博客
04-13
79
这篇文章主要为大家详细介绍了PHP利用把session存入数据库的深入分析,具有一定的参考价值,可以用来参考一下。感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!php的session默认的情况下是采用的文件方式来保存的,我们在php的配制文件php.ini中可以看到这样的一行,session.save_handler="files",这样的意思就是采用文件来保存session 的,要采用数...
php 数据分析报表,实例讲解php数据访问
weixin_33220713的博客
03-10
346
本文实例为大家分享了两种php数据访问方式,大家可以进行比较,分析两种方式的异同,最后为大家提供了一个小练习,具体内容如下方式一:已过时,只做了解1.造一个连接(建立通道)$db=mysql_connect("localhost","root","123"); //括号内是“服务器地址”,“用户名”,“密码”2.选择操作哪个数据库mysql_select_db("mydb","$db");...
php 数据分析报表,手把手教你做一份牛逼的数据分析报告
weixin_31960565的博客
03-24
263
报告是项目的结果展示,是数据分析结果的有效承载形式。一份思路清晰,言简意赅地数据分析报告能直戳问题痛点,提高沟通效率,获得领导赏识。对于数据分析报告,首先要有一个概念性的认识,按照报告陈述的思路,可分为四类:1.jpeg (55.39 KB, 下载次数: 27)2016-8-18 09:37 上传这四类报告由浅入深,分析难度递增,对企业决策的支持程度也递增,尤其是当企业面临某个决策难题时,分析工作...
php实时数据统计
小妮子
06-09
365
/**
* 实时自动刷新当天数据
* @param int $business_id 商户id
* @return array
*/
public function gainTrafficData(int $business_id)
$paidwhere=[
'business_id'=>$business_id,
];
$list = $this->mod...
php 连接hadoop hdfs,Hadoop HDFS操作
weixin_35748595的博客
03-09
152
启动HDFS首先,格式化配置HDFS文件系统,打开NameNode(HDFS服务器),然后执行以下命令。$ hadoop namenode -format格式化HDFS后,启动分布式文件系统。以下命令将启动名称节点和数据节点的集群。$ start-dfs.shHDFS的文件列表加载服务器信息后,使用'ls' 可以找出文件列表中的目录,文件状态。下面给出的是ls,可以传递一个目录或文件名作为参数的语...
php mysql 海量数据存储_PHP+MySQL实现海量数据导入导出的总结
weixin_31016735的博客
02-02
72
前段时间有个需求:将生产环境的部分数据转移到测试服务器进行测试。由于只需要导入特定账号的数据,我就想着将写个脚本,将数据组装成sql语句导出为sql文件,然后转移到测试服务器,导入到MySQL中。想象是美好的,过程是痛苦的,下面总结下几点。PHP脚本的处理1、脚本的思路就是:查询特定账号数据,组装拼接成sql文本数据。这里要注意,对查询的值要进行过滤处理,因为有些字段是包含一些非法字符,比如:’(...
php hadoop 库,hadoop 本地库 说明
weixin_39759989的博客
03-22
45
问题导读1.hadoop本地库支持哪些平台?2.本地库是否有32,64之分?3.hadoop通过什么工具来检测本地库是否加载正确?4.如何加载本地库?包含哪些步骤?5.本地库在什么情况下不需要使用DistibutedCache?概述这个指南描述了hadoop本地库,包括关于共享本地库的小讨论。注意:取决于你的环境,这个词 “native libraries”涉及所有的*.so’,你需要编译;这个词...
php 高效统计数据,数据量比较大 如何更好的实现统计功能?
weixin_34791683的博客
03-10
463
数据量比较大的情况下如何统计总数?比如一个表里面有500万条数据,传统的方式是count(),这样效率很低。网上有人说用mysql的触发器,把统计结果插入到一个结果表里。还有其他方法吗?比如异步执行的方式插入到一个mysql的结果表里可以吗?或者统计结果放入redis可以吗?还有说用定时执行的,但是我们这个使用场景要求实时计算总和。数据量比较大的情况下如何统计总数?比如一个表里面有500万条数据,...
php 使用hadoop,用PHP编写Hadoop的MapReduce程序
weixin_31964135的博客
03-09
82
Hadoop流虽然Hadoop是用java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编写map函数和reduce函数.Hadoop流动关键是,它使用UNIX标准流作为程序与Hadoop之间的接口。因此,任何程序只要可以从标准输入流中读取数据,并且可以把数据写入标准输出流中,那么就可以通过Hadoop流使用任何语言编写MapReduce程序的ma...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
饼Bing
CSDN认证博客专家
CSDN认证企业博客
码龄13年
暂无认证
23
原创
20万+
周排名
31万+
总排名
7万+
访问
等级
971
积分
14
粉丝
11
获赞
评论
23
收藏
私信
关注
热门文章
REDIS实践之在线人数统计几种方案分析
13257
REDIS实践之请勿踩多进程共用一个实例连接的坑
13006
PHP+Hadoop实现数据统计分析
12968
REDIS实践之使用sort set完成商品筛选排序
6600
PHP匿点之string转int
4103
分类专栏
PHP内核
7篇
PHP匿点
7篇
PHP函数源码笔记
5篇
PHP扩展开发指南
1篇
Memcached源码笔记
1篇
Redis源码笔记
Redis实践
4篇
数据结构与算法
Others
4篇
PHP使用
1篇
大数据
1篇
最新评论
REDIS实践之请勿踩多进程共用一个实例连接的坑
lotusgrm:
这与redis本身没有关系
REDIS实践之请勿踩多进程共用一个实例连接的坑
lotusgrm:
多进程也可以获取到同一个 redis 实例,在创建进程之前就实例化,后面创建多个进程时直接使用上面创建的redis实例
REDIS实践之请勿踩多进程共用一个实例连接的坑
kolnick:
redis 都是单线程会有这个问题吗
PHP+Hadoop实现数据统计分析
qq_41293400:
楼主,我现已搭建好了Hadoop+HIVE+MySQL,想请教楼主的是,我如果想要把数据放入这个搭建好的平台上,还需要要其它组件吗?还是直接可以通过MAPREDUCE的代码编写,就能实现数据的处理和分析呢?
REDIS实践之请勿踩多进程共用一个实例连接的坑
il_wq:
多进程获取不到同一个实例
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
PHP中的gzcompress、gzdeflate、gzencode函数详解
PHP匿点之数组运算符+和array_merge区别
REDIS实践之请勿踩多进程共用一个实例连接的坑
2017年3篇
2016年30篇
目录
目录
分类专栏
PHP内核
7篇
PHP匿点
7篇
PHP函数源码笔记
5篇
PHP扩展开发指南
1篇
Memcached源码笔记
1篇
Redis源码笔记
Redis实践
4篇
数据结构与算法
Others
4篇
PHP使用
1篇
大数据
1篇
目录
评论 1
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值