hadoop集群搭建之伪分布式和完全分布式

  • ## Hadoop集群搭建

一、软件及环境准备

安装JDK
  • 查询是否安装jdk:
rpm -qa |grep java
  • 如果安装版本小于1.7,卸载该版本
rpm -e 软件包
  • 将上传好的jdk解压并配置环境变量
tar -zxf jdk-8u131-linux-x64.tar.gz -C /opt/module
vim /etc/profile    #添加环境变量
##JAVA_HOME##
export JAVA_HOME=/opt/module/jdk1.8.0
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile         ###刷新环境变量
java -version               #查看java版本
安装Hadoop
  • 解压hadoop软件
tar -zxf hadoop-2.9.0.tar.gz -C /opt/module
  • 添加环境变量
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.9.0
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin       
source /etc/profile         ###刷新环境变量

二、运行Hadoop

伪分布式
  • 配置:core-site.xml (配置文件位置在/opt/module/hadoop-2.9.0/etc/hadoop里面)

<property>
    <name>fs.defaultFSname>
    <value>hdfs://hadoop101:9000value>
property>


<property>
    <name>hadoop.tmp.dirname>
    <value>/opt/module/hadoop-2.9.0/data/tmpvalue>
property>
  • 配置:hdfs-site.xml
    
    <property>
        <name>dfs.replicationname>
        <value>1value>
    property>
  • 配置:yarn-site.xml

<property>
 <name>yarn.nodemanager.aux-servicesname>
 <value>mapreduce_shufflevalue>
property>


<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop101value>
property>
  • 配置:mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0  ###修改jdk位置
  • 配置: (对mapred-site.xml.template重新命名为) mapred-site.xml

<property>
    <name>mapreduce.framework.namename>
    <value>yarnvalue>
property>
启动

格式化namenode(HDFS)(第一次格式化,在/opt/module/hadoop-2.9.0/下操作)

bin/hdfs namenode -format

启动namenode(HDFS)

sbin/hadoop-daemon.sh start namenode    #启动
sbin/hadoop-daemon.sh stop namenode     #停止

集群操作(HDFS)

bin/hdfs dfs -mkdir -p /user/mapreduce/wordcount/input    ##创建文件夹
bin/hdfs dfs -put wcinput/wc.input  /user/mapreduce/wordcount/input/  ##上传文件
bin/hdfs dfs -ls  /user/mapreduce/wordcount/input/   ##查看文件 
bin/hdfs dfs -rm -R /user/atguigu/mapreduce/wordcount/output  ##删除文件夹
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/mapreduce/wordcount/input  /user/mapreduce/wordcount/output   ##运行jar文件程序

查看信息

[root@hadoop101 ~]# jps
13586 NameNode
13668 DataNode
13786 Jps

启动resourcemanager(YARN)

sbin/yarn-daemon.sh start resourcemanager

启动nodemanager(YARN)

sbin/yarn-daemon.sh start nodemanager

集群操作(YARN)

http://192.168.1.101:8088/cluster
其他文件配置

配置mapred-site.xml 历史服务配置启动查看

<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop101:10020value>
property>
<property>
    <name>mapreduce.jobhistory.webapp.addressname>
    <value>hadoop101:19888value>
property>
 ls sbin/ |grep mr      #查看历史服务器目录,此处为mr-jobhistory-daemon.sh
 sbin/mr-jobhistory-daemon.sh start historyserver   #启动后 http://local:19888/jobhistory 查看

配置yarn-site.xml 开启日志聚集功能


<property>
    <name>yarn.log-aggregation-enablename>
    <value>truevalue>
property>

<property>
    <name>yarn.log-aggregation.retain-secondsname>
    <value>604800value>
property>
完全分布式

hadoop集群搭建之伪分布式和完全分布式_第1张图片

设置ssh无密码登录
ssh 192.168.1.103       #基本语法

生成公钥、私钥

cd ~/.ssh
ssh-keygen -t rsa

将生成的公钥拷贝到要免密登录的主机上(自己也要)

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

.ssh文件夹下的文件功能解释

(1)~/.ssh/known_hosts  :记录ssh访问过计算机的公钥(public key)
(2)id_rsa   :生成的私钥
(3)id_rsa.pub   :生成的公钥
(4)authorized_keys  :存放授权过得无秘登录服务器公钥
安装远程同步工具
1)查看rsync使用说明
man rsync | more
(2)基本语法
rsync -rvl     $pdir/$fname         $user@hadoop$host:$pdir
命令 命令参数 要拷贝的文件路径/名称   目的用户@主机:目的路径
选项
-r 递归
-v 显示复制过程
-l 拷贝符号连接
(3)案例实操
把本机/opt/tmp目录同步到hadoop103服务器的root用户下的/opt/tmp目录
rsync -rvl /opt/tmp/*  root@hadoop103:/opt/tmp

编写集群分发脚本xsync (/usr/local/bin)

#!/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=103; host<105; host++)); do
        #echo $pdir/$fname $user@hadoop$host:$pdir
        echo --------------- hadoop$host ----------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
修改配置文件

core-site.xml


    <property>
        <name>fs.defaultFSname>
        <value>hdfs://hadoop102:9000value>
    property>

    
    <property>
        <name>hadoop.tmp.dirname>
        <value>/opt/module/hadoop-2.9.0/data/tmpvalue>
    property>

hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0

hdfs-site.xml

<configuration> 
    <property>
        <name>dfs.replicationname>
        <value>3value>
    property>

    <property>
        <name>dfs.namenode.secondary.http-addressname>
        <value>hadoop104:50090value>
    property>
configuration>

slaves

hadoop102
hadoop103
hadoop104

yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0

yarn-site.xml

<configuration>

    
    <property>
         <name>yarn.nodemanager.aux-servicesname>
         <value>mapreduce_shufflevalue>
    property>

    
    <property>
        <name>yarn.resourcemanager.hostnamename>
        <value>hadoop103value>
    property>
configuration>

mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0

mapred-site.xml

<configuration>
    
    <property>
        <name>mapreduce.framework.namename>
        <value>yarnvalue>
    property>
configuration>

配置文件分发,分发上面的配置文件

cd /opt/module/hadoop-2.7.2/etc/hadoop
xsync /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
xsync /opt/module/hadoop-2.7.2/etc/hadoop/slaves
集群启动测试

hadoop102

bin/hdfs namenode -format       #格式化节点
sbin/start-dfs.sh               #启动

hadoop103

sbin/start-yarn.sh              #启动
配置时间同步服务器
检查ntp是否安装
 rpm -qa|grep ntp
修改配置文件
  • 修改ntp配置文件
vi /etc/ntp.conf
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap     #修改内容
#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
server 127.127.1.0
fudge 127.127.1.0 stratum 10        #添加内容
  • 修改/etc/sysconfig/ntpd 文件
vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes    #添加内容

重启ntpd并设置开机自启动和同步任务

service ntpd start
chkconfig ntpd on   #设置开机自启动
 crontab -e         #设置同步任务
*/10 * * * * /usr/sbin/ntpdate hadoop102        #设置每10分钟同步一次 hadoop102为时间服务器

配置集群常见问题

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)未编译源码
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
8)datanode不被namenode识别问题
Namenode在format初始化的时候会形成两个标识,blockPoolId和clusterId。新的datanode加入时,会获取这两个标识作为自己工作目录中的标识。
一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然持有原来的id,就不会被namenode识别。
解决办法,删除datanode节点中的数据后,再次重新格式化namenode。
9)不识别主机名称
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.1.102 hadoop102
    (2)主机名称不要起hadoop  hadoop000等特殊名称
10)datanode和namenode进程同时只能工作一个。
11)执行命令 不生效,粘贴word中命令时,遇到-和长–没区分开。导致命令失效
解决办法:尽量不要粘贴word中代码。
12)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。原因是在linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。
13)jps不生效。
原因:全局变量hadoop   java没有生效,需要source /etc/profile文件。
14)8088端口连接不上
[atguigu@hadoop102 桌面]$ cat /etc/hosts
注释掉如下代码
#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         hadoop102

你可能感兴趣的:(系统部署)