20160808北京云栖大会workshop-EMapReduce分析网站数据

E-MapReduce钉钉群
20160808北京云栖大会workshop-EMapReduce分析网站数据

目标

  • 了解E-MapReduce创建集群流程;
  • 熟悉端口转发访问集群可视化组件zeppelin;
  • 完成用zeppelin分析热播数据的示例。

创建集群

集群包括一组ecs实例和运行在实例上的分布式计算框架(Hadoop,Spark等),管控程序,是运行计算任务的资源基础。下面带大家熟悉创建集群的操作步骤。

  • 进入E-MapReduce管理控制台:https://emr.console.aliyun.com/#/cluster/region/cn-beijing
  • 点击集群列表的华北2(北京),切换到北京region(本教程必须选择北京region)。
  • 由于云实例持续热卖,已经帮大家创建好一个集群,点击查看详情可以看到集群详细信息,后面的作业操作会在这个集群上进行,
    20160808北京云栖大会workshop-EMapReduce分析网站数据
  • 集群详细信息包括集群的地域信息,软件信息,网络信息,节点信息。其中master节点的外网ip信息是后面登陆要用到的,请注意。
    20160808北京云栖大会workshop-EMapReduce分析网站数据
  • 点击返回集群列表回到列表页,点击右上角“创建集群”按钮,开始创建一个集群;
  • 为避免影响后续操作,请在完成zeppelin培训操作后再去创建新的集群。
  • 填写集群名,选择按量付费,运行日志点击关掉,设置一个登陆密码 Workshop2016,点击下一步
    20160808北京云栖大会workshop-EMapReduce分析网站数据
  • 使用默认的产品版本和配置,点击下一步

20160808北京云栖大会workshop-EMapReduce分析网站数据

  • 选择可用区A,经典网络,安全组选择一个已有安全组,节点配置设置为4核8GB,磁盘选择普通云盘,如果没有资源请选择高效云盘,设置数据盘为40GB,点击创建,集群开始创建。

20160808北京云栖大会workshop-EMapReduce分析网站数据

用端口转发访问集群组件的zeppelin

集群创建后,有多种运行作业的方式:可以在控制台创建运行执行计划
,也可以登陆到master节点上命令行提交计算作业,还可以通过集群集成好的可视化工具来操作。zeppelin是spark的可视化操作工具,下面演示如何访问。

默认master节点的公网地址只对外开放了22端口,下面介绍如何通过ssh端口转发的方式访问zeppelin的8080端口。帮助文档:ssh登陆集群
,zeppelin使用说明

端口转发访问zeppelin

Linux/mac系统

打开一个命令行窗口,输入

ssh   -N -L 8157:<masterNodeIP>:8080 root@<masterNodeIP>
  • 8157是本地一个空闲端口,如已被占用请换一个未被占用的端口
  • masterNodeIP是要连接的master节点公网ip
  • 8080是master节点上zeppelin的端口号
  • 提示输入密码,输入Workshop2016

打开浏览器,输入http://localhost:8157/,就可以打开远程zeppelin页面了
20160808北京云栖大会workshop-EMapReduce分析网站数据

Windows系统的SSH方式

在Windows下有很多工具可以模拟ssh操作,例如MinGW,Putty。推荐使用git的win客户端,自带的Git Bash集成了MinGW。

  • 下载git客户端
  • 如果没有装过这些工具,无需担心,下面教大家临时放开端口限制的方法。

临时放开端口限制

如果windows不方便操作,可以临时放开master节点的8080端口限制,就可以浏览器直接访问了http://<masterip>:8080

  • 访问安全组控制台
  • 对集群所属的安全组点击配置规则
  • 点击右上角添加安全组规则,公网,入方向,允许,TCP,8080/8080,点击确认,就可以浏览器直接访问了.

20160808北京云栖大会workshop-EMapReduce分析网站数据

最佳实践:打通本地机器与集群master机器的ssh无密码登录

  1. ssh登陆master的外网地址,密码是Workshop2016。
ssh root@<masterip>
  1. su hadoop切换到hadoop账户
  2. 如果您本地已有ssh公钥私钥,可以忽略这步。否则运行ssh-keygen,一路回车,即可完成本地公私秘钥的生成
  3. 将您本地机器ssh公钥的(~/.ssh/id_xxx.pub,一般是rsa秘钥)文件中的内容进行拷贝,并追加到master机器hadoop账户的~/.ssh/authorized_keys文件中
    以下假设使用的是rsa密钥
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  1. 回到您的本地机器,尝试重新登录master机器。
ssh -i 私钥存放路径/id_rsa hadoop@masterip

如果只有一个私钥,并且放在~/.ssh/下,会默认使用这个私钥,就不需要-i 私钥存放路径/id_rsa指定了

zeppelin统计热播视频,用户属性分布

zeppelin可以可视化执行spark,hive作业,生成报表。

spark作业可以直接运行存储在oss的数据,本次培训已经预先把用户信息,视频信息,点播信息示例数据上传到oss上,下面带大家创建数据在oss上的hive表,用spark查询,并生成报表。

导入note

  • 第一次使用时,点击创建新的note,可以创建一个操作笔记。
    20160808北京云栖大会workshop-EMapReduce分析网站数据
  • 也可以导入json格式的note,下面使用导入的方式。下载 示例脚本到本地,
    点击导入note,选择下载的文件,会用脚本信息创建好note,点击note名video进入。

20160808北京云栖大会workshop-EMapReduce分析网站数据

创建表

  • %hive表示运行hive命令,hive建表后hive和sparksql都可以使用。已提供了创建用户表的语句,只需要在输入框里填写账户信息。
%hive
CREATE EXTERNAL TABLE user_info(id int,sex int,age int, marital_status int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'oss://${accessid}:${accesskey}@${bucket}.oss-cn-beijing-internal.aliyuncs.com/workshop/userinfo'
  • accessid,accesskey输入框填写各自账户的acessid,accesskey
  • bucketName替换为账户用户名@前面的部分加 -out,例如 train00500-out,可以在oss控制台查看各自的bucket信息。
    20160808北京云栖大会workshop-EMapReduce分析网站数据

点击右上角“运行”,提示update count -1,表示创建成功

  • 下一条%sql表示运行spark sql,spark sql运行速度比hive快。通过select语句查询有多少条
%sql
select count(*) from user_info

点击运行

20160808北京云栖大会workshop-EMapReduce分析网站数据

  • 下面两个建表语句同样填写accessid,accesskey,bucketName.
  • 创建视频表
%hive
CREATE EXTERNAL TABLE video_info(id int,title string,type string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'oss://${accessid}:${accesskey}@${bucket}.oss-cn-beijing-internal.aliyuncs.com/workshop/videoinfo'
  • 点击运行
  • 查询总数
%sql
select count(*) from video_info
  • 创建播放表
%hive
CREATE EXTERNAL TABLE play_video(user_id int,video_id int, play_time bigint) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'oss://${accessid}:${accesskey}@${bucket}.oss-cn-beijing-internal.aliyuncs.com/workshop/playvideo'
  • 点击运行
  • 查询总数
%sql
select count(*) from play_video

电视剧,电影等类别一周的总播放次数

统计个类别栏目的播放总数,了解现在那些类别访问量高。

%sql
select video.type, count(video.type) as count from play_video play join video_info video on (play.video_id = video.id) group by video.type order by count desc

点击运行,结果生成后点击饼图图标,查看各类别播放饼图,鼠标移到饼图上可以看到数据细节
20160808北京云栖大会workshop-EMapReduce分析网站数据

播放Top10视频的名称,类别,点击次数

统计最热播的topn视频的信息

%sql
select video.id, video.title, video.type, video_count.count from (select video_id, count(video_id) as count from play_video group by video_id order by count desc limit ${lmt=10}) video_count join video_info video on (video_count.video_id = video.id) order by count desc 
  • 可以设置lmt的数值查看前top lmt的视频播放信息,默认10
  • 点击运行,结果生成后点击柱状图图标,点击settings,拖拽字段到框里,设置key为title,id,group为type,values为count。
    20160808北京云栖大会workshop-EMapReduce分析网站数据

Top1视频的性别比例,年龄分布,婚否比例

统计指定热播剧的用户信息分布

%sql
select ${group=age} , count(*) as count  from (select distinct(user_id) from play_video  where video_id =${id=49} ) play join user_info userinfo on (play.user_id = userinfo.id) group by userinfo.${group=age}
  • group填写用户分组的列,age,sex(性别),marital_status,默认age.id填写要查看的视频id,默认49。
    20160808北京云栖大会workshop-EMapReduce分析网站数据

一个报表内统计热播视频观看用户的性别,年龄段,婚姻状态分布

%sql
select if(sex=0,'女','男') as title, count(*) as count, '性别' as type from (select distinct(user_id) from play_video  where video_id =${id=49} ) play join user_info userinfo on (play.user_id = userinfo.id) group by userinfo.sex
union all
select case when userinfo.age<15 then '小于15' when age<25 then '15-25' when age<35 then '25-35' else '大于35' end  , count(*) as count, '年龄段' as type from (select distinct(user_id) from play_video  where video_id =${id=49} ) play join user_info userinfo on (play.user_id = userinfo.id) group by case when userinfo.age<15 then '小于15' when age<25 then '15-25' when age<35 then '25-35' else '大于35' end 
union all
select if(marital_status=0,'未婚','已婚') as title, count(*) as count, '婚否' as type from (select distinct(user_id) from play_video  where video_id =${id=49} ) play join user_info userinfo on (play.user_id = userinfo.id) group by marital_status
  • 输入框填写视频id
  • 点击运行,结果生成后点击柱状图图标,点击settings,拖拽字段到框里,设置key为title,group为type,values为count。
    20160808北京云栖大会workshop-EMapReduce分析网站数据
上一篇:一文讲懂数据库隔离级别


下一篇:使用E-MapReduce集群sqoop组件同步云外Oracle数据库数据到集群hive