《Hadoop大数据技术》
- 实验目的
- 安装Java环境
- 搭建Hadoop单机模式
- 在hadoop伪分布式基础上搭建Hadoop完全分布式模式环境
- 实验环境
Win10+Centos7(Vmware workstation14)+winscp
- jdk 环境变量配置
打开一个terminal窗口,切换到管理员命令,关闭网络防火墙,并取消开机自启防火墙。
查找系统自带的openjdk并删除。
删除后再检查一次是否完全删除openjdk
查看本机的地址
打开安装的winscp,将下载好的hadoop-2.6.0.tar.gz和jdk-8u181.tar.gz传到虚拟机的Documents中
再usr文件下创建java文件夹
将Documents中jdk的压缩包移动到新建的java文件中并解压
编辑 /home/wj/.bash_profile 文件
使用source /home/wj/.bash_profile命令时文件生效,然后用java -version命令检验jdk配置是否成功。
- 安装hadoop
解压hadoop-2.6.0.tar.gz安装包:解压安装包至~目录下
用 vi ~/.bashrc 命令 编辑.bashrc文件,并使之生效
添加配置信息:
export HADOOP_HOME=~/hadoop-2.6.0/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使用hadoop version命令,检验配置信息是否生效。
切换目录: cd hadoop-2.6.0/etc/hadoop/
编辑 hadoop-env.sh 文件
修改
export JAVA_HOME=/usr/java/jdk1.8.0_181/
配置core-site.xml文件
<property>
<name>fs.defaultFS</name>
<value>hdfs://master</value>
</property>
配置hdfs-site.xml文件
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
配置mapred-site.xml
先将mapred-site.xml.template文件复制为mapred-site.xml。
再修改mapred-site.xml文件
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
格式化HDFS文件系统:格式化的过程是创建初始目录和文件系统结构的过程。格式化只需进行一次,下次启动不再需要格式化
hdfs namenode -format
使用jps命令,正确启动会出现至少三个进程
NameNode
DataNode
SecondaryNameNode
启动YARN,用$ jps命令验证,正确启动将多出以下两个进程
浏览器验证
在浏览器地址栏中输入master:50070网址,查看NameNode 和 Datanode 信息
停止所有进程
stop-all.sh
用命令jps查看:关闭了Hadoop所有进程
- 在hadoop伪分布式基础上搭建Hadoop完全分布式模式环境
准备工作:
- 在伪分布模式下,确保已关闭Hadoop所有进程。
- 为了完全分布式能正确格式化HDFS系统,删除${HADOOP_HOME}/logs目录下的所有内容。
删除${HADOOP_HOME}/log目录下所有内容:
$ rm -rf ~/hadoop/log/*
配置完全分布式模式:
- 修改主机名称
将/etc/ hostname文件修改成Master:
vi /etc/hostname
将内容改为Master
reboot重启后生效
- 将/etc/hosts文件修改成如下内容
文件原内容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
修改为
127.0.0.1 localhost
192.168.81.142 master
192.168.81.143 slave1
192.168.81.144 Slave2
注:192.168.81.139 master为本机的ip,这里先指定了Slave1/Slave2机器及对应的IP,这些机器在后面步骤会由Master机器克隆出来。
reboot重启虚拟机使修改文件生效。
重启后主机名变成了Master,连接网络后
用命令$ ping Master,就可以ping通Master主机了
注:退出使用ctrl+c。
测试slave1连通性
测试slave2连通性
- 克隆客户机
因为要搭建由3台机器组成的完全分布式集群,现在只有1台Master机器,所以需要用Master机器克隆出另外2台机器。
克隆方法:
1) 关闭Linux客户机,否则进行无法克隆操作
2) 左侧栏点击要克隆的LInux客户机,右键管理克隆
3) 连续点击下一步至克隆类型,选择创建完整克隆,点击下一步
4) 修改虚拟机名称和位置:关于位置选择,最好每台客户机单独建一个文件夹:
5) 点击完成,等待克隆完成,此过程大概需要3-5分钟。
重复克隆方法5步,克隆slave2虚拟机
8)修改2台克隆机的主机名称
9)重启两台虚拟机
打开第一台克隆机,将其主机名称命名为Slave1,然后reboot重启生效
vi /etc/hostname
打开第二台克隆机,将它的主机名称命名为Slave2,然后reboot重启生效。
- SSH配置
在完全分布式模式下,集群内所有机器需要免密登录到集群内所有机器,即 Master、Slave1、Slave2三台机器需要免密登录到其他任意两台机器。免密登录的方法和伪分布的免密登录方法一样,在Master、Slave1、Slave2机器生成公/私密钥对,然后将公钥发送给集群内的所有机器,以Master免密登录其他集群内的所有机器为例,其他两台机器重复以下操作。
1)在Master主机生成密钥对
ssh-keygen -t rsa
将Master公钥id_rsa.pub追加到Master的~/.ssh/authorized_keys文件中,并复制到另外2台Slave机器上
scp ~/.ssh/authorized_keys wj@slave1: ~/
scp ~/.ssh/authorized_keys wj@slave2:~/
分别在slave1和slave2中使用ssh-keygen -t rsa命令产生密钥
分别使用chmod 600 ~/.ssh/authorized_keys命令修改slave1和slave2中的文件权限
验证免密登录:在Master主机验证免密码登录集群所有机器
- 配置完全分布式文件
1) 配置core-site.xml
修改core-site.xml文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>~/hadoop-2.6.0/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master</value>
</property>
</configuration>
2)配置hdfs-site.xml
修改hdfs-site.xml文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
3) 配置mapred-site.xml
mapred-site.xml与伪分布式的配置一样,不需改变。
4) 配置yarn-site.xml
修改yarn-site.xml文件内容为:
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5) 分发配置:将Master的配置目录文件分发至其他机器
$ cd ~/hadoop/etc/
$ scp -r hadoop hadoop@Slave1:~/hadoop/etc/
$ scp -r hadoop hadoop@Slave2:~/hadoop/etc/
准备工作:
1. 在伪分布模式下,确保已关闭Hadoop所有进程。
2. 为了完全分布式能正确格式化HDFS系统,删除${HADOOP_HOME}/tmp及${HADOOP_HOME}/logs目录下的所有内容。
1)删除${HADOOP_HOME}/tmp目录下所有内容:
$ rm -rf ~/hadoop/tmp/*
2) 删除${HADOOP_HOME}/log目录下所有内容:
$ rm -rf ~/hadoop/log/*
配置完全分布式模式:
1.修改主机名称
1)将/etc/ hostname文件修改成Master:
$sudo vi /etc/hostname
Master
注意:reboot重启后才生效
2)将/etc/hosts文件修改成如下内容:
原内容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
修改为:
$ sudo vi /etc/hosts
127.0.0.1 localhost
192.168.30.128 Master
192.168.30.129 Slave1
192.168.30.130 Slave2
注意:这里先指定了Slave1/Slave2机器及对应的IP,这些机器在后面步骤会由Master机器克隆出来。
3)重启Linux生效:
$ reboot
重启后主机名变成了Master,用命令$ ping Master,就可以ping通Master主机了。
hadoop@Master:~$ ping Master
PING Master (192.168.30.128) 56(84) bytes of data.
64 bytes from Master (192.168.30.128): icmp_seq=1 ttl=64 time=0.014 ms
64 bytes from Master (192.168.30.128): icmp_seq=2 ttl=64 time=0.085 ms
2.删除原来的SSH配置
因为主机名称已改变,新的主机名还没有加到公私密钥中,用$ ssh Master不能免密登录,需要删除原来的SSH,待重新生成新的SSH。
$ rm -rf ~/.ssh/*
3.克隆客户机
因为要搭建由3台机器组成的完全分布式集群,现在只有1台Master机器,所以需要用Master机器克隆出另外2台机器。
克隆方法:
1) 关闭Linux客户机,否则进行无法克隆操作
2) 左侧栏点击要克隆的LInux客户机,右键管理克隆
3) 连续点击下一步至克隆类型,选择创建完整克隆,点击下一步
4) 修改虚拟机名称和位置:关于位置选择,最好每台客户机单独建一个文件夹:
5) 点击完成,等待克隆完成,此过程大概需要3-5分钟。
按照如上方法,一共克隆出2台机器。
6) 修改2台克隆机的主机名称
打开第一台克隆机,将其主机名称命名为Slave1,然后reboot重启生效。
$ sudo vi /etc/hostname
Slave1
$ reboot
打开第二台克隆机,将它的主机名称命名为Slave2,然后reboot重启生效。
$ sudo vi /etc/hostname
Slave2
$ reboot
4.SSH配置
在完全分布式模式下,集群内所有机器需要免密登录到集群内所有机器,即 Master、Slave1、Slave2三台机器需要免密登录到其他任意两台机器。免密登录的方法和伪分布的免密登录方法一样,在Master、Slave1、Slave2机器生成公/私密钥对,然后将公钥发送给集群内的所有机器,以Master免密登录其他集群内的所有机器为例,其他两台机器重复以下操作。
1)在Master主机生成密钥对
$ ssh-keygen -t rsa -P ''
2) 将Master公钥id_rsa.pub追加到Master的~/.ssh/authorized_keys文件中,并复制到另外2台Slave机器上
$ ssh-copy-id -i ~/.ssh/id-rsa.pub Master
$ ssh-copy-id -i ~/.ssh/id-rsa.pub Slave1
$ ssh-copy-id -i ~/.ssh/id-rsa.pub Slave2
3) 验证免密登录:在Master主机验证免密码登录集群所有机器
$ ssh Master
$ ssh Slave1
$ ssh Slave2
5.配置完全分布式文件
在伪分布式模式下已经配置了hadoop-env.sh,现在只需要配置4个xml即可,再将配置分发给其他机器。注意:以下配置均在Master机器操作。
进入Master机器的hadoop配置文件目录${HADOOP_HOME}/etc/hadoop/
$ cd ~/hadoop/etc/hadoop/
1) 配置core-site.xml
修改core-site.xml文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>~/hadoop-2.6.0/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master</value>
</property>
</configuration>
注意:fs.defaultFS修改为Master机器的IP地址或者主机名称
2)配置hdfs-site.xml
修改hdfs-site.xml文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
3) 配置mapred-site.xml
mapred-site.xml与伪分布式的配置一样,不需改变。
4) 配置yarn-site.xml
修改yarn-site.xml文件内容为:
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5) 分发配置:将Master的配置目录文件分发至其他机器
$ cd ~/hadoop/etc/
$ scp -r hadoop hadoop@Slave1:~/hadoop/etc/
$ scp -r hadoop hadoop@Slave2:~/hadoop/etc/
下面通通没测试
6.指定集群Slaves配置
此过程是与伪分布式模式最根本的区别。配置Slavers文件就是制定哪些机器是Slave机器,Hadoop将变成完全分布式模式。配置方法如下:
在Master主机操作,进入配置目录${HADOOP_HOME}/etc/hadoop/,修改slavers文件
$ cd ~/hadoop/etc/hadoop
$ vi slaves
将slaves文件的内容修改为:
Slave1
Slave2
注意:
1) 此配置只需要在Master机器进行,其他从机不需要配置此文件;
2) 要将slaves文件原来的localhost删除掉,再添加Slave主机名称, Slave主机名称也可以改为Slave IP地址。
7.格式化HDFS文件系统
$ hdfs namenode -format
8.启动Hadoop守护进程
分别启动HDFS和YARN
$ start-dfs.sh
$ start-yarn.sh
或者用以下命令启动HDFS和YARN, 注意:此命令已经过时,不推荐使用。
$ start-all.sh
9.验证Hadoop进程
1) $ jps命令验证:
用$ jps命令分别在每一台机器验证
$ jps
执行jps命令后,Master主机包含以下三个进程为启动成功
SecondaryNameNode
NameNode
ResourceManager
分别在三台Slave主机执行jps命令,包含以下两个进程为启动成功
NodeManager
DataNode
注:如果某个机器少了某个进程,应该到相应机器去找对应的log查看原因,log存放路径为${HADOOP_HOME}/logs目录下。例如:Slave2机器少了DataNode进程,则应该进入到Slave2机器的${HADOOP_HOME}/logs目录下,查看datanode相关的log,找到启动失败的根源。
$ cd ~/hadoop/logs
$ more hadoop-hadoop-datanode-Slave2.log
2) 浏览器(WebUI)验证
查看hadoop的文件系统,可以查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件:在Master机器浏览器输入网址: http://Master:50070 ,出现以下界面为成功。 注:用虚拟机内部的浏览器。宿主机(物理机)访问则需要将localhost换成虚拟机的ip,用ifconfig命令查看虚拟机ip ,如:http://192.168.30.128:50070
点击Datanodes,显示有两台datanode信息。
浏览器查看集群所有应用程序
访问集群中的所有应用程序的默认端口号为8088。输入网址:http://Master:8088
可以看到Active Nodes为2,说明集群有2个节点正在运行。
- 实验总结(每项不少于20字)
存在问题:
1、在设置免密登陆时,由master将authorized_keys发送到另外两台主机上时,出现错误,
2、Hadoop集群配置完成后无法成功分发配置
解决方法:
手动复制master中的authorized_keys的内容到slave1和slave2中。
收获:
- Hadoop配置文件后需要格式化,修改配置后也需要格式化
- 正常情况下使用scp命令传输到slave1和slave2的文件在home文件下
- 使用jps命令后提示command not found,有两个原因
- jdk没有安装,或者该命令被意外删除。
- 检查jdk的环境配置文件.bash_profile是否配置正确。