标签: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为海量的数据提供了计算。
hadoop主要有以下几个优点:
高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。 低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。 Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。
hadoop的数据流程图:
Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。
它管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log),这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。
它是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个Secondary NameNode,并且部署在一个单独的服务器上。Secondary NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的 快照。由于NameNode是单点的,通过Secondary NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary NameNode可以及时地作为备用NameNode使用。
它是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。 集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信,并且对相关的数据块进行读/写操作。
JobTracker后台程序用来连接应用程序与Hadoop。用户代码提交到集群以后,由JobTracker决定哪个文件将被处理,并且为 不同的task分配节点。同时,它还监控所有的task,一旦某个task失败了,JobTracker就会自动重新开启这个task,在大多数情况下这 个task会被放在不用的节点上。每个Hadoop集群只有一个JobTracker,一般运行在集群的Master节点上。
它与负责存储数据的DataNode相结合,其处理结构上也遵循主/从架构。JobTracker位于主节点,统领 MapReduce工作;而TaskTrackers位于从节点,独立管理各自的task。每个TaskTracker负责独立执行具体的task,而 JobTracker负责分配task。虽然每个从节点仅有一个唯一的一个TaskTracker,但是每个TaskTracker可以产生多个java 虚拟机(JVM),用于并行处理多个map以及reduce任务。TaskTracker的一个重要职责就是与JobTracker交互。如果 JobTracker无法准时地获取TaskTracker提交的信息,JobTracker就判定TaskTracker已经崩溃,并将任务分配给其他 节点处理。
下面是hadoop的一些配置:
master端: 172.25.254.1
slave端: 172.25.254.2
slave端: 172.25.254.3
slave端: 172.25.254.4
在master端添加hadoop用户
useradd -u 900 hadoop echo westos |passwd --stdin hadoop
安装jdk:
sh jdk-6u32-linux-x64.bin mv jdk1.6.0_32/ /home/hadoop/java su - hadoop #接下来都是用hadoop用进行操作 vim .bash_profile export JAVA_HOME=/home/hadoop/java export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin source .bash_profile
配置hadoop单节点部署:
tar zxf hadoop-1.1.2.tar.gz ln -s hadoop-1.1.2 hadoop cd hadoop vim conf/hadoop-env.sh export JAVA_HOME=/home/hadoop/java
创建输入文件:
mkdir input cp conf/*.xml input/
hadoop伪分布式部署
运行官方给的示例程序:
bin/hadoop jar hadoop-examples-1.1.2.jar grep input output ‘dfs[a-z.]+‘
查看输出文件:
[hadoop@server1 hadoop]$ cat output/part-00000 1 dfsadmin
保证master到节点实现无密码登陆:
ssh-keygen ssh-copy-id localhost #分布式部署的情况下要在slave端做,跟的是master的ip而不是localhost
配置HDFS master(即namenode)的地址和端口号:
vim conf/core-site.xml <configuration> <property> <name>fs.default.name</name> <value>hdfs://172.25.254.1:9000</value> #指定 namenode </property> </configuration>
配置的是JobTracker的地址和端口:
vim conf/mapred-site.xml <configuration> <property> <name>mapred.job.tracker</name> <value>172.25.254.1:9001</value> #指定 jobtracker </property> </configuration>
修改Hadoop中HDFS的配置,配置的备份方式
vim conf/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> #指定文件保存的副本数 </property> </configuration>
格式化一个新的分布式文件系统:
bin/hadoop namenode -format
启动hadoop进程:
bin/start-dfs.sh bin/start-mapred.sh
通过jps
命令可以查看到hadoop的进程:
我们还可以通过网络借口浏览 NameNode 和 JobTracker ,它们的地址默认为:
NameNode – http://172.25.254.1:50070/
JobTracker – http://172.25.254.1:50030/
将输入文件考入分布式文件系统:
bin/hadoop fs -put input test
运行官方给的示例程序:
bin/hadoop jar hadoop-examples-1.1.2.jar wordcount test output
查看输出文件:
bin/hadoop fs -cat output/*
分布式部署:
master端的配置于伪分布式的部署基本相同只是添加了master和slave的信息
vim conf/masters 172.25.254.1 vim conf/slaves 172.25.254.2 172.25.254.3
如果是接着为分布式做的要先停止haoop的进程
bin/stop-all.sh
然后添加上面的master和slave信息重新格式化分布式系统
bin/hadoop namenode -format
在slave端要安装jdk,有与master端相同的hadoop用户,uid等保持一致,hadoop的数据配置路径也要与master端相同
之后在master端开启hadoop进程
bin/start-dfs.sh bin/start-mapred.sh
此次我们通过jps命令可以看到在master端开启了NameNode,SecondaryNameNode和JobTracker三个进程,而DataNode和TaskTracker则是在slave端开启了。
hadoop在线添加节点:
新添加节点与其他的slave端一样要安装jdk,有与master端相同的hadoop用户,uid等保持一致,hadoop的数据配置路径也要与master端相同 然后启动以下两个服务
bin/hadoop-daemon.sh start datanode bin/hadoop-daemon.sh start tasktracker
然后在master端加入新节点的ip
vim conf/slaves 172.25.254.2 172.25.254.3 172.25.254.4
hadoop在线删除节点
在master上:
vim conf/mapred-site.xml <property> <name>dfs.hosts.exclude</name> <value>/home/hadoop/hadoop/conf/datanode-excludes</value> </property> vim /home/hadoop/hadoop/conf/datanode-excludes #添加要删除的节点ip 172.25.254.3
在master上刷新节点:
bin/hadoop dfsadmin -refreshNodes
你可以通过以下命令查看 datanode 状态
bin/hadoop dfsadmin -report
此时可以看到新加的server4节点以及将要移除的server3节点正在做数据转移
当server3节点状态为Decommissioned时就可以移除了
标签:hadoop
原文地址:http://bantiaomichong.blog.51cto.com/11702501/1811692