2. Hadoop Pseudo-Distributed Mode:【伪分布模式】搭建
基于CentOS_64_6.8、jdk1.8、Hadoop2.7.3
[hadoop伪分布模式运行在单节点上,每个hadoop守护进程占用单独的Java进程]
设定CentOS的用户名为hadoop
自定义的集群软件安装位置:在/home/hadoop下创建一个soft目录
伪分布就是在一台节点上模拟一个分布式的集群,分布式有的守护进程都可以有,只不过是在一台节点上,就没有办法实现多副本,也就没有高可靠的性能,当然所谓的高可用更不可能。
文章目录
- 2. Hadoop Pseudo-Distributed Mode:【伪分布模式】搭建
- 0.安装前准备
- 1.安装jdk【Jps查看Java进程】
- 2.安装hadoop
- 3.格式化文件系统
- 4.测试连接
- 总结:
0.安装前准备
0.1 设置静态IP
0.1.1 查看子网IP
-
【编辑】–>【虚拟网络编辑器】–>
NET:(VMnet8)中:
子网号码(192.168.204.0)【192.168.204 是将要加入的网段】
子网掩码(255.255.255.0)
0.1.2 查看MAC地址是否与eth0匹配
【对比ifconfig中的MAC地址与/etc/udev/rules.d/70-persistent-net.rules中的MAC地址】
[hadoop@localhost ~]$
ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:A9:54:0E
inet6 addr: fe80::20c:29ff:fea9:540e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:329 errors:0 dropped:0 overruns:0 frame:0
TX packets:348 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21327 (20.8 KiB) TX bytes:66744 (65.1 KiB)lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:120 errors:0 dropped:0 overruns:0 frame:0
TX packets:120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9328 (9.1 KiB) TX bytes:9328 (9.1 KiB)[hadoop@localhost ~]$
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:a9:54:0e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
0.1.3 root用户下修改【/etc/sysconfig/network-scripts/ifcfg-eth0】
[hadoop@localhost rules.d]$
cd /etc/sysconfig/network-scripts/
[hadoop@localhost network-scripts]$vim ifcfg-eth0
修改:
BOOTPROTO=“static”
追加:
IPADDR=“192.168.204.100”【ip地址,前三位是虚拟网络编辑器中查看到的网段值,第四位任意】
NETMASK=“255.255.255.0”【子网掩码,虚拟网络编辑器中查找到的值】
NETWORK=“192.168.204.0”【子网号,就是虚拟网络编辑器中的子网号】
GATEWAY=“192.168.204.2”【网关,前三位参看虚拟网络编辑器,第四位任意,但不能和ip以及之后要配置的windows虚拟网卡VMnet8中的ip相同】
DNS1=“192.168.204.2”【首选DNS服务器,如果是使用本地的DNS,必须和网关ip一致,如果使用公有的DNS(例如:8.8.8.8是谷歌的,114.114.114.114是南京信风的)】
- ifcfg-eth0文件修改如下:
DEVICE=“eth0”
BOOTPROTO=“static”
HWADDR=“00:0C:29:A9:54:0E”
IPV6INIT=“yes”
NM_CONTROLLED=“yes”
ONBOOT=“yes”
TYPE=“Ethernet”
UUID=“ba80fe09-30f1-408d-bc94-3f3b1b0b8947”IPADDR=“192.168.204.100”
NETMASK=“255.255.255.0”
NETWORK=“192.168.204.0”
GATEWAY=“192.168.204.2”
DNS1=“192.168.204.2”
0.1.4 重启网络服务
[root@localhost network-scripts]#
service network restart
0.1.5 设置windows主机中的虚拟网卡VMnet8
【控制面板】–>【网络和Internet】–>【网络连接】–>
【右键VMnet8】–>【选择IPv4】–>【属性】
使用下面的IP地址(DNS服务器地址)
IP地址: 192.168.204.1 【默认设置为1】
子网掩码: 255.255.255.0 【虚拟网络编辑器中的子网掩码】
默认网关: 192.168.204.2 【末位与IP地址不同即可,但设置的所有网关必须一致】
首选DNS服务器:192.168.204.2 【本地的必须使用网关地址】
0.1.6 在windows上ping 192.168.204.100
0.1.7 在linux中ping 192.168.204.1,而不是物理机的IP地址
0.1.8 步骤6、7都ping通,且linux可以ping通外网(如:www.baidu.com)则完成静态IP设置
0.1.9 注意事项:
- 物理机的虚拟网卡VMnet8中的IP末位可以任意设置,网关的末位也可以任意设置,但是两者不可以相同。
- linux中的IP末位也可以任意设置,但是不可以与物理机虚拟网卡VMnet8以及网关的地址相同。
- 子网掩码一般都是255.255.255.0,也有其他情况,具体就看虚拟网络编辑器中的,或者在虚拟网络编辑器中自定义。
- 子网网段参看虚拟网络编辑器,也可以在虚拟网络编辑器中修改成自己想要的网段,都是虚拟的没什么不可以。但是,设定以后,所有相关的IP、网关、DNS前三位都要与其一致。
- DNS服务器使用本地的,必须使用网关地址。使用在线的可以有(114.114.114.114是南京信风的)
0.2 修改主机名
0.2.1 进入系统后的默认机器名都是localhost
[用户名@机器名 路径信息] $
【用户名,是通过Terminal登录的用户名】
【机器名,可以理解为IP映射地址】
【用户名,是通过Terminal登录的用户名】
【GUI登录名,是通过图形界面登录的用户名,实际上没有用到的时候】
0.2.2 root下修改【/etc/sysconfig/network】文件
- 【[root@localhost etc]#
vim /etc/sysconfig/network
】 - 将HOSTNAME属性localhost.localdomain修改为【master】
[外链图片转存失败(img-zCqn2mrm-1568689031553)(F:\WDP1808JAVADEV\记录\全日制\note_image\1564585461729.png)]
0.2.3 重启系统
[root@localhost etc]# reboot
0.2.4 修改windows中的【C:\Windows\System32\drivers\etc\hosts】文件
【如果没有,手动创建。如果有,同步骤2】
[外链图片转存失败(img-rhQch7zB-1568689031559)(F:\WDP1808JAVADEV\记录\全日制\note_image\1564585698429.png)]
[外链图片转存失败(img-JKPIiXlC-1568689031566)(F:\WDP1808JAVADEV\记录\全日制\note_image\1564585762337.png)]
0.2.5 测试
【命令行下输入>ping master】
[外链图片转存失败(img-OCJglVdF-1568689031568)(F:\WDP1808JAVADEV\记录\全日制\note_image\1564585886596.png)]
0.3 在hosts文件添加各节点IP地址和别名(主机名)
别名就是:给这个节点的IP地址起一个名字,便于记忆与使用。这里设置的与主机名一致,可以不一致,便于记忆与使用尽量设置为一致的。
0.3.1 root下修改【/etc/hosts】文件
-
【[root@localhost etc]# vim /etc/hosts】
-
在文件末尾追加:
192.168.204.100 master
192.168.204.101 slave01
192.168.204.102 slave02
192.168.204.103 slave03
[外链图片转存失败(img-1jBBSu9a-1568689031571)(F:\WDP1808JAVADEV\记录\全日制\note_image\1564617095188.png)]
【该IP地址需先设定静态IP,否则设置会随动态IP失效】
【用master指向IP地址:192.168.204.100】
0.4 关闭防火墙
0.4.1 查看防火墙状态
[root@master etc]# service iptables status
[root@master etc]# chkconfig iptables --list
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@master etc]#
0.4.2 关闭防火墙【root用户下】
[root@master etc]# service iptables stop
【关闭防火墙】
[root@master etc]# chkconfig iptables off
【关闭开机启动防火墙】
[root@master etc]# chkconfig iptables --list
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@master etc]#
0.5 设置ssh无密登录
[hadoop@master ~]$
ssh localhost
hadoop@localhost’s password: 【输入密码】
0.5.1 生成密钥
[hadoop@master ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[hadoop@master hadoop]$
ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):【这里直接回车,问你是否保存在默认的位置】
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
2a:ef:8b:3b:9d:8c:ee:28:0d:9d:a1:f9:d3:32:be:1c hadoop@master
The key’s randomart image is:
±-[ RSA 2048]----+
| |
| |
| |
| . |
| + o S |
|+ o . |
| +E…+… |
|…*o+++ |
| o=B=++. |
±----------------+
【ssh-keygen】生成密钥
【-t rsa】加密方式是rsa
【-P ‘’】密码为空
【-f ~/.ssh/id_rsa】在该地址下创建id_rsa文件【不配也是默认该地址】
[hadoop@master ~]$
cd ~/.ssh
[hadoop@master .ssh]$ls -l
总用量 20
-rw-------. 1 hadoop hadoop 1675 7月 29 13:44 id_rsa
-rw-r–r--. 1 hadoop hadoop 395 7月 29 13:44 id_rsa.pub
-rw-r–r--. 1 hadoop hadoop 391 7月 29 13:36 known_hosts
0.5.2 生成公钥库
[hadoop@master .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
0.5.3 修改公钥库权限
[hadoop@master .ssh]$ chmod 0600 ~/.ssh/authorized_keys
【必须修改,否则系统将无法识别该文件的权限,该文件就失效了】
【拷贝到其他节点上时,也必须检查该权限是否为600】
0.5.4 测试ssh登录
[hadoop@master .ssh]$ ssh master
The authenticity of host ‘master (192.168.204.110)’ can’t be established.
RSA key fingerprint is 15:10:37:43:13:e5:a6:a5:90:0e:89:fb:27:f9:3b:98.
Are you sure you want to continue connecting (yes/no)? yes
【首次ssh到某个节点,会校验一次,以后不会再出现】
Warning: Permanently added ‘master,192.168.204.110’ (RSA) to the list of known hosts.
[hadoop@master ~]$
[hadoop@master ~]$ ssh master
Last login: Mon Jul 29 13:56:06 2019 from master
【master | localhost】一个意思,都是代表IP地址
0.6 创建一个目录用于安装程序
$>mkdir /home/hadoop/soft
1.安装jdk【Jps查看Java进程】
1.1 拷贝【将jdk-8u121-linux-x64.tar.gz拷贝到/home/hadoop/soft下】
$>cp jdk-8u121-linux-x64.tar.gz ~/soft/
1.2 解压【进入/home/hadoop/soft目录,tar -zxvf jdk-8u121-linux-x64.tar.gz】
$>tar -zxvf jdk-8u121-linux-x64.tar.gz
1.3 创建软连接【ln -s jdk1.8.0_121/ jdk】
$>ln -s jdk1.8.0_121/ jdk
1.4 配置环境变量
1.4.1 修改~/.bash_profile文件【追加如下:】
$>vim ~/.bash_profile
【追加】
#jdk
export JAVA_HOME=/home/hadoop/soft/jdk
PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
$>source ~/.bash_profile
【本次会话生效,如果要每个会话都生效,需重启系统】
$>echo $JAVA_HOME
【出现路径则成功】
[hadoop@master soft]$
echo $JAVA_HOME
/home/hadoop/soft/jdk
1.4.2 测试配置
在任意路径下输入jp
然后按下超过2次tab键
如果出现jp命令,则配置成功
2.安装hadoop
2.1 下载hadoop二进制包(或拷贝)
【下载hadoop安装包,或者拷贝到目录下】
2.2 解压hadoop安装包【进入/home/hadoop/soft,tar -zxvf hadoop-2.7.3.tar.gz】
$>tar -zxvf hadoop-2.7.3.tar.gz
2.3 创建软连接【ln -s hadoop-2.7.3 hadoop】
$>ln -s hadoop-2.7.3 hadoop
2.4 配置环境变量
2.4.1 修改~/.bash_profile文件【追加如下:】
$>vim ~/.bash_profile
【追加】
#hadoop
export HADOOP_HOME=~/soft/hadoop
export PATH= H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbin:$PATH
$>source ~/.bash_profile
【生效】
$>echo $HADOOP_HOME
【出现路径则成功】
[hadoop@master soft]$ echo $HADOOP_HOME
/home/hadoop/soft/hadoop
2.4.2 测试配置
在任意路径下输入start
按下超过2次tab键
如果出现start-dfs.sh,则配置成功
2.5 修改配置文件
2.5.1 修改【$HADOOP_HOME/ect/hadoop】文件夹下的core-site.xml
[也就是:/home/hadoop/soft/hadoop-2.7.3/etc/hadoop目录下的core-site.xml文件]
$>cd /home/hadoop/soft/hadoop/etc/hadoop
$>vim core-site.xml
【在中添加如下:】
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
【用于存储的文件系统设置,用URI实现,主机名:localhost(代表本地),端口号:9000(沿用旧版,新版是8020,但是会和某个组件端口冲突,还是沿用旧版)】
2.5.2 修改【$HADOOP_HOME/etc/hadoop】文件夹下的hdfs-site.xml
[也就是:/home/hadoop/soft/hadoop-2.7.3/etc/hadoop目录下的hdfs-site.xml文件]
$>vim host-site.xml
【在中添加如下:】
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
【设置HDFS文件系统的副本数,为1】
2.5.3 hadoop配置JAVA_HOME路径
$>cd $HADOOP/etc/hadoop
$>vim hadoop-env.sh
export JAVA_HOME=/home/hadoop/soft/jdk
- 如果不设置:
[hadoop@smaster name]$
start-dfs.sh
Starting namenodes on [localhost]
localhost: Error: JAVA_HOME is not set and could not be found.
localhost: Error: JAVA_HOME is not set and could not be found.
- 原因:
[/home/hadoop/soft/hadoop/etc/hadoop/hadoop-env.sh]
The java implementation to use.
export JAVA_HOME=${JAVA_HOME}
【因为在设置HADOOP_HOME时,将HADOOP_HOME放在了JAVA_HOME之前,因此无法识别JAVA_HOME的配置,所以要固定指定JAVA_HOME的路径】
2.6 修改HDFS默认存储路径
2.6.1 修改默认存放数据home的地址为
[src:core-site.xml]
<property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp/hadoop-${user.name}</value> <description>A base for other temporary directories.</description> </property>
【这个是设置HDFS存放数据地址的路径:
【/home/hadoop/tmp/hadoop-username/】
[dest:$HADOOP_HOME/etc/hadoop/core-site.xml]
2.6.2 修改默认存放namenode节点数据的地址为
[src:hdfs-site.xml]
<property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name</value> 【追加,/home/hadoop/backup/dfs/name】【追加这个是为了备份namenode数据】 </property>
【这个才是namenode节点存放数据的路径,这个路径在整个HDFS存放路径下的子路径】
【/home/hadoop/tmp/hadoop-username/】
[dest:$HADOOP_HOME/etc/hadoop/hdfs-site.xml]
2.6.3 修改默认存放datanode节点数据的地址为
[hdfs-site.xml]
<property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/dfs/data</value> </property>
【这个是datanode的存放位置,同namenode】
[dest:$HADOOP_HOME/etc/hadoop/hdfs-site.xml]
3.格式化文件系统
【目的:创建fsimage镜像文件】
3.1 格式化
[hadoop@master ~]$ hdfs namenode -format
3.2 开启hadoop的HDFS【start-dfs.sh】
【但是在实际使用中少用此方式,因为无法关闭一部分功能,要是全部关闭则又是HDFS系统所不允许的,全关闭的话,整个系统就关了,那就无法进行有效管理】
[hadoop@master hadoop]$ start-dfs.sh
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/soft/hadoop-2.7.3/logs/hadoop-hadoop-namenode-master.out
localhost: starting datanode, logging to /home/hadoop/soft/hadoop-2.7.3/logs/hadoop-hadoop-datanode-master.out
Starting secondary namenodes [0.0.0.0]
The authenticity of host ‘0.0.0.0 (0.0.0.0)’ can’t be established.
RSA key fingerprint is 72:96:2e:5f:bd:ea:b4:7b:27:c1:43:99:a0:6a:01:1b.
Are you sure you want to continue connecting (yes/no)? yes
0.0.0.0: Warning: Permanently added ‘0.0.0.0’ (RSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /home/hadoop/soft/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-master.out
[hadoop@master hadoop]$
3.3 检验【$>jsp】
[hadoop@master hadoop]$ jps
9200 DataNode
9106 NameNode
9493 Jps
9384 SecondaryNameNode
[hadoop@master hadoop]$
3.4 注意
- 【不能再次格式化namenode】
- 【否则会改变namenode的cluster ID,导致namenode与datanode的cluster ID不一致,无法启动服务,因此不能随意格式化】
- 【如果cluster ID不一致,修改/tem/hadoop-hadoop/dfs/data/current/VERSION中的cluster ID,块池中也有一个,都要改】
- 【hadoop-hadoop文件夹:hadoop-username规则是这样的,拼接上创建文件系统时的用户】
- 【如果在运行时,格式化,日志文件不会格式化,会导致之后namenode无法启动,要删除文件夹下所有的edit*文件】
4.测试连接
打开浏览器:http://master:50070
【先在linux上测试,然后在windows上测试】
【如果linux上不行,那不大可能,因为3个主要的服务全都正常开启了】
【如果出错,某个服务应该无法启动,那么应该使用hdfs + 未开启的服务名[namenode、secondarynamenode、datanode]来开启进程,并查看错误日志,去解决问题。假设不行,那么一定是之前的配置出错,重新查看配置】
【如果windows上不行,先看能不能ping通linux。如果可以,那么就到linux的界面中查找防火墙,将50070端口加入可访问】
总结:
- 首先,配置静态IP便于节点之间的连接,修改主机名便于记忆与处理(不用记那么长的IP地址),配置hosts为每个节点注册一个别名便于连接(通常设为主机名),关闭防火墙才可以ssh远程访问(每个守护节点都是通过ssh开启的),所以ssh无密登录也很重要,还要设置无密登录。
- 其次,拷贝或下载jdk,解压并设置软链接,配置环境变量(不重启的情况下,记得source)。拷贝或下载hadoop,解压并设置软链接,配置环境变量,配置hdfs连接为localhost:9000(core-site.xml),配置副本数replication为1(hdfs-site.xml),配置JAVA_HOME(hadoop-env.sh)设置为绝对路径,修改默认的hdfs存储目录(包括默认主目录,其下的name目录、data目录)。
- 然后,初始化hdfs文件系统。