上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

HADOOP 保姆级环境搭建及知识总结

guduadmin11天前

hadoopd的环境搭建

首先在官网下载JDK和Hadoop

Index of /dist/hadoop/common/hadoop-3.3.1 (apache.org)HADOOP 保姆级环境搭建及知识总结,icon-default.png?t=N7T8,第1张https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/

Java Archive Downloads - Java SE 8u211 and later (oracle.com)HADOOP 保姆级环境搭建及知识总结,icon-default.png?t=N7T8,第1张https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

HADOOP 保姆级环境搭建及知识总结,第3张

HADOOP 保姆级环境搭建及知识总结,第4张登录Linux到root用户下,创建两个文件目录,例如:module,software两个文件目录,通过FinalShell将两下载好的两个文件上传到module目录下,通过命令将两个文件解压到创建的另外一个目录中去

tar -zxvf jdk-8u271-linux-x64.tar.gz -C /opt/module/ 
tar -zxvf hadoop-3.3.1.tar.gz -C /opt/module/

HADOOP 保姆级环境搭建及知识总结,第5张

解压完两个文件之后,配置环境变量。

sudo vim /etc/profile.d/my_env.sh

HADOOP 保姆级环境搭建及知识总结,第6张

配置完上面的两个路径,执行:source /etc/profile  刷新一下我们配置的文件,分别写Java查看配置jdk是否成功,Hadoop查看配置Hadoop是否成功

HADOOP 保姆级环境搭建及知识总结,第7张

HADOOP 保姆级环境搭建及知识总结,第8张

当出现这样的内容说明我们创建成功了。

 Hadoop的文件目录

HADOOP 保姆级环境搭建及知识总结,第9张

bin:存放Hadoop 的命令,常用命令: hadoop、hdfs、mapred、yarn等,用户可以使用这些脚本管理和使用Hadopop.

etc:存放着大量的配置文件

nclude:对外提供的编程库的.h头文件(具体动态库和静态库在lib目录中),常用于C++程序访问HDFS或者编写MapReduce程序

lib / native:对外native存放的是本地动态链接库

libexec:各个服务对外用的shell配置文件所在目录,可用于配置日志输出、启动参数等基本信息

sbin:存放一些集群相关的命令,例如:start-dfs.sh、start-yarn.sh

share:说明文档、各个模块编译后的jar包、官方写的java调用hadoop示例程序

工作模式

本地模式(Local/Standalone Mode):单台服务器,数据存储在本地。用来演示案例

伪分布式模式(Pseudo-Distributed Mode)单台服务器,数据存储在HDFS上。用于测试生产环境

完全分布式模式(Fully-Distributed Mode):多台服务器组成集群,数据存储在HDFS上,多台服务器工作。在企业中大量使用。

本地模式(WordCount)

创建在Hadoop文件下面创建一个wcinput文件夹

在wcinput文件下创建一个word.txt文件

编辑word.txt文件

HADOOP 保姆级环境搭建及知识总结,第10张

 执行此命令,最后程序会创建output文件夹,并在里面生成两个文件:part-r-00000、_SUCCESS。_SUCCESS是成功标志文件,part-r-00000是结果文件

HADOOP 保姆级环境搭建及知识总结,第11张

wordcount可以对文档中每个字符串进行出现次数统计 

HADOOP 保姆级环境搭建及知识总结,第12张

HADOOP 保姆级环境搭建及知识总结,第13张

结果输出文件夹为 output。执行程序前该output文件夹不能存在,程序会自动创建该文件夹,如果存在会抛出异常

集群搭建

准备三台服务器 hadoop102、hadoop103、hadoop104,关闭防火墙、设置静态IP、配置主机名称和主机映射。安装JDK、Hadoop,配置环境变量 (前面已经完成)

   配置集群

在 hadoop102上已经搭建好了 jdk、hadoop,所以可以直接复制到其他服务器上:

scp 可以实现服务器与服务器之间的数据拷贝

HADOOP 保姆级环境搭建及知识总结,第14张

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).lost connection当出现这种错误,说明权限不够。编辑 /etc/ssh/sshd_config  将PasswordAuthentication 前的的#去掉,保存退出后重启ssh:systemctl restart sshd.service 并改成开机自启systemctl enable sshd.service

HADOOP 保姆级环境搭建及知识总结,第15张
HADOOP 保姆级环境搭建及知识总结,第16张HADOOP 保姆级环境搭建及知识总结,第17张

成功将两个文件复制到Hadoop3 

HADOOP 保姆级环境搭建及知识总结,第18张

在hadoop4上使用scp从hadoop2上拉取:scp -r root@hadoop2:/opt/module/hadoop-3.3.1 ./

scp -r root@hadoop2:/opt/module/jdk1.8.0_271 ./  拉取和复制建议都尝试一下
HADOOP 保姆级环境搭建及知识总结,第19张

rsync远程同步工具

rrsync:用于备份和镜像。特点速度快、避免复制相同内容和支持符号链接的优点。rsync和scp区别:rsync复制文件的速度要比scp快,rsync只对差异文件做更新,scp是把所有文件都复制过去

rsync -av  要拷贝的文件路径/名称  目的用户@主机:目的路径/名称
# -a :归档拷贝
# -v :显示复制过程
# --delete 当目的路径文件或文件夹比源路径多(源路径删除了文件),删除目的路径的文件

例如:删除Hadoop3中/opt/hadoop-3.3.1/wcinput 

HADOOP 保姆级环境搭建及知识总结,第20张但是在执行的时候发现报错如下:rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]  发现是没有权限 通过chomd 777赋权和升级了rsync,执行命令还是报错。最后用pwd 查看当前路径以及去hadoop3里也查看了路径。选择粘贴路径才成功  。问题处在路径上(我使用了绝对路径,相对路径出错解决不了)

chmod 777 /opt/module/hadoop-3.3.1
yum -install rsync 

HADOOP 保姆级环境搭建及知识总结,第21张

 rsync -av /opt/module/hadoop-3.3.1 root@hadoop3:/opt/module/hadoop-3.3.1/

HADOOP 保姆级环境搭建及知识总结,第22张

xsync

可以编写一个shell脚本调用 rsync 命令,将文件同步到所有服务器的相同目录下。 在/bin中新建一个shell脚本文件 xsync,内容如下:

#!/bin/bash
# 1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Argument
  exit
fi
# 2. 遍历集群所有机器
for host in hadoop2 hadoop3 hadoop4
do
  echo ================== $host =====================
  # 3. 遍历所有目录,逐个发送
  for file in $@
  do
    # 4. 判断文件是否存在
    if [ -e $file ]
      then
        # 5. 获取父目录
        # -P 如果cd后面是一个软链接,-P可以进入软链接指向的真正文件夹
        pdir=$(cd -P $(dirname $file); pwd)
        # 6. 获取当前文件名称
        fname=$(basename $file)
        # -p 如果存在则不创建,如果不存在则创建
        ssh $host "mkdir -p $pdir"
        rsync -av $pdir/$fname $host:$pdir
      else
        echo $file does not exists!
    fi
  done
done

 比如环境变量配置文件 /etc/profile.d/my_env.sh,可以使用sudo进行同步:这样Hadoop3,Hadoop4 都能找到

HADOOP 保姆级环境搭建及知识总结,第23张

此外个别使用sudo时,因为xsync不在root的命令列表,所以需要使用./进行调用

sudo ./bin/xsync /etc/profile.d/my_env.sh

ssh免密登录

因为脚本中使用了 ssh 命令和 rsync命令去连接其他服务器,所以每台服务器都要输入两次密码,比较繁琐,可以配置ssh免密登录。

ssh免密登录原理图:

HADOOP 保姆级环境搭建及知识总结,第24张

 如果当前服务器使用ssh命令连接过其他服务器,那么在该用户家目录下就会生成一个 .ssh文件夹,里面存有一个 known_hosts 文件,文件中保存的有该用户曾经使用ssh命令远程连接过的服务器。

配置hadoop2、hadoop3、hadoop4免密交互登录。在Hadoop2上

# 选择非对称加密算法为rsa算法
ssh-keygen -t rsa
# 然后一路回车即可

HADOOP 保姆级环境搭建及知识总结,第25张

命令执行后,会在用户目录下的 .ssh文件夹中生成一个公钥文件 id_rsa.pub、一个私钥文件 id_rsa 将hadoop102上的公钥id_rsa.pub拷贝到hadoop3、hadoop4:

HADOOP 保姆级环境搭建及知识总结,第26张

进行免密之后,在 hadoop103、hadoop104的 .ssh 文件夹中会多一个 authorized_keys文件,里面记录了允许哪些客户机免密登录自己。authorized_keys文件中的内容其实就是 hadoop102的公钥文件 id_rsa.pub中的内容。另外,还需要对自己设置免密登录,否则 hadoop2 使用 ssh 连接 hadoop2` 本身时也需要密码。然后在 hadoop3、 hadoop4上也执行上述同样的操作,使集群中的几台服务器可以互相免密登录。 下面是配置完之后的测试显示正常:

 HADOOP 保姆级环境搭建及知识总结,第27张

配置文件配置

NameNode 和 SecondaryNameNode 不要安装到同一台服务器上 

ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode配置在同一台机器上

Hadoop集群 = HDFS集群 + Yarn集

Yarn集群和HDFS集群:逻辑上分离、物理上在一起。

逻辑上,Yarn集群的启动和HDFS集群的启动并没有直接的依赖关系。

物理上,Yarn集群、HDFS集群,都是在同一个安装了Hadoop的集群内。

HADOOP 保姆级环境搭建及知识总结,第28张

Hadoop配置文件分为两类:默认配置文件和自定义配置文件。core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在 hadoop-3.3.1/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

配置核心文件 core-site.xml:vim core-site.xml 将下表中的内容写在

 
  
  
    fs.defaultFS
    hdfs://hadoop2:8020
  
  
  
  
  
    hadoop.tmp.dir
    /opt/module/hadoop-3.2.3/data
  
  
  
  
    hadoop.http.staticuser.user
    tengyer
  

配置HDFS的hdfs-site.xml:vim  hdfs-site.xml 将下表中的内容写在

  
  
    dfs.namenode.http-address
    hadoop2:9870
  
  
  
    dfs.namenode.secondary.http-address
    hadoop4:9868
  

配置Yarn的yarn-site.xml:vim yarn-site.xml 将下表中的内容写在


  
  
    yarn.nodemanager.aux-services
    mapreduce_shuffle
  
  
  
    yarn.resourcemanager.hostname
    hadoop103
  
  
  
  
  
    yarn.nodemanager.env-whitelist
    JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
  

配置MapReduce的mapred-site.xml:vim mapred-site.xml 将下表中的内容写

 
  
  
    mapreduce.framework.name
    yarn
  

配置完成后,将hadoop102的这些配置同步分发给hadoop3、hadoop4: 

xsync hadoop/
配置workers

workers内容即为集群中的各台主机,默认的是localhost。因为我们使用集群方式,所以可以删掉localhost,然后把几台主机都配置进来。需要在HADOOP-3.3.1/etc/hadoop/workers中将几台节点都添加进去:该文件将来会作为hadoop集群启动的脚本一部分,所以主机名后面不能有空格、结尾也不能有空行

hadoop2
hadoop3
hadoop4

将works文件分发给其他服务器:xsync works

启动集群

初始化

如果是第一次启动集群,需要进行初始化操作,在hadoop2节点上格式化NameNode。执行命令:

hdfs namenode -format

初始化完毕后,文件夹中生成 data和logs两个文件夹

HADOOP 保姆级环境搭建及知识总结,第29张

HADOOP 保姆级环境搭建及知识总结,第30张

HADOOP 保姆级环境搭建及知识总结,第31张

 下面就是配置完查到的主机信息:

HADOOP 保姆级环境搭建及知识总结,第32张

启动HDFS 及遇到的问题

在启动Hadoop时,出现如下错误,是因为我们以 root 用户身份操作 HDFS 的 Namenode,但是没有定义 HDFS_NAMENODE_USER 环境变量;

HADOOP 保姆级环境搭建及知识总结,第33张

 解决方案:

在环境变量添加配置:完成之后在其他几台的Hadoop上也将环境变量添加,会解决yarn启动问题

vim /etc/profile.d/my_env.sh

添加内容:HADOOP 保姆级环境搭建及知识总结,第34张

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

 再重启一下配置,再启动hdfs就好了,问题也解决了。

source /etc/profile

HADOOP 保姆级环境搭建及知识总结,第35张

启动完毕后,在三台服务器上依次使用jps查看其上面运行的 hdfs、yarn 的java进程

HADOOP 保姆级环境搭建及知识总结,第36张

启动YARN及遇到的问题

在 hadoop2服务器上启动集群

./start-dfs.sh

启动失败,遇到如下错误:

HADOOP 保姆级环境搭建及知识总结,第37张

 是因为我们自己配的环境变量有问题。参考启动HDFS步骤和添加内容一致:

HADOOP 保姆级环境搭建及知识总结,第38张

浏览器访问NameNode

关于在浏览器访问NameNode,我们配置了Hadoop:9870 这是普通用户的访问方式,但是对于root用户浏览器访问NameNode 可以在网页写成    root用户的静态ip:9870  以下截图亲测有效。如果不能成功  ,查看防火墙:systemctl status firewalld  状态, 如果是active那就说明是防火墙阻止了浏览器访问。关闭防火墙再试试:systemctl stop firewalld 再次访问就可以成功。关闭状态:

HADOOP 保姆级环境搭建及知识总结,第39张

浏览器访问NameNode:

HADOOP 保姆级环境搭建及知识总结,第40张

在Hadoop2 上创建文件:  hdfs fs -mkdir /wincput   到浏览器上查看 创建目录

HADOOP 保姆级环境搭建及知识总结,第41张

启动YARN

根据集群规划,我们的ResourceManager节点为 hadoop3。在hadoop3上启动YARN:sbin/start-yarn.sh

    wordcount

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examoles-3.3.1.jar wordcount /wcinput wcoutput

 wordcount 如果报错,使用chmod +x赋权。

chmod +r /opt/module/hadoop-3.3.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar

再次报错使用相对路径就会成功。绝对路经没有扫描到。

HADOOP 保姆级环境搭建及知识总结,第42张

 执行完就能在浏览器上查到运行IP了

HADOOP 保姆级环境搭建及知识总结,第43张

集群崩溃时的处理

集群中如果有服务器 DataNode服务被kill或异常终止了,或者节点的data文件夹被删除了(只删除一两台节点不影响集群,因为hdfs有3个备份,所以需要三台服务器的data都被删掉),此时集群便属于崩溃状态。

如果需要重新格式化NameNode,则可以进行以下操作:

在hadoop103上关闭集群Yarn,在hadoop102上关掉集群hdfs

sbin/stop-yarn.sh
sbin/stop-dfs.sh

删除所有节点上的 data、logs文件夹

rm -rf /opt/module/hadoop-3.3.1/data
rm -rf /opt/module/hadoop-3.3.1/logs

重新进行NameNode格式化

hdfs namenode -format

如果不删除所有节点上的data、logs,就直接重启hdfs或者进行NameNode格式化,那么NameNode依然无法启动。因为两次NameNode格式化产生的namespaceID不同,而namespaceID是和DataNode中的版本号唯一绑定的。如果DataNode中的数据没有被清空,NameNode又格式化产生了新的namespaceID,和DataNode中的版本号无法绑定,就会造成NameNode无法启动。

配置历史服务器

为了查看程序的历史运行状况,需要配置一下历史服务器。在hadoop2

vim  mapred-site.xml

文件中添加如下配置:




    mapreduce.jobhistory.address
    hadoop2:10020



    mapreduce.jobhistory.webapp.address
    hadoop2:19888

将配置信息复制分发到其他服务器:

HADOOP 保姆级环境搭建及知识总结,第44张 hadoop3节点上重启 Yarn:sbin/stop-yarn.sh     sbin/start-yarn.sh

HADOOP 保姆级环境搭建及知识总结,第45张

 在hadoop2上启动历史服务器进程:mapred --daemon start historyserver

HADOOP 保姆级环境搭建及知识总结,第46张

测试historyserver

到/opt/module/hadoop-3.3.1/share/hadoop/mapreduce路径下执行语句:hadoop jar hadoop-mapreduce-examples-3.3.1.jar wordcount /wcinput /wcoutput   在浏览器上查看:

HADOOP 保姆级环境搭建及知识总结,第47张

配置日志聚集功能

HADOOP 保姆级环境搭建及知识总结,第48张 我们配置的历史服务器虽然可以查看到历史 job 的运行信息,但是如果点击后面的logs链接查看其详细日志,却无法查看,提示 Aggregation is not enabled.(日志聚集功能未开启)。我们开启了日志聚集功能后,可以很方便的查看程序运行详情,方便开发调试。开启日志聚集功能,需要重新启动 NodeMananger、ResourceMananger、HistoryServer。在hadoop2的 yarn-site.xml 中加入配置:vim yarn-site.xml




    yarn.log-aggregation-enable
    true



    yarn.log.server.url
    http://hadoop2:19888/jobhistory/logs



    yarn.log-aggregation.retain-seconds
    604800

然后分发给其他服务器:xsync yarn-site.xml

在hadoop2上停止历史服务器:mapred --daemon stop historyserver

在hadoop3上重启Yarn:sbin/stop-yarn.sh     sbin/start-yarn.sh

hadoop2上启动历史服务器:mapred --daemon start historyserver

HADOOP 保姆级环境搭建及知识总结,第49张

集群的启停方式总结

整体启动、停止 HDFS:sbin/start-dfs.sh   sbin/stop-dfs.sh
整体启动、停止 YARN:sbin/start-yarn.sh   sbin/stop-yarn.sh

 分别启动、停止 HDFS 组件:

hdfs --daemon start/stop namenode/datanode/secondarynamenode

启动、停止YARN组件:

yarn --daemon start/stop resourcemanager/nodemanager

 在Hadoop-3.3.1的bin目录下编写shell脚本:vim myhadoop.sh   集中启动、停止:

#!/bin/bash
if [ $# -lt 1 ]
then
  echo "No args Input..."
  exit;
fi
case  in
"start")
  echo "============= 启动hadoop集群 ======================"
  echo "------------- 启动 hdfs ---------------------------"
  ssh hadoop2 "/opt/module/hadoop-3.3.1/sbin/start-dfs.sh"
  echo "------------- 启动 yarn ---------------------------"
  ssh hadoop3 "/opt/module/hadoop-3.3.1/sbin/start-yarn.sh"
  echo "---------- 启动 historyserver ----------------------"
  ssh hadoop2 "/opt/module/hadoop-3.3.1/bin/mapred --daemon start historyserver"
;;
"stop")
  echo "================ 关闭hadoop集群 =========================="
  echo "-------------- 关闭historyserver ------------------------"
  ssh hadoop2 "/opt/module/hadoop-3.3.1/bin/mapred --daemon stop historyserver"
  echo "---------------- 关闭 yarn ------------------------------"
  ssh hadoop3 "/opt/module/hadoop-3.3.1/sbin/stop-yarn.sh"
  echo "---------------- 关闭 hdfs ------------------------------"
  ssh hadoop2 "/opt/module/hadoop-3.3.1/sbin/stop-dfs.sh"
;;
*)
  echo "Input Args Error..."
;;
esac

在编写完自定义脚本一定要赋权(777代表所有权限):chmod 777  myhadoop.sh

HADOOP 保姆级环境搭建及知识总结,第50张

HADOOP 保姆级环境搭建及知识总结,第51张

编写脚本,遍历集群中服务器调用jps查看上面的进程启动情况 :

#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
  echo ================= $host =================
  ssh $host jps
done

HADOOP 保姆级环境搭建及知识总结,第52张

将编写好的这两个脚本分发给其他服务器:xsync bin  注意回到上层目录再分发

Hadoop 3.x中常用端口:
  • HDFS NameNode 内部通讯端口:8020/9000/9820
    • HDFS NameNode 对用户的web查询端口:9870
      • Yarn查看任务运行情况的web页面端口:8088
        • 历史服务器对外暴露的web页面端口:19888

          HDFS 概述

          HDFS就是一种分布式文件管理系统(Hadoop分布式文件管理系统),用于存储文件,通过目录树来定位文件。有很多服务器联合起来实现其功能,集群中的服务器有各自的角色。适合一次写入、多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。

          优点:

          ●  高容错性:

          数据自动保存多个副本。多副本的形式提高容错性;同时,数据丢失有备份可自动恢复

          ●  适合处理大数据:能够处理数据规模达到GB、TB、甚至PB级别的数据;能够处理百万规模以上的文件数量;

          ●  可以构建在廉价机器上,通过多副本机制提高可靠性

          缺点:

          ●  不适合低延时数据访问,比如毫秒级的存储数据是做不到的(适合高吞吐量的批量数据读写,不适合交互式应用)

          ●  无法高效的对大量小文件进行存储。

          存储大量小文件的话,会占用NameNode大量的内存来存储文件目录和块信息,但是NameNode的内存是有限的;

          HDFS架构

          hadoop官网:https://hadoop.apache.org/docs

          HADOOP 保姆级环境搭建及知识总结,第53张

          NameNode

          NameNode:简称NN,就是Master,是一个管理者

          管理HDFS的名称空间,存放文件元数据

          配置副本策略

          管理数据块(block)映射信息(文件与数据块的映射、数据块与数据节点的映射)

          处理客户端读写请求

          DataNode

          DataNode:就是Slave。根据NameNode的指令执行实际的操作

          存储实际的数据块

          执行数据块的读/写操作

          Secondary NameNode

          Secondary NameNode:简称2NN。不是NameNode的热备,当NameNode宕机时,并不能马上替换NameNode提供服务

          服务NameNode,分担其工作量,比如定期合并 Fsimage 和 Edits,并推送给NameNode

          在紧急情况下,可辅助恢复NameNode

          上面的Hadoop官方绘制的HDFS架构图中并没有2NN,因为在企业中一般会将NameNode搭建成高可用,而不是使用2NN。

          Client:客户端

          文件切分。文件上传 HDFS 时,Client将文件切分成一个个的Block然后进行上传

          与NameNode交互,获取文件的位置信息

          与DataNode交互,读取或写入数据

          Client提供一些命令来管理HDFS,比如NameNode格式化

          Client可以通过一些命令来访问HDFS,比如对HDFS进行增删改查操作

          HDFS 文件块

          HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数 dfs.blocksize 来规定(位于 hdfs-default.xml中), hadoop 2.x、hadoop 3.x 中默认大小是 128M,hadoop 1.x中默认大小是 64M。

          数据块大小 128M,如果一个文件大小只有1kb,那么只会占用这个数据块中1kb大小的空间,剩余空间依然可以让其他文件进行占用。

          最佳的文件块大小配置:机械硬盘的HDFS数据块最佳大小为128M,固态硬盘的HDFS数据块最大小为256M。

          计算方式:

          1. 假设寻址时间为10ms,即查找到目标block的时间为10ms

          2. 根据实践,寻址时间为传输时间的 1% 时,系统为最佳状态。因此传输时间为 10ms / 0.01 = 1s。即花费10ms找到这个数据块,花费1s读完这个数据块的内容。

          3. 目前机械硬盘传输速度约 100M/s, 固态硬盘 200M/s - 300M/s

          4. 所以,对于机械硬盘:1s时间可以传输 100M数据,所以数据块设置为 128M 较为合适。对于固态硬盘,数据块大小设置为256M较为合适。

          数据块大小设置规则:

           如果数据块设置的太小,会增加寻址时间,程序一直在找块的开始位置

           如果数据块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间,导致程序在处理这块数据时比较缓慢

          HDFS特性

          主从架构:

          ● HDFS 集群是标准的 master/slave 主从架构集群

          ● 一般一个HDFS集群是由一个 NameNode 和一定数量的 DataNode组成

          ● NameNode 是 HDFS主节点,DataNode是 HDFS 从节点,两种角色各司其职,共同协调完成分布式的文件存储服务

          分块存储:

          ● HDFS中的文件在物理上是分块存储(block)的,默认大小是128M,不足128M则本身就是一块

          ● 块的大小可以通过配置参数来规定,参数位于 hdfs-site.xml中 dfs.blocksize

          副本机制:

          ● 文件的所有block都会有副本,副本数量可以在文件创建时指定,也可以在之后通过命令改变

          ● 副本数由参数 dfs.replication 控制,默认值是 3。 也就是除了本身外,还会额外再复制2份。

          元数据管理。

          在HDFS中,NameNode管理的元数据分为两类:

          ● 文件自身属性信息:文件名称、权限、修改时间、文件大小、复制因子、数据块大小

          ● 文件块位置映射信息:记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上

          namespace:

          ● HDFS支持传统的层次型文件组织结构。用户可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和Linux等大多数现有的文件系统类似

          ● NameNode负责维护文件系统的namespace名称空间,任何堆文件系统名称空间或属性的修改都将被namenode记录下来

          ● HDFS 会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件。

          数据块存储:

          ● 文件的各个block具体存储管理由DataNode节点承担

          ● 每一个block都可以在多个datanode上存储

          Hadoop基本命令

          : 这是本地文件的路径或目录的位置,它是要复制到HDFS的文件或目录的源路径。
          : 这是HDFS中目标路径的位置,表示文件或目录将被复制到HDFS的位置。

          上传文件到HDFS:
          hadoop fs -copyFromLocal

          从HDFS下载文件:
          hadoop fs -copyToLocal

          在HDFS上创建目录:
          hadoop fs -mkdir

          在HDFS上删除文件或目录:
          hadoop fs -rm

          列出HDFS上的文件和目录:
          hadoop fs -ls

          查看HDFS上文件的内容:
          hadoop fs -cat

          移动文件或目录到另一个位置:
          hadoop fs -mv

          合并本地文件到HDFS:
          hadoop fs -put

          从HDFS中拷贝文件到本地文件系统:
          hadoop fs -get

          设置HDFS文件的副本数:
          hadoop fs -setrep -w

          获取HDFS上文件或目录的摘要信息:
          hadoop fs -du -s

          将本地文件系统上的所有文件拷贝到HDFS目录:
          hadoop fs -copyFromLocal /*

          查看HDFS上的块信息:
          hadoop fs -blocksize

          查看整个文件系统的磁盘空间使用情况:

          hdfs dfs -df -h /

          查看特定目录的磁盘空间使用情况:

          hdfs dfs -du -h /path/to/directory

          查看磁盘上最大的文件或目录:

          hdfs dfs -du -h / | sort -rh | head -n 10

网友评论

搜索
最新文章
热门文章
热门标签