安装
- linux环境
- jdk(hadoop使用java写的)
配置hadoop
- 下载hadoop,
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
- vim conf/hadoop-env.sh
row 9改为:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/amd64
vim core-site.xml
添加<property> <name>hadoop.tmp.dir</name> <value>/tmp</value> </property> <property> <name>dfs.name.dir</name> <value>/hadoop/name</value> </property> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property>
sudo vim hdfs-site.xml
添加<property> <name>dfs.data.dir</name> <value>xxx/hadoop/data</value> </property>
sudo vim mapred-site.xml
添加<property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property>
需要修改hadoop所在文件夹的权限问题
- 下载hadoop,
HDFS
- 基本知识
- hdfs的文件被分成块进行存储,hdfs的默认大小是64MB
- hdfs有两类节点:NameNode和DataNode
- NameNode是管理节点,存放文件的元数据
* 文件与数据块的映射表
* 数据块与数据节点的映射表 - DataNode是工作节点,存放数据块
- 数据管理策略
- 数据块副本.每个数据块3个副本,分不再两个机构内的三个节点
- 心跳检测.DataNode定期向NameNode发送心跳消息
- 二级NameNode.定期同步元数据映像文件和修改日子,NameNode发生故障时,备胎转正
- 文件的读写操作
- 读取
- 客户端发起文件读取请求;
- NameNode返回元数据;
- 客户端直接去DataNode读取Blocks
- 写入
- 文件拆分成块,通知NameNode
- NameNode找到并返回DataNodes
- 客户端写入DataNode的Blocks
- 复制映像
- 更新元数据
- 读取
- HDFS的特点
- 数据冗余,硬件容错
- 流式的数据访问,写一次读多次,无法进行修改
- 适合存储大文件
- 适合数据批量读写,吞吐量高;不适合交互式应用(如数据库),低延迟很难满足;不支持并发写入
- HDFS的使用
- hadoop namenode -format
- start-all.sh
- hadoop fs -ls / //显示文件系统
- hadoop fs -mkdir xxx //创建目录
- hadoop fs -put xxx path //传输文件到hadoop
- hadoop fs -cat xxx
- hadoop fs -get path xxx //下载文件
- hadoop dfsadmin -report //查看文件系统所有信息
MapReduce 并行计算框架
原理
分而治之,一个大任务分成多个小的子任务(map),并行执行后,合并结果(reduce)
- 基本概念
- Job & Task. 一个Job分成多个Task,两类MapTask,ReduceTask.
- JobTracker, 客户端添加任务给JobTracker,JT把任务分为Map和Reduce,交给MapTaskTracker和ReduceTaskTracker.通常和hdfs使用同一组节点
- JobTracker的角色
- 作业调度
- 分配任务,监控任务执行进度
- 监控TaskTracker的状态
- TaskTracker的角色
- 执行任务
- 汇报任务状态
- JobTracker的角色
MapReduce的作业执行过程
- 任务到来,提交给JobTracker,分配Map任务和Reduce任务
- 输入数据,进行分片
- 把分片按照一定的规则分给TaskTracker,进行Map任务
- 任务执行完之后,产生中间结果,key-value对
- kv通过一定的规则进行交换,到达reduce任务(也是一些TaskTracker)
- 运行玩之后,写回HDFS
可以多轮执行;中间结果可以写入磁盘
- 容错机制
- 重复执行,重试4次放弃
- 推测执行
实例
- WordCount
计算文件中每个单词的频数,输出结果按照字典序排序
- 编译,WordCount.java为word_count_class/class
- 打包,jar -cvf wordcount.jar *.class
- 提交输入文件到hadoop
- hadoop jar word_count_class/wordcount.jar WordCount input_wordcount(输入文件) output(输出文件)
- 生成三个文件夹,运行状态,运行日志,运行结果
- 利用MapReduce进行排序
- 分区
- 小区间排序
- 直接合并
注:源代码下载