问题:
为啥配置文件只需要指定主服务,无须指定从服务?
为啥需要客户端节点?
怎么逐一启动HDFS和统一启动HDFS?
咋在HDFS中上传文件?
master上部署主服务NameNode;
slave上部署从服务DataNode;
client上部署HDFS客户端。
HDFS基本特性:
- HDFS 分布式文件系统,为大数据其他组件提供了存储功能。具有高容错、高可靠、可扩展、高吞吐率的特征。
- HDFS的主节点NameNode、从节点DataNode
NameNode管理文件系统的元数据 DataNode存储实际的数据。
3. HDFS开放文件系统的命名空间以便用户以文件形式存储数据,秉承“一次写入,多次读取”的原则。
4. 客户端通过NameNode和DataNode的交互访问文件系统,联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。
HDFS基本命令
hdfs文件的相关操作主要使用hadoop fs、hadoop dfs、hdfs dfs 命令,以下对最常用的相关命令进行简要说明。 hadoop fs -ls 显示当前目录结构,-ls -R 递归显示目录结构 hadoop fs -mkdir 创建目录 hadoop fs -rm 删除文件,-rm -R 递归删除目录和文件 hadoop fs -put [localsrc] [dst] 从本地加载文件到HDFS hadoop fs -get [dst] [localsrc] 从HDFS导出文件到本地 hadoop fs - copyFromLocal [localsrc] [dst] 从本地加载文件到HDFS,与put一致 hadoop fs -copyToLocal [dst] [localsrc] 从HDFS导出文件到本地,与get一致 hadoop fs -test -e 检测目录和文件是否存在,存在返回值$?为0,不存在返回1 hadoop fs -text 查看文件内容 hadoop fs -du 统计目录下各文件大小,单位字节。-du -s 汇总目录下文件大小,-du -h 显示单位 hadoop fs -tail 显示文件末尾 hadoop fs -cp [src] [dst] 从源目录复制文件到目标目录 hadoop fs -mv [src] [dst] 从源目录移动文件到目标目录
HDFS适用场景
数据密集型并行计算:数据量极大,但是计算相对简单的并行处理,如大规模Web信息搜索。
计算密集型并行计算:数据量相对不是很大,但是计算较为复杂的并行处理,如3D建模与渲染、气象预报和科学计算;
数据密集与计算密集混合型的并行计算:如3D电影的渲染。
HDFS在使用过程中有以下限制:
(1)HDFS不适合大量小文件的存储,由于NameNode将文件系统的元数据存放在内存中,因此存储的文件数目受限于NameNode的内存大小。
(2)HDFS适用于高吞吐量,而不适合低时间延迟的访问;
(3)流式读取的方式,不适合多用户写入一个文件(一个文件同时只能被一个客户端写),不支持随机写。
部署HDFS
配置安装环境
安装
修改配置文件
(1)设置JDK安装目录
vim [ HADOOP-DIR ] /hadoop/etc/hadoop/hadoop-env.sh export JAVA_HOME=${JAVA_HOME}
(2)指定HDFS主节点
vim [ HADOOP-DIR ] /hadoop/etc/hadoop/core-site.xml
将如下内容嵌入此文件里最后两行的<cofiguration> </configuration>标签之间。
<property> <name> hadoop.tmp.dir </name> <value> [ HADOOP-DIR ]/hadoop/cloud </value> </property> <property> <name> fs.defaultFS </name> <value> hdfs://master:8020 </value> </property>
HDFS参数介绍
fs.defaultFS
默认文件系统的名称。一个URI和权威确定文件系统实现的方案。uri的计划决定配置属性(fs.SCHEME.impl)命名文件系统实现类。uri的权威是用来确定主机、端口等对于一个文件系统
<property> <name>fs.defaultFS</name> <value>hdfs://172.18.11.2:9000</value> </property>
dfs.name.dir
<property> <name>dfs.name.dir</name> <value>/pvdata/hadoopdata/name/,/opt/hadoopdata/name/</value> </property>
dfs.data.dir
<property> <name>dfs.data.dir</name> <value>/dev/sda3/hadoopdata/,/dev/sda1/hadoopdata/</value> </property>
hadoop-env.sh里面:
HADOOP_LOG_DIR日志存放的目录
XML文件里主要的参数:
core-site.xml
fs.default.name,namenodeRPC服务运行的地址和端口,默认端口是8020,一般它的值是hdfs:开头指向namenode加端口号
hadoop.tmp.dir,默认是放在/tmp的一个子目录,建议设置在别的目录
手工备份namenode的办法:只要备份dfs.name.dir目录下的两个文件fsimageandedits文件
可以通过WEb界面备份,方法是:
curl http://master1:50070/getimage?getimage=1>$BACKUP_DIR/fsimage
curl http://master1:50070/getimage?getedit=1>$BACKUP_DIR/edits
恢复的时候,先停掉namenode:hadoop-deamon.shstopnamenode
把文件拷回去,再启动:hadoop-deamon.shstartnamenode
一般要用hadoopfsck检查完整性。
现在新版的hadoop这个属性改为dfs.namenode.name.dir