0


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

hadoopd的环境搭建

首先在官网下载JDK和Hadoop

Index of /dist/hadoop/common/hadoop-3.3.1 (apache.org)https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/

Java Archive Downloads - Java SE 8u211 and later (oracle.com)https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

登录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/

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

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

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

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

Hadoop的文件目录

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文件

执行此命令,最后程序会创建

output

文件夹,并在里面生成两个文件:

part-r-00000

_SUCCESS

_SUCCESS

是成功标志文件,

part-r-00000

是结果文件

wordcount

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

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

集群搭建

准备三台服务器

hadoop102

hadoop103

hadoop104

,关闭防火墙、设置静态IP、配置主机名称和主机映射。安装JDK、Hadoop,配置环境变量 (前面已经完成)

配置集群

hadoop102

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

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

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


成功将两个文件复制到Hadoop3

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

scp -r root@hadoop2:/opt/module/jdk1.8.0_271 ./ 拉取和复制建议都尝试一下

rsync远程同步工具

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

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

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

但是在执行的时候发现报错如下: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 

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

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 都能找到

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

ssh免密登录

因为脚本中使用了

ssh

命令和

rsync

命令去连接其他服务器,所以每台服务器都要输入两次密码,比较繁琐,可以配置ssh免密登录。

ssh免密登录原理图:

如果当前服务器使用

ssh

命令连接过其他服务器,那么在该用户家目录下就会生成一个

.ssh

文件夹,里面存有一个

known_hosts

文件,文件中保存的有该用户曾经使用

ssh

命令远程连接过的服务器。

配置

hadoop2、
hadoop3

hadoop4免密交互登录。在Hadoop2上
# 选择非对称加密算法为rsa算法
ssh-keygen -t rsa
# 然后一路回车即可

命令执行后,会在用户目录下的

.ssh

文件夹中生成一个公钥文件

id_rsa.pub

、一个私钥文件

id_rsa 

hadoop102

上的公钥

id_rsa.pub

拷贝到

hadoop3

hadoop4

进行免密之后,在

hadoop103

hadoop104

.ssh

文件夹中会多一个

authorized_keys

文件,里面记录了允许哪些客户机免密登录自己。

authorized_keys

文件中的内容其实就是

hadoop102

的公钥文件

id_rsa.pub

中的内容。另外,还需要对自己设置免密登录,否则

hadoop2

使用

ssh

连接 hadoop2` 本身时也需要密码。然后在

hadoop3

hadoop4

上也执行上述同样的操作,使集群中的几台服务器可以互相免密登录。 下面是配置完之后的测试显示正常:

配置文件配置
NameNode

SecondaryNameNode

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

ResourceManager

也很消耗内存,不要和

NameNode

SecondaryNameNode

配置在同一台机器上

Hadoop集群 = HDFS集群 + Yarn集

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

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

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

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** 将下表中的内容写在<configuration>中
 <!-- 指定NameNode的地址 -->
  <!-- core-defualt.xml中该项默认值为本地Linux路径,因为我们集群要用HDFS,所以要改成HDFS路径  -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop2:8020</value>
  </property>

  <!-- 指定hadoop数据的存储目录 -->
  <!-- core-default.xml中该项默认值为 /tmp/hadoop-${user.name},因为 /tmp在Linux中是临时目录,一段时间(默认一个月)会删除,所以要调整为自定义目录 -->
  <!-- 我们指定的data文件夹如果不存在,hadoop会自动进行创建 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-3.2.3/data</value>
  </property>

  <!-- 配置HDFS网页登录使用的静态用户为tengyer(即hdfs中的用户) -->
  <!-- 如果不配置,那么在浏览器中默认的是Mr.who,该用户删除hdfs文件时,会提示无权限。-->
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>tengyer</value>
  </property>

配置HDFS的

hdfs-site.xml:**vim**

**hdfs-site.xml **将下表中的内容写在<configuration>中
  <!-- NameNode对外暴露的Web端访问地址 -->
  <property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop2:9870</value>
  </property>

  <!-- 2NN 对外暴露的Web端访问地址(2NN安装在hadoop104上) -->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop4:9868</value>
  </property>

配置Yarn的

yarn-site.xml

**vim yarn-site.xml** 将下表中的内容写在<configuration>中
<!-- 指定MR走shuffle -->
  <!-- 在yarn-default.xml中该项默认值为空,但是官方推荐使用mapreduce_shuffle -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 指定ResourceManager的地址(ResourceManager安装在hadoop103) -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop103</value>
  </property>

  <!-- 环境变量的继承 -->
  <!-- Hadoop3.1.x需要配置,因为yarn-default.xml中该项默认值缺少了HADOOP_MAPRED_HOME -->
  <!-- 到了Hadoop3.2.x就不需要再配置该项了,可以直接使用yarn-default.xml中的默认值 -->
  <property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  </property>

配置MapReduce的

mapred-site.xml

:**vim **

**mapred-site.xml** 将下表中的内容写<configuration>中
 <!-- 指定MapReduce程序运行在Yarn上 -->
  <!-- mapred-default.xml中该项默认值是local,即在本地运行 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

配置完成后,将

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

两个文件夹

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

启动HDFS 及遇到的问题

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

解决方案:

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

vim /etc/profile.d/my_env.sh

添加内容:

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

启动完毕后,在三台服务器上依次使用

jps

查看其上面运行的 hdfs、yarn 的java进程

启动YARN及遇到的问题

hadoop2

服务器上启动集群

./start-dfs.sh

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

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

浏览器访问NameNode

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

浏览器访问NameNode:

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

启动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

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

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

集群崩溃时的处理

集群中如果有服务器 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

文件中添加如下配置:

<!-- 在configuration标签中加入如下配置 -->

<!-- 配置历史服务器的内部服务端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop2:10020</value>
</property>
<!-- 配置历史服务器暴露的web地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop2:19888</value>
</property>

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

hadoop3

节点上重启 Yarn:sbin/stop-yarn.sh sbin/start-yarn.sh

hadoop2

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

测试historyserver

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

配置日志聚集功能

我们配置的历史服务器虽然可以查看到历史 job 的运行信息,但是如果点击后面的

logs

链接查看其详细日志,却无法查看,提示

Aggregation is not enabled.

(日志聚集功能未开启)。我们开启了日志聚集功能后,可以很方便的查看程序运行详情,方便开发调试。开启日志聚集功能,需要重新启动 NodeMananger、ResourceMananger、HistoryServer。**在

hadoop2

yarn-site.xml

中加入配置:vim

yarn-site.xml

**

<!-- 在configuration中加入以下配置 -->

<!-- 配置日志聚集功能,yarn-default.xml中该项默认为false -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址,设置聚集到历史日志服务器上,方便查看 -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop2:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间:7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

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

hadoop2

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

hadoop3

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

hadoop2

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

集群的启停方式总结

整体启动、停止 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 $1 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

编写脚本,遍历集群中服务器调用

jps

查看上面的进程启动情况 :

#!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
  echo ================= $host =================
  ssh $host jps
done

将编写好的这两个脚本分发给其他服务器: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

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基本命令

**<local-src>: **这是本地文件的路径或目录的位置,它是要复制到HDFS的文件或目录的源路径。
**<hdfs-destination>: **这是HDFS中目标路径的位置,表示文件或目录将被复制到HDFS的位置。

上传文件到HDFS:
hadoop fs -copyFromLocal <local-src> <hdfs-destination>
从HDFS下载文件:
hadoop fs -copyToLocal <hdfs-src> <local-destination>
在HDFS上创建目录:
hadoop fs -mkdir <hdfs-directory>
在HDFS上删除文件或目录:
hadoop fs -rm <hdfs-path>
列出HDFS上的文件和目录:
hadoop fs -ls <hdfs-path>
查看HDFS上文件的内容:
hadoop fs -cat <hdfs-file>
移动文件或目录到另一个位置:
hadoop fs -mv <source-path> <destination-path>
合并本地文件到HDFS:
hadoop fs -put <local-src> <hdfs-destination>
从HDFS中拷贝文件到本地文件系统:
hadoop fs -get <hdfs-src> <local-destination>
设置HDFS文件的副本数:
hadoop fs -setrep -w <replication-factor> <hdfs-file>
获取HDFS上文件或目录的摘要信息:
hadoop fs -du -s <hdfs-path>
将本地文件系统上的所有文件拷贝到HDFS目录:
hadoop fs -copyFromLocal <local-src>/ <hdfs-destination>*
查看HDFS上的块信息:
hadoop fs -blocksize <hdfs-file>

查看整个文件系统的磁盘空间使用情况:
hdfs dfs -df -h /
查看特定目录的磁盘空间使用情况:
hdfs dfs -du -h /path/to/directory
查看磁盘上最大的文件或目录:
hdfs dfs -du -h / | sort -rh | head -n 10


本文转载自: https://blog.csdn.net/weixin_45837583/article/details/135490962
版权归原作者 weixin_45837583 所有, 如有侵权,请联系我们删除。

“HADOOP 保姆级环境搭建及知识总结”的评论:

还没有评论