《2020/07/21》hadoop集群配置

《2020/07/21》hadoop集群配置

学习自尚硅谷的数据仓库项目,非常感谢
仅供自己学习使用,2020年7月21日10:08:05

0 reference

  1. hadoop文档
  2. hadoop集群安装

1 Linux系统相关

1.0 nginx安装

https://www.cnblogs.com/boonya/p/7907999.html
redis

1.1 创建新用户

  1. 创建新用户,并设置密码
[root@hadoop101 ~]#useradd lhcz
[root@hadoop101 ~]#passwd lhcz
  1. 修改配置文件
[root@hadoop101 ~]#vim /etc/sudoers

修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下所示:

## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
lhcz   ALL=(ALL)     ALL

或者配置成采用sudo命令时,不需要输入密码

## Allow root to run any commands anywhere
root      ALL=(ALL)     ALL
lhcz   ALL=(ALL)     NOPASSWD:ALL

修改完毕,现在可以用 lhcz 帐号登录,然后用命令 sudo ,即可获得root权限进行操作。

1.2 分发文件脚本

在/home/lhcz文件夹下新建文件夹bin,创建并编辑文件xsync

cd /home/lhcz
sudo mkdir bin
touch xsync
# 修改文件为可执行
sudo chmod 777 xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for host in hadoop116 hadoop117 hadoop118
do
    echo ------------------- $host --------------
    rsync -av $pdir/$fname $user@$host:$pdir
done

1.3 SSH无密登录配置

[lhcz@host-192-168-240-116 ~]$ cd
[lhcz@host-192-168-240-116 ~]$ cd .ssh/
[lhcz@host-192-168-240-116 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[lhcz@host-192-168-240-116 .ssh]$ ssh-copy-id hadoop116
[lhcz@host-192-168-240-116 .ssh]$ ssh-copy-id hadoop117
[lhcz@host-192-168-240-116 .ssh]$ ssh-copy-id hadoop118

2 大数据相关

在/opt目录下创建文件夹

  1. 在/opt目录下创建module、software文件夹
    [lhcz@hadoop101 opt]$ sudo mkdir module
    [lhcz@hadoop101 opt]$ sudo mkdir software
    
  2. 修改module、software文件夹的所有者
    [lhcz@host-192-168-240-116 opt]$ sudo chown lhcz:lhcz module/ software/
    [lhcz@host-192-168-240-116 opt]$ ll
    总用量 0
    drwxr-xr-x. 2 lhcz lhcz 6 7月  21 08:57 module
    drwxr-xr-x. 2 root root 6 3月  26 2015 rh
    drwxr-xr-x. 2 lhcz lhcz 6 7月  21 08:57 software
    

2.1 安装JDK

  1. 将jdk-8u144-linux-x64.tar.gz复制至/opt/software/文件夹下。
  2. 解压缩文件至/opt/module/文件夹下
    tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
    
  3. 配置环境变量
    打开/etc/profile.d/env.sh文件,并在文件末尾添加JDK路径
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    export PATH=$PATH:$JAVA_HOME/bin
    
    保存并退出,让修改后的文件生效:
    source /etc/profile.d/env.sh
    

2.2 安装hadoop

  1. Hadoop下载
    下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/
    将下载的hadoop-2.7.2.tar.gz导入到opt目录下面的software文件夹下面。
  2. Hadoop安装,解压并配置环境变量
    tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
    sudo vim /etc/profile.d/env.sh
    添加以下内容:
    ##HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    保存并退出,使环境变量生效
    source /etc/profile.d/env.sh
    
  3. hadoop 八个配置文件
    core-site.xml
    hdfs-site.xml
    yarn-site.xml
    mapred-site.xml
    
    hadoop-env.sh
    yarn-env.sh
    mapred-env.sh
    
    slaves(不能有空格,不能有空行)
    

2.3 hadoop集群

我的三台机器的ip分别为116、117、118。对应的是视频中的2,3,4
集群部署规划:

hadoop116hadoop117hadoop118
HDFSnamenode, datanodedatanodesecond namenode, datanode
YARNnodemanagerresourcemanager, nodemanagernodemanager
2.3.1 配置集群
  1. 核心配置文件
    配置core-site.xml文件,在该文件中编写如下配置:
    <!-- 指定HDFS中NameNode的地址 -->
    <property>
    	<name>fs.defaultFS</name>
    	<value>hdfs://hadoop116:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property>
    
  2. HDFS配置文件
    配置hadoop-env.sh
    export JAVA_HOME=/opt/module/jdk1.8.0_251
    
    配置hdfs-site.xml,在该文件中添加如下配置:
    <property>
    	<name>dfs.replication</name>
    	<value>3</value>
    </property>
    
    <!-- 指定Hadoop辅助名称节点主机配置 -->
    <property>
    	<name>dfs.namenode.secondary.http-address</name>
    	<value>hadoop118:50090</value>
    </property>
    
  3. YARN配置文件
    配置yarn-env.sh文件
    export JAVA_HOME=/opt/module/jdk1.8.0_251
    
    配置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>hadoop117</value>
    </property>
    <!-- 日志聚集功能使用 -->
    <property>
    	<name>yarn.log-aggregation-enable</name>
    	<value>true</value>
    </property>
    
    <!-- 日志保留时间设置7天 -->
    <property>
    	<name>yarn.log-aggregation.reatin-seconds</name>
    	<value>604800</value>
    </property
    
  4. MapReduce配置文件
    配置mapred-env.sh
    export JAVA_HOME=/opt/module/jdk1.8.0_251
    
    配置mapred-site.xml文件
    cp mapred-site.xml.template mapred-site.xml
    在文件中添加以下内容:
    <!-- 指定MR运行在Yarn上 -->
    <property>
    	<name>mapreduce.framework.name</name>
    	<value>yarn</value>
    </property>
    <!-- 历史服务器端地址 -->
    <property>
    	<name>mapreduce.jobhistory.address</name>
    	<value>hadoop116:10020</value>
    </property>
    
    <!-- 历史服务器web端地址 -->
    <property>
    	<name>mapreduce.jobhistory.webapp.address</name>
    	<value>hadoop116:19888</value>
    </property>
    
  5. slaves文件
    修改slaves文件内容为:
    hadoop116
    hadoop117
    hadoop118
    
2.3.2 分发hadoop及jdk
```
[lhcz@host-192-168-240-116 module]$ xsync hadoop-2.7.2/
[lhcz@host-192-168-240-116 module]$ xsync jdk1.8.0_251/
```
同时配置一下hadoop117、hadoop118的环境变量
```
sudo vim /etc/profile.d/env.sh
------------------------------------------------
添加如下内容:
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_251
export PATH=$PATH:$JAVA_HOME/bin
------------------------------------------------
# 使环境变量生效
source /etc/profile.d/env.sh
```
2.3.3 配置ssh免密登录

需要在namenode,resourcenode节点所在的机器配置ssh免密,namenode及resourcenode需要同其他node进行通信。

2.3.4 启动集群
  1. 如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
[lhcz@host-192-168-240-116 hadoop-2.7.2]$ bin/hdfs namenode -format
  1. 启动HDFS
[lhcz@host-192-168-240-116 hadoop-2.7.2]$ sbin/start-dfs.sh
Starting namenodes on [hadoop116]
hadoop116: starting namenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-namenode-host-192-168-240-116.out
hadoop116: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-datanode-host-192-168-240-116.out
hadoop117: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-datanode-host-192-168-240-117.out
hadoop118: starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-datanode-host-192-168-240-118.out
Starting secondary namenodes [hadoop118]
hadoop118: starting secondarynamenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-lhcz-secondarynamenode-host-192-168-240-118.out
  1. 启动yarn
[lhcz@host-192-168-240-117 hadoop-2.7.2]$ sbin/start-yarn.sh

注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。

2.3.5 web和进程查看

web查看:http://hadoop116:50070
进程查看:jps查看各个节点状态

当启动发生错误的时候:

  1. 查看日志:/home/lhcz/module/hadoop-2.7.2/logs
  2. 如果进入安全模式,可以通过hdfs dfsadmin -safemode leave
  3. 停止所有进程,删除data和log文件夹,然后hdfs namenode -format 来格式化

2.4 hadoop经验

2.4.1 HDFS存储多目录
2.4.2 支持LZO压缩配置

https://blog.csdn.net/qq_32641659/article/details/89339471

  1. 将编译好后的hadoop-lzo-0.4.20.jar 放入hadoop-2.7.2/share/hadoop/common/
  2. 同步hadoop-lzo-0.4.20.jar到hadoop117、hadoop118
  3. core-site.xml增加配置支持LZO压缩
    <property>
    	<name>io.compression.codecs</name>
    	<value>
    		org.apache.hadoop.io.compress.GzipCodec,
    		org.apache.hadoop.io.compress.DefaultCodec,
    		org.apache.hadoop.io.compress.BZip2Codec,
    		org.apache.hadoop.io.compress.SnappyCodec,
    		com.hadoop.compression.lzo.LzoCodec,
    		com.hadoop.compression.lzo.LzopCodec
    	</value>
    </property>
    
    <property>
        <name>io.compression.codec.lzo.class</name>
        <value>com.hadoop.compression.lzo.LzoCodec</value>
    </property>
    
  4. 同步core-site.xml到hadoop117、hadoop118
    xsync core-site.xml
    
  5. 重新启动集群
    1. 首先停止集群
    在hadoop117上停止 yarn , sbin/stop-yarn.sh
    在hadoop116上停止hdfs ,sbin/stop-dfs.sh
    2. 重启
    在hadoop116上启动hdfs , sbin/start-dfs.sh
    在hadoop117上启动yarn , sbin/start-yarm.sh
    3. 查看
    jps
    
2.4.3 基准测试
  1. 测试HDFS写性能
    测试内容:向HDFS集群写10个128M的文件
    [lhcz@host-192-168-240-116 ~]$ hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB

    我测试的时候报错,连不上resource manager,关闭防火墙即可。

    sudo systemctl stop firewalld 临时关闭
    sudo systemctl disable firewalld ,然后reboot 永久关闭
    sudo systemctl status  firewalld 查看防火墙状态。
    
  2. 测试HDFS读性能
    测试内容:读取HDFS集群10个128M的文件
    [lhcz@host-192-168-240-116 ~]$ hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB

  3. 删除测试生成数据
    [lhcz@host-192-168-240-116 ~]$ hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -clean

  4. 在测试时候,job执行一直有问题,要么job一直不执行,或者job执行中卡住。我把集群停止,把data、logs文件夹删除,重新启动集群,问题解决。

2.4.4 Hadoop参数调优
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值