思路: (1)即统计每个类别有多少个视频,显示出包含视频最多的前 10 个类别。 (2)我们需要按照类别 group by 聚合,然后 count 组内的 videoId 个数即可。 (3)因为当前表结构为:一个视频对应一个或多个类别。所以如果要 group by 类别, 需要先将类别进行列转行 ( 展开 ) ,然后再进行 count 即可。 (4)最后按照热度排序,显示前 10 条。 最终代码: 4.3 统计出视频观看数最高的 20 个视频的所属类别以及类别包含 Top20 视频的个数 思路: (1)先找到观看数最高的 20 个视频所属条目的所有信息,降序排列 (2)把这 20 条信息中的 category 分裂出来 ( 列转行 ) (3)最后查询视频分类名称和该分类下有多少个 Top20 的视频 最终代码: SELECT
4.4 统计视频观看数 Top50 所关联视频的所属类别排序
4.5 统计每个类别中的视频热度 Top10,以 Music 为例
思路: (1)要想统计 Music 类别中的视频热度 Top10 ,需要先找到 Music 类别,那么就需要将 category 展开,所以可以创建一张表用于存放 categoryId 展开的数据。 (2)向 category 展开的表中插入数据。 (3)统计对应类别( Music )中的视频热度。 统计 Music 类别的 Top10 (也可以统计其他)4.6 统计每个类别视频观看数 Top10
4.7 统计上传视频最多的用户 Top10 以及他们上传的视频 观看次数在前 20 的视频 思路: (1)求出上传视频最多的 10 个用户 (2)关联 gulivideo_orc 表,求出这 10 个用户上传的所有的视频,按照观看数取前 20 最终代码 :
LIMIT 20
附录:常见错误及解决方案 0 )如果更换 Tez 引擎后,执行任务卡住,可以尝试调节容量调度器的资源调度策略 将 $HADOOP_HOME/etc/hadoop/capacity-scheduler.xml 文件中的1 )连接不上 mysql 数据库 (1)导错驱动包,应该把 mysql-connector-java-5.1.27-bin.jar 导入 /opt/module/hive/lib 的 不是这个包。错把 mysql-connector-java-5.1.27.tar.gz 导入 hive/lib 包下。 (2)修改 user 表中的主机名称没有都修改为 % ,而是修改为 localhost 2 ) hive 默认的输入格式处理是 CombineHiveInputFormat ,会对小文件进行合并。 hive (default)> set hive.input.format; hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat 可以采用 HiveInputFormat 就会根据分区数输出相应的文件。 hive (default)> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; 3 )不能执行 mapreduce 程序 可能是 hadoop 的 yarn 没开启。 4 )启动 mysql 服务时,报 MySQL server PID file could not be found! 异常。 在 /var/lock/subsys/mysql 路径下创建 hadoop102.pid ,并在文件中添加内容: 4396 5 )报 service mysql status MySQL is not running, but lock file (/var/lock/subsys/mysql[ 失败 ]) 异 常 解决方案:在 /var/lib/mysql 目录下创建: -rw-rw----. 1 mysql mysql 5 12 月 22 16:41 hadoop102.pid 文件,并修改权限为 777 。 6 ) JVM 堆内存溢出 描述: java.lang.OutOfMemoryError: Java heap space 解决:在 yarn-site.xml 中加入如下代码
7)虚拟内存限制
在 yarn-site.xml 中添加如下配置 :



