1、概念
Hadoop是适合大数据的分布式存储与计算平台。HDFS(Hadoop Distributed File System)分布式文件系统;MapReduce 并行计算框架。
主从结构:主节点,只有一个,namenode;从节点,有很多个,datanodes。
MapReduce的架构:
主从结构:主节点,只有一个,jobTracker;从节点,有很多个,TaskTrackers;
JobTracker负责:接受客户提交的计算任务;把计算任务分给TaskTracker执行,监控TaskTracker的执行情况。
TaskTracker:执行JobTracker分配的计算任务。
HDFS的框架:
namenode负责:接受用户操作请求;维护文件系统的目录结构;管理文件与block之间关系,block与data。
datanode负责:存储文件;文件被分成block存储在磁盘上;为保证数据安全,文件会有多个副本。
2、配置
2.1 主机(windows)与客户机(安装在虚拟机中的linux)网络连接方式:
2.1.1 host-only 宿主机与客户机单独组网。
好处:网络隔离
坏处:虚拟机与其他服务器之间不能通信
2.1.2 bridge 客户机与宿主机在同一个局域网中
好处:都在同一个局域网,可以互相访问
坏处:不安全
2.2 hadoop的伪分布式安装步骤
【使用root用户登录】
2.2.1 设置静态ip
在centos桌面右上角的图标上,右键修改
重启网卡,执行命令service network restart
验证:执行命令ifconfig
2.2.2 修改主机名
修改当前会话中的主机名,执行命令hosthome hadoop
修改配置文件中的主机名,执行命令vi /etc/sysconfig/network
验证:重启机器
2.2.3 把hosthome和ip绑定
执行命令vi /etc/hosts ,增加一行内容,如下
192.168.80.100 hadoop
保存退出
验证 ping hadoop
2.2.4 关闭防火墙
service iptables stop
service iptables status
2.2.5 关闭防火墙的自动运行
执行命令 cnkconfig iptables off
验证 cnkconfig –list | grep iptables
2.2.6 SSH(secure shell )的免密码登陆
执行命令 ssh-keygen -t rsa产生迷钥,位于~/.ssh
执行命令 cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
验证:ssh localhost
2.2.7 安装jdk
执行命令 rm -rf /usr/local/* 删除所有内容
使用winscp把jdk文件从windows复制到/usr/local目录下
执行命令 chmod u+x jdk-6u24-linux-i586.bin赋予执行权限
执行命令 ./jdk-6u24-linux-i586.bin 解压缩
执行命令 mv jdk1.6.0_24 jdk 重命名
vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=.:$JAVA_HOME/bin:$PATH
保存退出
source /etc/profile
验证 java -version
2.2.8安装hadoop
执行命令 tar -zxvf hadoop-1.1.2.tar.gz
执行命令 mv hadoop-1.1.2 hadoop 重命名
执行命令 vi /etc/profile 设置环境变量
Export HADOOP_HOME=/usr/local/hadoop
Export PATH=.:$HADOOP_HOME/bin
保存退出
执行命令 Source /etc/profile
修改hadoop的配置文件,位于\$HADOOP_HOME/conf目录下:hadoop-env.sh、core-site.xml、hdfs-site.xml、mapered-site.xml
2.2.9 NameNode进程没有启动成功?
-没有格式化
-配置文件只copy,不修改
-hostname与ip没有绑定
-SSH的免密码登陆没有配置成功
2.3 多次格式化hadoop也是错误的?
删除/usr/local/hadoop/tmp文件夹,重新格式化
3、HDFS
3.1 Namenode
是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件的数据块列表。接收用户的操作请求。
文件包括:
fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
edits:操作日志文件。
fstime:保存最近一次checkpoint的时间
以上这些文件是保存在linux的文件系统中
3.2 SecondaryNameNode
HA的一个解决方案。但不支持热备。配置即可。
执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,同时重置NameNode的edits。
默认在安装在NameNode节点上,但这样不安全。
3.3 对hdfs的操作方式:hadoop fs xxx
hadoop fs -ls / 查看hdfs的根目录下的内容的
hadoop fs -lsr / 递归查看hdfs的根目录下的内容的
hadoop fs -mkdir /dl 在hdfs上创建文件夹d1
hadoop fs -put < linux source> < hdfs destination> 把数据从linux上传到hdfs的特定路径上
hadoop fs -get < hdfs source> < linux destination> 把数据从hdfs下载到linux的特定路径下
hadoop fs -text < hdfs文件> 查看hdfs中的文件
hadoop fs -rm 删除hdfs中文件
hadoop fs -rmr 删除hdfs中的文件夹
hadoop fs -ls hdfs://hadoop0:9000/
3.4 DataNode
提供真实文件数据的存储服务
文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是64MB,以一个256MB文件,共有256/64=4个Block.
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
Replication。多副本,默认是三个。
3.5 HDFS的datanode在存储数据时,如果原始文件大小>64MB,按照64MB大小划分;如果<64MB,只有一个block,占用磁盘空间是源文件实际文件大小。
3.6 RPC(remote procedure call)
不同java进程间的对象方法的调用。
一方称作服务端(server),一方称作客户端(client)。server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在服务端。
RPC是hadoop框架运行的基础。
4、MapReduce工作原理
MapReduce是一种编程模式,用于大规模数据集(大于1TB)的并行运算。Map(映射)和Reduce(化简)的概念和主要思想,是从函数式编程语言借用来的,还有从矢量编程语言里借来的特性。
在函数式编程中,map函数对列表的每个元素执行操作或函数。执行这些函数时,原有列表不会被修改。函数式编程认为,应当保持数据不可变,避免在多个进程或线程间共享数据。这意味着演示的map函数虽简单,却可以通过两个或更多线程在同一列表上用时执行,线程之间互不影响,因为列表本身没有改变。
在函数式Map和Reduce设置中,map函数针对每一个输入元素都要生成一个输出元素,reduce函数针对每一个输入列表都要生成一个输出元素。在MapReduce中,每一个阶段都可以生成任意的数值;Mapper可能把一个输入Map为0个、1个或100个输出。Reducer可能计算超过一个的输入列表并生成一个或多个不同的输出。
reduce函数的作用是把大的数值列表转变为一个(或几个)输出数值。在MapReduce中,所有的输出值一般不会被Reduce在一起,除非设置Reduce的个数为1。但是有相同键的所有数值会被一起送到一个reduce函数里处理。作用在有着不同键关联的数值列表上的Reduce操作之间是独立执行的。
用户定义一个map函数来处理一个key-value对以生成一批中间的Key-Value对,再定义一个reduce函数将所有这些中间的有相同Key的Value合并起来。
MapReduce的核心过程——shuffle和sort。shuffle是指从Map的输出开始,包括系统执行排序以及传送Map输出到Reduce作为输入的过程。Sort阶段就是对Map端输出的Key进行排序。
reduce函数的输入是已分类的map函数的输出。在shuffle阶段,框架通过HTTP取出所有Map输出的结果。由于不同的Map可能输出相同的Key,在这个阶段,框架将Reduce的输入通过Key分成组。相同的Key发送到同一个Reduce端处理。Sort阶段就是对Map端输出的Key进行排序。