Hadoop是Apache基金会的开源项目,为开发者提供了一个分布式系统的基础架构,用户可以在不了解分布式系统的底层细节的情况下开发分布式的应用,充分利用集群的强大功能,实现高速运算和存储。Hadoop项目中包括一个分布式的文件系统HDFS,一个分布式的并行编程框架mapreduce,以及包括hive,hbase,mahout,pig,zookeeper,avro,chukwa在内的诸多子项目。
Hadoop主要的两部分分别是分布式存储HDFS和分布式计算mapreduce。Hdfs是一个master/slave的结构,就一般的部署来说,在master上只运行一个namenode,而在每一个slave上运行一个datanode。Mapreduce是一个编程模型,用以进行大数据量的计算。Mapreduce的名字源于这个模型中的两项核心操作:map和reduce。Map是把一组数据一对一地映射为另外一组数据,reduce是对一组数据进行归约,映射和归约的规则都是由一个函数指定。
整个hadoop族群中包括很多项目,如:
HDFS:分布式文件系统,是GFS的开源实现。
Mapreduce:分布式并行编程模型和程序执行框架,是google公司的mapreduce的开源实现。
Common:是整个hadoop项目的核心,包括一组分布式文件系统和通用IO的组件和接口(序列化,javaprc和持久化数据结构)。
Avro:一种支持搞笑,跨语言的rpc以及永久存储数据的序列化实现。
Pig: 一种数据流语言和运行环境,用以检索非常大的数据集,运行在mapreduce和hdfs的集群上。
Hive: 一个分布式,按列存储的数据仓库。Hive管理hdfs中存储的数据,并提供基于sql的查询语言(由运行时引擎翻译成mapreduce作业)用以查询数据。
Hbase: 一个分布式,按列存储的额数据库。Hbase使用hdfs作为底层存储,同时支持mapreduce的批量式计算和点查询(随机读取)。
Mahout:一个在hadoop上运行的机器学习类库。
Zookeeper:一个分布式,可用性高的协调服务。Zookeeper提供分布式锁之类的基本服务用于构建分布式应用。
Cassandra:是一套开源分布式nosql数据库系统,用于存储收件箱等简单格式数据,集google bigtable的数据模型与amazon dynamo的完全分布式架构于一身。
从最终用户的角度来看,它就像传统的文件系统一样,可以通过目录路径对文件执行crud操作。一个HDFS集群是由一个namenode和若干个datanode组成的。Namenode主节点是主服务器,管理文件系统的命名空间和客户端对文件的访问操作;datanode是集群中的一般节点,负责节点数据的存储。客户端通过namenode向datanode节点交互访问文件系统,联系namenode获得文件的元数,而文件io操作则是直接和datanode进行交互的额。Hdfs允许用户以文件的形式存储数据,文件被分成若干个数据块,典型数据块大小是64MB。Hdfs的文件通常是按照64mb被切分为不同的数据块(block)的。每个数据块尽可能分散在不同的datanode中,而若干个数据块存放在一组datanode上。Namenode执行文件系统的命名空间操作,它也负责数据块到具体datanode的映射。Datanode负责处理文件系统客户端的文件读/写操作,并在namenode的统一调度下进行数据块的创建,删除和复制工作。
Mapreduce编写的程序和hadoop程序的编译都依赖于jdk。
Hadoop安装完毕后目录如下
drwxr-xr-x 3 yj70978 retailfi 4096 Jan 30 2013 share
drwxr-xr-x 9 yj70978 retailfi 4096 Jan 30 2013 webapps
-rw-r--r-- 1 yj70978 retailfi 306534 Jan 30 2013 hadoop-tools-1.1.2.jar
-rw-r--r-- 1 yj70978 retailfi 2778017 Jan 30 2013 hadoop-test-1.1.2.jar
-rw-r--r-- 1 yj70978 retailfi 414 Jan 30 2013 hadoop-minicluster-1.1.2.jar
-rw-r--r-- 1 yj70978 retailfi 142453 Jan 30 2013 hadoop-examples-1.1.2.jar
-rw-r--r-- 1 yj70978 retailfi 4035539 Jan 30 2013 hadoop-core-1.1.2.jar
-rw-r--r-- 1 yj70978 retailfi 410 Jan 30 2013 hadoop-client-1.1.2.jar
-rw-r--r-- 1 yj70978 retailfi 6840 Jan 30 2013 hadoop-ant-1.1.2.jar
drwxr-xr-x 10yj70978 retailfi 4096 Jan 30 2013 contrib
-rw-r--r-- 1 yj70978 retailfi 1366 Jan 30 2013 README.txt
-rw-r--r-- 1 yj70978 retailfi 101 Jan 30 2013 NOTICE.txt
-rw-r--r-- 1 yj70978 retailfi 13366 Jan 30 2013 LICENSE.txt
-rw-r--r-- 1 yj70978 retailfi 10525 Jan 30 2013 ivy.xml
-rw-r--r-- 1 yj70978 retailfi 467130 Jan 30 2013 CHANGES.txt
drwxr-xr-x 4 yj70978 retailfi 4096 Jan 30 2013 c++
-rw-r--r-- 1 yj70978 retailfi 120025 Jan 30 2013 build.xml
drwxr-xr-x 5 yj70978 retailfi 4096 Jul 22 07:49 lib
drwxr-xr-x 2 yj70978 retailfi 4096 Jul 22 07:49 ivy
drwxr-xr-x 6 yj70978 retailfi 4096 Jul 22 07:49 docs
drwxr-xr-x 16yj70978 retailfi 4096 Jul 22 07:49 src
drwxr-xr-x 2 yj70978 retailfi 4096 Jul 22 07:49 sbin
drwxr-xr-x 2 yj70978 retailfi 4096 Jul 22 07:49 libexec
drwxr-xr-x 2 yj70978 retailfi 4096 Jul 22 07:58 bin
drwxr-xr-x 2 yj70978 retailfi 4096 Jul 22 07:59 output
drwxr-xr-x 2 yj70978 retailfi 4096 Jul 22 21:34 conf
drwxr-xr-x 2 yj70978 retailfi 4096 Jul 22 23:42 logs
修改conf/hadoop-env.sh文件,定义JAVA_HOME的路径然后到bin目录下运行./hadoop命令,会输出如何使用hadoop。
$ ./hadoop
Usage: hadoop[--config confdir] COMMAND
where COMMAND isone of:
namenode -format format the DFS filesystem
secondarynamenode run the DFS secondary namenode
namenode run the DFS namenode
datanode run a DFS datanode
dfsadmin run a DFS admin client
mradmin run a Map-Reduce admin client
fsck run a DFS filesystem checkingutility
fs run a generic filesystemuser client
balancer run a cluster balancing utility
fetchdt fetch a delegation token from theNameNode
jobtracker run the MapReduce job Tracker node
pipes run a Pipes job
tasktracker run a MapReduce task Tracker node
historyserver run job history servers as a standalonedaemon
job manipulate MapReduce jobs
queue get information regardingJobQueues
version print the version
jar <jar> run a jar file
distcp <srcurl> <desturl> copyfile or directories recursively
archive -archiveName NAME -p <parentpath> <src>* <dest> create a hadoop archi ve
classpath prints the class path needed to getthe
Hadoop jar and therequired libraries
daemonlog get/set the log level for each daemon
or
CLASSNAME run the class named CLASSNAME
Most commands printhelp when invoked w/o parameters.
Hadoop有三种模式:
本地(单机)模式
分布式模式
完全分布式模式
本地操作:
默认情况下就是这个模式,
Mkdir input
cp conf/*.xml input
运行hadoop自带的hadoop-examples*.jar来搜索input文件夹中的含有dfs[a-z]的字符串并统计出现数量,
bin/hadoop jarhadoop-examples-*.jar grep input output1 'dfs[a-z.]'
输出:
13/08/19 04:57:39INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/08/19 04:57:39WARN snappy.LoadSnappy: Snappy native library not loaded
13/08/19 04:57:39INFO mapred.FileInputFormat: Total input paths to process : 7
13/08/19 04:57:39INFO mapred.JobClient: Running job: job_local_0001
13/08/19 04:57:40INFO util.ProcessTree: setsid exited with exit code 0
13/08/19 04:57:40INFO mapred.Task: UsingResourceCalculatorPlugin :org.apache.hadoop.util.LinuxResourceCalculatorPlugin@8474463
13/08/19 04:57:40INFO mapred.MapTask: numReduceTasks: 1
13/08/19 04:57:40INFO mapred.MapTask: io.sort.mb = 100
13/08/19 04:57:40INFO mapred.MapTask: data buffer = 79691776/99614720
13/08/19 04:57:40INFO mapred.MapTask: record buffer = 262144/327680
13/08/19 04:57:40INFO mapred.MapTask: Starting flush of map output
13/08/19 04:57:40INFO mapred.Task: Task:attempt_local_0001_m_000000_0 is done. And is in theprocess of commiting
13/08/19 04:57:40INFO mapred.LocalJobRunner:file:/home/yj70978/hadoop/hadoop-1.1.2/input/capacity-scheduler.xml:0+7457
13/08/19 04:57:40INFO mapred.Task: Task 'attempt_local_0001_m_000000_0' done.
13/08/19 04:57:40INFO mapred.Task: UsingResourceCalculatorPlugin :org.apache.hadoop.util.LinuxResourceCalculatorPlugin@8fae75c
13/08/19 04:57:40INFO mapred.MapTask: numReduceTasks: 1
13/08/19 04:57:40INFO mapred.MapTask: io.sort.mb = 100
13/08/19 04:57:40INFO mapred.MapTask: data buffer = 79691776/99614720
13/08/19 04:57:40INFO mapred.MapTask: record buffer = 262144/327680
13/08/19 04:57:40INFO mapred.MapTask: Starting flush of map output
13/08/19 04:57:40INFO mapred.MapTask: Finished spill 0
13/08/19 04:57:40INFO mapred.Task: Task:attempt_local_0001_m_000001_0 is done. And is in theprocess of commiting
13/08/19 04:57:40INFO mapred.LocalJobRunner: file:/home/yj70978/hadoop/hadoop-1.1.2/input/hadoop-policy.xml:0+4644
13/08/19 04:57:40INFO mapred.Task: Task 'attempt_local_0001_m_000001_0' done.
13/08/19 04:57:40INFO mapred.Task: UsingResourceCalculatorPlugin :org.apache.hadoop.util.LinuxResourceCalculatorPlugin@8fbdd2c
13/08/19 04:57:40INFO mapred.MapTask: numReduceTasks: 1
13/08/19 04:57:40INFO mapred.MapTask: io.sort.mb = 100
13/08/19 04:57:40INFO mapred.MapTask: data buffer = 79691776/99614720
13/08/19 04:57:40INFO mapred.MapTask: record buffer = 262144/327680
13/08/19 04:57:40INFO mapred.MapTask: Starting flush of map output
13/08/19 04:57:40INFO mapred.Task: Task:attempt_local_0001_m_000002_0 is done. And is in theprocess of commiting
13/08/19 04:57:40INFO mapred.LocalJobRunner:file:/home/yj70978/hadoop/hadoop-1.1.2/input/mapred-queue-acls.xml:0+2033
13/08/19 04:57:40INFO mapred.Task: Task 'attempt_local_0001_m_000002_0' done.
13/08/19 04:57:40INFO mapred.Task: Using ResourceCalculatorPlugin: org.apache.hadoop.util.LinuxResourceCalculatorPlugin@81ab78f
13/08/19 04:57:40INFO mapred.MapTask: numReduceTasks: 1
13/08/19 04:57:40INFO mapred.MapTask: io.sort.mb = 100
13/08/19 04:57:40INFO mapred.MapTask: data buffer = 7969177