最近在上大数据选修课,课程实验需要在CentOS上安装Hadoop和zookeeper,遇到了很多问题,记录一下。(原本准备从头写个完整的安装记录的,发现我实在是不想回头看一遍了,就记录一些需要注意的地方吧)
虚拟机的安装
安装过程按照书上面来基本没有什么问题,需要注意的地方是:
选择启用网络和最小安装,还有设置root密码
(最小安装时没有图形界面,不过咱们也用不上)
安装ifconfig
启动系统后输入ifconfig没找到命令
输入yum install net-tools
,根据提示输入y
就安装完成了,注意安装软件得先切换为root用户。
这时可以输入ifconfig
来查看IP地址和网卡名
上面eth0
和192.168.153.101
是我修改好的,刚刚装好的网卡应该是ensxx
,比如我的是ens33
,修改步骤看下面。
SSH连接进行操作
经过ifconfig
得到IP地址后我们就可以用ssh来操作了,这样复制粘贴都还方便点。ssh连接的软件有很多,个人觉得Mobaxterm挺不错的。
新建Session,填入IP地址和root,双击左边侧栏出现的选项就可以连接
左侧是目录,方便我们找到文件路径,也可以进行一些文件上传的操作(后面上传hadoop、jdk和zookeeper都可以在这里搞)
修改网卡名和IP地址
刚装好的CentOS7,网卡名称不是书上面说的eth0,所以很多同学改了ifcfg-eth0
发现没用效果,所以我们要进行一些修改
- 首先修改grub
在root
用户下,输入
vi /etc/sysconfig/grub
,添加这两个参数,net.ifnames=0 biosdevname=0
。如图:
:wq
保存退出。 - 输入
grub2-mkconfig -o /boot/grub2/grub.cfg
,如图
- 将ifcfg-ens33重命名为ifcfg-eth0
我们先看一下/etc/sysconfig/network-scripts/
下的文件
注意这里的ifcfg-ens33
,你的可能是别的名称(跟ifconfig上面显示的一样)。
重命名,输入
mv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0
- 修改eth0文件,输入
vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改为:
PROXY_METHOD="none"
BROWSER_ONLY="no"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="9f7ed09b-c21b-43e2-b089-688effe1d1fa"
HWADDR=00:0C:29:7E:73:B9
DEVICE="eth0"
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.153.101
NETMASK=255.255.255.0
GATEWAY=192.168.153.2
DNS1=192.168.153.2
这里的HWADDR修改为你实际的值,通过ip addr
查看
后面复制出5台虚拟机后,也要修改这里的HWADDR
为实际值,还有DEVICE="eth0"
和NAME="eth0"
也是要改的(eth1、eth2…)
修改完注意要重启虚拟机
- 修改完IP地址后,Mobaxterm的ssh对应IP地址也要修改,VMware也要相应地修改:
CentOS7关闭防火墙
CentOS7关闭防火墙的方式跟书上不一样
停止防火墙:systemctl stop firewalld
开机禁用防火墙:systemctl disable firewalld
查看防火墙状态:systemctl status firewalld
zookeeper安装
zookeeper启动后执行jps
后发现没有QuorumPeerMain
,可能是装的版本缺少了jar文件,也有可能是前面hadoop配置文件写错了,可以查看输出日志(就是那个xxx.out文件)
- zookeeper推荐用3.4.14版本的
- myid文件里面不能有空行
Hadoop配置文件
这里的主机名和hadoop文件路径可能有些人的不一样,要改成自己的
- hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>HAMaster001:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>HAMaster002:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>HAMaster001:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>HAMaster002:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://HASlave001:8485;HASlave002:8485;HASlave003:8485/QJCluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/software/hadoop-2.9.2/QJEditsData</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/home/hadoop/software/hadoop-2.9.2/ensure.sh)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
- core-site.xml
<configuration>
<property>
<name>ha.zookeeper.quorum</name>
<value>HASlave001:2181,HASlave002:2181,HASlave003:2181</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/software/hadoop-2.9.2/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>ipc.client.connect.retry.interval</name>
<value>10000</value>
</property>
<property>
<name>ipc.client.connect.max.retries</name>
<value>100</value>
</property>
</configuration>
- yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RMHA</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>HAMaster001</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>HAMaster002</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>HASlave001:2181,HASlave002:2181,HASlave003:2181</value>
</property>
</configuration>
- hadoop-env.sh只需要改JAVA_HOME路径
启动顺序
- 先启动三个slave,分别执行
~/software/zookeeper-3.4.14/bin/zkServer.sh start
- 然后在任意一台Master执行
start-dfs.sh
start-yarn.sh
两台机器都是standby状态
在任意一台Master执行hdfs zkfc -formatZK
,然后重新执行start-dfs.sh
配置成功效果
One More Thing
有些同学可能不习惯纯命令行的操作,也不习惯用vi或者vim来编辑文本,那就可以试试VSCode的Remote Development,可以直接用vscode来编辑文本,上传文件也可以直接拖进来。如图: