hadoop基础知识(独家一文读懂Hadoop一)(1)

hadoop基础知识(独家一文读懂Hadoop一)(2)

随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识。2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值。

读者可以通过阅读“一文读懂Hadoop”系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文章了解Hadoop。

本期独家内容“一文读懂Hadoop”系列文章将根据先介绍Hadoop,继而分别详细介绍HDFS、MAPREDUCE、YARN的所有知识点的框架,分为四期内容在接下来的几天中推送。敬请关注后续内容。

1. 简介

  • Lucene

  • 是一个开源的全文检索引擎工具包,它不是一个完整的全文搜索引擎,而是一个全文检索引擎的一个架构,提供了完整的查询引擎与搜索引擎,部分文本分析引擎,lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者以此为基础,建立完整的全文检索引擎。

    Nutch是一个开源java实现的搜索引擎,它提供了我们自己运行搜索引擎所需的全部工具,包括全文检索与web爬虫。

    1.3 Hadoop的产生

    Doug cutting在用lucene与nutch的时候遇到了数据与计算难题。主要有两方面的问题,一方面爬取的大量页面如何存储,另一方面就是搜索算法还有待优化,因此他用了2年的时间实现了DFS与MapReduce,一个微缩版的Nutch,2005年hadoop作为lucene的子项目的nutch的一部分,正式引入Apache基金会。2006年3月份MapReduce和Nutch Distributed File System(NDFS)分别被纳入Hadoop项目。

    1.4 Hadoop项目的思想来源

    Hadoop项目的思想来源于谷歌的3篇论文

    1.5 Hadoop的组成

    一个提供高吞吐量来访问应用程序的数据的分布式文件系统。

    一个对作业进行调度和对集群资源管理的框架。

    以yarn为基础的大型数据集并行处理系统。

    2. 三种运行模式

    2.1 单机(本地)模式

    这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。这里同样没有DFS,使用的是本地文件系统。单机模式适用于开发过程中运行MapReduce程序,这也是最少使用的一个模式。

    2.2 伪分布式模式

    这种模式在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类节点,伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。

    2.3 完全分布式模式

    这种模式通常被用于生产环境,使用N台主机组成一个Hadoop集群,Hadoop守护进程运行在每台主机之上。这里会存在Namenode运行的主机,Datanode运行的主机,以及resourcemanager运行的主机等。在分布式环境下,主节点和从节点会分开。

    3. 命令指南

    3.1 概述

    所有Hadoop命令和子项目都遵循相同的基本结构:

    用法:shellcommand [SHELL_OPTIONS] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]

    hadoop基础知识(独家一文读懂Hadoop一)(3)

    3.2 shell选项

    所有shell命令都将接受一组公共选项。对于某些命令,将忽略这些选项。例如,对仅在单个主机上执行的命令传递 --hostnames将被忽略。

    hadoop基础知识(独家一文读懂Hadoop一)(4)

    3.3 通用选项

    许多子命令遵循一组常用的配置选项来更改其行为:

    hadoop基础知识(独家一文读懂Hadoop一)(5)

    3.4 hadoop通用命令

    所有这些命令都是从hadoop shell命令执行的。

    3.4.1 用户命令

    对hadoop集群的用户有用的命令。

    Hadoop档案是一个特殊格式的档案,一个hadoop档案映射到文件系统的一个目录,hadoop档案的扩展名是.har,hadoop Archive目录包含元数据文件( _index 和 _masterindex)和数据文件(part-*),这个_index文件包含了所有文件的名称和他对应part文件的位置。

    此命令检查Hadoop本地代码的可用性。

    打印获取Hadoop jar和所需库所需的类路径。如果无参数调用,则打印由命令脚本设置的类路径,这可能在类路径条目中包含通配符。其他选项在通配符扩展后打印类路径或将类路径写入jar文件的清单。后者在不能使用通配符且扩展的类路径超过支持的最大命令行长度的环境中非常有用。

    该命令在凭证提供者内部管理凭证及密码。Hadoop的CredentialProvider API支持应用程序拆分,并且要求拆分后的应用 如何储存所需的密码。为了指明一个Provider的位置和类型,需要在core-site.xml添加hadoop.security.credential.provider. path配置项,或者通过指令中-provider命令选项进行设置。Provider路径是一串以逗号分割的URL字符串。这些字符串会说明Provider的类型和位置。

    一次更改许多文件的所有权和权限。

    递归的拷贝文件或者目录。

    在凭据文件中获取和管理hadoop委托令牌的实用程序。它旨在替换更简单的命令fetchdt。有多个子命令,每个都有自己的标志和选项。对于写出文件的每个子命令,-format选项将指定要使用的内部格式。java是与fetchdt匹配的旧格式。默认值为protobuf。对于连接到服务的每个子命令,提供方便标志以指定用于认证的kerberos主体名称和keytab文件。

    和hdfs脚本的dfs类似。

    Hadoop Gridmix是针对hadoop系统的基准测试程序。它具备评测大规模数据处理系统所需的各个功能模块,包括:产生数据,生成并提交作业,统计作业完成时间等。

    运行一个jar文件。

    打印计算java.library.path。

    通过auth_to_local规则将命名主体转换为Hadoop用户名。

    通过KeyProvider管理密钥。

    运行KMS,密钥管理服务器。

    查看和修改Hadoop跟踪设置。

    打印版本。

    运行名为classname的类。类必须是包的一部分。

    显示Hadoop环境变量。

    3.4.2 管理命令

    获取/设置由守护程序中的限定类名称标识的日志的日志级别。默认情况下,该命令发送HTTP请求,但可以通过使用参数-protocol https发送HTTPS请求来覆盖此请求。

    3.4.3 文件

    etc/hadoop/hadoop-env.sh

    此文件存储所有Hadoop shell命令使用的全局设置。

    etc/hadoop-user-functions.sh

    此文件允许高级用户覆盖某些shell功能。

    〜/ .hadooprc

    这存储了个人用户的个人环境。它在hadoop-env.sh和hadoop-user-functions.sh文件之后处理,并且可以包含相同的设置。

    4. UNIX shell指南

    4.1 重要的最终用户环境变量

    Apache Hadoop有许多控制软件各个方面的环境变量。(请参阅hadoop-env.sh和相关文件。)其中一些环境变量专用于帮助最终用户管理其运行时。

    4.1.1 HADOOP_CLIENT_OPTS

    此环境变量用于所有最终用户,非守护程序操作。它可以用于通过系统属性定义设置任何Java选项以及任何Apache Hadoop选项。

    4.1.2 (command)_(subcommand)_OPTS

    也可以在每个子命令的基础上设置选项。这允许为特定情况创建特殊选项。模式的第一部分是正在使用的命令,但是都是大写的。命令的第二部分是正在使用的子命令。然后最后跟着字符串_OPT。

    4.1.3 HADOOP_CLASSPATH

    Apache Hadoop脚本能够通过设置此环境变量将更多内容注入正在运行的命令的类路径中。它是目录、文件或通配符位置的冒号分隔列表。

    4.1.4 变量的自动设置

    如果用户有一组通用的设置,可以将它们放在$ {HOME}/.hadoop-env文件中。始终读取此文件以初始化并覆盖用户可能想要自定义的任何变量。它使用bash语法,类似于.bashrc文件。

    4.2 管理员环境

    除了各种XML文件之外,管理员还有两个关键功能可以在使用Unix Shell时配置。

    4.2.1 (command)_(subcommand)_OPTS

    最重要的是控制守护进程如何工作的一系列_OPTS变量。这些变量应包含这些守护程序的所有相关设置。

    4.2.2 (command)_(subcommand)_USER

    Apache Hadoop提供了一种方法来执行用户检查每个子命令。虽然这种方法很容易规避,不应被视为安全特征,但它确实提供了防止事故的机制。例如,设置HDFS_NAMENODE_USER = hdfs将使hdfs namenode和hdfs –daemon start namenode命令通过检查USER环境变量来验证运行命令的用户是否为hdfs用户。这也适用于非守护进程。在允许执行hadoop distcp命令之前,设置HADOOP_DISTCP_USER = jane将验证USER是否设置为jane。

    4.3 开发者和高级管理员环境

    4.3.1 Shell Profiles

    Apache Hadoop允许第三方通过各种可插拔接口轻松添加新功能。这包括一个shell代码子系统,可以方便地将必要的内容注入基本安装。这个功能的核心是shell配置文件的概念。Shell配置文件是可以执行诸如向类路径添加jar,配置Java系统属性等等的shell代码片段。

    4.3.2 Shell API

    Apache Hadoop的shell代码具有一个函数库,供管理员和开发人员使用以帮助他们的配置和高级特性管理。

    4.3.3 用户级API访问

    除了.hadoop-env,它允许单个用户重写hadoop-env.sh,用户的也可以使用.hadooprc。这是在配置Apache Hadoop shell环境后调用的,并允许完整的shell API函数调用。

    4.3.4 动态子命令

    利用Shell API,第三方可以将其自己的子命令添加到主Hadoop shell脚本(hadoop,hdfs,mapred,yarn)。在执行子命令之前,主脚本将检查是否存在(scriptname)_subcommand_(子命令)函数。该函数将参数设置为所有剩余的命令行参数。

    5. 应用场景

    美国著名科技博客GigaOM的专栏作家Derrick Harris跟踪云计算和Hadoop技术已有多年时间,在一篇文章中总结了10个Hadoop的应用场景,下面分享给大家:

    主要的场景分类如下:

    6. 资源推荐

    6.1 网站

    我推荐给大家的是HADOOP官网:http://hadoop.apache.org/,因为官网是一项技术的第一手信息来源,并且可以最全面及最直接的了解此技术,如果有英文不好的,可以使用谷歌的网页翻译,正确率在90%以上,对于学习一项技术来说,还是可以的。或者大家可以访问http://hadoop.apache.org/docs/r1.0.4/cn/ 这个网址,看一下1.0的中文版,虽然现在已经到3.0了,但是对于对MAPREDUCE的理解,帮助还是很大的。

    6.2 书籍

    这本书很全面的介绍了hadoop,本书是将作者Tom White的英文原版书籍进行了翻译,作者从2006年起就开始为hadoop做贡献,是hadoop开发社区受人尊敬的资深成员,精通hadoop技术的若干领域, 由他写出的hadoop书籍,通俗易懂,适合入门hadoop。

    hadoop基础知识(独家一文读懂Hadoop一)(6)

    之所以给大家推荐《hadoop技术内幕》是因为此书的作者是董西成,他是Hadoop领域资深的实践者,他将hadoop的技术分成3部分:MapReduce、HDFS、YARN,每部分都进行了详细的阐述。

    hadoop基础知识(独家一文读懂Hadoop一)(7)

    hadoop基础知识(独家一文读懂Hadoop一)(8)

    hadoop基础知识(独家一文读懂Hadoop一)(9)

    6.3 网课

    笔者将所有网上的视频与网课浏览了一遍,大部分的视频都有些老。极客学院的网课值得推荐。

    http://www.jikexueyuan.com/course/hadoop/

    鉴于网上的视频资料大多都有些老,笔者将在尚学堂学习的视频分享给大家。

    http:///s/1qYkDqZq

    6.4 社区

    这个社区中涵盖了有关hadoop的资讯、博客、论坛、hadoop资料下载、及hadoop的有关的活动。

    http://hadoop.csdn.net/

    7. 进一步学习

    7.1 论文归纳

    如下是Google大数据三篇著名论文的中文版,是比较权威的论文资料。在这里分享给读者。

    http://blog.bizcloudsoft.com/wp-content/uploads/Google-File-System中文版\_1.0.pdf

    http://blog.bizcloudsoft.com/wp-content/uploads/Google-Bigtable中文版\_1.0.pdf

    http://blog.bizcloudsoft.com/wp-content/uploads/Google-MapReduce中文版\_1.0.pdf

    7.2 优秀博文

    笔者之所以首先推荐“董的博客”是由于他是hadoop技术内幕的作者、资深Hadoop技术实践者和研究者,曾参与商用Hadoop原型研发,以及分布式日志系统、全网图片搜索引擎、Hadoop调度器等项目的设计与研发。对hadoop有自己独到的见解。网址为:http://dongxicheng.org/

    如果有刚入门hadoop的读者,可以读一下bigdata_player的三篇博文:

    “Hadoop 基础知识---之HDFS篇”, 网址为:http://blog.csdn.net/bigdata\_player/article/details/51932437

    “Hadoop 基础知识---之MapReduce篇”,网址为:http://blog.csdn.net/bigdata\_player/article/details/52050400

    “Hadoop基础知识---之YARN原理简述”,网址为:http://blog.csdn.net/bigdata\_player/article/details/52057176

    在初学hadoop的时候,免不了要去官网下载hadoop的安装包,而下载下来的安装包无法直接使用,需要手动去编译。读者可以参照此博文来编译hadoop的包。网址为:http://blog.csdn.net/linlinv3/article/details/49358217

    本期独家内容“一文读懂Hadoop”系列文章将根据先介绍Hadoop,继而分别详细介绍HDFS、MAPREDUCE、YARN的所有知识点的框架,分为四期内容在接下来的几天中推送。敬请关注后续内容。

    ,