Hadoop学习总结 (二)——环境搭建

1、环境搭建的流程

(1)安装多台虚拟机,系统为CentOS

 

(2)安装epel-release

yum install -y epel-release

 

(3)如果Linux安装的是最小系统版本,还需要安装net-tool和vim

yum install -y net-tools

yum install -y vim

 

(4)关闭防火墙,以及开机自启

systemctl stop firewalld

systemctl disable firewalld.service

 

(5)创建用户并修改密码

 

(6)修改用户ROOT权限

vim /etc/sudoers

## Allow root to run any commands anywhere

root    ALL=(ALL)     ALL

 

## Allows people in group wheel to run all commands

%wheel  ALL=(ALL)       ALL

atguigu   ALL=(ALL)     NOPASSWD:ALL

注意:atguigu这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了atguigu具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以atguigu要放到%wheel这行下面。

 

(7)在/opt目录下创建文件夹,并修改所属主和所属组

在/opt目录下创建module、software文件夹

mkdir /opt/module

 mkdir /opt/software

修改module、software文件夹的所有者和所属组均为atguigu用户

chown atguigu:atguigu /opt/module

chown atguigu:atguigu /opt/software

 

(8)卸载虚拟机自带JDK

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

  • rpm -qa:查询所安装的所有rpm软件包
  • grep -i:忽略大小写
  • xargs -n1:表示每次只传递一个参数
  • rpm -e –nodeps:强制卸载软件

 

(9)重启

 

(10)克隆多台虚拟机,并设置为静态IP

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

DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.10.102
PREFIX=24
GATEWAY=192.168.10.2
DNS1=192.168.10.2

 

(11)查看LINUX虚拟网络编辑器

 

(12)查看主系统适配器VMNET8的IP

保证LINUX系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。

 

(13)修改克隆主机名

修改主机名称

vim /etc/hostname

hadoop102

配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts

vim /etc/hosts

添加如下内容

192.168.10.100 hadoop100

192.168.10.101 hadoop101

192.168.10.102 hadoop102

192.168.10.103 hadoop103

192.168.10.104 hadoop104

192.168.10.105 hadoop105

192.168.10.106 hadoop106

192.168.10.107 hadoop107

192.168.10.108 hadoop108

 

(14)重启虚拟机

 

(15)修改主机HOSTS

192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108

 

(16)安装JDK

将JDK压缩包导入opt目录下的softwae文件夹中

并解压到/opt/module目录下

配置JDK环境变量

sudo vim /etc/profile.d/my_env.sh

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

接着source一下/etc/profile文件,让新的环境变量PATH生效

source /etc/profile

最后测试是否成功

java -version

 

(17)安装HADOOP

下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/

同JAR将压缩包放入/opt/software/

解压到

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

配置环境变量

vim /etc/profile.d/my_env.sh

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

测试

hadoop version

 

(18)Hadoop重要目录

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

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

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

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

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

 

2、Hadoop运行模式

(1)Hadoop运行模式包括:本地模式伪分布式模式以及完全分布式模式

  • 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
  • 伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
  • 完全分布式模式:多台服务器组成分布式环境。生产环境使用。

 

(2)完全分布模式部署流程

1)准备3台客户机(关闭防火墙、静态IP、主机名称)

2)安装JDK

3)配置环境变量

4)安装Hadoop

5)配置环境变量

6)配置集群

7)单点启动

8)配置ssh

9)群起并测试集群

 

(3)集群分发脚本XSYNC

1)scp(secure copy)安全拷贝

(1)scp定义

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

(2)基本语法

scp    -r        $pdir/$fname             $user@$host:$pdir/$fname

命令   递归     要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称

(3)案例实操

(a)在hadoop102上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上。

 scp -r /opt/module/jdk1.8.0_212  atguigu@hadoop103:/opt/module

(b)在hadoop103上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上。

scp -r atguigu@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

(c)在hadoop103上操作,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上。

scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module

 

2)rsync远程同步工具

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

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

(1)基本语法

rsync    -av       $pdir/$fname      $user@$host:$pdir/$fname

命令   选项参数   要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称

       选项参数说明

选项

功能

-a

归档拷贝

-v

显示复制过程

(2)案例实操

(a)删除hadoop103中/opt/module/hadoop-3.1.3/wcinput

rm -rf wcinput/

(b)同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103

 rsync -av hadoop-3.1.3/ atguigu@hadoop103:/opt/module/hadoop-3.1.3/

 

3)xsync集群分发脚本

(1)需求:循环复制文件到所有节点的相同目录下

       (2)需求分析:

(a)rsync命令原始拷贝:

rsync  -av     /opt/module        atguigu@hadoop103:/opt/

(b)期望脚本:

xsync要同步的文件名称

(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)

echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin:/opt/module/jdk1.8.0_212/bin

 

4)脚本实现

(a)在/home/atguigu/bin目录下创建xsync文件

cd /home/atguigu

mkdir bin

cd bin

vim xsync

在该文件中编写如下代码

#!/bin/bash

 

#1. 判断参数个数

if [ $# -lt 1 ]

then

    echo Not Enough Arguement!

    exit;

fi

 

#2. 遍历集群所有机器

for host in hadoop102 hadoop103 hadoop104

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

(b)修改脚本 xsync 具有执行权限

 chmod +x xsync

(c)测试脚本

xsync /home/atguigu/bin

(d)将脚本复制到/bin中,以便全局调用

sudo cp xsync /bin/

(e)同步环境变量配置(root所有者)

 sudo ./bin/xsync /etc/profile.d/my_env.sh

注意:如果用了sudo,那么xsync一定要给它的路径补全。让环境变量生效

source /etc/profile

source /etc/profile

 

3、SSH无密登录配置

(1)配置ssh

1)基本语法

ssh另一台电脑的IP地址

2)ssh连接时出现Host key verification failed的解决方法

ssh hadoop103

如果出现如下内容

Are you sure you want to continue connecting (yes/no)?

输入yes,并回车

3)退回到hadoop102

exit

 

(2)无秘钥配置

1)原理

 

2)生成公钥和私钥

位置:/home/atguigu/.ssh

  ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

 

3)将公钥拷贝到要免密登录的目标机器上

ssh-copy-id hadoop102

 ssh-copy-id hadoop103

ssh-copy-id hadoop104

注意:

还需要在hadoop103上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。

还需要在hadoop104上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。

还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;

 

(3).ssh文件夹下(~/.ssh)的文件功能解释

known_hosts

记录ssh访问过计算机的公钥(public key)

id_rsa

生成的私钥

id_rsa.pub

生成的公钥

authorized_keys

存放授权过的无密登录服务器公钥

 

4、集群配置

1)集群部署规划

注意:

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

 

hadoop102

hadoop103

hadoop104

HDFS

 

NameNode

DataNode

 

DataNode

SecondaryNameNode

DataNode

YARN

 

NodeManager

ResourceManager

NodeManager

 

NodeManager

 

2)配置文件说明

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

(1)默认配置文件:

要获取的默认文件

文件存放在Hadoop的jar包中的位置

[core-default.xml]

hadoop-common-3.1.3.jar/core-default.xml

[hdfs-default.xml]

hadoop-hdfs-3.1.3.jar/hdfs-default.xml

[yarn-default.xml]

hadoop-yarn-common-3.1.3.jar/yarn-default.xml

[mapred-default.xml]

hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

(2)自定义配置文件:

       core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

 

3)配置集群

(1)核心配置文件

配置core-site.xml

cd $HADOOP_HOME/etc/hadoop

vim core-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

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

    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为atguigu -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>atguigu</value>
    </property>
</configuration>

 

(2)HDFS配置文件

配置hdfs-site.xml

vim hdfs-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- nn web端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop102:9870</value>
    </property>
    <!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>
</configuration>

 

(3)YARN配置文件

配置yarn-site.xml

vim yarn-site.xml

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

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

    <!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

 

(4)MapReduce配置文件

配置mapred-site.xml

vim mapred-site.xml

文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

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

 

4)在集群上分发配置好的Hadoop配置文件

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

 

5、群起集群

1)配置workers

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

在该文件中增加如下内容:

hadoop102
hadoop103
hadoop104

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

同步所有节点配置文件

xsync /opt/module/hadoop-3.1.3/etc

2)启动集群

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

 hdfs namenode -format

 

(2)启动HDFS

 sbin/start-dfs.sh

 

(3)在配置了ResourceManager的节点(hadoop103启动YARN

 sbin/start-yarn.sh

 

(4)Web端查看HDFS的NameNode

(a)浏览器中输入:http://hadoop102:9870

(b)查看HDFS上存储的数据信息

 

(5)Web端查看YARN的ResourceManager

(a)浏览器中输入:http://hadoop103:8088

(b)查看YARN上运行的Job信息

 

6、配置历史服务器

 

1)配置mapred-site.xml

vim mapred-site.xml

在该文件里面增加如下配置。

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

<property>

    <name>mapreduce.jobhistory.address</name>

    <value>hadoop102:10020</value>

</property>

 

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

<property>

    <name>mapreduce.jobhistory.webapp.address</name>

    <value>hadoop102:19888</value>

</property>

2)分发配置

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

3)在hadoop102启动历史服务器

mapred --daemon start historyserver

4)查看历史服务器是否启动

 jps

5)查看JobHistory

http://hadoop102:19888/jobhistory

 

7、配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。

开启日志聚集功能具体步骤如下:

1)配置yarn-site.xml

vim yarn-site.xml

在该文件里面增加如下配置。

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

2)分发配置

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

3)关闭NodeManager 、ResourceManager和HistoryServer

sbin/stop-yarn.sh

mapred --daemon stop historyserver

4)启动NodeManager 、ResourceManage和HistoryServer

start-yarn.sh

mapred --daemon start historyserver

5)删除HDFS上已经存在的输出文件

hadoop fs -rm -r /output

6)执行WordCount程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

7)查看日志

       (1)历史服务器地址

http://hadoop102:19888/jobhistory

       (2)历史任务列表

  (3)查看任务运行日志

       (4)运行日志详情

 

8、集群常用命令

1)各个模块分开启动/停止(配置ssh是前提)常用

       (1)整体启动/停止HDFS

start-dfs.sh/stop-dfs.sh

       (2)整体启动/停止YARN

start-yarn.sh/stop-yarn.sh

2)各个服务组件逐一启动/停止

       (1)分别启动/停止HDFS组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

       (2)启动/停止YARN

yarn --daemon start/stop  resourcemanager/nodemanager

 

9、常用脚本编写

1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh

cd /home/atguigu/bin

vim myhadoop.sh

  • 输入如下内容
#!/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
  • 保存后退出,然后赋予脚本执行权限

[atguigu@hadoop102 bin]$ chmod +x myhadoop.sh

 

2)查看三台服务器Java进程脚本:jpsall

cd /home/atguigu/bin

 vim jpsall

#!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
        echo =============== $host ===============
        ssh $host jps 
done
  • 保存后退出,然后赋予脚本执行权限

chmod +x jpsall

3)分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用

xsync /home/atguigu/bin/

 

10、总结

一、Hadoop入门
1、常用端口号
hadoop3.x
  HDFS NameNode 内部通常端口:8020/9000/9820
  HDFS NameNode 对用户的查询端口:9870
  Yarn查看任务运行情况的:8088
  历史服务器:19888
hadoop2.x
  HDFS NameNode 内部通常端口:8020/9000
  HDFS NameNode 对用户的查询端口:50070
  Yarn查看任务运行情况的:8088
  历史服务器:19888
2、常用的配置文件
  3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers
  2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves

 

端口名称

Hadoop2.x

Hadoop3.x

NameNode内部通信端口

8020 / 9000

8020 / 9000/9820

NameNode HTTP UI

50070

9870

MapReduce查看执行任务端口

8088

8088

历史服务器通信端口

19888

19888

 

11、常见错误

常见错误及解决方案

1)防火墙没关闭、或者没有启动YARN

INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

 

2)主机名称配置错误

 

3)IP地址配置错误

 

4)ssh没有配置好

 

5)root用户和atguigu两个用户启动集群不统一

 

6)配置文件修改不细心

 

7)不识别主机名称

java.net.UnknownHostException: hadoop102: hadoop102

        at java.net.InetAddress.getLocalHost(InetAddress.java:1475)

        at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)

        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)

        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)

        at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

解决办法:

(1)在/etc/hosts文件中添加192.168.10.102 hadoop102

(2)主机名称不要起hadoop  hadoop000等特殊名称

 

8)DataNode和NameNode进程同时只能工作一个。

 

 

 

9)执行命令不生效,粘贴Word中命令时,遇到-和长–没区分开。导致命令失效

解决办法:尽量不要粘贴Word中代码。

 

10)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。

原因是在Linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。

 

11)jps不生效

原因:全局变量hadoop java没有生效。解决办法:需要source /etc/profile文件。

 

12)8088端口连接不上

 cat /etc/hosts

注释掉如下代码

#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1         hadoop102

 

 

 

 

 

 

 

posted @ 2023-01-12 19:59  sftsgly  阅读(100)  评论(0编辑  收藏  举报