VMware搭建hadoop分布式集群
VMware版本为15.5 系统为ubuntu18.04 hadoop版本为3.1.3 jdk版本为1.8
本次采用一个主节点 3个从节点
1.安装4台虚拟机
先安装一台虚拟机
安装jdk
将下载的jdk解压到/usr/local目录下
将jdk加入到环境变量中
#将以下内容加入到 .bashrc 文件中 #set jdk path export JAVA_HOME=/usr/local/jdk #jdk存放位置 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
安装ssh
sudo apt-get install openssh-server #安装ssh
克隆这台虚拟机3次 并将克隆的虚拟机MAC地址重新生成
- 修改每台虚拟机的hostname 分别修改为Master(主节点)、Slave1、Slave2、Slave3
sudo vim /etc/hostname
2. 固定每台虚拟机的IP地址
采用NAT模式 (主机和虚拟机、虚拟机与虚拟机之间可以互相通信)
NAT模式图解:
- 设置网段、网关 ,关闭虚拟DHCP服务
给每台虚拟机设置静态IP
ubuntu从17.10开始,已放弃在/etc/network/interfaces里固定IP的配置,即使配置也不会生效,而是改成netplan方式 ,配置写在/etc/netplan/01-netcfg.yaml或者类似名称的yaml文件里,修改配置以后执行 netplan apply 命令让配置生效。
$sudo nano /etc/netplan/50-cloud-init.yaml,配置文件可按如下内容修改。
network:
version: 2
renderer: networkd
ethernets:
ens33: #配置的网卡名称
dhcp4: no #dhcp4关闭
dhcp6: no #dhcp6关闭
addresses: [192.168.1.55/24] #设置本机IP及掩码
gateway4: 192.168.1.254 #设置网关
nameservers:
addresses: [114.114.114.114, 8.8.8.8] #设置DNS
里面的内容有严格的缩进
network: version: 2 ethernets: ens33: //ens33为网卡名称 可用ifconfig命令查看 dhcp4: no addresses: [192.168.2.10/24] //ip地址 gateway4: 192.168.2.1 //网关 nameservers: // dns服务器 addresses: [114.114.114.114,8.8.8.8]
设置完成后执行命令 sudo netplan apply 通过 ifconfig 命令可以查看是否设置成功
给每台虚拟机设置的IP地址为:
Master : 192.168.2.10
Slave1 : 192.168.2.11
Slave2 : 192.168.2.12
Slave3 : 192.168.2.13
配置完成后 各个虚拟机之间应该可以互相ping通。
3. 增加IP和主机名的映射
对每台虚拟机都进行下列操作:
修改/etc/hosts 文件
一般hosts文件中只能有一个127.0.0.1,其对应主机名为localhost,如果有多余127.0.0.1映射,应删除,特别是不能存在“127.0.0.1 Master”这样的映射记录。修改后需要重启Linux系统。
4. 设置ssh免密码登录
让Master节点可以SSH无密码登录到各个Slave节点上
在Master中操作
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost rm ./id_rsa* # 删除之前生成的公匙(如果已经存在) ssh-keygen -t rsa # 执行该命令后,遇到提示信息,一直按回车就可以 cat ./id_rsa.pub >> ./authorized_keys #让Master节点能够无密码SSH登录本机 #将公钥传输到各个从节点中 scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ scp ~/.ssh/id_rsa.pub hadoop@Slave2:/home/hadoop/ scp ~/.ssh/id_rsa.pub hadoop@Slave3:/home/hadoop/
在每个从节点中操作
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在,则忽略本命令 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub # 用完以后就可以删掉
4. 安装并配置Hadoop
解压下载的Hadoop到/usr/local目录下 (在Master中操作)
sudo tart -zxf hadoop-3.1.3.tar.gz -C /usr/local/
修改Hadoop文件夹权限
sudo chown -R hadoop /usr/local/hadoop
将Hadoop加入到环境变量当中
#将以下内容加入到 .bashrc 文件中 export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
修改 workers文件 (步骤4、5、6、7、8文件都在 /usr/local/hadoop/etc/hadoop/ 目录下)
把所有数据节点的主机名写入该文件,每行一个,默认为 localhost(即把本机作为数据节点)在进行分布式配置时,可以保留localhost,让Master节点同时充当名称节点和数据节点,或者也可以删掉localhost这行,让Master节点仅作为名称节点使用。
本次让Master节点仅作为名称节点使用,故将workers文件中原来的localhost删除,只添加如下三行内容:
Slave1 Slave2 Slave3
修改文件core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
修改文件hdfs-site.xml
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
修改文件mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>Master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>Master:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> </configuration>
修改文件yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>Master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
将Master节点上的“/usr/local/hadoop”文件夹复制到各个节点上
在Master中操作:
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制 cd ~ #将压缩好的hadoop文件夹复制到各个从节点中 scp ./hadoop.master.tar.gz Slave1:/home/hadoop scp ./hadoop.master.tar.gz Slave2:/home/hadoop scp ./hadoop.master.tar.gz Slave3:/home/hadoop
在各个从节点操作:
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local sudo chown -R hadoop /usr/local/hadoop
如果之前运行过伪分布式 切换到分布式集群之前先删除掉临时文件
cd /usr/local sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 sudo rm -r ./hadoop/logs/* # 删除日志文件
首次启动Hadoop集群时,需要先在Master节点执行名称节点的格式化
hdfs namenode -format
5. 启动Hadoop
在Master中执行如下命令
start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver
通过jps命令查看各个节点启动的进程
主节点:
从节点:
可以在在Master节点上通过命令“hdfs dfsadmin -report”查看数据节点是否正常启动 ,“Live datanodes”不为 0 ,则说明集群启动成功 也可以访问http://localhost:9870 ,通过 Web 页面看到查看名称节点和数据节点的状态。
6. 执行分布式实例
#创建HDFS上的用户目录 hdfs dfs -mkdir -p /user/hadoop #在HDFS中创建一个input目录,并把“/usr/local/hadoop/etc/hadoop”目录中的配置文件作为输入文件复制到input目录中 hdfs dfs -mkdir input hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input #运行实例 hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
在执行过程中,可以在Linux系统中打开浏览器,在地址栏输入“http://master:8088/cluster”,通过Web界面查看任务进度
运行结果:
关闭Hadoop集群:
stop-yarn.sh stop-dfs.sh mr-jobhistory-daemon.sh stop historyserver