课程安排LOGO2015/05课程回顾HADOOP生态圈以YARN为核心的生态系统HDFS架构HDFS架构采用主从结构HDFS常用命令注意,hadoop没有当前目录的概念,也没有cd命令显示文件列表:sudo-uhdfshdfsdfs-lsHDFS路径创建文件夹:hdfsdfs-mkdirHDFS路径上传文件:sudo-uhdfshdfsdfs-put本地文件HDFS目录复制文件到本地:sudo-uhdfshdfsdfs-getHDFS文件本地目录删除文件或目录:sudo-uhdfshdfsdfs–rm–rHDFS文件查看文件内容:sudo-uhdfshdfsdfs–catHDFS文件修改文件夹权限:sudo–uhdfshdfsdfs–chmod777HDFS文件或目录MapReduce的总体架构Shuffle过程图HadoopMapReduce基本工作过程MapReduce计数器MapReduce调优Hadoop作业调优Map端调优参数Reduce端调优参数任务的推测执行JVM重用优化跳过有问题的记录代码优化Hive是什么?•Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。•本质是将HQL转换为MapReduce程序Hive关注以下几点:在Hadoop中的数据可扩展的SQL处理可扩展到100PB+结构化和非结构化数据Hive的架构简介HiveVSSQLHQLSQL数据存储HDFS/HBaseRawDevice/localFS数据格式用户自定义系统决定数据更新不支持(会把之前的数据覆盖)支持索引有(0.8版之后增加)有执行MapReduceExecutor执行延迟高低可扩展性高(UDF,UDAF,UDTF)低数据规模大(数据大于TB)小数据检查读时模式写时模式表文本分割符CREATETABLEemployees(nameSTRING,salaryFLOAT,subordinatesARRAYSTRING,deductionsMAPSTRING,FLOAT,addressSTRUCTstreet:STRING,city:STRING,state:STRING,)ROWFORMATDELIMITEDFIELDSTERMINATEDBY‘\001'COLLECTIONITEMSTERMINATEDBY‘\002'MAPKEYSTERMINATEDBY‘\003'LINESTERMINATEDBY‘\n'STOREDASTEXTFILE;▲hive的数据文件使用几种默认分割符来分割:记录分割符“\n”分割记录,即每一行就是一个记录域分割符“^A”或’\001’分割各个字段集合元素类型分割符“^B”或’\002’分割struct、分割array和map中的key-valuepairsmap键值分割符“^C”或’\003’分割map中的键和值托管表和外部表Hive默认创建ManagedTable,由Hive来管理数据,意味着Hive会将数据移动到数据仓库目录。另外一种选择是创建ExternalTable,这时Hive会到仓库目录以外的位置访问数据。如何选择?•如果所有处理都由Hive完成,应该使用ManagedTable。•如果要用Hive和其它工具来处理同一个数据集,应该使用ExternalTables。托管表外部表CREATE/LOAD把数据放到仓库目录创建表时指明外部数据的位置DROP元数据和数据会被一起删除只删除元数据Hive基本操作–PartitionAndBucketHive把表组织成“分区”。这是一种根据“分区列”的值对表进行粗略划分的机制。使用分区可以加快数据分片的查询速度表或分区可以进一步分为“桶”,会为数据提供额外的结构获取更高的查询处理/apps/hive/warehouse/word_count/dt=2010-01-01/country=GB/file1/file2country=US/file3/dt=2010-01-02/country=GB/file4country=US/file5/file6HQL语法DDL——数据定义语言DML——数据管理语言DQL——数据查询语言HQL函数内置运算符内置函数内置聚合函数(UDAF)内置表生成函数用户自定义函数HIVE优化设置Partitions和Buckets数据裁剪优化Join优化MapJoin优化GroupBy优化合并小文件LOGO课程学习目标•认识和了解HBase。•掌握HBase数据模型。•了解Hbase结构。总结ContentsHbase简介Hbase数据模型Hbase基础知识HBase简介HBase是一个分布式的、多版本的、面向列的开源数据库利用HadoopHDFS作为其底层存储系统,提供高可靠性、高吞吐、列存储、可伸缩、实时读写的数据库系统。利用HadoopMapReduce来处理HBase中的海量数据利用Zookeeper作为协同服务。HBase简介HBase中表的特点大:一个表可以有上亿行,上百万列(列多时,插入变慢)面向列:面向列(族)的存储和权限控制,列(族)独立检索。稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。每个cell中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;HBase中的数据都是字符串,没有类型;HBase特点强一致性同一行数据的读写只在同一台RegionServer上进行水平伸缩Region的自动分裂以及Master的balance;只用增加Datanode机器即可增加容量;只用增加RegionServer机器即可增加读写吞吐量HBase特点行事务同一行的列的写入是原子的;按列存储+三维有序SortedMap(RowKey,List(SortedMap(Column,List(Value,Timestamp))))rowKey(ASC)+columnLabel(ASC)+Version(DESC)--valueHBase特点支持有限查询方式和一级索引仅支持单行事务仅支持三种查询方式(singlerowkey、rangerowkey、scanallrowsoftable)【可通过hive等实现多表关联查询】仅基于rowkey的索引高性能随机读写和Hadoop无缝集成Hadoop分析后的结果可直接写入HBase;存放在HBase的数据可直接通过Hadoop来进行分析。Hbase特点HBase的写操作是锁行的,每一行都是一个原子元素,无论对行进行访问的事务涉及多少列,对行的更新都是原子的,也就是说要么成功要么失败不会存在成功一部分的情况。HBase特点存储大量数据(100T以上)需要很高的写入吞吐量需要对大量数据进行高效的随机访问(按key查找)优雅的管理大规模的结构化和半结构化数据不需要完整的数据库功能(跨行/跨表事务,Join等)HBase与RDBMS对比HBaseRDBMS数据类型只有字符串丰富的数据类型数据操作简单的增删改查各种各样的函数,表连接存储模式基于列存储基于表格结构和行存储数据保护更新后旧版本仍然会保留替换可伸缩性轻易的进行增加节点,可扩展性高需要中间层HBase与HDFS对比两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;HDFS适合批处理场景不支持数据随机查找不适合增量数据处理不支持数据更新总结ContentsHbase简介Hbase数据模型Hbase基础知识HBase数据表中一些关键概念Rowkey键ColumnFamily列族Cellqualifier列族修饰符(列)Cell单元格Timestamp时间戳Rowkey键表中行的键是字节数组(最大长度是64KB)任何字符串都可以作为键;表中的行根据行的键值进行排序,数据按照Rowkey的字典序(byteorder)排序存储;所有对表的访问都要通过键通过单个rowkey访问通过rowkey的range全表扫描列族ColumnFamilyHBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先定义。如create‘info’,‘realtime’;列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如info:name,realtime:price,新的列族成员可以随后按需、动态加入;权限控制、存储以及调优都是在列族层面进行的;同一列族成员最好有相同的访问模式和大小特征;HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。单元格修饰符Cellqualifier通过列族:单元格修饰符,可以具体到某个列;可以把单元格修饰符认为是实际的列名;在列族存在,客户端随时可以把列添加到列族;Cell单元格由行和列的坐标交叉决定;单元格是有版本的;单元格的内容是未解析的字节数组;由{rowkey,column(=family+label),version}唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。时间戳Timestamp在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。时间戳的类型是64位整型。时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。HBase数据模型HBaseTableHbase数据模型展示HBase数据模型HBaseTableColumnFamilyAColumnFamilyBHbase数据模型展示HBase数据模型HBaseTableColumnFamilyAColumnFamilyBQualifier1Qualifier2Qualifier3Hbase数据模型展示HBaseTableColumnFamilyAColumnFamilyBQualifier1Qualifier2Qualifier3RowKey1KeyValueHBase数据模型Hbase数据模型展示HBaseTableColumnFamilyAColumnFamilyBQualifier1Qualifier2Qualifier3RowKey1KeyValueRowKey2KeyValueKeyValueHBase数据模型Hbase数据模型展示HBaseTableColumnFamilyAColumnFamilyBQualifier1Qualifier2Qualifier3RowKey1KeyValueRowKey2KeyValueKeyValueRowKey3KeyValueHBase数据模型Hbase数据模型展示HBaseTableColumnFamilyAColumnFamilyBQualifier1Qualifier2Qualifier3RowKey1ValueRowKey2ValueValueRowKey3ValueHBaseTableColumnFamilyAColumnFamilyBQualifier1Qualifier2Qualifier3RowKey1KeyValueRowKey2KeyValueKeyValueRowKey3KeyValueHBase数据模型Hbase数据模型展示HBaseTableColumnFamilyAColumnFamilyBQualifier1Qualifier2Qualifier3RowKey1ValueRowKey2ValueValueRowKey3ValueHBaseTableColumnFamilyAColum