HDFS分布式存储系统(提供了 高可靠性、高扩展性和高吞吐率的数据存储服务)
HDFS优点:
高容错性 数据自动保存多个副本,副本丢失后,自动恢复
适合批处理 移动计算而非数据,数据位置暴露给计算框架
适合大数据处理
可构建在廉价机器上
HDFS缺点:
低延迟数据访问 比如毫秒级,低延迟与高吞吐率
小文件存取 占用NameNode 大量内存,寻道时间超过读取时间
并发写入、文件随机修改 最好不要修改
HDFS:
NameNode |
Secondary NameNode |
DataNode(block)
NameNode主要功能:接受客户端的读写服务
NameNode保存metadate(源信息)
– 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 规定
DataNode
存储数据(Block)
启动DN线程的时候会向NN汇报block信息
通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收 到DN的心跳,则认为其已经lost,并copy其上的block到其它DN
默认情况下block加上自己都有三个副本,大小最好不要超过1G
HDFS支持2种认证:
simple 只认证用户,不认证密码,默认使用
kerberos 认证用户也认证密码,但是要新增机器的时候,新增的机器上用户名密码失效
HDFS的namenode启动的时候自动进入
安全模式,这时候文件只读
HDFS
安装:
- 先决条件
- 三台机器(以上)
- 时间一致,相差30秒以内。
- 必须有主机名和ip映射。 --hdfs只认主机名,不认IP
- 必须有JDK1.7,并且JDK的环境变量必须配置好。
- 配置环境变量:vi ~/.bash_profile #全局变量:/etc/profile
在文件的最后添加:
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bash_profile 重新刷新环境变量文件
- 防火墙暂时关闭。
export HADOOP_HOME=/opt/local/hadoop-2.5.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 编辑hadoop配置文件/etc/hadoop:hadoop-env.sh core-site.xml hdfs-site.xml
Sleves
Hadoop-env.sh
更改第25
行
export JAVA_HOME=/usr/java/default
core-site.xml
---
主节点
namenode
<property>
<name>fs.defaultFS</name>
<value>hdfs://
node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop</value>
</property>
Hdfs-site.xml
--secondary namenode
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>
node2:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>
node2:50091</value>
</property>
Slaves
所有datanode
的主机名 --
设置所有作为datanode节点的主机名
node1
node2
node3
- 设置sshd免密码登陆。
- 找一台主节点:启动服务。
- 执行命令生成密钥。ssh-keygen (cd /root ls –al cd .ssh)
- 拷贝主节点的公钥到所有节点中去。ssh-copy-id -i id_rsa.pub root@node2 node2可随意修改node1 node2(所有需要免密码的服务器)
- 找一台主节点:启动服务。
- 拷贝文件:hosts,bash_profile hadoop目录 到其他几台机器
- 格式化HDFS: bin/hdfs namenode –format 必须在主节点上
- 在主节点上启动 sbin/start-dfs.sh
启动之后:
jps 显示机器节点名称
http://localhost:50070/ localhost改为namenode的ID
网页访问端口50070 其他访问端口9000
hdfs dfs -ls / 查看HDFS根目录下有没有文件夹
hdfs dfs -mkdir /home 在根目录下创建一个home文件夹
hdfs dfs -put apache-tomcat-7.0.61.tar.gz /home/ 把apache上传到网盘home下
hdfs dfs 查看帮助文档
hdfs dfs -chown -R zhangsan /test 给test文件夹权限修改为zhangsan
hadoop -deamon.sh restart datanode 重启这个datanode节点
hadoop -deamons.sh restart datanode 重启
所有datanode节点 -一般不用
eclipse中访问hdfs服务:
D:\java工具\eclipse\plugins 中加上hadoop-eclipse-plugin-2.5.1.jar,然后重启
然后右上角-》Open Perspective找到Map/Reduce
下方找到Map/Reduce locations 右下角:New hadoop location
选择DFS Master host:自己的nodeName的IP 端口9000 Location name:随便取
eclipse编程:注意windows用户注意修改为root