大数据学习之路 Hadoop分布式安装篇

Hadoop2.7.2 分布式安装

前言

各位童鞋在安装hadoop的时候,为了避坑、不走弯路,尽量不要安装太新的版本!!!。 建议不要把太多的时间浪费在安装上,省下来时间多多了解一些内部的原理。安装过程一定要仔细,认真,不要将配置信息填错,一个字母填错都是不行的。(踩过坑的 小卧底,真诚的建议。)

正文
虚拟机准备工作

这里我安装的虚拟机是VMware,系统是Centos07的桌面版(大家尽量不要选择 最低要求安装centos7,因为有一些常用的命令需要我们手动安装,例如:vim)(童鞋们需要一定linux 命令的基础知识)

  1. 单台虚拟机配置:内存4G(主节点的内存尽量大一些,至少要有2G以上,避免在运行mapreduce 样例任务的时候,由于内存不足而报错。曾经踩过的坑1),硬盘50G。
  2. 修改虚拟机的静态ip
    hadoop分布式集群中,节点之间要通过网络进行数据传输,因此将ip设置为静态的,方便维护
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33 
将其内容改为:
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes				# 开机是否启用本配置
BOOTPOTO=static			#static表示静态ip  默认为dhcp 表示动态ip
IPADDR=192.168.70.102     # 这里是hadoop102节点的静态ip
PREFIX=24
GATEWAY=192.168.70.2     # 这里是虚拟机的网关 (配置时,将注释去掉,这里只是为了说明)
DNS1=192.168.70.2

静态ip IPADDR设置时,一定要设置在子网下,例如我们这里的子网是192.168.70.0,而我们hadoop102节点的静态ip设置为192.168.70.102

配置完成后重启一下服务:

sudo service network restart

重启完成后,可以查看静态ip设置是否成功:

ip addr
结果:
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:8f:33:ef brd ff:ff:ff:ff:ff:ff
    inet 192.168.70.102/24 brd 192.168.70.255 scope global noprefixroute ens33


虚拟机网关

  1. 修改主机名称
sudo vim /etc/sysconfig/network
文件内容:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME= hadoop102
  1. 配置主机名称映射
sudo vim /etc/hosts
文件添加如下内容:
192.168.70.102 hadoop102
192.168.70.103 hadoop103
192.168.70.104 hadoop104

5.配置windows下的主机名称映射

进入C:\Windows\System32\drivers\etc路径,打开hosts文件,添加如下内容:

192.168.70.102 hadoop102
192.168.70.103 hadoop103
192.168.70.104 hadoop104
  1. 关闭防火墙(特别重要)

具体命令:

停止防火墙
sudo systemctl stop firewalld.service
禁止防火墙开机启动
sudo systemctl disable firewalld.service
查看防火墙状态
sudo firewall-cmd --state

如果防火墙不关闭的话,导致集群启动的时候,datanode无法关联上,虽然datanode进程显示启动,但是在hdfs web端会显示没有datanode(踩过的坑2)

  1. 创建hadoop用户
useradd hadoop
passwd 123456

用户创建之后重启虚拟机:reboot

  1. 配置hadoop拥有root权限
sudo vi /etc/sudoers
内容:
## 
root    ALL=(ALL)     ALL
hadoop	ALL=(ALL)     ALL

  1. 在/opt下创建module和software两个文件夹,并修改拥有权限
sudo mkdir module
sudo mkdir software
sudo chown hadoop:hadoop	module/ software/
  1. 安装JDK1.8

1. 首先要先卸载掉原有的jdk
查询jdk软件包
rpm -qa | grep java
卸载上述查询出来的包
sudo rpm -e --nodeps 软件包
2.将下载好的jdk1.8 linux版的安装包上传到 software文件夹下,解压到module下:
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
3.配置JDK环境变量:
先进入jdk解压的路径,再用pwd命令查看jdk的完整路径:/opt/module/jdk1.8.0_144
添加环境变量:sudo vi /etc/profile
添加如下内容:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
保存退出后刷新一下:source /etc/profile
测试jdk是否安装成功:java -version
输出:java version "1.8.0_144" 即安装成功。

克隆虚拟机

再克隆出两台虚拟机,具体克隆流程可参考VMware 如何通过现有虚拟机克隆新的虚拟机 (图文)
虚拟机克隆完成后,修改ip,配置映射,原理同上。但是hadoop103 ---- 192.168.70.103;hadoop104----192.168.70.104

设置三个节点 免密登录
hadoop102 .ssh]$ ssh-keygen -t rsa
hadoop102 .ssh]$ ssh-copy-id hadoop102
hadoop102 .ssh]$ ssh-copy-id hadoop103
hadoop102 .ssh]$ ssh-copy-id hadoop104

分别在三个节点上都执行一遍上述4个命令,一路回车即可
配置完成后,用ssh hadoop103测试一下是否不需要密码就可以登录? ( exit退出登录)

集群配置
集群规划

注意:NameNode和SecondaryNameNode不要安装在同一台服务器
注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
集群分配

解压hadoop安装包
@hadoop102 ~]$ cd /opt/software/
@hadoop102 software]$ tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
查看 安装包是否解压
@hadoop102 software]$ ls /opt/module/
hadoop-2.7.2
配置hadoop环境变量
现获取hadoop安装目录
@hadoop102 hadoop-2.7.2]$ pwd
/opt/module/hadoop-2.7.2
再配置profile文件,添加HADOOP_HOME
@hadoop102 hadoop-2.7.2]$ sudo vi /etc/profile
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
保存退出后source /etc/profile 使得环境变量生效
测试是否安装成功
@hadoop102 hadoop-2.7.2]$ hadoop version
Hadoop 2.7.2
配置文件修改

这里我们需要修改8个配置文件:

  1. core-site.xml
  2. hdfs-site.xml
  3. yarn-site.xml
  4. mapred-site.xml
  5. hadoop-env.sh
  6. yarn-env.sh
  7. mapred-env.sh
  8. slaves
    这8个文件均在hadoop-2.7/etc/hadoop/ 目录下

core-site.xml 配置

<configuration>
	<!-- 指定HDFS中NameNode的地址 -->
	<property>
			<name>fs.defaultFS</name>
		  <value>hdfs://hadoop102:9000</value>
	</property>

	<!-- 指定Hadoop运行时产生文件的存储目录 -->
	<property>
			<name>hadoop.tmp.dir</name>
			<value>/opt/module/hadoop-2.7.2/data/tmp</value>
	</property>

</configuration>

hdfs-site.xml配置

<configuration>
	<property>
			<name>dfs.replication</name>
			<value>1</value>
	</property>

	<!-- 指定Hadoop辅助名称节点主机配置 -->
	<property>
		  <name>dfs.namenode.secondary.http-address</name>
		  <value>hadoop104:50090</value>
	</property>

</configuration>

yarn-site.xml配置

<!-- Site specific YARN configuration properties -->
	<!-- Reducer获取数据的方式 -->
	<property>
			<name>yarn.nodemanager.aux-services</name>
			<value>mapreduce_shuffle</value>
	</property>

	<!-- 指定YARN的ResourceManager的地址 -->
	<property>
			<name>yarn.resourcemanager.hostname</name>
			<value>hadoop103</value>
	</property>

	<!-- 日志聚集功能使能 -->
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	</property>

	<!-- 日志保留时间设置7天 -->
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>604800</value>
	</property>

</configuration>

mapred-site.xml配置

<configuration>
	<!-- 指定MR运行在Yarn上 -->
	<property>
			<name>mapreduce.framework.name</name>
			<value>yarn</value>
	</property>

	<!-- 历史服务器端地址 -->
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>hadoop102:10020</value>
	</property>

	<!-- 历史服务器web端地址 -->
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>hadoop102:19888</value>
	</property>

</configuration>

hadoop-env.sh配置;yarn-env.sh配置;mapred-env.sh配置
这三个env文件 均需要导入JAVA_HOME,其他的内容暂时不用修改

export JAVA_HOME=/opt/module/jdk1.8.0_144

slaves配置
这个文件配置集群的节点有哪些,注意这个文件不能有多余的内容,不能有空格或者空白行。 踩过的坑 3

文件内容为:

hadoop102
hadoop103
hadoop104
编写分发脚本(xsync:一键将所选内容分发到其他机器上)
切换根目录,创建bin文件夹
@hadoop102 ~]$ mkdir bin
切换到bin文件夹,编辑xsync文件
@hadoop102 bin]$ vi xsync
文件内容如下:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for host in hadoop102 hadoop103 hadoop104
do
    echo ------------------- $host --------------
    rsync -av $pdir/$fname $user@$host:$pdir
done

保存退出后,修改文件权限
@hadoop102 bin]$ chmod 777 xsync

测试:
@hadoop102 bin]$ xsync /home/hadoop/bin
执行完成后,hadoop103和hadoop104两台机器上就同步了/home/hadoop/bin
(rsync 只同步内容不同的文件,内容完全相同的文件不同步)

注意:如果将xsync放到/home/hadoop/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。

最后我们将hadoop2.7分发至每个节点

xsync /opt/moudle/hadoop2.7.2/
集群启动

主节点hadoop102格式化

  1. 集群第一次启动之前要在主节点hadoop102上格式化namenode
    注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程;如果不是第一次格式化需要删除data和logs数据。
    如果不删除data和logs数据,重新格式化再启动的时候,namenode与之前的存在datanode原始数据就对应不上了。(可能会出现PID不一致的问题 踩过的坑4
    格式化命令:@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format
    窗口出现 successful formatted等提示,即格式化完成。

启动集群
因为NameNode和ResourceManger不是同一台机器,不能在NameNode上启动YARN,应该在ResouceManager所在的机器上启动YARN。
这里我们在hadoop102上启动hdfs;在hadoop103上启动yarn

hadoop102上的启动hdfs的命令:
@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
通过jps查看java进程
@hadoop102 hadoop-2.7.2]$ jps
4186 NameNode
4382 Jps
4461 DataNode
4713 NodeManager

hadoop103 上启动 yarn 的命令
@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
@hadoop103 hadoop-2.7.2]$ jps
3273 ResourceManager
3214 NodeManager
3218 DataNode
3288 Jps

@hadoop104 hadoop-2.7.2]$ jps
3221 DataNode
3185 NodeManager
3283 SecondaryNameNode
3364 Jps

windows上打开浏览器访问:hadoop:50070 进入集群hdfs的web界面。
如果打不开请检查防火墙是否关闭。同时本机尽量不要开启代理,开fan墙(此处用拼音,大家都懂的!!!)之类的软件。
访问yarn的web界面:hadoop103:8088

启动历史服务器
@hadoop102 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver

想要关闭时,直接将上述命令中的start改成stop即可

结束语

各位童鞋,我在这里多唠叨几句话。
尽管有的人是完完全全的按照上面的步骤,仔细,认真的安装的,但是你们大多数还是会遇到各种各样的异常,错误等。为了节省时间、不影响心情,大家尽量不要选择太新的版本安装(小卧底 之前吃过版本的亏),尽量选择稳定一些的版本。安装过程中,如果遇见了错误,不要慌张。首要的任务就是找出错误信息,这些信息大部分都能在hadoop/logs下的日志文件中找到,定位到错误后再百度进行错误解答。而且后续还要搭建zookeeper,hive,flume,kafka,Hbase等框架,这些框架与hadoop都是有版本的对应,建议大家不要过于随意的安装(曾经踩过的坑 5)。最后希望各位路过的道友们在hadoop安装上的过程中,一切顺利!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值