1. hadoop三篇论文:
– GFS
– Map-Reduce
– Bigtable
2.HDFS优缺点:
HDFS优点:
– 高容错性
• 数据自动保存多个副本
• 副本丢失后,自动恢复
– 适合批处理
• 移动计算而非数据
• 数据位置暴露给计算框架
– 适合大数据处理
• GB 、TB 、甚至PB 级数据
• 百万规模以上的文件数量
• 10K+ 节点
– 可构建在廉价机器上
• 通过多副本提高可靠性
• 提供了容错和恢复机制
HDFS缺点:
– 低延迟数据访问
• 比如毫秒级
• 低延迟与高吞吐率
– 小文件存取
• 占用NameNode 大量内存
• 寻道时间超过读取时间
– 并发写入、文件随机修改
• 一个文件只能有一个写者
• 仅支持append
3. HDFS架构流程:
4. Block
HDFS 数据存储单元(block)
– 文件被切分成固定大小的数据块
• 默认数据块大小为64MB(hadoop1.x),可配置
• 若文件大小不到64MB ,则单独存成一个block
– 一个文件存储方式
• 按大小被切分成若干个block ,存储到不同节点上
• 默认情况下每个block都有三个副本
– Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更
HDFS设计思想:
5. NN SNN DN(元数据 fsimage edits)
NameNode(NN)
– NameNode主要功能:接受客户端的读写服务
– NameNode保存metadate信息包括
• 文件owership和permissions
• 文件包含哪些块
• Block保存在哪个DataNode(由DataNode启动时上报)
– NameNode的metadate信息在启动后会加载到内存
• metadata存储到磁盘文件名为”fsimage”
• Block的位置信息不会保存到fsimage
• edits记录对metadata的操作日志
SecondaryNameNode(SNN)
– 它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。
– SNN执行合并时机
• 根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
• 根据配置文件设置edits log大小fs.checkpoint.size 规定edits文件的最大值默认是64MB
SNN合并流程
DataNode(DN)
– 存储数据(Block)
– 启动DN线程的时候会向NN汇报block信息
– 通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收 到DN的心跳,则认为其已经lost,并copy其上的block到其它DN
6. Block副本策略
7. 安全模式 safemode
– namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各 项操作。
– 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
– 此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。
– 在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认 为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
– 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。
8. HDFS文件权限
– 与Linux文件权限类似
• r: read;w:write; x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
– 如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个 文件在HDFS中owner就是zhangsan。
– HDFS的权限目的:阻止好人错错事,而不是阻止坏人做坏事。HDFS 相信,你告诉我你是谁,我就认为你是谁。
9. 安全管理 hdfs安全认证用户名匹配
10. Hdfs完全分布式搭建
4台虚拟机
node3 NN
node4 SNN
node4-6DN
1、host hosts 网络
修改hosts文件:vi /etc/hosts
同步四台虚拟机的hosts文件。
2、时间同步ntp
安装ntp:yum –y install ntp
设置时间同步:ntpdate 210.72.145.44
3、防火墙
service iptables stop 立即关闭,重启后失效
chkconfig iptables off 永久关闭,重启后生效
4、jdk 配置环境变量
添加配置:vi ~/.bash_profile
export PATH
export JAVA_HOME=/usr/java/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin
修改立即生效:source ~/.bash_profile
5、免密钥
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
与其它机器免密钥连接,将.ssh/id_dsa.pub追加到另一台机器的~/.ssh/authorized_keys文件中
6、上传tar 解压
tar –zxvf *.gz.tar
7、修改配置文件
hadoop-env.sh 修改java_home路径
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value> 请求hdfs
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop</value> hadoop存放目录 该目录下边不允许有任何文件或者目录
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value> block副本数量
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node4:50090</value> SNN http请求的端口
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>node4:50091</value> SNN https请求的端口
</property>
</configuration>
vi slaves (DN)
node4
node5
node6
vi masters (SNN,该文件与slaves同级目录,需要创建)
node4
!!! 同步集群当中所有节点上的配置文件!!!
8、格式化NN
添加环境变量:vi ~/.bash_profile
exportCLASSPATH=.:/lib/dt.jar:/lib/tools.jar
exportHADOOP_HOME=/usr/hadoopsoft/hadoop-2.5.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source ~/.bash_profile
在NN上执行 hdfs namenode -format
9、启动dfs
在一台机器上执行:/usr/hadoopsoft/hadoop-2.5.1/sbin /start-dfs.sh
11. Hdfs shell
12. Eclipse使用
将jar包hadoop-eclipse-plugin-2.5.1.jar复制到Eclipse安装目录下的plugins下
点击菜单栏window -> show view -> Map/Reduce Location
13. Java API