Hadoop学习笔记

1、Hadoop主要发行版本
主流的Hadoo生态圈除了Apache Hadoop外,还有Cloudera、HortonWorks、MapR三个不同版本。
1)Cloudera Distribution for Hadoop(CDH)
优点:提供了包含大量包括组件和特性的用户友好界面
缺点:性能不是很好,速度较慢
2)Hortonworks Data Platform(HDP)
优点:唯一支持Windows平台的Hadoop版本
缺点:它的Ambari管理界面过于简单,没有提供丰富的特性
3)MapR Hadoop
优点:速度快,没有单点故障
缺点:没有好的用户界面控制平台


2、Hadoop生态系统简介:
Common:一系列组件和接口,用于分布式文件系统和通用I/O
Avro:一种序列化系统,用于支持高效、跨语言的RPC和持久化数据存储
MapReduce:分布式数据处理模型和执行环境,运行于大型商用集群
HDFS:分布式文件系统,运行于大型商用集群
Pig:数据流语言和运行环境,用于探究非常庞大的数据集。Pig运行在MapReduce和HDFS集群上
Hive:一种分布式的,按列存储的数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言用于查询数据
Hbase:一种分布式的,按列存储的数据库。Hbase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询
ZooKeeper:一种分布式的,可用性高的协调服务。它提供分布式锁之类的基本服务用于构建分布式应用
Sqoop:该工具用于在结构化数据存储(如关系型数据库)和HDFS之间高效批量传输数据
Oozie:该服务用于运行和调度Hadoop作业(如MapReduce,Pig,Hive及Sqoop作业)


3、关于MapReduce
1)MapReduce任务过程分为map和reduce两个处理阶段,每个阶段都以键值对作为输入和输出。
2)map阶段输入的是原始数据,将数据集的每一行作为文本输入。键是某一行起始位置相对于文件起始位置的偏移量。map函数的功能是筛掉缺失、可疑或错误的数据,筛选出需要的数据,并将它们作为输出。map函数的输出经由MapReduce框架处理后,最后发送到reduce函数。这个处理过程基于键来对键值对进行排序和分组。
3)MapReduce作业(job)是客户端需要执行的一个工作单元。它包括输入数据、MapReduce程序和配置信息。Hadoop将作业分为若干个小任务(task)来执行,其中包括两类任务:map任务和reduce任务。有两类节点控制者作业执行过程:一个jobtracker及一些列tasktracker。jobtracker通过调度tasktracker上运行的任务来协调所有运行在系统上的作业。tasktracker在运行任务的同时将运行进度报告给jobtracker,jobtracker由此记录每项作业任务的整体进度情况。如果其中一个任务失败,jobtracker可以在另外一个tasktracker节点上重新调度该任务。
4)hadoop将MapReduce的输入数据划分为等长的小数据块,称为输入分片或者分片。hadoop为每个分片构建一个map任务,并由该任务来运行用户自定义的map函数从而处理分片中的每条记录。一个合理的分片大小趋向于HDFS的一个块的大小,默认64M.
5)map任务将其输出写入本地磁盘,而非HDFS。因为map的输出是中间结果,该中间结果由reduce任务处理后才产生最终输出结果。而且一旦作业完成,map的输出结果就可以删除。
   排过序的map输出通过网络传输发送到运行reduce任务的节点,数据在reduce端合并,然后由用户定义的reduce函数处理。reduce的输出通常存储在HDFS中以实现可靠存储。对于每个reduce输出的HDFS块,第一个副本存储在本地节点上,其他副本存储在其他机架节点上。
    reduce任务的数据量并非由输入数据的大小决定,而是独立指定的。


4、Hadoop基本操作命令大全(详情:http://www.linuxidc.com/Linux/2014-03/99056.htm)
1)hadoop 帮助命令j即列出所有Hadoop Shell支持的命令:hadoop fs -help
2)启动hadoop : start-all.sh
3)关闭hadoop:stop-all.sh
4)hadoop fs –ls :等同于本地系统的ls,列出在指定目录下的文件内容,支持pattern匹配。输出格式如filename(full path)    size.其中n代表replica的个数,size代表大小(单位bytes)。
5)hadoop fs –lsr :递归列出匹配pattern的文件信息,类似ls,只不过递归列出所有子目录信息。
6)hadoop fs –mkdir :在指定位置创建目录。
7)hadoop fs –rm [-skipTrash] :删除匹配pattern的指定文件,等价于unix下的rm 。
8)hadoop fs –rmr [skipTrash] :递归删掉所有的文件和目录,等价于unix下的rm –rf 。
9)hadoop fs –rmi [skipTrash] :等价于unix的rm –rfi 。
10)将hadoop集群上的文件下载(复制)到本地。语法:hadoop fs -get 集群路径 本地路径
例:hadoop fs -get  hdfs://szwg-ecomon-hdfs.dmop.baidu.com:54310/app/biglog/biglog_relyfiles/map/Matrix_Normal_MapStreaming.py/__empty__/Matrix_Normal_MapStreaming.py ./
11)将本地文件上传到hadoop集群上。语法:hadoop fs -put  本地路径集群路径
例: hadoop fs -put  ./online_pb  hdfs://szwg-ecomon-hdfs.dmop.baidu.com:54310/app/biglog/biglog_relyfiles/map/normal2.conf/__empty__/normal2.conf
12)进入hadoop路径查看文件
hadoop fs -cat hdfs://szwg-ecomon-hdfs.dmop.baidu.com:54310/app/biglog/biglog_relyfiles/lbs/material_biz/__empty__/material_biz;
13)新建一个空文件: hadoop fs -touchz /user/new.txt
14)hadoop fs –mv :将制定格式的文件 move到指定的目标位置。当src为多个文件时,dst必须是个目录。也作文件重命名
15hadoop fs –cp :拷贝文件到目标位置,当src为多个文件时,dst必须是个目录。
16)将hadoop指定目录下所有内容保存为一个文件,同时down至本地:hadoop fs -getmerge /user /home/t
17)杀死某个正在运行的JOB: hadoop fs -kill job_201005310937_0053
18)hadoop fs –fs [local | ]:声明hadoop使用的文件系统,如果不声明的话,使用当前配置文件配置的,按如下顺序查找:hadoop jar里的hadoop-default.xml->$HADOOP_CONF_DIR下的hadoop-default.xml->$HADOOP_CONF_DIR下的hadoop-site.xml。使用local代表将本地文件系统作为hadoop的DFS。如果传递uri做参数,那么就是特定的文件系统作为DFS。
19)hadoop fs –du :列出匹配pattern的指定的文件系统空间总量(单位bytes),等价于unix下的针对目录的du –sb /*和针对文件的du –b ,输出格式如name(full path)  size(in bytes)。
20)hadoop fs –dus :等价于-du,输出格式也相同,只不过等价于unix的du -sb。
21)hadoop fs –copyFromLocal … :等价于-put。
22)hadoop fs –moveFromLocal … :等同于-put,只不过源文件在拷贝后被删除。
23)hadoop fs –get [-ignoreCrc] [-crc] :从DFS拷贝文件到本地文件系统,文件匹配pattern,若是多个文件,则dst必须是目录。
24)hadoop fs –copyToLocal [-ignoreCrc] [-crc] :等价于-get。
25)hadoop fs –setrep [-R] [-w] :设置文件的备份级别,-R标志控制是否递归设置子目录及文件。
26)hadoop fs –chmod [-R] PATH…:修改文件的权限,-R标记递归修改。MODE为a+r,g-w,+rwx等,OCTALMODE为755这样。
27)hadoop fs -chown [-R] [OWNER][:[GROUP]] PATH…:修改文件的所有者和组。-R表示递归。
28)hadoop fs -chgrp [-R] GROUP PATH…:等价于-chown … :GROUP …。
29)hadoop fs –count[-q] :计数文件个数及所占空间的详情,输出表格的列的含义依次为:DIR_COUNT,FILE_COUNT,CONTENT_SIZE,FILE_NAME或者如果加了-q的话,还会列出QUOTA,REMAINING_QUOTA,SPACE_QUOTA,REMAINING_SPACE_QUOTA。
30) 递归拷贝文件或目录:hadoop distcp


5、namenode和datanode
1)HDFS集群有两类节点以管理者-工作者模式工作,即一个namenode(管理者)和多个datanode(工作者)。
2)namenode管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录。namenode之间需要通过高可用的共享存储实现编辑日志的共享。当备用namenode接管工作之后,它将通读共享编辑日志直至末尾,以实现与活动namenode的状态同步,并继续读取由活动namenode写入的新条目。
3)客户端代表用户通过namenode和datanode交互来访问整个文件系统。它需要使用特定的机制来处理namenode的失效问题,这一机制对用户是透明的。
4)datanode是文件系统的工作节点,它们根据需要存储并检索数据块,并定期向namenode发送它们所存储的块的列表。它需要同时向两个namenode发送数据块处理报告,因为数据块的映射信息存储在namenode的内存中,而非磁盘。
5) 没有namenode,文件系统将无法使用。如果运行namenode服务的机器毁坏,文件系统上的文件将会丢失,因为我们不知道如何根据datanode的块重建文件。因此namenode实现容错非常重要,Hadoop为此提供两种机制:
        a. 备份那些组成文件系统元数据持久状态的文件。Hadoop可以通过配置使namenode在多个文件系统上保存元数据的持久状态。这些写操作是实时同步的,是原子操作。一般的配置是将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS)
        b.运行一个辅助namenode,但它不能被用作namenode。它的重要作用是定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。这个辅助的namenode一般在另一台单独的物理计算机上运行。她会保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。但它保存的状态总是之后主节点,所以在主节点全部失效时,难免会丢失部分数据。在这种情况下,一般把存储在NFS上的namenode元数据复制到辅助namenode并作为新的namenode.


6、Hadoop配置属性
1) fs.default.name 该属性用于设置hadoop的默认文件系统。文件系统是由uri指定的。
2) dfs.replication   如果值为1,HDFS就不会按默认设置将文件系统块复制为3。在单独一个datanode上运行时,HDFS无法将块复制到3个datanode上。值为3则相反。


7、Flume、Sqoop、Distcp、存档工具简介
1)Flume是一个将大规模流数据导入HDFS的工具。最典型的应用是从另外一个系统中收集日志数据——例如银行的网络服务器——并实现在HDFS中的聚集操作以便用于后期的分析操作。
2)Sqoop是为了将数据从结构化存储设备批量导入HDFS中设计的,例如关系数据库。Sqoop的应用场景,是组织将白天产生的数据库中的数据晚间导入Hive数据仓库进行分析。
3)Distcp是Hadoop的一个有用的分布式复制程序,该程序可以从Hadoop文件系统间复制大量数据,也可以将大量的数据复制到Hadoop中。
       它的典型应用场景是在两个HDFS集群之间传输数据。如果两个集群运行相同版本的Hadoop,就非常适合使用hdfs方案:hadoop distcp hdfs://namenode1/foo  hdfs://namenode2/bar 该命令把第一个集群foo目录复制到第二个集群bar目录下。也可以指定多个源路径,源路径必须是绝对路径。
       默认情况下distcp会跳过目标路径下已经存在的文件,但可以通过overwrite选项覆盖现有的文件。也可以通过-update选项来选在有改动的文件。
       如果试图在两个运行着不同HDF版本的集群上使用distcp复制数据并使用hdfs协议,会导致复制作业失败,因为两个系统版本的RPC是不兼容的。要想弥补,可以使用基于制度HTTP协议的HFTP文件系统并从源文件系统中读取数据。这个祖业必须运行在目标集群上。
实例:hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar
使用新出的webhdfs协议替换hftp后,对源集群和目标集群均可以使用HTTP协议进行通信,且不会造成任何不兼容问题。
实例:hadoop distcp webhdfs://namenode1:50070/foo webhdfs://namenode2:50070/bar
4)Hadoop存档是通过archive工具根据一组文件创建而来的。
例:hadoop fs -lsr /my/files 下有目录dir和文件a,目录dir下有文件b。
现在可以运行archive命令:hadoop archive -archiveName files.har /my/files /my
files.har:是存档文件的总称
/my/files:是需要存档的文件
/my:是HAR文件的输出目录
新建一个存档文件会创建原始文件的一个副本,因此至少需要与存档的文件容量相同大小的磁盘空间。

8. Hive中表的存储格式
1)默认存储格式:分隔的文本TEXTFILE
2)二进制存储格式
a)顺序文件SEQUENCEFILE  是一种针对顺序和记录的通用二进制格式。可以在CREATE TABLE语句中通过声明SORTED AS SEQUENCEFILE来使用顺序文件。优点是支持可分割的压缩。
b)Avro数据文件和顺序文件相似,可分割,可压缩,面向行。不同的是它支持模式演化以及多种编程语言的绑定。
c)RCFile,表示按列记录文件。除了按列的方式存储数据以外,其他方面都和序列文件类似。
一般来说,面向列的存储格式对于那些只访问表中一小部分行的查询比较有效。相反,面相行的存储格式适合同时处理一行中有多列的情况。

9. 可以在查询之前使用explain关键字来查看Hive将为某个查询使用多少个MapReduce作业。
        
10. Hbase学习参考:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html

11. Hadoop数据仓库工具
1)RDS(原始数据存储)和TDS(转换后的数据存储)
通过在Hive上建立两个不同的数据库来实现,最终所有数据都被分布存储在HDFS上
2)抽取过程
Sqoop:支持从关系数据库到Hadoop间的数据传输;
Flume:基于流的数据捕捉,主要是从日志文件中获取数据;
Discp:是Haoop的一个分布式复制程序,用于Hadoop系统间的文件复制。
3)转换和装载过程
转换和装载过程是将数据从RDS到TDS的过程。经过数据抽取步骤,数据已经在Hive表中了,因此Hive可以用于转换和装载。
4)过程管理和自动化调度
Falcon:主要管理工具
Oozie:工作流调度系统,可以使用它将ETL过程封装进工作流自动执行。调度和运行hadoop作业。
5)数据目录
数据目录存储的是数据仓库的元数据,主要的数据目录工具是HCatalog.
6)查询引擎和SQL层
Hive可以在四种主流计算框架中的三种Tez、MapReduce和Spark(还有一种Storm)上执行类SQL查询。
基于MapReduce的Hive
基于RDD的SparkSQL:是一个Scala程序语言的子集,以Spark作为底层计算框架。
Cloudera公司的Impala:提供SQL语义,最大的特点是速度快,主要用户OLAP。
7)用户界面
Hadoop生态圈知名的数据可视化工具是Hue和Zeppelin
Hue是一个开源的Hadoop UI系统,默认支持的数据源有Hive和Impala
Zeppelin默认支持持SparkSQL
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值