Hadoop3.x学习教程(二)

1.完全分布式运行模式(开发重点)

1.1、编写集群分发脚本

1.xsync集群分发脚本

#1.需要在声明系统变量/home/hadoop/bin
#2.在/home/hadoop/bin目录下创建xsync文件
#3.用户为hadoop
#进入hadoop用户文件夹
cd /home/hadoop
#创建bin目录
mkdir bin
#进入bin目录
cd bin
#创建文件xsync
vim xsync


#代码如下
#==============================
#!/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

2.修改脚本xsync权限,并测试

[hadoop@hadoop100 bin]$ chmod +x xsync

3.将脚本复制到/bin中,以便全局调用并且同步环境变量配置(root)

[hadoop@hadoop100 bin]$ sudo cp xsync /bin/
sudo /home/hadoop/bin/xsync /etc/profile.d/my_env.sh

#分发完成后对机器进行更新环境变量
source /etc/profile

1.2、SSH免密登陆配置

1.SSH语法

#执行这段代码之前一定要配置好hosts文件
ssh hadoop101

#配置正确会出现如下内容
Are you sure you want to continue connecting (yes/no)?
#输入yes
#退出为exit

2.免密原理

ssh-key-gen生成密钥对,将A公钥拷贝到要免密登陆的机器B上,ssh访问B(数据用私钥A加密),党B接收到数据后,去授权key中查找A的公钥并解密数据,采用A公钥加密的数据返回给A,接收到数据后用A的私钥揭秘数据

3.操作代码

#进入ssh目录
cd ~
cd .ssh
ssh-keygen -t rsa
#执行完成后敲三下回车就会生成两个文件id_rsa(私钥),id_rsa.pub(公钥)
ssh-copy-id hadoop100
ssh-copy-id hadoop101
ssh-copy-id hadoop102
#本台机器配置完成后其余机器也需要重复相同操作,注意用户为hadoop

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

文件名解释
know_hosts记录ssh访问过的计算机公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
anthorized_keys存放授权过的无密登陆服务器公钥

1.3、集群配置

1.集群部署规划

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

hadoop100hadoop101hadoop102
HDFSNameNode DataNodeDateNodeSecondaryNameNode
YARNNodeManagerResourceManager NodeManagerNodeManager

2.配置文件说明

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

默认配置文件

要获取的默认文件文件存放在Hadoop的jar包中的位置
[core-default.xml]hadoop-common-3.1.3.jar/core-default.xml
[hdfs-defaule.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

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

3.配置集群

  1. 核心配置文件
    配置core-site.xml
#进入hadoop目录
[hadoop@hadoop100 ~]$ cd $HADOOP_HOME/etc/hadoop
#修改core-site.xml
[hadoop@hadoop100 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://hadoop100:8020</value>
    </property>

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

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

  1. HDFS配置文件
    配置hdfs-site.xml
[hadoop@hadoop100 hadoop]$ 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>hadoop101:9870</value>
    </property>
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop102:9868</value>
    </property>
</configuration>

  1. YARN配置文件
    配置yarn-site.xml
[hadoop@hadoop100 hadoop]$ 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>hadoop102</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>

  1. MapReduce配置文件
    配置mapred-site.xml
[hadoop@hadoop100 hadoop]$ 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配置文件

[hadoop@hadoop100 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/

1.4、群起集群

1.配置workers

[hadoop@hadoop100 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
#添加的内容如下
hadoop100
hadoop101
hadoop102
#添加完成后同步所有节点配置
[hadoop@hadoop100 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc

2.启动集群

第一次启动需要在nn节点格式化NameNode

#初始化namenode
[hadoop@hadoop100 hadoop-3.1.3]$ hdfs namenode -format
#启动hdfs
[hadoop@hadoop100 hadoop-3.1.3]$ sbin/start-dfs.sh
#在配置了ResourceManager的节点(hadoop101)启动YARN
[hadoop@hadoop101 hadoop-3.1.3]$ sbin/start-yarn.sh
#Web端查看HDFS的NameNode
http://hadoop100:9870
#Web端查看YARN的ResourceManager
浏览器中输入:http://hadoop101:8088

3.集群基本测试
1)上传文件到集群

#创建INPUT
hadoop fs -mkdir /input

#创建文件
hadoop fs -put /路径/文件 /input

#大文件
hadoop fs -put /路径/文件 

#文件存放位置
/{HADOOP_HOME}data/dfs/data/current/

2)拼接文件

cat 文件>>要拼接的文件名

4.配置历史服务器

#配置mapred-site.xml
[hadoop@hadoop100 hadoop]$ vim mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop100:10020</value>
</property>

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

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

#启动历史服务器
mapred --daemon start historyserver

#查看是否启动历史服务器
jps
http://hadoop100:19888/jobhistory

5.配置日志聚集

#配置yarn-site.xml
[hadoop@hadoop100 hadoop]$ vim yarn-site.xml
<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://hadoop100:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

#分发
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

#重新启动NodeManager 、ResourceManager和HistoryServer
#关闭
sbin/stop-yarn.sh
mapred --daemon stop historyserver
#启动
start-yarn.sh
mapred --daemon start historyserver

#查看历史服务器
http://hadoop100:19888/jobhistory

6.群体启动集群(需配置完成SSH)

#单体启动HDFS
start-dfs.sh/stop-dfs.sh
#单体启动YARN
start-yarn.sh/stop-yarn.sh

#分别启动/停止HDFS组件                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
hdfs --daemon start/stop namenode/datanode/secondarynamenode
#启动/停止YARN
yarn --daemon start/stop  resourcemanager/nodemanager

7.Hadoop集群常用脚本

cd /home/hadoop/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 hadoop100 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop100 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

#保存退出
#赋予脚本使用权限
chmod +x myhadoop.sh

#查看集群进程脚本
cd /home/hadoop/bin
vim jpsall
#!/bin/bash

for host in hadoop100 hadoop101 hadoop102
do
        echo =============== $host ===============
        ssh $host jps 
done

#保存退出
#赋予权限
chmod +x jpsall

#分发
xsync /home/hadoop/bin/


8.常用端口

端口名称Hadoop2.xhadoop3.x
NameNode内部通信端口8020/90008020/9000/9820
NameNode HTTP UI500709870
MapReduce查看执行任务端口80888088
历史服务器通信端口1988819888

9.集群时间同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。

#查看所有节点ntpd服务状态(root用户)
sudo systemctl status ntpd
sudo systemctl start ntpd
sudo systemctl is-enabled ntpd
#修改主服务器的ntp.conf配置文件
sudo vim /etc/ntp.conf
#修改1(授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
#修改2(集群在局域网中,不使用其他互联网上的时间)
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10


#修改/etc/sysconfig/ntpd 文件
sudo vim /etc/sysconfig/ntpd
#增加(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes


#重新启动ntpd服务
sudo systemctl start ntpd
#设置ntpd服务开机启动
sudo systemctl enable ntpd


#在其他机器上配置
sudo systemctl stop ntpd
sudo systemctl disable ntpd

#在其他机器上配置每一分钟与主服务器同步时间
sudo crontab -e
*/1 * * * * /usr/sbin/ntpdate 主服务器名
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值