Hadoop入门之简易集群搭建

虚拟机准备

  1. 安装Linux(我使用的是CentOS7,7之前的版本可能些许命令有差异)
    ** 因为后续一些Hadoop中的服务需要配置防火墙,所以安装完第一件事,关闭Linux的防火墙 **
    虽然我们也可以配置防火墙的过滤表,但是我这里偷懒了,直接关掉。
    systemctl status firewalld.service 先查看防火墙是否开启
    systemctl stop firewalld.service 若开启则停止防火墙
    systemctl disable firewalld.service 禁止防火墙自启
  2. 配置Linux的静态ip
    /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
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="ens33"
UUID="758ce58a-54f6-4c95-91df-c80d2a911a54"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.102.54
NETMASK=255.255.255.0
GATEWAY=192.168.102.1
将bootproto由dhcp改为static,并加上最后三行的配置,具体地址跟真实主机的ip配置在同一网段且ip不冲突即可。
虽然可以不这样配置静态ip,但后续我们是通过ssh协议远程连接Linux。如果是dhcp方式自动分配ip的话,那么可能多台Linux启动的时候,ip就会每次都不是固定的;设置了静态ip就不用这么麻烦了,我们启动Linux后,直接远程连接就行了。
  1. 配置Linux的hosts文件
    /etc/hosts
192.168.102.52 realhost
192.168.102.53 hp100
192.168.102.54 hp101
192.168.102.55 hp102
192.168.102.56 hp103
我们搭建的是一个三台Linux服务器的简易集群,所以只需要配置hp101~hp103的地址就好了,另外配置的真实主机跟hp100是我安装完Linux测试用的。
  1. 克隆虚拟机
    我们现在只有一台Linux服务器,还需要两台来搭建一个集群,再安装两次Linux太费时间了,克隆会更加省时。以vm为例:
    右击我们已经安装好的Linux,选择 管理 => 克隆,一直下一步,克隆方式选择 完整克隆 ,然后选择克隆的虚拟机的存储位置即可完成虚拟机的克隆。
    在这里插入图片描述

  2. 克隆Linux配置
    我们完成克隆后,需要对克隆的两台Linux服务器,配置ip、主机名。
    修改克隆Linux服务器的UUID、ip地址即可,它们三台服务器的这些地址都不能冲突。
    修改主机名命令,hostnamectl set-hostname 要修改的主机名
    或者可以修改/etc/hostname文件 (这种方法需要重启后生效)
    完成后,我们可以直接使用hostname查看当前主机名
    最后将三台Linux服务器reboot 重启,使它们的这些配置重新加载生效。
    ** 注意!!!三台Linux服务器的主机名都不可以有下划线等一些符号出现,如果后续启动hdfs等服务报错时,去日志查看即可,所以主机名命名更加严格!!! **

  3. 创建用户
    useradd [-g] 用户名 -g为指定创建用户的组
    passwd 用户名 为用户指定密码
    同时我们还将给这个用户一些权限,修改/etc/sudoers文件
    在这里插入图片描述
    用vim编辑器打开,一般模式下在root用户那一行按yy复制,然后按p粘贴。修改复制的那一行的root为我们创建的用户即可完成对我们新创建用户的权限修改。

配置jdk

前置工作:
>卸载系统自带jdk
	1>查看是否存在
		rpm -qa | grep java
	2>卸载jdk
		rpm -e 软件包名 [ --nodeps ]  
		可选属性说明:忽略依赖删除包
>验证是否删除干净
	使用命令 which java 查看
	若提示找不到java则可以进行安装的工作
  1. 使用文件传输软件或者在远程连接时使用rz命令,在弹出的对话框中选择要上传的gz压缩包
    需要注意的是,使用rz命令传输后的文件就处于当前路径下,所以想对系统文件整理规范,在使用命令前需要先切到专门存储软件安装包的路径下。
  2. 解压gz压缩包
    使用命令 tar -zxvf gz压缩包名 [ -C 要解压到的路径]
    进行gz压缩包的解压
    ** 这里我们将解压后的文件夹所有者跟所属组都改成我们创建的用户,我这里创建的用户是min,所以命令是 chown min:min jdk1.8.0_144,后面的Hadoop也是如此**
  3. 配置环境变量
    首先我们进入解压后的目录,使用pwd命令复制当前绝对路径
    例如:
[min@hp101 jdk1.8.0_144]$ pwd
/opt/software/jdk1.8.0_144
  修改/etc/profile文件
  一般模式下按大写G直接跳到文档末尾
  追加如下配置,将前面复制的jdk的路径粘贴,尽量不要手打,容易出错
  然后按esc键切到命令模式,输入  :wq 保存并退出
  但是这样子系统不会立即加载我们刚刚做的配置
  我们可以使用命令source /etc/profile让Linux重新加载配置
  	然后试着使用命令 java -version 验证jdk是否配置成功
  或者reboot重启 重启太麻烦了,我们一般使用第一种方法
# JAVA_HOME
JAVA_HOME=/opt/software/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin

配置Hadoop

Hadoop的配置与jdk步骤基本一致
为了后续启动服务的方便,我们这里也将Hadoop的sbin目录也一起配置了
命令模式下 :wq 保存并退出,使用命令source /etc/profile 加载配置
使用 hadoop version 查看Hadoop是否配置成功
ps:   
	1.hadoop version中Hadoop的大小写问题
	2.我个人学习的Hadoop版本为2.7.2
#HADOOP_HOME
HADOOP_HOME=/opt/software/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

集群配置

  1. 集群规划部署
    在这里插入图片描述
    ** 注意!!!!!!!!!namenode与secondarynamenode尽量不要配置在一个服务器上,因为假设当前服务器namenode可使用64G,那么配置了secondarynamenode以后,namenode仅可使用32G,secondarynamenode要分走一半内存。**
  2. 配置集群
    ** 配置文件基本都在安装路径下的etc/hadoop下 **
    1>核心配置文件
    ** core-site.xml **
<!-- 指定HDFS中Name Node地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://hp101:9000</value>
</property>
<!-- Hadoop运行时产生的临时文件存储地址 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/software/hadoop-2.7.2/data/temp</value>
</property>
 2>HDFS配置文件
 hadoop-env.sh   配置Hadoop的JAVA_HOME
# The java implementation to use.
export JAVA_HOME=/opt/software/jdk1.8.0_144
hdfs-site.xml
<!-- 配置集群的副本数量,虽然默认就是3(官网可查) -->
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
<!-- 配置集群的辅助名称结点 -->
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hp103:50090</value>
</property>
3>Yarn配置文件
yarn-env.sh 配置JAVA_HOME
# some Java parameters
export JAVA_HOME=/opt/software/jdk1.8.0_144
yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<!-- 配置yarn的ResourceManager -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hp102</value>
</property>
4>配置MapReduce
mapred-env.sh 配置JAVA_HOME
export JAVA_HOME=/opt/software/jdk1.8.0_144
配置mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml中写配置
<!-- 指定MR运行在yarn上 -->
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
	做完这些配置后,将集群的另外两台服务器也需要做相同配置,可以通过替换等方式实现,也可以
	用脚本,我将它们放在文末。
  1. ssh无密登录配置

     	前置工作:我们需要使用ssh命令连接一下其他服务器家目录下才会有.ssh这个文件夹,例如在
     hp101上 ssh hp102 后,hp101的家目录下就会有.ssh这个文件夹,用 ls -al命令可查看。
     快速回到家目录使用cd命令,直接回车。进入.ssh文件夹,使用ssh-keygen -t rsa命令然后连
     按三次回车(加上输完命令后的那个回车是连按四个),生成公钥和私钥。然后我们将公钥拷贝到要
     无密登录的服务器上。
     	ssh-copy-id hp101
     	ssh-copy-id hp102
     	ssh-copy-id hp103
     	我们是在101这台服务器上生成的公钥,但是我们也要给它自己拷贝一份,否则使用ssh连接的
     时候,也是会提示我们需要输入密码,所以也需要给101它自己拷贝一份自己的公钥。
     
     注意:
     	我们需要切换到101的root用户,按上述的步骤配置无密登录到101、102、103
     	同时也需要在102上,对三台服务器做无密登录配置
     	
     	说明:
     		因为集群服务器多了以后,我们总不至于一台一台手动启动,这样很不现实。所以我们要
     一键式启动集群,第一步就是要做这个无密登录。
     		然后这个无密登录的原理,就是非对称加密类似的思想。
    
  2. 群起集群

     1>配置slaves
    
hp101
hp102
hp103
	需要对101、102、103都做该配置	
	该配置文件不能有多余的空行,文件尾也不能有空格,配置的名称也不允许出现空格!!!
	
	2>启动集群
	如果是第一次启动集群,需要格式化NameNode,使用jps命令查看当前启动服务。若只有jps服务,
则可以进行下一步,否则需要停止这些服务,并检查安装路径下是否有data文件夹跟logs文件夹,如果存
在,则需要删除。
	rm -rf data/ logs/
	在一切就绪以后,在101上初始化NameNode,
	bin/hdfs namenode -format
	
	启动HDFS
	sbin/start-dfs.sh
	使用jps命令查看各个机器是否符合我们集群规划部署那张图
	
	启动yarn
	sbin/start-yarn.sh
	注意:yarn的启动应该在ResourceManager配置的服务器上启动,我们当前给它配置在了102,所
以我们需要在102上启动yarn。
	此时集群启动完成。
	我们可以在浏览器中输入hp103:50090查看SecondayNameNode信息
	hp101:50070查看NameNode信息
  1. 集群基本测试

     1>上传文件
     hdfs dfs -mkdir -p /user/min/input   这里创建的多级文件夹可自己命名
     hdfs dfs -put hello.java /user/min/input    -put后跟的就是要传到hdfs服务的文件
     然后在http://hp101:50070/explorer.html就能看到hdfs我们上传的内容,点击上传的文件
     我们在最后的Availabity应该是可以看到有hp101~hp103三个服务器的主机名的
     如若不能,尝试关闭三台服务器的防火墙后,把当前服务都关掉重启集群
     
     2>hdfs在本机存储的位置
     安装路径下的data文件夹下,这个由我们在上面的配置文件决定
     
     3>下载
     bin/hadoop fs -get 要从hdfs上下载的文件 指定下载到本机的位置
    
  2. 集群启动/停止方式

     前提:配置了ssh
     1>hdfs群起/停止
     start-dfs.sh   /	stop-dfs.sh
     2>yarn群起/停止
     start-yarn.sh	/	stop-yarn.sh
    

写在文末

文中有些许之处可能不是很合理,比如101在配置完ip、hosts文件、jkd环境跟Hadoop环境后再进行虚拟机的克隆会更加合理一点,不然就要进行多次安装配置。然后其中三台服务器写配置时,没有脚本进行同步配置,也是不合理的。

同步集群配置脚本:
	在101上cd回到家目录
	mkdir bin
	cd bin/
	vim xsync编写同步脚本如下
	要想这个脚本实现效果,我们在命名主机名的时候就要有些许相似点,比如我的命名是
	hp101、hp102、hp103
	然后修改脚本的权限
	chmod 777 xsync
	xsync /home/min/bin 将该脚本同步给另外两个服务器测试是否成功		
#!/bin/bash
#1 get the paraments, if not have , exit
pcount=$#
if((pcount==0))
then
        echo "no args"
        exit
fi

#2 get the file name
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 get the absolute path of parent
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 get the current user
user=`whoami`

#5 loop
for((host=102;host<104;host++))
do
        echo -------- hp$host --------
        rsync -rvl $pdir/$fname $user@hp$host:$pdir
done

最后,文中若还有哪些不足之处,还望路过的大佬积极指出。plz.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值