本文用到:

Windows系统:Windows 10 家庭版

平台:VMware ® Workstation 15 Pro

连接工具:Xshell 6

Linux系统:Linux Centos 7 64位

杂项:【记录路径:Windows系统txt文本文档】

解释:

Ⅰ:文中提到的编辑为vim命令,vim为彩色代码,对用户更友好。

vim命令需要安装,安装命令为:yum install -y vim 【前提:能联网】

vi也是编辑命令,为Linux系统自带编辑命令,没有彩色代码,易导致看错行。

笔者推荐vim

Ⅱ:多使用Tab键提示,可以确保你的输入是否正确,可以检查该目录下是否有你需要的文件以及命令。


前期准备:

     Linux环境:

配置网络:

命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33(ens33是网卡名称,无需统一)

IP内容:

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=9dbdc0c5-32f7-****-****-21c56a201450
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.4
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114

红色标记为着重注意,配完IP后保存:键盘ESC键,冒号:加上wq回车。

克隆两台,分别更改IP,避免IP冲突

所有机器,配完IP重启网卡:service network restart

输入:ip a 或 ifconfig 查看IP

ping一下baidu.com能ping通即为打通网络成功。

   Xshell 6 安装与配置:点击跳转下载Xshell6

除安装位置外,其他步骤直接下一步。

安装完成后打开Xshell 6

快捷键Alt+N为新建会话。

连接栏:

名称:你要的主机名字(master,slave1,slave2)

协议普遍无需调整,需要就调整

主机:三台机器的IP

连接栏的下方的用户身份验证

方法:无需更改

用户名,安装时候的用户名,一般为root

密码:为你设置的root用户密码

配置完成,双击打开,接受并允许操作。

Xshell 6 小技巧:

如果小键盘,输入数字乱码蹦字母,打开Xshell的会话管理器→右键你的会话名称→属性→VT模式→初始数字键盘模式→设置为普通→确定→重启该窗口


更改hostname名称:

hostnamectl set-hostname 主机名(一台master,两台slave分别为slave1,slave2)

科普小知识:

临时修改主机名:hostname 临时主机名

永久修改主机名:hostnamectl set-hostname永久主机名 是对/etc/hostname文件的内容进行修改

 

回车后输入bash命令更新主机名或输入hostname查看主机名


配置hosts文件:

vim /etc/hosts添加自己的三台机器IP:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.38.137 master
192.168.38.138 slave1
192.168.38.139 slave2

发送给其他两台主机:

scp /etc/hosts root@slave1:/etc/

scp /etc/hosts root@slave2:/etc/

提示输入yes就输入yes,再输入密码发送hosts文件

解释:scp /etc/hosts root@slave1:/etc/

发送本机(一般为master)主机的etc下的hosts文件到slave1的root用户名下的/etc文件夹下。

配置免密后无需加root@主机名称,直接输入主机名即可,例:

scp /etc/profile slave1:/etc/

配置免密:点击查看→SSH三台主机免密登录配置


开始搭建Hadoop分布式文件系统:

上传jdk、hadoop、zookeeper压缩包

新建tar包文件夹和apps文件夹:

# tar文件夹为存放tar包,apps为存放解压后的文件。

我在/usr下建立的两个文件夹:

进入/usr/文件夹:cd /usr

新建文件夹:mkdir apps tar#直接新建两个文件夹(apps、tar)【中间有空格间隔】

进入tar文件夹上传三个软件的压缩包(jdk、zookeeper、Hadoop):rz回车找到文件即可上传。

如果提示未找到命令或报错请安装上传命令:yum install -y lrzsz

===这里推荐使用Xftp,不需要安装rz命令===

上传完成后输入ls查看:

hadoop-2.7.4.tar.gz

jdk-8u161-linux-x64.tar.gz

zookeeper-3.4.10.tar.gz

去apps文件夹新建jdk、zookeeper、Hadoop的目录以及子目录:

cd /usr/apps/
mkdir java hadoop zookeeper

【中间有空格间隔】

zookeeper需要两个文件夹为data、log,新建:

进入zookeeper文件夹新建:

mkdir data log

创建完成后进入data文件夹:

cd data

查看路径记录下来:pwd查看路径,将路径在txt文档中保存,方便记忆,节省时间。

jdk的解压目录,Hadoop的解压目录,zookeeper的解压目录亦是同理。

 

Hadoop需要有存放数据点tmp

进入Hadoop目录新建tmp文件夹,查看路径,保存路径在txt文档(步骤繁琐不再细讲)


解压:tar -zxvf

三个文件全部解压到指定目录:

进入到tar文件夹:

cd /usr/tar

解压jdk到指定文件夹:

tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/apps/java/

【我jdk建的目录为java】

解释:

zxvf为四个参数,笔者未深究,有兴趣可以去查查。

-C是指定目录,如未指定(tar -zxvf jdk-8u161-linux-x64.tar.gz即为解压到当前文件夹)

解压zookeeper到指定文件夹:

tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/apps/zookeeper/

解压Hadoop到指定文件夹:

tar -zxvf hadoop-2.7.4.tar.gz -C /usr/apps/hadoop/

解压后记录解压目录:

进入解压目录后pwd查看路径:

[root@master jdk1.8.0_161]# cd /usr/apps/java/jdk1.8.0_161/
[root@master jdk1.8.0_161]# pwd
/usr/apps/java/jdk1.8.0_161

记录路径,zookeeper、Hadoop同理


配置环境变量:vim /etc/profile

【到了发挥vim彩色代码的用途时间了】

在文档底部添加配置文件信息:

【shift+G为快速到达文档底部。】

i键插入:

#JAVA_HOME
export JAVA_HOME=/usr/apps/java/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
#ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/usr/apps/zookeeper/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/usr/apps/hadoop/hadoop-2.7.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

标红需要注意路径,看是否为你的路径,其他无需更改。

配置完成后wq保存,source /etc/profile 初始化配置文件后输入java -version查看Jdk是否安装完成。

【以上环境变量为三个软件的环境变量一遍过类型。】

发送配置文件:

scp /etc/profile slave1:/etc/

scp /etc/profile slave2:/etc/

配置zookeeper:

   配置zoo.cfg文件:

 

进入zookeeper解压目录下的conf文件夹

cd /usr/apps/zookeeper/zookeeper-3.4.10/conf/

ls查看未发现zoo.cfg只有zoo_sample.cfg,这是个模板,复制一份:cp命令【copy复制】:

cp zoo_sample.cfg zoo.cfg

编辑zoo.cfg:vim zoo.cfg:

查看有无以下内容:

dataDir=/usr/apps/zookeeper/data
dataLogDir=/usr/apps/zookeeper/log

【标红为自己的路径,上面有提到让记录】

最后加:

server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

进入到zookeeper的data目录下:

cd /usr/apps/zookeeper/data/

创建myid文件:

vim myid输入1/2/3【/为或者】,wq保存退出


配置Hadoop:

进入Hadoop的配置文件目录:

cd /usr/apps/hadoop/hadoop-2.7.4/etc/hadoop/

复制生成mapred-site.xml文件:

cp mapred-site.xml.template mapred-site.xml

修改文件:

vim hadoop-env.sh

25行的java_home后面删除替换成自己的Jdk路径:

# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.

# The java implementation to use.
export JAVA_HOME=/usr/apps/java/jdk1.8.0_161

vim yarn-env.sh

23行的export前面有#注释,删除掉,将后面的路径该为自己的jdk路径。

export JAVA_HOME=/usr/apps/java/jdk1.8.0_161
if [ "$JAVA_HOME" != "" ]; then
#echo "run java in $JAVA_HOME"
JAVA_HOME=$JAVA_HOME
fi

if [ "$JAVA_HOME" = "" ]; then
echo "Error: JAVA_HOME is not set."
exit 1
fi

core-site.xml

<configuration>
<!-- 指定HDFS中NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/apps/hadoop/tmp</value>
<description>Abasefor other temporary directories.</description>
</property>
</configuration>

hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>2</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.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name><value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
</configuration>

mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

slaves

slave1
slave2

配置完毕


分发所有文件:

scp -r /etc/profile slave1:/etc/

scp -r /etc/profile slave1:/etc/

发送后所有机器要重新初始化profile文档

所有机器:source /etc/profile

 

scp -r /usr/apps slave1:/usr/

scp -r /usr/apps slave2:/usr/

修改zookeeper下的data文件夹下myid:

slave1改为2

slave2改为3


特别提醒:关闭防火墙


启动zookeeper:

三台机器:

zkServer.sh start

会有leader和follow两种状态,谁先谁后都无所谓


启动Hadoop:

格式化主节点(master):

hdfs namenode -format

【启动过就删除两个slave节点下的hadoop的tmp文件夹下的所有东西,没有启动过不用删除。】

启动Hadoop:start-all.sh

jps查看命令

[root@master hadoop]# jps
5236 Jps
4838 SecondaryNameNode
4410 QuorumPeerMain
4986 ResourceManager
4653 NameNode
=====分割线=====
[root@slave1 ~]# jps
3769 Jps
3803 NodeManager
3693 DataNode
3614 QuorumPeerMain
=====分割线=====
[root@slave2 ~]# jps
3696 Jps
3478 QuorumPeerMain
3563 DataNode
3663 NodeManager

 

浏览器打开你的ip+:50070和你的IP+:18088

查看结果。

一般启动hadoop为start-dfs.sh和start-yarn.sh

start-all.sh已经过时了。


教程完毕