设为首页 收藏本站
查看: 1315|回复: 1

[经验分享] Hadoop项目实战-用户行为分析之编码实践

[复制链接]
累计签到:7 天
连续签到:1 天
发表于 2018-1-12 14:29:49 | 显示全部楼层 |阅读模式
Hadoop项目实战-用户行为分析之编码实践
1.概述
  本课程的视频教程地址:《用户行为分析之编码实践
  本课程以用户行为分析案例为基础,带着大家去完成对各个KPI的编码工作,以及应用调度工作,让大家通过本课程掌握Hadoop项目的编码、调度流程。下面我们来看看本课程有哪些课时,如下图所示:
  首先,我们来学习第一课时:《Hadoop项目基础代码》。
2.内容2.1 Hadoop项目基础代码
  本课时介绍编写Hadoop基础代码及脚本,在前面搭建好的Hadoop项目工程上, 完成项目的基本代码的编写,以及一些注意事项,为编写核心代码做准备,让大家掌握Hadoop项目的基础代码开发。
  本课时主要包含以下知识点,如下图所示:
  下面,我为大家介绍Hadoop项目工程的基本信息配置,由于本课程属于编码实践,所以设计到编码的相关流程。 所以大家在学习的时候,请事先将集群启动,IDE打开。下面我给大家演示如下内容,他们分别是:
  • 项目工程的相关配置信息(pom文件的依赖配置,log日志信息的配置)
  • 集群信息的相关配置(连接集群节点路径信息)
  基础代码实现包含的内容,如下图所示:
  具体演示细节,大家可以观看视频,这里我就不多做赘述了。《观看地址
2.2 Hadoop项目核心地址实现
  本课时介绍如何去实现Hadoop的核心代码模块, 在基础代码模块上,完成核心代码的实现,让大家掌握项目相关指标的统计开发。
  下面我们来看看本课时有那些知识点,如下图所示:
  下面我们来看看离线结果统计的处理方式有哪些,这里,我用一个图来说明,在离线统计中的统计方式,如下图所示:
  这里,从图中我们可以看出,我们可以使用编写Hive脚本或Hive应用程序来统计, 也可以编写MapReduce程序来完成统计,也可以组合使用,这里,本课程的案例, 我使用的是组合使用,用Hive和MapReduce组合来完成。
  接着来看核心代码实现的内容,如下图所示:
  脚本如下所示:
#创建分区CREATE EXTERNAL TABLE ubas(ip string, timespan string, url string,hour string)PARTITIONED BY (logdate string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/home/hdfs/ubas/out/meta'
  统计的KPI脚本,如下所示:
[url=][/url]
# clean hdfs data and output /home/hadoop/hadoop-2.6.0/bin/hadoop jar ubas-1.0.0-jar-with-dependencies.jar $1# use hive to stats## 1.location data to partition/home/hadoop/hive-0.14.0-bin/bin/hive -e "ALTER TABLE ubas ADD PARTITION(logdate='$1') LOCATION '/home/hdfs/ubas/out/meta/$1';"## 2.stats pv/home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE pv_$1 AS SELECT COUNT(1) AS PV FROM ubas WHERE logdate='$1';"## 3.stats ip/home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE ip_$1 AS SELECT COUNT(DISTINCT ip) AS IP FROM ubas WHERE logdate='$1';"## 4.stats amount hour/home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE amount_$1 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' AS SELECT '$1',hour AS HOUR_TAG, COUNT(hour) AS HOUR,'' AS UPDATE_DATE FROM ubas WHERE logdate='$1' GROUP BY hour;"## 5.stats jr/home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE jr_$1 AS SELECT COUNT(1) AS JR FROM (SELECT COUNT(ip) AS times FROM ubas WHERE logdate='$1' GROUP BY ip HAVING times=1) e;"## 6.combine pv,ip,jr and tr to ubas table/home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE ubas_$1 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' AS SELECT '$1', a.pv, b.ip, c.jr, ROUND(COALESCE(CAST(b.ip AS DOUBLE), 0)/a.pv, 2),'' AS UPDATE_DATE FROM pv_$1 a JOIN ip_$1 b ON 1=1 JOIN jr_$1 c ON 1=1 ;"# sqoop data to mysql## 1.sqoop t_kpi_day/home/hadoop/sqoop-1.4.5/bin/sqoop export -D sqoop.export.records.per.statement=100 --connect jdbc:mysql://10.211.55.26:3306/hadoop_ubas --username root --password root --table t_kpi_day --fields-terminated-by ',' --export-dir "/home/hive/warehouse/ubas_$1" --batch --update-key createdate --update-mode allowinsert;## 2.sqoop t_kpi_hour/home/hadoop/sqoop-1.4.5/bin/sqoop export -D sqoop.export.records.per.statement=100 --connect jdbc:mysql://10.211.55.26:3306/hadoop_ubas --username root --password root --table t_kpi_hour --fields-terminated-by ',' --export-dir "/home/hive/warehouse/amount_$1" --batch --update-key createdate,kpi_code --update-mode allowinsert;# drop tmp table to hive warehouse/home/hadoop/hive-0.14.0-bin/bin/hive -e "drop table amount_$1;drop table ip_$1;drop table jr_$1;drop table pv_$1;drop table ubas_$1;"[url=][/url]

2.3 统计结果处理
  本课时介绍将统计好的数据导出到关系型数据库,以及对外提供数据共享接口,让大家掌握导出数据的流程及共享接口程序的编写。
  本课时主要有一下知识点,如下图所示:
  下面我们来看看使用 Sqoop 如何将 HDFS 上的统计结果导出到 MySQL 数据库, 接下来,我们来看看 Sqoop 的导出流程,如下图所示:
  首先,我们是将统计结果存放在 HDFS 集群上,然后我们使用 Sqoop 工具去将 HDFS 的数据导出到关系型数据库,如 MySQL 整个基本流程就是这样。下面我们来使用 Sqoop 工具对HDFS 上的数据进行导出,同样,在使用导出功能时,这样大家需要 安装 Sqoop 工具,Sqoop 的安装较为简单,大家可以下去补充学习下,这里就不多做赘述了。
  接下来,我们来看看数据共享流程,如下图所示:
  从图中我们可以看出,我们将统计后的结果存放在mysql数据库中,这时我们需要编写一个rpc将数据共享出去,这里我采用的共享方式是, 编写一个thrift的服务接口,将数据通过这个接口共享出去,然后,前端同学获取数据后,可以将数据结果以图表的方式进行展示。
  Thrift接口代码,如下所示:
  • Thrift接口文件
namespace java cn.jikexueyuan.ubas.serviceservice UBASService {    map<string, double> queryDayKPI(1:string beginDate,2:string endDate),    map<double, double> queryHourKPI(1:string beginDate,2:string endDate)}
  • Server模块代码
[url=][/url]
package cn.jikexueyuan.ubas.main;import org.apache.thrift.TProcessorFactory;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.server.THsHaServer;import org.apache.thrift.server.TServer;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TNonblockingServerSocket;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import cn.jikexueyuan.ubas.service.UBASService;import cn.jikexueyuan.ubas.service.impl.UBASServiceImpl;/** * @Date Mar 23, 2015 * * @Author dengjie */public class StatsServer {    private static Logger logger = LoggerFactory.getLogger(StatsServer.class);    private final int PORT = 9090;    @SuppressWarnings({ "rawtypes", "unchecked" })    private void start() {        try {            TNonblockingServerSocket socket = new TNonblockingServerSocket(PORT);            final UBASService.Processor processor = new UBASService.Processor(new UBASServiceImpl());            THsHaServer.Args arg = new THsHaServer.Args(socket);            /*             * Binary coded format efficient, intensive data transmission, The             * use of non blocking mode of transmission, according to the size             * of the block, similar to the Java of NIO             */            arg.protocolFactory(new TCompactProtocol.Factory());            arg.transportFactory(new TFramedTransport.Factory());            arg.processorFactory(new TProcessorFactory(processor));            TServer server = new THsHaServer(arg);            server.serve();        } catch (Exception ex) {            ex.printStackTrace();        }    }    public static void main(String[] args) {        try {            logger.info("start thrift server...");            StatsServer stats = new StatsServer();            stats.start();        } catch (Exception ex) {            ex.printStackTrace();            logger.error(String.format("run thrift server has error,msg is %s", ex.getMessage()));        }    }}[url=][/url]

2.4 应用调度
  本课时介绍将开发的Hadoop应用打包部署到服务器,配置并完成应用调度, 让大家掌握Hadoop项目的打包和部署及调度流程。
  本课时主要包含一下知识点,如下图所示:
  下面,我们来看看项目打包插件的使用,首先打包的内容,下面我们来看一张图,如下图所示:
  关于使用Crontab进行定时调度,详情大家可以观看视频教程,这里我就不多做赘述了。《观看地址
  本课程我们对项目的指标进行了编码实践,并指导大家去编码实现相应的模块功能,以及帮助大家去调度我们开发的应用等知识,应该掌握一下知识,如下图所示:
3.总结
  我们在有了这些知识作为基础,会使得我们在今后的工作中,开发类似的Hadoop项目变得游刃有余,更加的得心应手。
4.结束语
  这就是本课程的主要内容,主要就对Hadoop项目做相应的编码实践,完成各个KPI的开发模块。
  如果本教程能帮助到您,希望您能点击进去观看一下,谢谢您的支持!
  转载请注明出处,谢谢合作!
    本课程的视频教程地址:《用户行为分析之编码实践




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434275-1-1.html 上篇帖子: Hadoop:分布式计算平台初探 下篇帖子: 大规模Hadoop集群在腾讯数据仓库TDW的实践

尚未签到

发表于 2018-1-23 09:45:11 | 显示全部楼层
路过学习了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表