独家 | 一文读懂Hadoop(一):综述

2017 年 7 月 24 日 数据派THU 宋莹



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

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

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

1. 简介

1.1 Hadoop概述

Hadoop是一个高可靠性、高扩展性的分布式计算的开源软件。是一个能够允许大量数据在计算机集群中使用简单的编程模型进行分布式处理的框架。其设计的规模可从单一的服务器到上千台机器上,每一个均可提供局部运算和存储功能。而不是依靠于硬件以支持高效性。

Hadoop的创始人是Doug cutting,在Yahoo就职期间开发了Hadoop项目,主要原因是此人对搜索引擎的研究比较感兴趣,当时用的技术是lucenenutch

1.2 Lucene&Nutch

  • Lucene

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

  • Nutch

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

1.3 Hadoop的产生

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

1.4 Hadoop项目的思想来源

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

  • GFS->HDFS

  • Map-Reduce->Map-Reduce

  • Bigtable->Hbase

1.5 Hadoop的组成

  • Hadoop Distributed File System (HDFS)分布式文件系统

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

  • Hadoop YARN

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

  • Hadoop MapReduce

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]



3.2 shell选项


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



3.3 通用选项

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

3.4 hadoop通用命令

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

3.4.1 用户命令

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

  • Archive

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

  • checknative

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

  • classpath

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

  • credential

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

  • distch

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

  • distcp

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

  • dtutil

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

  • fs

hdfs脚本的dfs类似。

  • gridmix

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

  • jar

运行一个jar文件。

  • jnipath

打印计算java.library.path

  • kerbname

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

  • key

通过KeyProvider管理密钥。

  • kms

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

  • trace

查看和修改Hadoop跟踪设置。

  • version

打印版本。

  • classname

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

  • envvars

显示Hadoop环境变量。

3.4.2 管理命令

  • daemonlog

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

3.4.3 文件

etc/hadoop/hadoop-env.sh

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

etc/hadoop-user-functions.sh

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

/ .hadooprc

这存储了个人用户的个人环境。它在hadoop-env.shhadoop-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 namenodehdfs –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 Hadoopshell代码具有一个函数库,供管理员和开发人员使用以帮助他们的配置和高级特性管理。

4.3.3 用户级API访问

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

4.3.4 动态子命令

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

5. 应用场景


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

  • 在线旅游目前全球范围内80%的在线旅游网站都是在使用Cloudera公司提供的Hadoop发行版,其中SearchBI网站曾经报道过的Expedia也在其中。

  • 移动数据Cloudera运营总监称,美国有70%的智能手机数据服务背后都是由Hadoop来支撑的,也就是说,包括数据的存储以及无线运营商的数据处理等,都是在利用Hadoop技术。

  • 电子商务这一场景应该是非常确定的,eBay就是最大的实践者之一。国内的电商在Hadoop技术上也是储备颇为雄厚的。

  • 能源开采美国Chevron公司是全美第二大石油公司,他们的IT部门主管介绍了Chevron使用Hadoop的经验,他们利用Hadoop进行数据的收集和处理,其中这些数据是海洋的地震数据,以便于他们找到油矿的位置。

  • 节能另外一家能源服务商Opower也在使用Hadoop,为消费者提供节约电费的服务,其中对用户电费单进行了预测分析。

  • 基础架构管理这是一个非常基础的应用场景,用户可以用Hadoop从服务器、交换机以及其他的设备中收集并分析数据。

  • 图像处理创业公司Skybox Imaging使用Hadoop来存储并处理图片数据,从卫星中拍摄的高清图像中探测地理变化。

  • 诈骗检测这个场景用户接触的比较少,一般金融服务或者政府机构会用到。利用Hadoop来存储所有的客户交易数据,包括一些非结构化的数据,能够帮助机构发现客户的异常活动,预防欺诈行为。

  • IT安全除企业IT基础机构的管理之外,Hadoop还可以用来处理机器生成数据以便甄别来自恶意软件或者网络中的攻击。

  • 医疗保健医疗行业也会用到Hadoop,像IBMWatson就会使用Hadoop集群作为其服务的基础,包括语义分析等高级分析技术等。医疗机构可以利用语义分析为患者提供医护人员,并协助医生更好地为患者进行诊断。

主要的场景分类如下:

  • 大数据量存储分布式存储(各种云盘,百度、360还有云平台均有hadoop应用)

  • 日志处理Hadoop擅长这个

  • 海量计算并行计算

  • ETL:数据抽取到oraclemysqlDB2mongdb及主流数据库

  • 使用HBase做数据分析用扩展性应对大量读写操作—Facebook构建了基于HBase的实时数据分析系统

  • 机器学习比如Apache Mahout项目(常见领域:协作筛选、集群、归类)

  • 搜索引擎hadoop + lucene实现

  • 数据挖掘目前比较流行的广告推荐

  • 大量地从文件中顺序读。HDFS对顺序读进行了优化,代价是对于随机的访问负载较高。

  • 用户行为特征建模

  • 个性化广告推荐

  • 智能仪器推荐

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权威指南》

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

  • hadoop技术内幕》

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

6.3 网课

  • 极客学院网课

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

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

  • 尚学堂hadoop视频分享

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

http://pan.baidu.com/s/1qYkDqZq

6.4 社区

  • hadoop技术社区

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

http://hadoop.csdn.net/

7. 进一步学习

7.1 论文归纳

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

  • Google File System中文版

http://blog.bizcloudsoft.com/wp-content/uploads/Google-File-System%E4%B8%AD%E6%96%87%E7%89%88\_1.0.pdf

  • Google Bigtable中文版

http://blog.bizcloudsoft.com/wp-content/uploads/Google-Bigtable%E4%B8%AD%E6%96%87%E7%89%88\_1.0.pdf

  • Google MapReduce中文版

http://blog.bizcloudsoft.com/wp-content/uploads/Google-MapReduce%E4%B8%AD%E6%96%87%E7%89%88\_1.0.pdf

7.2 优秀博文

  • 董的博文

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

  • bigdata_player的博文

如果有刚入门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,继而分别详细介绍HDFSMAPREDUCEYARN的所有知识点的框架,分为四期内容在接下来的几天中推送。敬请关注后续内容。


宋莹,数据派研究部志愿者,北京中软融鑫ETL工程师。喜爱数学和计算机,酷爱大数据分析、大数据挖掘、机器学习。


【一文读懂】系列往期回顾:

独家 | 一文读懂语音识别(附学习资源)

独家 | 一文读懂深度学习(附学习资源)

独家 | 一文读懂迁移学习(附学习工具包)

独家 | 一文读懂大数据处理框架

独家 | 一文读懂特征工程

独家 | 一文读懂数据可视化

独家 | 一文读懂聚类算法

独家 | 一文读懂关联分析

独家 | 一文读懂大数据计算框架与平台

独家 | 一文读懂文字识别(OCR)

独家 | 一文读懂回归分析

独家 | 一文读懂非关系型数据库(NoSQL)


数据派研究部介绍

数据派研究部成立于2017年初,志于打造一流的结构化知识分享平台、活跃的数据科学爱好者社群,致力于传播数据思维、提升数据能力、探索数据价值、实现产学研结合!

研究部的逻辑在于知识结构化、实践出真知:梳理打造结构化基础知识网络;原创手把手教以及实践经验等文章;形成专业兴趣社群,交流学习、组队实践、追踪前沿
兴趣组是研究部的核心,各组既遵循研究部整体的知识分享和实践项目规划,又会各具特色:
算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;
调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;
系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;
自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;
制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;
数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;
网络爬虫组:爬取网络信息,配合其他各组开发创意项目。


点击文末“阅读原文”,报名数据派研究部志愿者,总有一组适合你~

转载须知

如需转载文章,请做到 1、正文前标示:转自数据派THU(ID:DatapiTHU);2、文章结尾处附上数据派二维码。

申请转载,请发送邮件至datapi@tsingdata.com

公众号底部菜单有惊喜哦!

企业,个人加入组织请查看“联合会”

往期精彩内容请查看“号内搜”

加入志愿者或联系我们请查看“关于我们”


点击“阅读原文”加入组织~

登录查看更多
2

相关内容

Hadoop 是 Apache 软件基金会所研发的开放源码并行运算编程工具和分布式档案系统,与 MapReduce 和 Google 档案系统的概念类似。
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
264+阅读 · 2020年6月10日
斯坦福2020硬课《分布式算法与优化》
专知会员服务
118+阅读 · 2020年5月6日
Python计算导论,560页pdf,Introduction to Computing Using Python
专知会员服务
72+阅读 · 2020年5月5日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
36+阅读 · 2020年4月26日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
192+阅读 · 2020年3月12日
【新书】深度学习搜索,Deep Learning for Search,附327页pdf
专知会员服务
204+阅读 · 2020年1月13日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
中文知识图谱构建技术以及应用的综述
专知会员服务
312+阅读 · 2019年10月19日
重点实验室系列报告-ClickHouse Introduction and Deep Dive
中国科学院网络数据重点实验室
9+阅读 · 2019年6月5日
金融风控背后的技术综述
七月在线实验室
45+阅读 · 2019年2月28日
命名实体识别(NER)综述
AI研习社
65+阅读 · 2019年1月30日
独家 | 基于TextRank算法的文本摘要(附Python代码)
数据派THU
14+阅读 · 2018年12月21日
机器学习知识体系
互联网架构师
5+阅读 · 2018年1月9日
综述 | 知识图谱发展概述
PaperWeekly
75+阅读 · 2017年11月3日
33款可用来抓数据的开源爬虫软件工具 (推荐收藏)
数据科学浅谈
7+阅读 · 2017年7月29日
独家 | 一文读懂语音识别(附学习资源)
数据派THU
8+阅读 · 2017年7月20日
Few-shot Learning: A Survey
Arxiv
362+阅读 · 2019年4月10日
Arxiv
53+阅读 · 2018年12月11日
Arxiv
9+阅读 · 2018年3月23日
VIP会员
相关VIP内容
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
264+阅读 · 2020年6月10日
斯坦福2020硬课《分布式算法与优化》
专知会员服务
118+阅读 · 2020年5月6日
Python计算导论,560页pdf,Introduction to Computing Using Python
专知会员服务
72+阅读 · 2020年5月5日
【北京大学】面向5G的命名数据网络物联网研究综述
专知会员服务
36+阅读 · 2020年4月26日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
192+阅读 · 2020年3月12日
【新书】深度学习搜索,Deep Learning for Search,附327页pdf
专知会员服务
204+阅读 · 2020年1月13日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
中文知识图谱构建技术以及应用的综述
专知会员服务
312+阅读 · 2019年10月19日
相关资讯
重点实验室系列报告-ClickHouse Introduction and Deep Dive
中国科学院网络数据重点实验室
9+阅读 · 2019年6月5日
金融风控背后的技术综述
七月在线实验室
45+阅读 · 2019年2月28日
命名实体识别(NER)综述
AI研习社
65+阅读 · 2019年1月30日
独家 | 基于TextRank算法的文本摘要(附Python代码)
数据派THU
14+阅读 · 2018年12月21日
机器学习知识体系
互联网架构师
5+阅读 · 2018年1月9日
综述 | 知识图谱发展概述
PaperWeekly
75+阅读 · 2017年11月3日
33款可用来抓数据的开源爬虫软件工具 (推荐收藏)
数据科学浅谈
7+阅读 · 2017年7月29日
独家 | 一文读懂语音识别(附学习资源)
数据派THU
8+阅读 · 2017年7月20日
Top
微信扫码咨询专知VIP会员