HDFS 产出背景及定义
随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。
HDFS 只是分布式文件管理系统中的一种。
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
HDFS 的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。更多关于大数据 Hadoop系列的学习文章,请参阅:进击大数据系列,本系列持续更新中。
就是Master,它是一个主管、管理者。
就是Slave。NameNode下达命令,DataNode执行实际的操作。
就是客户端
并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
更多关于大数据 Hadoop系列的学习文章,请参阅:进击大数据系列,本系列持续更新中。
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。
思考:为什么块的大小不能设置太小,也不能设置太大?
总结:HDFS 块的大小设置主要取决于磁盘传输速率。
更多关于大数据 Hadoop系列的学习文章,请参阅:进击大数据系列,本系列持续更新中。
根据官网的说明,选择的是最新的文抵挡版本hadoop-3.3.0.tar.gz
。
举例A机器要免密登录B机器。则首先需要把A机器的公钥id_rsa.pub 传送给B机器,B机器将A机器的公钥内容放置本机的文件authorized_keys中。然后就可以在A机器上使用命令 “ssh 机器名”进行访问了。
涉及到的命令如下:
#hostname用于显示或者设置该主机的名字
[root@cuiyaonan2000 soft] hostname 机器名字
#生成本机的公钥与私钥
[root@cuiyaonan2000 soft] ssh-keygen -t rsa
#转移到公钥私钥目录
[root@cuiyaonan2000 soft] cd ~/.ssh/
#生成authorized_keys 文件用于存储公钥内容
[root@cuiyaonan2000 soft] touch authorized_keys
#修改权限
[root@cuiyaonan2000 soft] chmod 600 authorized_keys
#将其它主机的公钥内容 追加到authorized_keys 中
[root@cuiyaonan2000 soft] cat id_rsa.pub >> authorized_keys
根据官网:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html 的要求我们可以看到起详细的需求。
如下是为Hadoop配置环境变量,jdk就不包含在内了。
#下载hadoop,建议使用迅雷下载,比较大有500m左右
[root@cuiyaonan2000 soft] wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/hadoop-3.3.0.tar.gz
#解压hadoop
[root@cuiyaonan2000 soft] tar -zxvf hadoop-3.3.0.tar.gz
#编辑profile文件
[root@cuiyaonan2000 soft] vi /etc/profile
#增加如下的内容
export HADOOP_HOME=/soft/hadoop/hadoop-3.3.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-DJava.library.path=$HADOOP_HOME/lib"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
[root@cuiyaonan2000 soft] source /etc/profile
#查看hadoop 是否配置成功
[root@cuiyaonan2000 soft] hadoop version
进入目录:hadoop-3.3.0/etc/hadoop
修改 hadoop-env.sh
文件 ,增加内容 export JAVA_HOME=/soft/jdk/jdk1.8.0_271
。
进入目录:hadoop-3.3.0/etc/hadoop
修改 core-site.xml
文件,并在<configuration>
中增加如下的内容。
如下的hadoop.tmp.dir
的配置要注意。
<!--
1.配置默认采用的文件系统。
(由于存储层和运算层松耦合,要为它们指定使用hadoop原生的分布式文件系统hdfs。
value填入的是uri,参数是 分布式集群中主节点的地址 : 指定端口号)
2.其中localhost可以换成机器名称
-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000/</value>
</property>
<!--
配置hadoop的公共目录
(指定hadoop进程运行中产生的数据存放的工作目录,NameNode、DataNode等就在本地工作目录下建子目录存放数据。但事实上在生产系统里,NameNode、DataNode等进程都应单独配置目录,而且配置的应该是磁盘挂载点,以方便挂载更多的磁盘扩展容量)
-->
<property>
<name>hadoop.tmp.dir</name>
<value>/soft/data_hadoop</value>
</property>
##设置文件拆分成blocks副本备份的数量
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
#设置NameNode数据存储目录
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/soft/namenode</value>
</property>
#设置DataNode数据存储目录
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/soft/datanode</value>
</property>
#这里在不加的话 hdfs的网站访问不了
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
#这里可以考虑取消写入权限限制否则只能通过命令hadoop fs -chmod 777 /soft/hadoop/warehouse/student 来增加针对某个目录的写权限
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<!--
指定MapReduce程序应该放在哪个资源调度集群上运行。若不指定为yarn,那么MapReduce程序就只会在本地运行而非在整个集群中运行。
-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 1.指定yarn集群中的老大(就是本机) -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!-- 2.配置yarn集群中的重节点,指定map产生的中间结果传递给reduce采用的机制是shuffle
-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 这个就是配置yarn的管理界面 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>mzdapip:8088</value>
<description>配置外网只需要替换外网ip为真实ip,否则默认为 localhost:8088</description>
</property>
必须在启动的时候先执行namenode 的格式化。否则会有问题。
[root@cuiyaonan2000 soft] hadoop namenode -format
start-dfs.sh
#启动dfs,对应的关闭是stop-dfs.sh
启动后可以访问管理界面:http://10.1.80.187:50070/dfshealth.html#tab-overview
start-yarn.sh
#启动yarn,对应的关闭是stop-yarn.sh
启动后可以访问管理界面:http://10.1.80.187:8088/cluster
yarn-daemon.sh start resourcemanager
#启动yarn管理节点
yarn-daemon.sh start nodemanager
#启动yarn运算节点
start-all.sh
#一键全部启动
如果遇到如下的问题
对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:
HDFS_DATANODE_USER=rootHADOOP_SECURE_DN_USER=hdfsHDFS_NAMENODE_USER=rootHDFS_SECONDARYNAMENODE_USER=root
对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:
#!/usr/bin/env bashYARN_RESOURCEMANAGER_USER=rootHADOOP_SECURE_DN_USER=yarnYARN_NODEMANAGER_USER=root
成功启动dfs的进程截图如下所示:
成功启动yarn的进程截图如下所示:
<!--
1.配置默认采用的文件系统。
(由于存储层和运算层松耦合,要为它们指定使用hadoop原生的分布式文件系统hdfs。
value填入的是uri,参数是 分布式集群中主节点的地址 : 指定端口号)
2.其中localhost可以换成机器名称
-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000/</value>
</property>
<!--
配置hadoop的公共目录
(指定hadoop进程运行中产生的数据存放的工作目录,NameNode、DataNode等就在本地工作目录下建子目录存放数据。但事实上在生产系统里,NameNode、DataNode等进程都应单独配置目录,而且配置的应该是磁盘挂载点,以方便挂载更多的磁盘扩展容量)
-->
<property>
<name>hadoop.tmp.dir</name>
<value>/soft/data_hadoop</value>
</property>
这里就是将原来的内容进行增删,单机的话是同时存在 DataNode 和 NameNode 的.现在是多机。所以现在2者并不需要并存,那是否预示着如果存在dfs.datanode.data.dir就表示有datanode,没有就不会创建datanode????
<property>
<!-- 主节点地址 -->
<name>dfs.namenode.http-address</name>
<value>mzdapip:50070</value>
</property>
##设置文件拆分成blocks副本备份的数量
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
#设置NameNode数据存储目录
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/soft/namenode</value>
</property>
#设置DataNode数据存储目录
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/soft/datanode</value>
</property>
#这里在不加的话 hdfs的网站访问不了
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
<!--
指定MapReduce程序应该放在哪个资源调度集群上运行。若不指定为yarn,那么MapReduce程序就只会在本地运行而非在整个集群中运行。
-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>mzdapip:54311</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>mzdapip:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>mzdapip:19888</value>
</property>
#指定yarn的ResourceManager管理界面的地址,不配的话,Active Node始终为0
#这里必须添加
<property>
<name>yarn.resourcemanager.hostname</name>
<value>mzdapip</value>
</property>
<!-- 2.配置yarn集群中的重节点,指定map产生的中间结果传递给reduce采用的机制是shuffle
-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 这个就是配置yarn的管理界面 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>mzdapip:8088</value>
<description>配置外网只需要替换外网ip为真实ip,否则默认为 localhost:8088</description>
</property>
从主节点上启动,会去启动这里面包含的子节点。这里增加工作节点的ip或者机器名,如:
并且主节点上只会启动如下的服务:
子节点上启动的服务如下所示:只有DataNode,NodeManager
无论有多少台服务器,他们的hadoop存放的绝对路径必须一致,否则不能从主节点上去启动其它的服务。更多关于大数据 Hadoop系列的学习文章,请参阅:进击大数据系列,本系列持续更新中。
hadoop fs -cat URI [URI …]
− hadoop fs -cat hdfs://host1:port1/file1
hdfs://host2:port2/file2
− hadoop fs -cat file:///file3
/user/hadoop/file4
hadoop fs -put/copyFromLocal UR
− hadoop fs -put localfile.txt /user/hadoop/hadoopfile.txt
− hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
− hadoop fs -put localfile hdfs://host:port/hadoop
hadoop fs -get/copyToLocal [-ignorecrc] [-crc] URI < localsrc>
− hadoop fs -get /user/hadoop/hadoopfile localfile
− hadoop fs -get hdfs://host:port/user/hadoop/file localfile
hadoop fs -ls/lsr -h UR
hadoop fsck [GENERIC_OPTIONS] [- move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]
参考文章:blog.csdn.net/qq_46092061/article/details/ 120129801 blog.csdn.net/weixin_44560620/article/ details/117424778 blog.csdn.net/cuiyaonan2000/article/ details/115480968