大数据-HDFS-实操

问题:

为啥配置文件只需要指定主服务,无须指定从服务?

为啥需要客户端节点?

怎么逐一启动HDFS和统一启动HDFS?

咋在HDFS中上传文件?

 

master上部署主服务NameNode;

slave上部署从服务DataNode;

client上部署HDFS客户端。

 

 HDFS基本特性:

  1. HDFS 分布式文件系统,为大数据其他组件提供了存储功能。具有高容错、高可靠、可扩展、高吞吐率的特征。
  2. 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

这个参数用于确定将HDFS文件系统的元信息保存在什么目录下。
如果这个参数设置为多个目录,那么这些目录下都保存着元信息的多个备份。
如:
<property>
    <name>dfs.name.dir</name>
    <value>/pvdata/hadoopdata/name/,/opt/hadoopdata/name/</value>
</property>

   

dfs.data.dir 

这个参数用于确定将HDFS文件系统的数据保存在什么目录下。
可以将这个参数设置为多个分区上的目录,即可将HDFS建立在不同分区上。
如:
<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

 

启动HDFS服务

验证服务

 

posted @ 2020-12-08 20:20  linuxws  阅读(286)  评论(0编辑  收藏  举报