Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
总的来说,dfs(Hadoop Distributed File System)实质是分布式文件系统,作为Apache Nutch的基础架构具有高容错性的特点适用于大规模数据集。
简单概述Hadoop三种运行模式
Hadoop有下列三种运行模式:
- 单机模式
- 伪分布式模式
- 完全分布式模式
单机模式
- 默认模式。
- 不对配置文件进行修改。
- 使用本地文件系统,而不是分布式文件系统。
- Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的。
- 用于对MapReduce程序的逻辑进行调试,确保程序的正确。
伪分布式模式
- 在一台物理主机上模拟多台主机。
- Hadoop启动NameNode、DataNode、JobTracker、TaskTracker这些守护进程都在同一台机器上运行,是相互独立的Java进程。
- 在这种模式下,Hadoop使用的是分布式文件系统,各个作业也是由JobTraker服务,来管理的独立进程。在单机模式之上增加了代码调试功能,允许检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。类似于完全分布式模式,因此,这种模式常用来开发测试Hadoop程序的执行是否正确。
- 修改3个配置文件:core-site.xml(Hadoop集群的特性,作用于全部进程及客户端)、hdfs-site.xml(配置HDFS集群的工作属性)、mapred-site.xml(配置MapReduce集群的属性)
- 格式化文件系统
示例
1.core-site.xml修改
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost</value>
</property>
</configuration>
2.对hdfs-site.xml修改(主要是用来指定集群中数据块的副本系数)
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3.对mapred-site.xml修改
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:8021</value>
</property>
</configuration>
4.对文件系统进行格式化
hadoop namenode -format
5.启动守护进程
bin文件下
运行start-all.sh
启动HDFS和MapReduce的守护进程
至此,NameNode、DataNode、JobTracker、TaskTracker等守护进程启动。
完全分布式模式
- Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。
在所有的主机上安装JDK和Hadoop,组成相互连通的网络。 - 在主机间设置SSH免密码登录,把各从节点生成的公钥添加到主节点的信任列表
修改3个配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml,指NameNode和JobTraker的位置和端口,设置文件的副本等参数 - 格式化文件系统
示例
假设有3台主机,其中1台主节点,2台从节点。主节点和从节点配置相同。
1.core-site.xml修改
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.235.153:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/sw/haddoop-data/tmp</value>//临时文件夹
</property>
</configuration>
2.对hdfs-site.xml修改(主要是用来指定集群中数据块的副本系数)
<configuration>
<property>
<name>dfs.name.dir</name>
<value>root/sw/hadoop-data/hafs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/sw/hadoop-data/hafs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
3.对mapred-site.xml修改
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.235.153:9001</value>
</property>
</configuration>
4.对配置文件下的conf/slaves进行编辑(将从节点的IP写入)
localhost
192.168.235.154
192.168.235.155
5.设置SSH免密码登录
ssh-keygen
将公钥密令追加到信任授权列表中
cat /home/test/.ssh/id_rsa.pub >>authorized_keys
6.格式化HDFS主节点
hadoop namenode -format
7.启动
start-dfs.sh