Hadoop早期衍生自Nutch(Java开源的搜索引擎),早期Nutch构建开源的搜索引擎,同样在少数的机器上同时运行计算任务面临着问题,在这个时候Google发布了GFS和Map Reduce论文。人们参考着这两篇论文中所阐述的思想开始重建Nutch的存储和计算模型。一开始尝试在20台机器的计算和存储,不久人们发现为了满足web服务高扩展性,需要将集群规模扩展到几千台的集群规模。就在这个时候Yahoo团队加入后,开始将存储和计算从Nutch中剥离出去,并且命名为Hadoop,在Yahoo团队的帮助下,Hadoop很快成为能够真正满足应用的高扩展性。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
Big Data(大数据),或称巨量资料,指的是所涉及的资料量规模巨大到无法通过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。Big Data大数据,谈的不仅仅是数据量,其实包含了数据量(Volume)、时效性(Velocity)、多样性(Variety)、可疑性(Veracity)。
Volume:数据量大量数据的产生、处理、保存,谈的就是Big Data就字面上的意思,就是谈海量数据。
Velocity:就是处理的时效,既然前头提到Big Data其中一个用途是做市场预测,那处理的时效如果太长就失去了预测的意义了,所以处理的时效对Big Data来说也是非常关键的,500万笔数据的深入分析,可能只能花5分钟的时间。
Variety[vəˈraɪɪti]:多变性指的是数据的形态,包含文字、影音、网页、串流等等结构性、非结构性的数据。
Veracity[vəˈræsɪti]:可疑性指的是当数据的来源变得更多元时,这些数据本身的可靠度、质量是否足够,若数据本身就是有问题的,那分析后的结果也不会是正确的。
随着互联网用户量的增多,大用户数据,大数据流量已经远远超过单机服务器的处理能力,虽然摩尔定律给出在价格不变的情况下,硬件性能每隔18个月,性能都会提高提升1倍,即便如此,横向扩展比纵向扩展成本要低得多,分布式系统由此而产生。
解压hadoop至/usr/目录下(这里使用 hadoop-2.6.0_x64.tar.gz )由于hadoop需要依赖jdk,所以需要先配置jdk的环境。
[root@CentOS ~]# tar -zxvf hadoop-2.6.0_x64.tar.gz -C /usr
配置环境变量.bashrc文件
[root@CentOS ~]# vim .bashrc
HADOOP_HOME=/usr/hadoop-2.6.0
JAVA_HOME=/usr/java/latest
CLASSPATH=.
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME
export PATH
export CLASSPATH
export HADOOP_HOME
生效配置文件
[root@CentOS ~]# source .bashrc
配置主机名和IP映射关系
[root@CentOS ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.128 CentOS
修改主机名(重启CentOS):
[root@CentOS ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=CentOS
设置SSH免密码认证(基于密匙的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
配置hadoop的配置文件core-site.xml、hdfs-site.xml、slaves
参考:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html
[root@CentOS hadoop]# pwd
/usr/hadoop-2.6.0/etc/hadoop
[root@CentOS hadoop]# vim core-site.xml
fs.defaultFS
hdfs://CentOS:9000
hadoop.tmp.dir
/usr/hadoop-2.6.0/hadoop-${user.name}
[root@CentOS hadoop]# vim hdfs-site.xml
dfs.replication
1
[root@CentOS hadoop]# vim slaves
CentOS
启动HDFS服务
如果是第一次启动hdfs需要对hdfs做namenode的格式化
[root@CentOS ~]# hdfs namenode -format
启动hdfs服务(关闭使用stop-dfs.sh)
[root@CentOS ~]# start-dfs.sh
检验是否成功:jps查看 是否有 namenode、datanode、secondarynamenode
或者 http://192.168.199.128 查看状态
Hadoop分布式文件系统(HDFS)是一个分布式文件系统,设计用于在廉价硬件上运行。它与现有的分布式文件系统有许多相似之处。然而,与其他分布式文件系统的差异是显著的。HDFS是高度容错的,它被设计为部署在低成本的硬件上。HDFS提供了对应用程序数据的高吞吐量访问,并且适用于具有大数据集的应用程序。
HDFS有一个主/从架构。HDFS集群由一个NameNode组成,它是管理文件系统名称空间的主服务器,并管理客户端对文件的访问。此外,还有许多datanode,通常是集群中的每个节点,它们管理连接到它们运行的节点上的存储。HDFS公开一个文件系统名称空间,并允许将用户数据存储在文件中。在内部,一个文件被分割成一个或多个块,这些块存储在一组datanode中。NameNode执行文件系统命名空间操作,如打开、关闭和重命名文件和目录。它还决定了块到datanode的映射。datanode负责从文件系统的客户端提供读和写请求。datanode也会在NameNode的指令下执行块创建、删除和复制。
[root@CentOS ~]# hdfs dfs -help
Usage: hadoop fs [generic options]
[-appendToFile ... ]
[-cat [-ignoreCrc] ...]
[-checksum ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] ... ]
[-copyToLocal [-p] [-ignoreCrc] [-crc] ... ]
[-count [-q] [-h] ...]
[-cp [-f] [-p | -p[topax]] ... ]
[-createSnapshot []]
[-deleteSnapshot ]
[-df [-h] [ ...]]
[-du [-s] [-h] ...]
[-expunge]
[-get [-p] [-ignoreCrc] [-crc] ... ]
[-getfacl [-R] ]
[-getfattr [-R] {-n name | -d} [-e en] ]
[-getmerge [-nl] ]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [ ...]]
[-mkdir [-p] ...]
[-moveFromLocal ... ]
[-moveToLocal ]
[-mv ... ]
[-put [-f] [-p] [-l] ... ]
[-renameSnapshot ]
[-rm [-f] [-r|-R] [-skipTrash] ...]
[-rmdir [--ignore-fail-on-non-empty] ...]
[-setfacl [-R] [{-b|-k} {-m|-x } ]|[--set ]]
[-setfattr {-n name [-v value] | -x name} ]
[-setrep [-R] [-w] ...]
[-stat [format] ...]
[-tail [-f] ]
[-test -[defsz] ]
[-text [-ignoreCrc] ...]
[-touchz ...]
[-usage [cmd ...]]