随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识。2017年年初apache发行了Hadoop3.0,也意味着一直有一群人在对Hadoop不断的做优化,不仅如此,各个Hadoop的商业版本也有好多公司正在使用,这也印证了它的商业价值。
读者可以通过阅读“一文读懂Hadoop”系列文章,对Hadoop技术有个全面的了解,它涵盖了Hadoop官网的所有知识点,并且通俗易懂,英文不好的读者完全可以通过阅读此篇文章了解Hadoop。
1.简介
1.1 Hadoop概述
Hadoop是一个高可靠性、高扩展性的分布式计算的开源软件。是一个能够允许大量数据在计算机集群中使用简单的编程模型进行分布式处理的框架。其设计的规模可从单一的服务器到上千台机器上,每一个均可提供局部运算和存储功能。而不是依靠于硬件以支持高效性。
Hadoop的创始人是Doug cutting,在Yahoo就职期间开发了Hadoop项目,主要原因是此人对搜索引擎的研究比较感兴趣,当时用的技术是lucene与nutch。
1.2 Lucene&Nutch
Lucene
是一个开源的全文检索引擎工具包,它不是一个完整的全文搜索引擎,而是一个全文检索引擎的一个架构,提供了完整的查询引擎与搜索引擎,部分文本分析引擎,lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者以此为基础,建立完整的全文检索引擎。
Nutch
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篇论文
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档案的扩展名是.har,hadoop Archive目录包含元数据文件( _index 和 _masterindex)和数据文件(part-*),这个_index文件包含了所有文件的名称和他对应part文件的位置。
checknative
此命令检查Hadoop本地代码的可用性。
classpath
打印获取Hadoop jar和所需库所需的类路径。如果无参数调用,则打印由命令脚本设置的类路径,这可能在类路径条目中包含通配符。其他选项在通配符扩展后打印类路径或将类路径写入jar文件的清单。后者在不能使用通配符且扩展的类路径超过支持的最大命令行长度的环境中非常有用。
credential
该命令在凭证提供者内部管理凭证及密码。Hadoop的CredentialProvider 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.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的应用场景,下面分享给大家:
在线旅游:目前全球范围内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,像IBM的Watson就会使用Hadoop集群作为其服务的基础,包括语义分析等高级分析技术等。医疗机构可以利用语义分析为患者提供医护人员,并协助医生更好地为患者进行诊断。
主要的场景分类如下:
大数据量存储:分布式存储(各种云盘,百度、360还有云平台均有hadoop应用)
日志处理:Hadoop擅长这个
海量计算:并行计算
ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
使用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部分:MapReduce、HDFS、YARN,每部分都进行了详细的阐述。
6.3 网课
极客学院网课
笔者将所有网上的视频与网课浏览了一遍,大部分的视频都有些老。极客学院的网课值得推荐。
http://www.jikexueyuan.com/course/hadoop/
尚学堂hadoop视频分享
鉴于网上的视频资料大多都有些老,笔者将在尚学堂学习的视频分享给大家。
http://pan.baidu.com/s/1qYkDqZq
6.4 社区
hadoop技术社区
这个社区中涵盖了有关hadoop的资讯、博客、论坛、hadoop资料下载、及hadoop的有关的活动。
7. 进一步学习
7.1论文归纳
如下是Google大数据三篇著名论文的中文版,是比较权威的论文资料。在这里分享给读者。
Google File System中文版
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,继而分别详细介绍HDFS、MAPREDUCE、YARN的所有知识点的框架,分为四期内容在接下来的几天中推送。敬请关注后续内容。
宋莹,数据派研究部志愿者,北京中软融鑫ETL工程师。喜爱数学和计算机,酷爱大数据分析、大数据挖掘、机器学习。