zoukankan      html  css  js  c++  java
  • 大数据相关常识

    hadoop生态圈

    主要从hdfs底层存储,hbase数据库,hive数据仓库,flume收集,Kafka缓存,zookeeper分布式协调服务,spark大数据分析,sqoop数据互转

    hdfs分布式文件系统,高容错的特点,可以部署在廉价的硬件上,设计目标:检查和快速修复硬件故障;流式访问;简化一致性模型,一次写入,多次读取;通信协议建立在TCP/IP协议之上

    hive是基于hadoop的数据仓库,用于hadoop文件中的数据集整理,特殊查询,分析存储工具,查询语言是HQL.hive会将HQL语句编译成一组mapreduce任务。

    hbase是分布式面向列的开源数据库。不同于一般的关系数据库:适合非结构化数据存储;基于列而不是基于行的模式。hbase表是输送的,用户可以定义各种不同的列。主要用于随机访问,实时读写的大数据。

    pig 是一个对大型数据集进行分析评估的平台。

    ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

    hdfs和mapreduce是hadoop的两大核心

    hdfs上传文件的流程

            Client向NameNode发起文件写入的请求。

      NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。

      Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

      hdfs文件读取流程

    Client向namenode发起文件读取请求

    namenode返回文件存储的datanode信息

    Client读取文件信息

    HDFS

    采用Master-Slaver模式:

    NameNode中心服务器(Master):维护文件系统树、以及整棵树内的文件目录、负责整个数据集群的管理。

    DataNode分布在不同的机架上(Slaver):在客户端或者NameNode的调度下,存储并检索数据块,并且定期向NameNode发送所存储的数据块的列表。

    客户端与NameNode获取元数据;

    与DataNode交互获取数据。

    默认情况下,每个DataNode都保存了3个副本,其中两个保存在同一个机架的两个不同的节点上。另一个副本放在不同机架上的节点上。

    基本概念

    机架:HDFS集群,由分布在多个机架上的大量DataNode组成,不同机架之间节点通过交换机通信,HDFS通过机架感知策略,使NameNode能够确定每个DataNode所属的机架ID,使用副本存放策略,来改进数据的可靠性、可用性和网络带宽的利用率。

    数据块(block):HDFS最基本的存储单元,默认为64M,用户可以自行设置大小。

    元数据:指HDFS文件系统中,文件和目录的属性信息。HDFS实现时,采用了 镜像文件(Fsimage) + 日志文件(EditLog)的备份机制。文件的镜像文件中内容包括:修改时间、访问时间、数据块大小、组成文件的数据块的存储位置信息。目录的镜像文件内容包括:修改时间、访问控制权限等信息。日志文件记录的是:HDFS的更新操作。

    NameNode启动的时候,会将镜像文件和日志文件的内容在内存中合并。把内存中的元数据更新到最新状态。

    用户数据:HDFS存储的大部分都是用户数据,以数据块的形式存放在DataNode上。

    在HDFS中,NameNode 和 DataNode之间使用TCP协议进行通信。DataNode每3s向NameNode发送一个心跳。每10次心跳后,向NameNode发送一个数据块报告自己的信息,通过这些信息,NameNode能够重建元数据,并确保每个数据块有足够的副本。

    NameNode 不需要从磁盘读取 metadata,所有数据都在内存中,硬盘上的只是序列化的结果,只有每次 namenode 启动的时候才会读取。

    检查hdfs指定目录下的区块是否正常

     hdfs fsck  / -locations -blocks -files

    dfsadmin 命令用于管理HDFS集群,这些命令常用于管理员。

    集群信息状态报告以及集群资源占用情况,以及各数据节点信息

    hadoop dfsadmin -report 或者 hdfs dfsadmin -report

    添加或删除数据节点

    hadoop dfsadmin -refreshNodes 或者   hdfs dfsadmin -refreshNodes

    打印网络拓扑

     hadoop dfsadmin -printTopology 或者 hdfs dfsadmin -printTopology

    • [hadoop@master bin]$ ./hdfs dfsadmin -safemode enter          #进入Safemode模式 
    • [hadoop@master bin]$ ./hdfs dfsadmin -safemode get        #获取当前运行模式 
    • [hadoop@master bin]$ ./hdfs dfsadmin -safemode leave          #退出Safemode模式 
    • [hadoop@master bin]$ hadoop dfsadmin -report              #当前hadoop集群状态信息 
    • [hadoop@master bin]$ ./hdfs dfsadmin  -refreshNodes           #新增删除节点更新集群信息 
    • [hadoop@master sbin]$ ./hadoop-daemon.sh  stop datanode      #停止单个数据节点 
    • [hadoop@master ~]$ hadoop dfsadmin -printTopology <span style="white-space: pre;">  </span>      #打印集群网络拓扑

    hbase的数据管理

    类似于bigtable的分布式数据库,是一个稀疏的.长期存储的.多维度的排序映射表,表的索引是行关键字,列关键字,时间戳。表是纯字符串,没有类型。用户在表格中存储数据,每一行都有一个可排序的主键和任意多的列。列的字段格式是<family>:<label> ;每个表有一个family集合,相当于表的结构。

    hbase把同一个family的数据存储在同一个目录下,hbase写操作是锁行的;数据库每次更新都有一个时间戳,每次都会生成一个新的版本,保留的版本数量可以设定。

    hbase主要靠hregion,hmaster.hclient组成的体系结构从整体上管理数据

    HBase的服务器体系结构遵循简单的主从服务器架构,它由HRegion服务器(HRegion Server)群和HBase Master服务器(HBase Master Server)构成。HBase Master服务器负责管理所有的HRegion服务器,而HBase中所有的服务器都是通过ZooKeeper来进行协调,并处理HBase服务器运行期间可能遇到的错误。HBase Master Server本身不存储HBase中的任何数据,HBase逻辑上的表可能会被划分为多个HRegion,然后存储到HRegion Server群中,HBase Master Server中存储的是从数据到HRegion Server中的映射。

    每台HRegion服务器都会和HMaster服务器通信,HMaster的主要任务就是要告诉每台HRegion服务器它要维护哪些HRegion。

      当一台新的HRegion服务器登录到HMaster服务器时,HMaster会告诉它先等待分配数据。而当一台HRegion死机时,HMaster会把它负责的HRegion标记为未分配,然后再把它们分配到其他HRegion服务器中。

     HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。 

        所有的数据库数据一般是保存在Hadoop分布式文件系统上面的,用户通过一系列HRegion服务器来获取这些数据,一台机器上面一般只运行一个HRegion服务器,且每一个区段的HRegion也只会被一个HRegion服务器维护。

      当用户需要更新数据的时候,他会被分配到对应的HRegion服务器上提交修改,这些修改显示被写到Hmemcache(内存中的缓存,保存最近更新的数据)缓存和服务器的Hlog(磁盘上面的记录文件,他记录着所有的更新操作)文件里面。在操作写入Hlog之后,commit()调用才会将其返回给客户端。

      在读取数据的时候,HRegion服务器会先访问Hmemcache缓存,如果缓存里没有改数据,才会回到Hstores磁盘上面寻找,每一个列族都会有一个HStore集合,每一个HStore集合包含很多HstoreFile文件

    当表的大小超过设置值的是偶,HBase会自动地将表划分为不同的区域,每个区域包含所有行的一个子集。对用户来说,每个表是一堆数据的集合,靠主键来区分。从物理上来说,一张表被拆分成了多块,每一块就是一个HRegion。我们用表名+开始/结束主键来区分每一个HRegion,一个HRegion会保存一个表里某段连续的数据,从开始主键到结束主键,一张完整的表是保存在多个HRegion上面的。

    宽依赖:父RDD的分区被子RDD的多个分区使用   例如 groupByKey、reduceByKey、sortByKey等操作会产生宽依赖,会产生shuffle

    窄依赖:父RDD的每个分区都只被子RDD的一个分区使用  例如map、filter、union等操作会产生窄依赖

    -------------------------

    hadoop 的集群是基于 master/slave 模式,namenode 和 jobtracker 属于 master,datanode 和 tasktracker属于 slave,master 只有一个,而 slave 有多个。SecondaryNameNode 内存需求和 NameNode 在一个数量级上,所以通常 secondary NameNode(运行在单独的物理机器上)和 NameNode 运行在不同的机器上。

    JobTracker 和 TaskTracker

    JobTracker 对应于 NameNode

    TaskTracker 对应于 DataNode

    DataNode 和 NameNode 是针对数据存放来而言的

    JobTracker 和 TaskTracker 是对于 MapReduce 执行而言的

    mapreduce 中几个主要概念,mapreduce 整体上可以分为这么几条执行线索:

    jobclient,JobTracker 与 TaskTracker。

    1、JobClient 会在用户端通过 JobClient 类将应用已经配置参数打包成 jar 文件存储到 hdfs,并把路径提交到 Jobtracker,然后由 JobTracker 创建每一个 Task(即 MapTask 和 ReduceTask)并将它们分发到各个 TaskTracker 服务中去执行

    2、JobTracker 是一个 master 服务,软件启动之后 JobTracker 接收 Job,负责调度 Job 的每一个子任务 task运行于 TaskTracker 上,并监控它们,如果发现有失败的 task 就重新运行它。一般情况应该把 JobTracker 部署在单独的机器上。

    3、TaskTracker 是运行在多个节点上的 slaver 服务。TaskTracker 主动与 JobTracker 通信,接收作业,并负责直接执行每一个任务。TaskTracker 都需要运行在 HDFS 的 DataNode 上

     

     

     

    由于大数据面临海量数据,读写数据都需要 io,然后还要冗余数据,hadoop 一般备 3 份数据,所以 IO就会打折扣。因此IO是集群的最大瓶颈

     

     

    【Active Namenode】:主 Master(只有一个),管理 HDFS 的名称空间,管理数据块映射信息;配置副本策略;处理客户端读写请求

    【Secondary NameNode】:NameNode 的热备;定期合并 fsimage 和 fsedits,推送给 NameNode;当 Active NameNode 出现故障时,快速切换为新的 Active NameNode。

    【Datanode】:Slave(有多个);存储实际的数据块;执行数据块读 / 写

    【Client】:与 NameNode 交互,获取文件位置信息;与 DataNode 交互,读取或者写入数据;管理 HDFS、访问 HDFS。

    LSM树全称是基于日志结构的合并树(Log-Structured Merge-Tree)。No-SQL数据库一般采用LSM树作为数据结构,HBase也不例外。众所周知,RDBMS一般采用B+树作为索引的数据结构

    LSM树可以看成n层合并树。在HBase中,它把随机写转换成对memstore和hfile的连续写

    数据写(插入,更新):数据首先顺序写如hlog (WAL), 然后写到MemStore, 在MemStore中,数据是一个2层B+树(图2中的C0树)。MemStore满了之后,数据会被刷到storefile (hFile),在storefile中,数据是3层B+树(图2中的C1树),并针对顺序磁盘操作进行优化。

    数据读:首先搜索MemStore,如果不在MemStore中,则到storefile中寻找。

    数据删除:不会去删除磁盘上的数据,而是为数据添加一个删除标记。在随后的major compaction中,被删除的数据和删除标记才会真的被删除。

    LSM数据更新只在内存中操作,没有磁盘访问,因此比B+树要快。对于数据读来说,如果读取的是最近访问过的数据,LSM树能减少磁盘访问,提高性能。

     Slave 节点要存储数据,磁盘越大,存储的数据量越大,越难恢复

    hadoop的进程名称

    一个task对应一个线程

    jps显示当前所有java进程pid的命令

    查看job

    [root@host ~]# hadoop job -list 

    删除job

    hadoop job -kill  jobid

    删除一个目录:

    hadoop fs -rmr /tmp/aaa

    添加新节点:

    hadoop -daemon.sh start datanode

    hadoop -daemon.sh start tasktracker

    移除一个节点:

    hadoop mradmin -refreshnodes

    hadoop dfsadmin -refreshnodes

     

      3个datanode中有一个datanode出现错误,这个datanode的数据会在其他的datanode上重新做备份。

    namenode 宕机:先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在,如果只是节点挂了,重启即可,如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。启用secondary NameNode

     

    # -d 参数判断 $folder 是否存在
    if [ ! -d "$folder"]; then
    mkdir "$folder"
    fi

    # -f 参数判断 $file 是否存在
    if [ ! -f "$file" ]; then
    touch "$file"
    fi

     在hadoop中文件的压缩好处:少占空间,传输会更快

     

     生产环境中建议使用外部表:

    1、因为外部表不会加载数据到hive,减少数据传输、数据还能共享。

    2、hive不会修改数据,所以无需担心数据的损坏

    3、删除表时,只删除表结构、不删除数据。

     

    Hive里面用什么代替in查询

    Hive中的left semi join替换sql中的in操作

     

    HBase的检索支持3种方式:

    (1) 通过单个Rowkey访问,即按照某个Rowkey键值进行get操作,这样获取唯一一条记录;

    (2) 通过Rowkey的range进行scan,即通过设置startRowKey和endRowKey,在这个范围内进行扫描。这样可以按指定的条件获取一批记录;

    (3) 全表扫描,即直接扫描整张表中所有行记录。

     

     数据库的三大范式

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。第二范式(2NF)要求实体的属性完全依赖于主关键字。

     满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

     

  • 相关阅读:
    VOA 2009/11/02 DEVELOPMENT REPORT In Kenya, a Better Life Through Mobile Money
    2009.11.26教育报道在美留学生数量创历史新高
    Java中如何实现Tree的数据结构算法
    The Python Tutorial
    VOA HEALTH REPORT Debate Over New Guidelines for Breast Cancer Screening
    VOA ECONOMICS REPORT Nearly Half of US Jobs Now Held by Women
    VOA ECONOMICS REPORT Junior Achievement Marks 90 Years of Business Education
    VOA 2009/11/07 IN THE NEWS A Second Term for Karzai; US Jobless Rate at 10.2%
    Ant入门
    Python 与系统管理
  • 原文地址:https://www.cnblogs.com/playforever/p/9182045.html
Copyright © 2011-2022 走看看