大道至简,知易行难
广阔天地,大有作为

Hadoop完全分布式集群搭建(3.1.2)-HDFS

从官网上下载Hadoop,当前最新版是3.1.2:

从官网下载Hadoop

从官网下载Hadoop

使用 tar zvxf hadoop-3.1.2.tar.gz解压,并在所有机器上使用 sudo vim /etc/environment修改环境变量:

将Hadoop加入到PATH中

将Hadoop加入到PATH中

主要修改点包括增加HADOOP_HOME和在PATH中增加Hadoop的bin目录:

修改/etc/hosts文件,将主机名和ip地址的映射填写进去:

增加hostname映射

增加hostname映射

一、建立SSH免密互访
Hadoop控制脚本依赖SSH来执行针对整个集群的操作,因此需要允许集群内部间各机器的SSH免密互访。首先在所有节点上执行生成SSH密钥对:

生成SSH密钥对

生成SSH密钥对

然后将各自的公钥拷贝到集群中其他机器的authorized_keys文件中,可用下面的笨方法:
①在master上将其自己的公钥放到authorized_keys里;
②在master上使用scp命令将authorized_keys放到其他主机的.ssh目录下;
③如有必要,修改authorized_keys权限,chmod 644 authorized_keys;
④依次在各台机器上重复上述过程;

添加SSH公钥

添加SSH公钥

我们也可以直接使用ssh-copy-id,ssh-copy-id命令会把本地主机的公钥复制到远程主机的authorized_keys文件中,同时给远程主机的用户主目录(home)和~/.ssh和~/.ssh/authorized_keys设置合适的权限:

使用ssh-copy-id将本地SSH公钥增加至远程服务器的authorized_keys文件中

使用ssh-copy-id将本地SSH公钥增加至远程服务器的authorized_keys文件中

总之,让每台机器的authorized_keys中均包含其他机器的公钥即可(authorized_keys文件是有格式的,能够方便地看出包含了哪些机器的公钥),然后就可以直接通过形如 ssh hadoop-dev-slave1之类的命令在master、slave1、slave2之间实现免密访问了:

authorized_keys

authorized_keys

二、HDFS的基础搭建
由于HDFS是一切的基础,因此我们首先来搭建HDFS。首先是namenode的配置文件:

core-site.xml中fs.defaultFS默认端口为8020,datanode也需要该配置文件。

然后是两个datanode的配置文件:

之后,格式化namenode系统:

格式化HDFS的namenode

格式化HDFS的namenode

格式化完成后可以看到在所配置的dfs.namenode.name.dir目录下生成了对应的文件:

格式化HDFS的namenode完成

格式化HDFS的namenode完成

我们可以按照官方文档在datanode上使用 [hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode 启动datanode,也可以通过在namenode上配置了etc/workers之后使用sbin中的脚本管理整个集群:

修改workers配置文件

修改workers配置文件

然后可以使用sbin文件夹中脚本操作整个集群,常用的主要有:

  • sbin/start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager
  • sbin/stop-all.sh 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager
  • sbin/start-dfs.sh 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode、DataNode
  • sbin/stop-dfs.sh 停止Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode
  • sbin/hadoop-daemons.sh start namenode 单独启动NameNode守护进程
  • sbin/hadoop-daemons.sh stop namenode 单独停止NameNode守护进程
  • sbin/hadoop-daemons.sh start datanode 单独启动DataNode守护进程
  • sbin/hadoop-daemons.sh stop datanode 单独停止DataNode守护进程
  • sbin/hadoop-daemons.sh start secondarynamenode 单独启动SecondaryNameNode守护进程
  • sbin/hadoop-daemons.sh stop secondarynamenode 单独停止SecondaryNameNode守护进程
  • sbin/start-yarn.sh 启动ResourceManager、NodeManager
  • sbin/stop-yarn.sh 停止ResourceManager、NodeManager
  • sbin/yarn-daemon.sh start resourcemanager 单独启动ResourceManager
  • sbin/yarn-daemons.sh start nodemanager 单独启动NodeManager
  • sbin/yarn-daemon.sh stop resourcemanager 单独停止ResourceManager
  • sbin/yarn-daemons.sh stopnodemanager 单独停止NodeManager
  • sbin/mr-jobhistory-daemon.sh start historyserver 手动启动jobhistory
  • sbin/mr-jobhistory-daemon.sh stop historyserver 手动停止jobhistory

但是,直接运行这些脚本是可能会报错:

start-dfs.sh或stop-dfs.sh报错

start-dfs.sh或stop-dfs.sh报错

我们分别修改start-dfs.sh或stop-dfs.sh,在其中的空白处增加:

修改start-dfs.sh及stop-dfs.sh

修改start-dfs.sh及stop-dfs.sh

分别修改start-yarn.sh或stop-yarn.sh,在其中的空白处增加:

修改start-yarn.sh及stop-yarn.sh

修改start-yarn.sh及stop-yarn.sh

start-dfs.sh脚本默认会向Hadoop询问namenode的主机名(同命令 hdfs getconf -namenodes),分别在这些namenode对应的每台主机上启动一个namenode和辅助namenode,再在workers中描述的每台主机上启动一个datanode。start-yarn.sh脚本类似,该脚本在本地启动一个资源管理器,再在workers中描述的每台主机上启动一个节点管理器。

运行 ./start-dfs.sh 命令后,我们就可以看到master和slave1、slave2上启动的进程了:

namenode进程

namenode进程

datanode进程1

datanode进程1

datanode进程2

datanode进程2

在浏览器中访问hadoop-dev-master:9870,就应该可以进入到HDFS的Web管理页面了:

HDFS Web控制台

HDFS Web控制台

点击上方Datanode应该看到两个datanode:

HDFS Web控制台2

HDFS Web控制台2

此时,我们可以通过hdfs的shell命令来测试HDFS是否正常:

hdfs dfs命令

hdfs dfs命令

直接运行 hdfs dfs -ls 命令时会报错,这是正常的,详见参考文档2:

hdfs dfs -ls报错

hdfs dfs -ls报错

hadoop fs -ls 命令的完整语法是 hadoop fs -ls [path],默认情况下当未指定[path]时Hadoop会将路径扩展为/home/[username]。这样的话,[username]就会被执行命令的Linux用户名替代,因而当执行此命令 hadoop fs -ls时Hadoop使用的路径是/home/root,但是这条路径在HDFS中不存在,因此会报错。我们可以使用 hadoop fs -ls /或使用 hdfs dfs -mkdir /user创建一个文件夹。

至此,HDFS的基础搭建就完成了。

参考文档:
1、https://hadoop.apache.org/docs/r3.1.2/hadoop-project-dist/hadoop-common/ClusterSetup.html
2、https://stackoverflow.com/questions/28241251/hadoop-fs-ls-results-in-no-such-file-or-directory

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » Hadoop完全分布式集群搭建(3.1.2)-HDFS

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址