hadoop初级到资深

1、hadoop是什么?
   适合大数据的分布式存储与计算平台
2、hadoop版本有哪些?
   ①Apache:官方版本(1.1.2)
   ②Cloudera:使用下载最多的版本,稳定,有商业支持,在Apache的基础上打上了一些patch。推进使用。
   ③Yahoo:Yahoo内部使用的版本,发不过两次,已有的版本都放到Apache上,后续不再继续发布,在集中在Apache的版本上。
3、hadoop核心项目
   ①HDFS:Hadoop Distributed File System分布式文件系统
   ②MapReduce:并行计算框架
4、HDFS的架构
   1. 主从结构
      ①主节点,只有一个:namenode
      ②从节点,有很多歌:datanodes
   2. namenode负责
      ①接收用户请求
      ②维护文件系统的目录结构
      ③管理文件与block之间关系,block与datanode之间关系。
   3. datanode负责
      ①存储文件
      ②文件被分成block存储在磁盘上
      ③为保证数据安全,文件会有多个副本
5、MapReduce的架构
   1、主从结构
      ①主节点,只有一个:JobTracker
      ②从节点,有很多个:TaskTrackers
   2、JobTracker负责
      ①接收客户提交的计算任务
      ②把计算任务分给TaskTrackers执行
      ③监控TaskTracker的执行情况
   3、TaskTracker负责
      ①执行JobTracker分配的计算任务
6、hadoop的特点
   1. 扩容能力(Scalable):能可靠地存储和处理千兆字节(PB)数据
   2. 成本低(Economical):可以通过普通机器这些服务器群总计可达数千个节点。组成服务器群来分发以及处理数据。
   3. 高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地处理他们,这使得处理速度非常的快速。
   4. 可靠性(Reliable):hadoop能自动地维护数据的多份副本,并且能在任务计算失败后能自动地重新部署计算任务。
7、hadoop部署方式
   1. 本地模式
   2. 伪分布模式
      搭建步骤:
        ①关闭防火墙
        ②设置IP
        ③设置主机名
        ④设置SSH免登陆模式
        ⑤主机名和IP绑定
        ⑥JDK安装与环境变量配置
                ⑦hadoop安装与环境变量配置
   3. 集群模式
      搭建步骤:
        ①确定集群环境
        ②在伪分布基础上搭建
        ③集群各节点之间必须ssh免密码登陆。ssh-copy-id -i slavenode
        ④删除hadoop中的tmp
        ⑤把JDK,hadoop负责到其他节点。scp -rq /etc/profile hadoop01:/etc/profile
        ⑥修改主节点的slaves文件

8、hadoop的目录
   1. bin目录:存储一些启动和停止文件
   2. conf目录:存放hadoop一些配置文件
   ......
9、如何运行jar包中的hadoop程序。

        hadoop jar linux中jar包的路径 jar包主类(打jar的时候选择主类就可以不写) args0 args1 ....
        
   1. 查看jar包里面的hadoop内置的程序:hadoop jar hadoop-examples-1.1.2.jar   
   2. 运行jar包里面的hadoop内置的程序:hadoop jar hadoop-examples-1.1.2.jar wordcount
   注意:MR打包运行,与一般的运行的区别,类 extends Configured implements Tool;
               job.setJarByClass(WordCountApp.class);//打包运行必须执行的秘密方法

10、HDFS的shell命令
    1. 调用文件系统(FS)Shell命令应使用 bin/hadoop fs 的形式
    2. 所有的FS shell命令使用URI路径作为参数。
    3. 大多数FS Shell命令的行为和对应的Unix Shell命令类似。
    
    -help [cmd]    //显示命令的帮助信息
        -ls(r)     //显示当前目录下所有文件
        -du(s)     //显示目录中所有文件大小
        -count[-q]     //显示目录中文件数量
        -mv     //移动多个文件到目标目录
        -cp     //复制多个文件到目标目录
        -rm(r)        //删除文件(夹)
        -put     //本地文件复制到hdfs
        -copyFromLocal    //同put
        -moveFromLocal    //从本地文件移动到hdfs
        -get [-ignoreCrc]     //复制文件到本地,可以忽略crc校验
        -getmerge         //将源目录中的所有文件排序合并到一个文件中
        -cat     //在终端显示文件内容
        -text     //在终端显示文件内容
        -copyToLocal [-ignoreCrc]     //复制到本地
        -moveToLocal
        -mkdir     //创建文件夹
        -touchz     //创建一个空文件

11、Namenode文件包过
    1. fsimage:元数据镜像文件。储存某一时段NameNode内存元数据信息。
    2. edits:操作日志文件
    3. fstime:保存最近一次checkpoint的时间
    注意:以上这些文件是保存在linux的文件系统中。
    
12、Datanode
    1. 文件块(block):最基本的存储单位。HDFS默认Block大小是64MB。
    2. 不同于普通文件系统的是,如果一个文件小于一个数据块的大小,并不占用整个数据库存储空间。
    3. Replication:多副本,默认是三个。

13、SecondaryNameNode
    1. HDFS的高可用性(HA)的一个解决方案。但不支持热备。配置即可。
    2. 执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fstime,
       在本地保存,并将其推送到NameNode,同时重置NameNode的edits。
    3. 默认安装在NameNode节点上,但这样...不安全!

14、HDFS的java访问接口——FileSystem
    1. 写文件:create
    2. 读取文件:open
    3. 删除文件:delete
    4. 创建目录:mkdirs
    5. 删除文件或目录:delete
    6. 列出目录的内容:listStatus
    7. 显示文件系统的目录和文件的元数据信息:getFileStatus

15、RPC
    1. 远程过程调用协议
    2. RCP采取客户机/服务器模式。
    3. hadoop的整个体系结构就是构建在RPC之上的。
    
-------------------------------------问答开始----------------------------------------------
问题:
        hdfs的组成部分有哪些,分别解释一下?
           namenode,datanode
        hdfs的高可靠如何实现?
            具体实现,借助DRBD、HeartbeatHA实现主备切换。
        使用DRBD实现两台物理机器之间块设备的同步,即通过网络实现Raid1,
        辅以Heartbeat HA实现两台机器动态角色切换,对外(DataNode、DFSClient)使用虚IP来统一配置。
        这种策略,可以很好地规避因为物理机器损坏造成的hdfs元数据丢失,
        (这里的元数据简单地说,就是目录树,以及每个文件有哪些block组成以及它们之间的顺序),
        但block与机器位置的对应关系仅会存储在NameNode的内存中,
        需要DataNode定期向NameNode做block report来构建。
        因此,在数据量较大的情况下,blockMap的重建过程也需要等待一段时间,对服务会有一定的影响。
        hdfs的常用shell命令有哪些?
        hdfs的常用java api有哪些?
        请用shell命令实现目录、文件的增删改查?
        请用java api实现目录、文件的增删改查?
-------------------------------------问答结束----------------------------------------------



16、MapReduce原理
        1. MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。
        2. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce()两个函数,即可实现分布式计算,非常简单。
        3. 这两个函数的形参是key,value对,表示函数的输入信息。
        
17、MapReduce执行过程
    1.map任务处理
            1.1. 读取输入文件内容,解析成key,value对,对输入文件的每一行,解析成key,value对。每一个键值对调用一次map函数。
            1.2. 写自己的逻辑,对输入的key,value处理,转换成新的key、value输出。
            1.3. 对输出的key,value进行分区。
            1.4. 对不同分区的数据,按照key进行排序,分组。相同key的vale放到一个集合中。
            1.5. (可选)分组后的数据进行规约。
        2. reduce任务处理
           2.1. 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
           2.2. 对多个map任务的输出进行合并,排序。写reduce函数自己的逻辑,对输入的key,value处理,转换成新的key,value输出。
           2.3. 把reduce的输出保存到文件中。
           
18、最小的MapReduce驱动
        Configuration configuration = new Configuration();
        Job job = new Job(configuration, "HelloWorld");                //
        job.setInputFormatClass(TextInputFormat.class);                        //指定如何对输入文件格式化的
        job.setMapperClass(IdentityMapper.class);                            //指定自定义Map类
        job.setMapOutputKeyClass(LongWritable.class);                    //Map输出的类型,k类型
        job.setMapOutputValueClass(Text.class);                                //Map输出的类型,v类型
        job.setPartitionerClass(HashPartitioner.class);                //分区
        job.setNumReduceTasks(1);                                                            //一个reduce任务运行
        job.setReducerClass(IdentityReducer.class);                        //自定义reduce类
        job.setOutputKeyClass(LongWritable.class);                        //指定reduce的输出类型
        job.setOutputValueClass(Text.class);                                    //指定reduce的输出类型
        job.setOutputFormatClass(TextOutputFormat.class);            //指定输出文件的格式化类
        job.waitForCompletion(true);                                                    //把job提交给JobTracker运行

19、数据类型与格式
20、Writable接口与序列化机制
    1. 序列化概念
       1.1 序列化(Serializable)是指把结构化对象转化为字节流
       1.2 反序列化(Deserialization)是序列化的逆过程。即把字节流转回结构化对象。
       1.3 Java序列化(java.io.Serializable)
        2. hadoop序列化的特点
           2.1 序列化格式特点:
                       ①紧凑:高效使用存储空间。
                       ②快速:读写数据的额外开销小。
                       ③可扩展:可透明地读取老格式的数据。
                       ④互操作:支持多语言的交互。
        3. hadoop的序列化格式:Writable
        4. hadoop序列化的作用
           4.1 序列化在分布式环境两大作用:进程间通信,永久存储。
           4.2 Hadoop节点间通信。
        5、自定义Writable类,重写write、readFields方法
                5.1 write是把每个对象序列化到输出流。
                5.2 readFields是把输入字节流反序列化。

21、实现WritableComparable
        Java值对象的比较:一般需要重写toString(),hashCode(),equals()方法。


-------------------------------------问答开始----------------------------------------------
问:MapReduce框架的结构是什么?
    答:主从结构,主节点(JobTracker)只有一个,从节点(TaskTracker)有多个
    
问:Map在整个MR框架中作用是什么?
    答:打散数据,把原数据,按我们自定义的map方法,将数据打散
    
问:Reduce在整个MR框架中作用是什么?
    答:将数据进行汇总,把多个Map输出的数据,进行汇总
-------------------------------------问答结束----------------------------------------------


-------------------------------------问答开始----------------------------------------------
问:如何使用计数器
    答:
    
问:Combiner(规约)的作用是什么,应用场景是什么
    答:作用
        1. combiner最基本是实现本地key的聚合,对Map输出的key排序,value进行迭代。如下所示:
             map:(k1,v1)——>list(k2,v2)
             combiner:(k2,list(v2))——>list(k2,v2)
             reduce:(k2,list(v2))——>list(k3,v3)
        2. combiner还具有类似本地的reduce功能。
             例如:hadoop自带的wordcount的例子和找出value的最大值得程序,combiner和redure完全一致。如下所示:
             map:(k1,v1)——>list(k2,v2)
             combiner:(k2,list(v2))——>list(k3,v3)
             reduce:(k3,list(v3))——>list(k4,v4)
        3. 如果不用combiner,那么,所有的结果都是reduce完成,效率相对低下。
             使用combiner,先完成会在本地聚合,提升速度。
        4. 对于hadooop自带的wordcount的例子,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,
             而不必等到所有的map结束再去进行reduce的value叠加。
            
        应用场景:
            单词个数,求和,最大值等等
        不适合场景
            求平均数
        
问:为什么使用Combiner?
    答:Combiner发生在Map端,对数据进行规约处理,数据量变小了,传送到reduce端的数据量变小了,传输时间变短,作业的整体时间变短。

问:Combiner本身已经执行了reduce操作,为什么在Reducer阶段还要执行reduce操作哪?
    答:combiner操作发生在map端的,处理一个任务所接收的文件中的数据,不能跨map任务执行;只有reduce可以接收多个map任务处理的数据。

问:Partitioner的作用是什么,应用场景是什么
    答:
        作用:对map端输出的数据key作一个散列,使数据能够均匀分布在各个reduce上进行后续操作,避免产生热点区。
        
        场景解析:
        (Partition)分区出现的必要性,如何使用Hadoop产生一个全局排序的文件?最简单的方法就是使用一个分区,但是该方法在处理大型文件时效率极低,因为一台机器必须处理所有输出文件,从而完全丧失了MapReduce所提供的并行架构的优势。事实上我们可以这样做,首先创建一系列排好序的文件;其次,串联这些文件(类似于归并排序);最后得到一个全局有序的文件。主要的思路是使用一个partitioner来描述全局排序的输出。比方说我们有1000个1-10000的数据,跑10个ruduce任务, 如果我们运行进行partition的时候,能够将在1-1000中数据的分配到第一个reduce中,1001-2000的数据分配到第二个reduce中,以此类推。即第n个reduce所分配到的数据全部大于第n-1个reduce中的数据。这样,每个reduce出来之后都是有序的了,我们只要cat所有的输出文件,变成一个大的文件,就都是有序的了
        基本思路就是这样,但是现在有一个问题,就是数据的区间如何划分,在数据量大,还有我们并不清楚数据分布的情况下。一个比较简单的方法就是采样,假如有一亿的数据,我们可以对数据进行采样,如取10000个数据采样,然后对采样数据分区间。在Hadoop中,patition我们可以用TotalOrderPartitioner替换默认的分区。然后将采样的结果传给他,就可以实现我们想要的分区。在采样时,我们可以使用hadoop的几种采样工具,RandomSampler,InputSampler,IntervalSampler。
       这样,我们就可以对利用分布式文件系统进行大数据量的排序了,我们也可以重写Partitioner类中的compare函数,来定义比较的规则,从而可以实现字符串或其他非数字类型的排序,也可以实现二次排序乃至多次排序。
    
问:Shuffler的过程是什么
    答:
-------------------------------------问答结束----------------------------------------------

22. Hadoop管理员常用命令
    1. hadoop job –list  #列出正在运行的Job
    2. hadoop job –kill #kill job
    3. hadoop fsck / #检查HDFS块状态,是否损坏
    4. hadoop fsck / -delete #检查HDFS块状态,删除损坏块
    5. hadoop dfsadmin –report #检查HDFS状态,包括DN信息
    6. hadoop dfsadmin –safemode enter | leave

23. 常见分布模式安装错误
    1. Namenode与Datanode是互相都可以ssh无密码访问
    2. 在hosts文件中127.0.0.1 不要与hadoop0一起设置

24. 什么是Zookeeper?
    1. Zookeeper是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务。
    2. 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

25. 为什么使用Zookeeper?
    1. 大部分分布式应用需要一个主控,协调器或控制器来管理物理分布的子进程(如资源,任务分配等)。
    2. 目前,大部分应用需要开发一个私有的协调程序,缺乏一个通用的机制。
    3. 协调程序的反复编写浪费,难以形成通用,伸缩性好的协调器。
    4. Zookeeper:提供通用的分布式锁服务,用以协调分布式应用。
    
26. Zookeeper能帮我做我们做什么?
    1. hadoop,使用zookeeper的事件处理确保整个集群只有一个namenode,存储配置信息等。
    2. HBase,使用zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机或宕机,存储访问控制列表等。
    
27. Zookeeper的特性
    1. zookeeper是简单的。
    2. zookeeper是富有表现力的。
    3. zookeeper具有高可用性。
    4. zookeeper采用松耦合交互方式。
    5. zookeeper是一个资源库。

28. Zookeeper的读写机制。
    1. Zookeeper是一个由多个server组成的集群.
    2. 一个leader,多个follower.
    3. 每个server保存一份数据副本.
    4. 全局数据一致.
    5. 分布式读写.
    6. 更新请求转发,由leader实施.

29. Zookeeper的保证
    1. 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。
    2. 数据更新原子性,一次数据更新要么成功,要么失败!
    3. 全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的
    4. 实时性,在一定事件范围内,client能读到最新数据。
    
30. 观察(watcher)
    1. Watchker在Zookeeper是一个核心功能。Watcherkey监控目录节点的数据变化以及子目录的变化,
         一旦这写状态发生变化,服务器就会通知所有设置在这个目录节点上的Watcher,从而每个客户端都很快
         知道它所关注的目录节点的状态发生变化,而做出相应的反应!
    2. 可以设置观察的操作:exists,getChildren,getData
  3. 可以触发观察的操作:create,delete,setData
 
31. Zookeeper工作原理
    1. 广播模式需要保证proposal被按顺序处理,因此zk采用了递增的事务id号(zxid)来保证。
         所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64为的数字,
         它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch。低32位是个递增计数。
    2. 当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,
         恢复模式需要重新选举出一个新的leader,让所有的server都恢复到一个正确的状态。

32. Zookeeper总结
    1. Zookeeper 作为 Hadoop 项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,
       它主要用来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 Hbase 中 Master Election、Server 之间状态同步等。
    2. Zoopkeeper 提供了一套很好的分布式集群管理的机制,就是它这种基于层次型的目录树的数据结构,
         并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型

33. HBASE基础知识
    1. HBase简介
        1.1 HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,
              利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,
              利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。
    2. 架构体系
        2.1 Client  包含访问hbase 的接口,client 维护着一些cache 来加快对hbase 的访问,比如regione 的位置信息
        2.2 Zookeeper
            2.2.1 保证任何时候,集群中只有一个running master
            2.2.2 存贮所有Region 的寻址入口
            2.2.3 实时监控Region Server 的状态,将Region server 的上线和下线信息,实时通知给Master
            2.2.4 存储Hbase 的schema,包括有哪些table,每个table 有哪些column family
        2.3 Master 可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
            2.3.1 为Region server 分配region
            2.3.2 负责region server 的负载均衡
            2.3.3 发现失效的region server 并重新分配其上的region






HBASE是什么数据库,与普通RDBMS有什么区别
HBASE的结构
HBASE的常用命令


34. 什么是Hive
    1. Hive是建立在Hadoop上的数据仓库基础架构。
    2. Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在hadoop执行
    3. Hive的表现就是HDFS的目录/文件,按表名把文件夹分开。
    
35. Hive的metastore
    1. metastore是hive元数据的集中存放地。metastore默认使用内嵌的derby数据库作为存储引擎。
    2. derby引擎的缺点:一次只能打开一个会话。
    3. 使用Mysql作为外置存储引擎,多用户同时访问









service mysqld start
linux
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值