hadoop集群

一、hadoop动物管理员

 

hadoop集群_第1张图片
Hadoop“平台”包括Hadoop内核、MapReduce、Hadoop分布式文件系统(HDFS)以及一些相关项目。
hadoop集群包含两类节点(Master与Slave)
Master节点:运行了Namenode、或者Secondary Namenode、或者Jobtracker的节点。还有浏览器(用于观看管理界面),等其它Hadoop工具。Master不是唯一的!
Slave节点:运行Tasktracker、Datanode的机器。
HDFS体系:
Namenode名称节点,是HDFS的守护程序,对整个分布式文件系统进行总控制。用户首先会访问Namenode,找到文件分布到了哪些数据节点。发生故障将使集群崩溃。
Datanode数据节点,负责把HDFS数据块读、写到本地文件系统。
Secondary Namenode检查点节点,它是监控HDFS状态的辅助后台程序。
MapReduce
JobTracker作业跟踪器,运行到主节点(Namenode)上。用于处理job的后台程序,决定有哪些文件参与job的处理,然后把job切割成为一个个的小task,并把它们分配到所需要的数据所在的子节点。Hadoop的原则就是就近运行,数据和程序要在同一个物理节点里。监控task,还会重启失败的task(于不同的节点),每个集群只有唯一一个JobTracker。
TaskTracker任务跟踪器,管理各自节点上的task,每个节点只有一个tasktracker。

二、hadoop集群安装


1、基础集群的搭建 参考:https://www.cnblogs.com/pcxie/p/7747317.html

目的:获得一个可以互相通信的三节点集群(1个namenode,2个datanode)

2、集群网络配置

本文中的集群网络环境配置如下:

master内网IP:192.168.1.100

slave1内网IP:192.168.1.101

slave2内网IP:192.168.1.102

3、集群SSH免密登陆设置

3.1  创建hadoop用户

为三个节点分别创建相同的用户hadoop,并在以后的操作均在此用户下操作,操作如下:

$su -

#useradd -m hadoop

#passwd hadoop

为hadoop添加sudo权限

#visudo

在该行root ALL=(ALL) ALL下添加hadoop ALL=(ALL) ALL保存后退出,并切换回hadoop用户

#su hadoop

注意事项:三个节点的用户名必须相同,不然以后会对后面ssh及hadoop集群搭建产生巨大影响

3.2  hosts文件设置

为了不直接使用IP,可以通过设置hosts文件达到ssh  slave1这样的的效果(三个节点设置相同)

$sudo vim /etc/hosts

在文件尾部添加如下行,保存后退出:

192.168.1.100  master

192.168.1.101  slave1

192.168.1.102  slave2

注意事项:不要在127.0.0.1后面添加主机名,如果加了master,会造成后面hadoop的一个很坑的问题,在slave节点应该解析出masterIP的时候解析出127.0.0.1,造成hadoop搭建完全正确,
但是系统显示可用节点一直为0。

3.3  hostname修改

centos7默认的hostname是localhost,为了方便将每个节点hostname分别修改为master、slave1、slave2(以下以master节点为例)。

$sudo hostnamectl set-hostname master

重启terminal,然后查看:$hostname

3.3  ssh设置

设置master节点和两个slave节点之间的双向ssh免密通信,下面以master节点ssh免密登陆slave节点设置为例,进行ssh设置介绍(以下操作均在master机器上操作):

首先生成master的rsa密钥:$ssh-keygen -t rsa 

设置全部采用默认值进行回车

将生成的rsa追加写入授权文件:$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

给授权文件权限:$chmod 600  ~/.ssh/authorized_keys

进行本机ssh测试:$ssh maste r正常免密登陆后所有的ssh第一次都需要密码,此后都不需要密码

将master上的authorized_keys传到slave1

sudo scp ~/.ssh/id_rsa.pub hadoop@slave1:~/   

登陆到slave1操作:$ssh slave1输入密码登陆  

$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

修改authorized_keys权限:$chmod 600  ~/.ssh/authorized_keys

退出slave1:$exit

进行免密ssh登陆测试:$ssh slave1

注意:我在这里有台机器设置失败,StrictModes问题。解决办法:sudo vi /etc/ssh/sshd_config,找到#StrictModes yes改成StrictModes no,AuthorizedKeysFile 前的注释放开。

4、java安装

目的:hadoop是基于Java的,所以要安装配置Java环境(三个节点均需要操作,以下以master节点为例)

下载并安装:$sudo yum install java-1.8.0-openjdk  java-1.8.0-openjdk-devel

验证是否安装完成:$java -version

配置环境变量,修改~/.bashrc文件,添加行: export JAVA_HOME=/usr/lib/jvm/java-1.8.0

使环境变量生效:$source ~/.bashrc

5、Hadoop安装配置

目的:获得正确配置的完全分布式Hadoop集群(以下操作均在master主机下操作)

安装前三台节点都需要需要关闭防火墙和selinux

$sudo systemctl stop firewalld.service

$sudo systemctl disable firewalld.service

$sudo vim /usr/sbin/sestatus 

将SELinux status参数设定为关闭状态

SELinux status:                 disabled

5.1  Hadoop安装

 首先在master节点进行hadoop安装配置,之后使用scp传到slave1和slave2。

下载Hadoop二进制源码至master,下载地址,并将其解压在~/ 主目录下

$tar -zxvf ~/hadoop-2.8.1.tar.gz -C ~/

$mv ~/hadoop-2.8.1/* ~/hadoop/

注意事项:hadoop有32位和64位之分,官网默认二进制安装文件是32位的,但是本文操作系统是64位,会在后面hadoop集群使用中产生一个warning但是不影响正常操作。

5.2  Hadoop的master节点配置

配置hadoop的配置文件core-site.xml  hdfs-site.xml  mapred-site.xml  yarn-site.xml  slaves(都在~/hadoop/etc/hadoop文件夹下)

$cd ~/hadoop/etc/hadoop

$vim core-site.xml其他文件相同,以下为配置文件内容:

1.core-site.xml  

 
    fs.default.name
    hdfs://master:9000
 

 
    hadoop.tmp.dir
    file:/home/hadoop/hadoop/tmp
 

2.hdfs-site.xml 


 
    dfs.replication
    2
 

 
    dfs.namenode.name.dir
    file:/home/hadoop/hadoop/tmp/dfs/name
 

 
    dfs.datanode.data.dir
    file:/home/hadoop/hadoop/tmp/dfs/data
 

 
    dfs.namenode.secondary.http-address
    master:9001
 

3.mapred-site.xml  


 
    mapreduce.framework.name
    yarn
 

4.yarn-site.xml


 
    yarn.resourcemanager.hostname
    master
 

 
    yarn.nodemanager.aux-services
    mapreduce_shuffle
 

 
    yarn.log-aggregation-enable
    true
 

 
    yarn.log-aggregation.retain-seconds
    604800
 

5.slaves
slave1
slave2

5.3  Hadoop的其他节点配置

此步骤的所有操作仍然是在master节点上操作,以master节点在slave1节点上配置为例

复制hadoop文件至slave1:$scp -r ~/hadoop hadoop@slave1:~/

5.4  Hadoop环境变量配置

配置环境变量,修改~/.bashrc文件,添加行(每个节点都需要此步操作,以master节点为例):

#hadoop environment vars
export HADOOP_HOME=/home/hadoop/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
使环境变量生效:$source ~/.bashrc
6、Hadoop启动
格式化namenode:$hadoop namenode -format
启动hadoop:$start-all.sh
master节点查看启动情况:$jps
Web浏览器输入127.0.0.1:50070,查看管理界面
可以查看各节点的日志:hadoop/logs/hadoop-hadoop-datanode-csiraspstapp08.log
7、数据节点DataNode异常
2016-09-26 16:38:56,122 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/tmp/hadoop-hadoop/dfs/data/ 
java.io.IOException:
Incompatible clusterIDs in /tmp/hadoop-hadoop/dfs/data: namenode clusterID = CID-1ac4e49a-ff06-4a34-bfa2-4e9d7248855b; datanode clusterID = CID-3ae02e74-742f-4915-
92e7-0625fa8afcc5 
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:775) 

首先日志警告,“Failed to add storage directory [DISK]file:/tmp/hadoop-hadoop/dfs/data/ 
”添加存储文件失败,失败路劲位于“/tmp/hadoop-hadoop/dfs/data/”。紧接着报Java
IO异常“java.io.IOException”,异常信息里显示的是,namenode和datanode的clusterID不一致,这些异常就导致了后面提示初始化失败、DataNode进程退出等异常、警告信息。网上很多
其他博主说,这是因为多次对namenode进行format导致的。将namenode和datanode的clusterID和namespaceID修改一致即可。
解决办法:
重命名了一下各个数据节点DataNode“/tmp/hadoop-hadoop/dfs/data/”目录下current文件夹。

你可能感兴趣的:(大数据)