Hadoop学习2

Hadoop学习2(环境搭建)

1.安装虚拟机

1.在vmware上安装第一台虚拟机主机名为hadoop100,ip地址为:192.168.137.100,内存4G,硬盘50G,我在(Linux)课程中已经安装,现在只需要在vmware中克隆一下即可

2.克隆好之后进入虚拟机

首先第一台虚拟机hostnamectl -sethostname hadoop101 (修改主机名)

vim /etc/sysconfig/network-scripts/ifcfg-ens33

再将下面的ip地址改为192.168.137.101

我们的虚拟机要与主机进行通信,并且后面的NAMENODE网页与YARN网页都要查看,所以一定要设置主机的局域网防火墙以及关闭我们虚拟机的防火墙

systemctl disable firewalld

systemctl stop firewalld

主机打开搜索框

输入防火墙和网络保护

打开高级设置:入站规则

找到文件和打印机共享将回显请求-ICMPv4的两个都打开启用即可

最后去我们的/etc/hosts

vim /etc/hosts

把我们虚拟机的ip地址的主机名加上

同理我们的windows在C盘的隐藏文件夹System里面的hosts文件也加上即可

这样我们克隆的第一台虚拟机修改完成

第二台虚拟机同理即可

2.安装JDK

将我们的hadoop100通过我们的Xshell软件与我们的主机进行远程操控

通过Xftp将我们主机的jdk压缩包给传入到我们的/opt/software目录,没有创建即可

解压我们的jdk到我们的/opt/module目录下

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

配置环境变量我们会在配置Hadoop环境一起说明

3.安装Hadoop

通过Xftp将我们主机的Hadoop压缩包传入到我们的/opt/software目录,

解压我们的Hadoo到我们的/opt/module目录下

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module

配置环境变量

一般我们的环境变量是通过

vim /etc/profile.d

在里面加入我们的一些变量值

但是如果我们

cd /etc/profile.d

发现里面都是一些Shell脚本

其实就是我们开启启动时会初始化的一些变量

我们也可以在里面写我们的脚本

vim /etc/profile.d/my_env.sh

插入以下内容

#!/bin/bash

#JAVA_HOME

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

export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME

export HADOOP_HOME=/opt/module/hadoop-3.1.3

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

wq即可

后面我们会在添加一些数据,是当前版本的一个bug

source /etc/profile

通过

java -version

hadoop -version

来确定是否安装完成

4.hadoop目录结构解析

重要目录 :

(1)bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本

(2)etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件

(3)lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)

(4)sbin 目录:存放启动或停止 Hadoop 相关服务的脚本

(5)share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例

5.hadoop运行模式

Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

➢ 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用

➢ 伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模 拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。

➢ 完全分布式模式:多台服务器组成分布式环境。生产环境使用。

前两种基本不用我们直接配置第三种

6.编写xsync分发脚本

因为只有16G,所以只敢开三个虚拟机。。。

两个命令如下:

scp(secure copy)安全拷贝

(1)scp 定义 scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

(2)基本语法 scp -r p d i r / pdir/ pdir/fname u s e r @ user@ user@host: p d i r / pdir/ pdir/fname 命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

rsync远程同步

(1)基本语法 rsync -av p d i r / pdir/ pdir/fname u s e r @ user@ user@host: p d i r / pdir/ pdir/fname 命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

(2)选项参数说明

-a 归档拷贝

-v 显示复制过程

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更 新。scp 是把所有文件都复制过去。

我们如果想通过rsync命令来分发给集群的每个服务器我们就可以通过编写一个Shell脚本来实现,通过for循环来遍历每个主机然后同步。

实现如下:

#!/bin/bash

#1. 判断参数个数

if [ $# -lt 1 ]

then

echo Not Enough Arguement!

exit

fi

#2. 遍历集群所有机器

for host in hadoop100 hadoop101 hadoop102

do

echo ==================== $host ====================

#3. 遍历所有目录,挨个发送

for file in $@

do

#4. 判断文件是否存在

if [ -e $file ]

then

#5. 获取父目录

pdir=$(cd -P $(dirname $file); pwd)

#6. 获取当前文件的名称

fname=$(basename $file)

ssh $host "mkdir -p $pdir" rsync -av $pdir/$fname $host:$pdir

else

echo $file does not exists!

fi

done

done

wq即可

我们这个脚本存在我们的bin目录下(创建)

然后修改我们脚本的权限

chmod 755 bin/xsync

运行即可

同步所有虚拟机的软件和环境遍历

cd bin

xsync /opt/module(要求我们的其他虚拟机要有这些路径)

这个过程要输入密码,我们下一节来解决

xsync /etc/profile.d/my_env.sh

然后其他两个虚拟机

source /etc/profile 即可

然后在其他两个虚拟机试一下java和hadoo的版本命令,安装成功即可

7.SSH免密登录配置

如果每一次我们分发都要输入密码太麻烦了,我们要解决一下
首先我们的每一台虚拟机都先ssh其他虚拟机一下(包括自己)

接下来配置免密登录

cd root/.ssh

ssh -keygen -t rsa

敲三个回车

然后

ssh-copy-id hadoop100

ssh-copy-id hadoop101

ssh-copy-id hadoop102

这个意思是将自己的公钥给这个三个主机,这三个主机就能实现免密登录(信任)

因为我用的是root用户

所以我们就分别上另外两台虚拟机重复以上操作即可

8. 集群规划

NameNode 和 SecondaryNameNode 不要安装在同一台服务器

ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在 同一台机器上。

所以我们的决定是NameNode在hadoop100,ResourceManager在hadoop101,SecondaryNameNode在hadoop102

接下来就是我们的配置文件时刻了(别出错不然G)

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml

这四个就是我们要配置的(以上配置文件处于我们hadoop软件目录里面的etc的hadoop里面)

(1)首先core-site.xml

我们要添加一下的东西

<configuration>

​ <!-- 指定 NameNode 的地址 -->

​ <property>

​ <name>fs.defaultFS

​ <value>hdfs://hadoop100:8020

​ </property>

​ <!-- 指定 hadoop 数据的存储目录 -->

​ <property>

​ <name> hadoop.tmp.dir

​ <value>/opt/module/hadoop-3.1.3/data

​ </property>

​ <!-- 配置 HDFS 网页登录使用的静态用户为 root -->

​ <property>

​ <name>hadoop.http.staticuser.user

​ <value>root

​ </property>

</configuration>

​ (2)hdfs-site.xml

<configuration>

​ <!-- nn web 端访问地址–>

​ <property>

​ <name>dfs.namenode.http-address

​ <value>hadoop100:9870

​ </property>

​ <!-- 2nn web 端访问地址–>

​ <property>

​ <name>dfs.namenode.secondary.http-address

​ <value>hadoop102:9868

​ </property>

</configuration>

(3)yarn-site.xml

<configuration>

​ <!-- 指定 MR 走 shuffle -->

​ <property>

​ <name>yarn.nodemanager.aux-services

​ <value>mapreduce_shuffle

​ </property>

​ <!-- 指定 ResourceManager 的地址–>

​ <property>

​ <name> yarn.resourcemanager.hostname

​ <value>hadoop101

​ </property>

​ <name>yarn.nodemanager.env-whitelist
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME

</property>

</configuration>

(4)mapred-site.xml

<configuration>

​ <!-- 指定 MapReduce 程序运行在 Yarn 上 -->

<property>
​ <name>yarn.nodemanager.aux-services

​ <value>mapreduce_shuffle

​ </property>

</configuration>

配置完过后分发即可

cd bin

xsync /opt/module/hadoop-3.1.3/etc/hadoop/

最后配置我们的workers即可

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

在该文件下增加

hadoop100

hadoop101

hadoop102

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

分发该workers文件

9.启动集群

(1)如果集群是第一次启动,需要在 hadoop100 节点格式化 NameNode(注意:格式 化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找 不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式 化。)

命令如下

hdfs namenode -format

启动我们的hdfs了

start-dfs.sh

之前配置了sbin目录的环境变量可以直接使用)

jps

可以在hadoop100里面看到namenode,在103可以看到secondarynamenode

同样我们可以去到hadoop100:9870看到我们的hdfs上存储的数据信息

启动我们的yarn

start-yarn-sh

jps

我们可以在hadoop101上看到resourcesmanager

同样我们可以去到hadoop101:8088看到我们yarn上运行的job信息

10.配置历史服务器

进入我们的mapred-site.xml

vim mapred-site.xml (要在我们的hadoop目录下)

增加以下

<!-- 历史服务器端地址 -->

<property>

<name>mapreduce.jobhistory.address

<value>hadoop100:10020

</property>

<!-- 历史服务器 web 端地址 -->

<property>

<name>mapreduce.jobhistory.webapp.address

<value>hadoop100:19888

</property>

wq

分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

启动历史服务器

mapred --daemon start historyserver

在hadoop100种jps 查看是否启动

开启日志聚集功能

vim yarn-site.xml(在hadoop目录下)

<!-- 开启日志聚集功能 -->

<property>

<name>yarn.log-aggregation-enable

<value>true

</property>

<!-- 设置日志聚集服务器地址 -->

<property>

<name>yarn.log.server.url

<value> http://hadoop100:19888/jobhistory/logs

</property>

<!-- 设置日志保留时间为 7 天 -->

<property>

<name>>yarn.log-aggregation.retain-seconds

<value>604800

</property>

然后wq

分发

xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

然后重启集群

然后执行一个任务看看可以可以看history,可以就安装完成

11.Hadoop常用两个脚本

(1)集群启动停止脚本

vim bin/myhadoop

代码如下:

#!/bin/bash

if [ $# -lt 1 ]

then

echo "No Args Input..."

exit ;

fi

case $1 in

"start")

echo " =================== 启动 hadoop 集群 ==================="

echo " --------------- 启动 hdfs ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"

echo " --------------- 启动 yarn ---------------"

ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"

echo " --------------- 启动 historyserver ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"

;;

"stop")

echo " =================== 关闭 hadoop 集群 ==================="

echo " --------------- 关闭 historyserver ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"

echo " --------------- 关闭 yarn ---------------"

ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"

echo " --------------- 关闭 hdfs ---------------"

ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"

;;

*)

echo "Input Args Error..."

;;

esac

wq

然后chmod 755 bin/myhadoop

然后使用下命令看是否成功

分发

xsync bin/myhadoop

(2)查看服务器java进程脚本

vim bin/jpsall

代码如下:

#!/bin/bash

for host in hadoop102 hadoop103 hadoop104

do

echo =============== $host ===============

ssh $host jps

done

wq

然后改变权限

chmod 755 bin/jpsall

运行一下看是否成功

成功了就分发

xsync bin/jpsall

12.自己发现的一个问题解决方法

ERROR: Attempting to operate on yarn nodemanager as root ERROR

在自己的my_env.sh里面加上

export HDFS_DATANODE_USER=root
export HADOOP_SECURE_DN_USER=hdfs
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root

export YARN_RESOURCEMANAGER_USER=root
export HADOOP_SECURE_DN_USER=yarn
export YARN_NODEMANAGER_USER=root

然后source

然后分发再source

重启集群即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值