一、hadoop简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
、hadoop部分开源工具
1、Hive(小蜜蜂):hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。另外一个是Windows注册表文件。
2、Hbase:存储结构化数据的分布式数据库,与关系型数据库相比:放弃了事物的特性,追求更高的扩展。
3、zookeeper:是一个分布式的,开放源码的分布式应用程序协调服务,监控hadoop集群内每个节点的状态,管理整个集群的配置,维护节点之间数据的一致性。
三、hadoop环境
1、Linux环境:1)安装Linux操作系统的计算机。2)虚拟机安装Linux环境。3)租用云主机,例如阿里云、unitedStack等,然后用ssh工具连接(putty,securtcrt等)。
2、JDK:1)安装jdk (安装命令:apt -get install 具体Jdk版本号) 。
2)设置环境变量 vim /etc/profile.d 键入如下的
export JAVA_HOME=“安装路径”
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
3、配置hadoop
1、下载Hadoop安装文件 wget http://apache.mirrors.tds.net//hadoop/common/hadoop-0.20.203.0/hadoop-0.20.203.0rc1.tar.gz
2、mv 文件名 /opt/ ----------------移动安装包到opt目录下
3、解压 tar -zxvf 文件名
4、 ll命令 查看hadoop 安装目录 ,hadoop 主要配置文件集中在conf目录下:
1)关于配置:http://blog.csdn.net/lin_fs/article/details/7349497这里讲得很详细
2)在/etc/profile文件中配置hadoop路径
a、 export HADOOP_HOME=/opt/hadoop目录
b、在PATH中加入$HADOOP_HOME/bin 用“:”分割
c、source /etc/profile 使配置文件生效
d、执行hadoop 命令查看执行程序
e、在opt/hadoop/bin 目录下执行 hadoop namenode -format 对nameNode进行格式化操作
f、在bin目录下可以看到诸多的启动命令 例如:start-all.sh 启动hadoop
g、使用jps查看到:DataNode、TaskTracker、JobTracker、NameNode、Jps、SecondaryNameNode进程则表明正常运行hadoop
四、HDFS文件系统
HDFS文件系统设计架构:
1、block:块,固定大小的逻辑单元。默认大小64MB,是文件存储处理的逻辑单元。(文件会被分成块进行存储)
2、两类节点:
1)NameNode 是管理节点,存放文件元数据
a、元数据:文件与数据块的映射表,数据块与数据节点的映射表
2)DataNode 是HDFS的工作节点,存放数据块
3、HDFS中数据管理与容错
1)每个数据块3个副本,分布在两个机架内的三个数据节点中:如图
2)心跳检测
DataNode定期向NameNode发送心跳消息。从而知道DataNode的最新状态
3)二级NameNode
二级NameNode定期同步元数据映像文件和修改日志。在nameNode发生故障的时候,接手NameNode的工作。作数据备份,定期同步。
4、HDFS读取文件流程
5、HDFS写入文件流程
注:写入一份数据之后,相互之间的复制数据,作数据冗余操作、
HDFS的特点;
1、数据冗余、、硬件容错(数据备份)
2、流式数据访问(一次写入多次访问),不能修改(替代操作:删除之后,重新写入)
3、存储大文件
适用与局限:
1、适合数据批量读写,吞吐量高
2、不适合交互式应用、低延迟难以满足(例如:数据库应用)
3、适合一次写入多次读取,顺序读写
4、不支持多用户并发写相同对文件
五、mapReduce 并行处理框架
原理:分而治之,一个大的任务切分成多个小的子任务(map),并行执行后,合并结果(reduce)
基本概念:job & task
一个job切分成多个Task,Task分为mapTask(切割)和reduceTask(归约)
1、jobTracker作业调度
1)作业调度(例如:先到先服务)
2)分配任务监控任务执行进度
3)监控TaskTracker的状态
2、TaskTracker
1)执行任务
2)汇报任务状态
注:可多轮的mapTask、reduceTask
MapReduce的容错机制
1、重复执行(默认四次执行,放弃)
2、推测执行:在任务执行过程中,等所有的map端算完之后Reduce端才开始计算,如果存在某个节点过慢,jobTracker会发现其中一个TaskTracker节点特别慢,会新建一个TaskTracker来计算。谁先执行完,就终止另外一个。这样会让job不会一个节点的故障导致整个效率变低。
八、mapreduce的例子
程序中应用:
1、编写mapper类和reduce类
2、编译 需要导入相应的jar包:hadoop下core包、common包
3、打包成jar
4、作业提交到hadoop中运行。命令如下:
hadoop jar xxx.jar 主函数名 输入目录 输出目录
例如: