hadoop集群环境搭建

 参考文章:

  • https://www.linuxidc.com/Linux/2016-02/128149.htm

  • https://blog.csdn.net/circyo/article/details/46724335

前言

本教程是使用编译hadoop的方式进行安装,原因是下载的hadoop是32位,安装完后会有问题。 

编译方法:http://www.cnblogs.com/champaign/p/8952533.html

 1、集群部署介绍

1.1 Hadoop简介

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心Hadoop为用户提供了系统底层细节透明的分布式基础架构。

对于Hadoop的集群来讲,可以分成两大类角色:MasterSalve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任 务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。

从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。

1.2 环境说明

准备三台服务器:

IP 用途 操作系统 主机名
172.18.29.151 Centos 6.8 master.hadoopo
172.18.29.152 从1 Centos 6.8 slave1.hadoop
172.18.29.153 从2 Centos 6.8 slave2.hadoop

在三台服务器中创建相同账号:hadoop  密码三台也一要致,最好不要与账号相同

1.3 环境配置

修改三台服务器的hosts文件:

vi /etc/hosts
新增以下内容
172.18.29.151 master.hadoop
172.18.29.152 slave1.hadoop
172.18.29.153 slave2.hadoop

可以使用 ping 命令测试三台机器的连通性

1.4 所需软件

1)JDK软件

    下载地址:http://www.Oracle.com/technetwork/java/javase/index.html

2)Hadoop软件

    使用前面编译生成的安装包

2SSH无密码验证配置

如果你的Linux没有安装SSH,请首先安装SSH

yum -y install openssh-server

2.1 SSH基本原理和用法

1)SSH基本原理

    SSH之所以能够保证安全,原因在于它采用了公钥加密。过程如下:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

2SSH基本用法

    假如用户名为java,登录远程主机名为linux,如下命令即可:

    $ ssh java@linux

    SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口,例如修改为88端口,命令如下:

    $ ssh -p 88 java@linux

    注意:如果出现错误提示:ssh: Could not resolve hostname linux: Name or service not known,则是因为linux主机未添加进本主机的Name Service中,故不能识别,需要在/etc/hosts里添加进该主机及对应的IP即可:

    linux    192.168.1.107

2.2配置Master无密码登录所有Salve

1SSH无密码原理

Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。

2)Master机器上设置无密码登录

a. Master节点利用ssh-keygen命令生成一个无密码密钥对。

首先切换到hadoop用户,在Master节点上执行以下命令:

[root@SVR-29-151 ~]# su hadoop
[hadoop@SVR-29-151 root]$ ssh-keygen -t rsa

运行后询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在"/用户名/.ssh"目录下。

 b. 接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
[hadoop@SVR-29-151 root]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

查看下authorized_keys的权限,如果权限不对则利用如下命令设置该文件的权限:

[hadoop@SVR-29-151 root]$ cd ~/.ssh
[hadoop@SVR-29-151 .ssh]$ ll 
[hadoop@SVR-29-151 .ssh]$
chmod 600 authorized_keys
c. 用root用户登录修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。

检查下面几行前面”#”注释是否取消掉:

RSAAuthentication yes # 启用 RSA 认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式

AuthorizedKeysFile  %h/.ssh/authorized_keys # 公钥文件路径

设置完之后记得重启SSH服务,才能使刚才设置有效。

[root@SVR-29-151 ~]# service  sshd restart
d. 用root用户登录修改SSH配置文件"/etc/ssh/ssh_config"的下列内容(由于我的系统环境中ssh 默认端口必须使用 62222,如没有修改默认端口此步骤可以略过)。

将port选项的值修改为下图

同样设置完之后记得重启SSH服务,才能使刚才设置有效

[root@SVR-29-151 ~]# service sshd restart
e.切换到hadoop用户下,使用ssh-copy-id命令将公钥传送到远程主机上(这里以Slave1.Hadoop为例)。
[root@SVR-29-151 ~]# su hadoop
[hadoop@SVR-29-151 root]$ ssh-copy-id hadoop@slave1.hadoop

 

然后测试是否无密码登录其它机器成功

[hadoop@SVR-29-151 root]$ ssh slave1.hadoop

如图所示证明成功。

 到此为止,我们经过5步已经实现了从"Master.Hadoop"到"Slave1.Hadoop"SSH无密码登录,下面就是重复上面的 步骤eSlave2.Hadoop服务器进行配置。这样,我们就完成了"配置Master无密码登录所有的Slave服务器"。

3Java环境安装

 所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以"root"的身份进行。

3.1 安装JDK

首先用root身份登录"Master.Hadoop"后将jdk复制到"/usr/local/src"文件夹中,然后解压即可。查看"/usr/local/src"下面会发现多了一个名为"jdk-7u25-linux-i586"文件夹,说明我们的JDK安装结束,进入下一个"配置环境变量"环节。

然后将jdk文件夹移动到”/usr/local/“目录下。

3.2 配置环境变量

1)编辑"/etc/profile"文件

 编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容如下:

# set java environment

export JAVA_HOME=/usr/local/jdk1.8.0_171/
export JRE_HOME=/usr/local/jdk1.8.0_171/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

2)使配置生效

保存并退出,执行下面命令使其配置立即生效。

source /etc/profile 或 . /etc/profile

 

3.3 验证安装成功

配置完毕并生效后,用下面命令判断是否成功。

java -version

从上图中得知,我们确定JDK已经安装成功

3.4 安装剩余机器

在其它服务器重复以上步骤

4Hadoop集群安装(本例中的版本为:3.0.1)

4.1 安装hadoop

 (1) 安装软件

 首先用root用户登录"Master.Hadoop"机器,将下载的"hadoop-3.0.1.tar.gz"复制到/usr/local/src目录下。然后进入/usr/local/src目录下,用下面命令把文件解压,并将其重命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop

cd /usr/local/src
tar –zxvf hadoop-3.0.1.tar.gz
mv hadoop-3.0.1 ../hadoop
cd ..
chown –R hadoop:hadoop hadoop 

  (2) 创建tmp文件夹.

 最后在"/usr/local/hadoop"下面创建tmp文件夹.

  (3) 配置环境变量

并把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件,将以下语句添加到末尾,并使其生效(. /etc/profile):

# set hadoop path
export HADOOP_INSTALL=/usr/local/hadoop  
export PATH=${HADOOP_INSTALL}/bin:${HADOOP_INSTALL}/sbin:${PATH}  
export HADOOP_MAPRED_HOME=${HADOOP_INSTALL}  
export HADOOP_COMMON_HOME=${HADOOP_INSTALL}  
export HADOOP_HDFS_HOME=${HADOOP_INSTALL}  
export YARN_HOME=${HADOOP_INSTALLL}  
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_INSTALL}/lib/natvie    
export HADOOP_OPTS="-Djava.library.path=${HADOOP_INSTALL}/lib:${HADOOP_INSTALL}/lib/native"

 (4)重启”/etc/profile”

source /etc/profile

 (5)配置salve服务器

首先在slave1.hadoop和slave2.hadoop的/usr/local中创建目录hadoop,然后将它的用户和组改为hadoop

[root@SVR-29-152 local]# mkdir hadoop
[root@SVR-29-152 local]# chown hadoop:hadoop hadoop

然后重复前面的(3)、(4)步骤

4.2 配置hadoop

我们先在master.hadoop中进行配置,配置完成后再将hadoop复制到slave1和slave2中。

 (1)设置hadoop-env.sh和yarn-env.sh中的java环境变量

cd /usr/local/hadoop/etc/hadoop/
vi hadoop-env.sh

// 修改JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_171

(2)配置core-site.xml文件

vi core-site.xml

// 修改文件内容为以下
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
        <description>A base for other temporary directories.</description>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master.hadoop:9000</value>
    </property>
</configuration>

备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被删掉,必须重新执行format才行,否则会出错。

(3)配置hdfs-site.xml文件

vi hdfs-site.xml

// 修改文件内容为以下

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

    <property>
        <name>dfs.nameservices</name>
        <value>hadoop-cluster1</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master.hadoop:50090</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

4)配置mapred-site.xml文件

修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。

 vi mapred-site.xml 

// 修改文件为以下内容
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <final>true</final>
    </property>

    <property>
        <name>mapreduce.jobtracker.http.address</name>
        <value>master.hadoop:50030</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master.hadoop:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master.hadoop:19888</value>
    </property>
    <property>
        <name>mapred.job.tracker</name>
        <value>http://master.hadoop:9001</value>
    </property>
</configuration>   

 5)配置yarn-site.xml文件

vi yarn-site.xml

// 修改文件内容为以下
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master.hadoop</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master.hadoop:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master.hadoop:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master.hadoop:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master.hadoop:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master.hadoop:8088</value>
    </property>
</configuration>

 4.3 配置Hadoop的集群

(1) 将Master中配置好的hadoop传入两个Slave中

注意:使用hadoop账号
scp -r /usr/local/hadoop  hadoop@slave1.hadoop:/usr/local/
scp -r /usr/local/hadoop  hadoop@slave2.hadoop:/usr/local/

(2) 修改Master主机上的workers文件

[hadoop@SVR-29-151 hadoop]$cd /usr/local/hadoop/etc/hadoop
[hadoop@SVR-29-151 hadoop]$ vi workers

// 将以下内容写入
slave1.hadoop
slave2.hadoop

(3) 格式化HDFS文件系统

// 在Master主机上输入以下指令(使用hadoop用户)

[hadoop@SVR-29-151 hadoop]$ hdfs namenode -format

(4)启动hadoop

[hadoop@SVR-29-151 hadoop]$ start-dfs.sh

  结果如下图:

[hadoop@SVR-29-151 hadoop]$ start-yarn.sh

 

(5) 验证hadoop启动是否成功

[hadoop@SVR-29-151 hadoop]$ jps

 master中的结果:

 

slave中的结果:

 web管理页面:http://172.18.29.151:8088/cluster

原文地址:https://www.cnblogs.com/champaign/p/7645961.html