day04 topN思路: 1,实现单词统计 2,取出单词中的前N个(排序) MRJob除了可以重写自带方法,还可以自己定义方法,但是自定义的方法必须指定执行顺序 combine:小reduce,和reduce的操作类似,但是运行在reduce之前,为了减轻reduce的压力 如果MRJob的程序中存在系统方法和自定义方法,需要通过MRStep来定义执行顺序 def steps(self): #规划好要执行的MRStep对象顺序 #每个MRStep对象中定义的属性会按照既定顺序执行mapper->combiner->reducer,如果只声明了部分属性,也按照完整顺序执行。 hadoop发行版本的选择 CDH:cloudera, apache公司开发每个大数据框架,只是独立开发,不考虑框架之间的兼容性,如果用不同版本的不同框架配合使用,会出现各种意外问题(jar包冲突问题) 去cloudera官方下载cdh版本号相同的即可 Hive: 本身使用HQL(Hive SQL) 本质:将 SQL 语句转换为 MapReduce 任务运行 一款基于 HDFS 的 MapReduce 计算框架 使用Hive需要先开启hdfs和yarn Hive将元数据存储在数据库中(mysql、derby) 操作hive常用shell命令行 Hive和传统关系型数据库对比 Hive:部分支持标准SQL语句,支持单纯插入和插入覆写,处理数据量大,延迟高 Hive 中所有的数据都存储在 HDFS 中,没有专门的数据存储格式 Hive包含的数据模型: db:数据库,在hdfs中表现为hive.metastore.warehouse.dir(默认值为:hdfs:///user/hive/warehouse/a.db)目录下的子目录 table:在 hdfs 中表现所属 db 目录下一个文件夹(hdfs:///user/hive/warehouse/a.db/xxx) external table:数据存放位置可以在 HDFS 任意指定路径 partition:在 hdfs 中表现为 table 目录下的子目录 (hdfs:///user/hive/warehouse/a.db/xxx/xxx_partition) bucket:在 hdfs 中表现为同一个表目录下根据 hash 散列之后的多个文件(hdfs:///user/hive/warehouse/a.db/xxx/多个文件) Hive本身并不强调数据的存储格式,对存储格式不敏感 内部表和外部表的区别 内部表:创建表无external修饰,数据由hive自身管理,保存在默认的/user/hive/warehouse目录里,数据删除时,会将元数据和数据删除 外部表:有external修饰,数据由hdfs管理,存储在任意外置,数据删除时,只删除元数据,数据不能被删除