前言:
此刻小伙伴们对“ubuntu上传文件scp”大约比较注意,同学们都需要剖析一些“ubuntu上传文件scp”的相关资讯。那么小编在网上网罗了一些对于“ubuntu上传文件scp””的相关内容,希望兄弟们能喜欢,大家一起来学习一下吧!本篇基于 Hadoop 3.x 版本进行安装,是之前文章《Hadoop 3.x 单机安装图文详解教程分享》的姊妹篇 。欢迎阅读~
一、部署说明
hadoop 集群模式与伪集群模式搭建的主要思路一致,只不过伪集群模式下所有节点都部署在一台主机上,而集群模式需要把节点部署在不同主机上,因而主机之间的通信是部署的重点和难点。
这里采用虚拟机的方式,创建3台虚拟主机来集群模式的搭建,其中主机1(master)部署HDFS的核心节点NameNode,主机3(slave2)部署secondNameNode;主机2(slave1)部署Yarn(集群资源管理系统和任务调度节点);3台主机上均需要部署DataNode。
由于采用虚拟机,所以首先在一台主机上安装必备软件jdk和hadoop配置;然后将该主机复制2份,修改主机名;最后完成3台主机之间的通信(免密登录),即可完成hadoop集群模式的搭建。
二、主机1上的配置
2.1 下载安装jdk(目前hadoop3只支持java8)
JDK安装包可以从oracle官网( )下载,然后使用WinSCP上传到虚拟机的Ubuntu系统。
sudo tar -xzvf jdk-8u202-linux-x64.tar.gz -C /usr/local
配置jdk环境变量
打开~/.bashrc文件
$ sudo vim ~/.bashrc
然后在文件末尾加入以下代码,保存退出。
export JAVA_HOME=/usr/local/jdk1.8.0_202export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH
使环境变量生效
$ source ~/.bashrc
查看java版本
$ java -version
安装成功后,会出现如下信息:
2.2 下载安装hadoop
Hadoop安装包可以从hadoop官网( )下载,然后使用WinSCP上传到虚拟机的Ubuntu系统。注意解压后赋予hadoop目录777权限,否则运行hadoop任务时会出现权限不足问题。
$ sudo mv hadoop-3.3.4.tar.gz /usr/local$ cd /usr/local$ sudo tar -xzvf hadoop-3.3.4.tar.gz$ sudo chmod -R 777 hadoop-3.3.4
配置hadoop环境变量(可以在bashrc或profile文件中添加)
打开~/.bashrc文件
$ sudo vim ~/.bashrc
然后在文件末尾加入以下代码,保存退出。
export HADOOP_HOME=/usr/local/hadoop-3.3.4export HADOOP_LOG_DIR=${HADOOP_HOME}/logsexport PATH=${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin:$PATH
使环境变量生效
$ source ~/.bashrc
查看Hadoop版本信息
$ hadoop version
安装成功后,会出现如下信息:
2.3 修改配置文件
Hadoop 可以在单节点上以伪分布式的方式运行,该模式下需要对core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、hadoop-env.sh和workers六个配置文件进行修改。配置文件的位于hadoop安装目录下的etc/hadoop/ 中。
切换到hadoop安装目录:
$ cd /usr/local/hadoop-3.3.4/
core-site.xml文件
打开core-site.xml,
$ sudo vim etc/hadoop/core-site.xml
定位到以下部分:
<configuration></configuration>
在其中添加如下代码:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-3.3.4/tmp</value> </property> <property> <name>hadoop.http.staticuser.user</name> <value>chuishuju</value> </property></configuration>
hdfs-site.xml文件
打开 hdfs-site.xml,
$ sudo vim etc/hadoop/hdfs-site.xml
定位到以下部分:
<configuration></configuration>
在其中添加如下代码。
<configuration> <property> <name>dfs.namenode.http-address</name> <value>master:9870</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>slave2:9868</value> </property></configuration>
mapred-site.xml文件
打开mapred-site.xml,
$ sudo vim etc/hadoop/mapred-site.xml
定位到以下部分:
<configuration></configuration>
在其中添加如下代码。
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.application.classpath</name> <value>/usr/local/hadoop-3.3.4/share/hadoop/mapreduce/*:/usr/local/hadoop-3.3.4/share/hadoop/mapreduce/lib/*</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>slave1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>slave1:19888</value> </property></configuration>
yarn-site.xml文件
打开yarn-site.xml,
$ sudo vim etc/hadoop/yarn-site.xml
定位到以下部分:
<configuration></configuration>
在其中添加如下代码
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>slave1</value> </property> <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> <property> <name>yarn.application.classpath</name> <value>/usr/local/hadoop-3.3.4/etc/hadoop:/usr/local/hadoop-3.3.4/share/hadoop/common/lib/*:/usr/local/hadoop-3.3.4/share/hadoop/common/*:/usr/local/hadoop-3.3.4/share/hadoop/hdfs:/usr/local/hadoop-3.3.4/share/hadoop/hdfs/lib/*:/usr/local/hadoop-3.3.4/share/hadoop/hdfs/*:/usr/local/hadoop-3.3.4/share/hadoop/mapreduce/*:/usr/local/hadoop-3.3.4/share/hadoop/yarn:/usr/local/hadoop-3.3.4/share/hadoop/yarn/lib/*:/usr/local/hadoop-3.3.4/share/hadoop/yarn/*</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>;/value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property></configuration>
hadoop-env.sh
打开hadoop-env.sh文件
$ sudo vim etc/hadoop/hadoop-env.sh
在文件末位添加jdk路径和用户名
export JAVA_HOME=/usr/local/jdk1.8.0_202/export HDFS_NAMENODE_USER=chuishujuexport HDFS_DATANODE_USER=chuishujuexport HDFS_SECONDARYNAMENODE_USER=chuishujuexport YARN_RESOURCEMANAGER_USER=chuishujuexport YARN_NODEMANAGER_USER=chuishuju
workers
打开hadoop-env.sh文件
$ sudo vim etc/hadoop/workers
将文件前三行内容修改为如下内容(master和slave1、slave2是三台主机名)。
masterslave1slave2
2.4 主机2和主机3的复制
主机1配置好后,需要将其关机。
找到主操作系统VMware虚拟机的存放目录,直接复制粘贴两份。为了区分各主机的名字,分别将文件夹命名为Ubuntu-master、Ubuntu-slave1、Ubuntu-slave2(主机1如果之前没有命名为Ubuntu-master,也可以在这步命名),如下图所示:
打开master主机
进入VMware主界面,选择打开虚拟机;然后选择Ubuntu-master所在目录。
进入Ubuntu-master目录,双击Ubuntu.vmx加载虚拟机,然后按开机按钮开机。
由于之前对主机1进行了重命名,所以会出现如下提示框。注意这里选择我已复制该虚拟机(ip地址保留原来的)。
进入master主机后,采用ifconfig命令查看ip地址并记下。
打开slave1和slave2主机
按照同样的方式,在VMware中分别选择Ubuntu-slave1和Ubuntu-slave2目录下的Ubuntu.vmx,打开slave1和slave2主机。
在开机时,会出现如下提示框,注意必须选择我已复制该虚拟机(slave1和slave2会重新分配ip地址,否则三个主机ip地址一致,无法同时联网)。
同样,进入slave1和slave2主机后,分别采用ifconfig查看ip地址并记下。
2.5 主机1、2、3间免密通信(一)
master主机的配置
修改主机名
$ sudo vim /etc/hostname
将文件的第一行改为master,然后保存退出。
修改成功后,shell中以“用户名@主机名:”的形式显示,如下图所示(需要重启)。
配置主机之间的IP映射
$ sudo vim /etc/hosts
进入hosts文件中,添加如下三下IP映射
安装ssh-server
$ sudo apt install openssh-server
配置ssh无密码登陆
生成公钥与私钥(注意三次提示都直接按回车)。
$ ssh-keygen -t rsa
切换到".ssh"隐藏目录
cd ~/.ssh
将密钥加入到授权中
$ cat ./id_rsa.pub >> ./authorized_keys
slave1主机的配置
修改主机名
$ sudo vim /etc/hostname
将文件的第一行改为slave1,然后保存退出。
配置主机之间的IP映射
$ sudo vim /etc/hosts
进入hosts文件中,添加如下三下IP映射
安装ssh-server
$ sudo apt install openssh-server
配置ssh无密码登陆
生成公钥与私钥(注意三次提示都直接按回车)。
$ ssh-keygen -t rsa
切换到".ssh"隐藏目录
cd ~/.ssh
将密钥加入到授权中
$ cat ./id_rsa.pub >> ./authorized_keys
slave2主机的配置
修改主机名
$ sudo vim /etc/hostname
将文件的第一行改为slave2,然后保存退出。
配置主机之间的IP映射
$ sudo vim /etc/hosts
进入hosts文件中,添加如下三下IP映射
安装ssh-server
$ sudo apt install openssh-server
配置ssh无密码登陆
生成公钥与私钥(注意三次提示都直接按回车)。
$ ssh-keygen -t rsa
切换到".ssh"隐藏目录
cd ~/.ssh
将密钥加入到授权中
$ cat ./id_rsa.pub >> ./authorized_keys
2.6 主机1、2、3间免密通信(二)
master主机的配置
将master主机的公钥发送给slave1和slave2主机
$ scp id_rsa.pub chuishuju@slave1:~/.ssh/master_rsa.pub $ scp id_rsa.pub chuishuju@slave2:~/.ssh/master_rsa.pub
slave1主机的配置
将slave1主机的公钥发送给master和slave2主机
$ scp id_rsa.pub chuishuju@master:~/.ssh/slave1_rsa.pub$ scp id_rsa.pub chuishuju@slave2:~/.ssh/slave1_rsa.pub
slave2主机的配置
将slave2主机的公钥发送给master和slave1主机
$ scp id_rsa.pub chuishuju@master:~/.ssh/slave2_rsa.pub$ scp id_rsa.pub chuishuju@slave1:~/.ssh/slave2_rsa.pub
2.7 主机1、2、3间免密通信(三)
master主机的配置
将slave1和slave2的密钥添加到授权文件
$ cat ./slave1_rsa.pub >> ./authorized_keys $ cat ./slave2_rsa.pub >> ./authorized_keys
slave1主机的配置
将master和slave2的密钥添加到授权文件
$ cat ./master_rsa.pub >> ./authorized_keys $ cat ./slave2_rsa.pub >> ./authorized_keys
slave2主机的配置
将master和slave1的密钥添加到授权文件
$ cat ./master_rsa.pub >> ./authorized_keys $ cat ./slave1_rsa.pub >> ./authorized_keys
2.8 主机1、2、3间免密通信(四)
前面步骤已经完成了主机1、2、3间免密通信的配置。可以试下是否成功
在master主机中执行如下命名
$ ssh slave1
如下shell中变为“用户名@slave1”,就表明免密登录成功。输入exit退出远程登录,返回master主机。
$ exit
按照相同的步骤,可以试下3台主机之间的相互免密登录是否成功。记得exit退出远程登录。
三、hadoop集群格式化与启动
3.1 master中的操作
格式化namenode
$ cd /usr/local/hadoop-3.3.4 $ sudo hdfs namenode -format
启动进程(由于权限问题,再次启动需要所有服务器上删除hadoop安装目录下的tmp目录)
$ sudo start-all.sh
查看进程
$ jps
启动成功后,会显示如下进程
6277 NameNode7016 Jps6427 DataNode6862 NodeManager
3.2 slave1中的操作
当namenode和resourcemanager分布在不同的服务器时,在master上执行start-all.sh不能启动、关闭resourcemanager,需要resourcemanager所在的服务器上执行start-yarn来启动。或者格式化集群后,在resourcemanager所在的服务器上执行start-all.sh来启动所有服务器上的进程。
启动yarn
$ cd /usr/local/hadoop-3.3.4/sbin$ start-yarn.sh
查看进程
$ jps
启动成功后,会显示如下进程
3927 NodeManager3783 DataNode4045 Jps2463 ResourceManager
3.3 slave2中的操作
查看进程
$ jps
启动成功后,会显示如下进程
5378 NodeManager5507 Jps5262 SecondaryNameNode5119 DataNode
3.4 访问后台管理页面
hdfs分布式文件系统的管理页面
在主系统的浏览器中,输入 ,其中ip地址是master主机的ip地址。
ResourceManager的管理页面 在主系统的浏览器中,输入 ,其中ip地址是slave1主机的ip地址。
四、Hadoop集群结束进程
4.1 master中的操作
$ cd /usr/local/hadoop-3.3.4 $ sudo stop-all.sh
4.2 hadoop集群模式应用
hadoop集群模式应用方式与伪集群模式基本相同。
hadoop程序的./share/hadoop/mapreduce目录下存放了hadoop自带的java应用程序包,这里介绍下hadoop-mapreduce-examples-3.3.4.jar的应用。
五、字数统计
5.1 上传需要进行单词统计的txt文件
切换到hadoop目录
$ cd /usr/local/hadoop-3.3.4
创建input目录
$ sudo mkdir wcinput
将“song.txt”文件通过WinSCP上传到虚拟机的Ubuntu系统,并移动到wcinpu目录下。
$ sudo mv song.txt /usr/local/hadoop-3.3.4/wcinput/
song.txt的内容如下:
5.2 将txt文件上传到HDFS(分布式文件系统)
在集群模式下,数据文件需要首先对应成分布式文件,然后再运行单词统计任务,分布式文件系统有自己的操作命令,一般以hdfs dfs开头。
创建分布式文件系统的用户
$ hdfs dfs -mkdir -p /user/chuishuju
为chuishuju用户创建分布式文件存放目录
$ hdfs dfs -mkdir input
将原始文件song.txt 上传到分布式文件系统
$ hdfs dfs -put /usr/local/hadoop-3.3.4/wcinput/song.txt input
查看上传的分布式文件
$ hdfs dfs -ls -R /
运行字数统计程序
$ hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount input output
运行完成后,会在分布式文件系统中创建output文件下,part-r-00000文件存储了统计结果。
查看统计结果
$ hdfs dfs -cat output/part-r-00000
如果需要再次运行程序,需要把output文件删除,或者起一个新的输出文件夹名,否则会报错!
$ hdfs dfs -rm -r output
文章来源: