Linux环境下Hadoop集群搭建

前言:

最近来到了武汉大学,在这里开始了我的研究生生涯。昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识。虽然只是简单的介绍了相关的概念,但对于我来说像是打开了一个新的大门。当然,巧妇难为无米之炊,要想能够使用这些技术,首先要能够把相应的环境搭建起来。因此,在这里我将自己搭建Hadoop集群环境的步骤记录下来,以防止自己以后会忘记。

搭建前所需要的准备:

1.JDK(在这里我使用的是jdk1.8.0_171) 【因为Hadoop是由Apache基金会所开发的分布式系统基础架构,Hadoop的编译以及MapReduce的运行都需要JDK】

2.Xshell【通过Xshell来远程登陆服务器,其中服务器这里有3台,一台作为Master,另外两台作为Slave】

3.Xftp【通过Xftp上传文件到Linux服务器中,也可以对服务器中的文件进行查看和管理】

4.Hadoop(下载链接:http://hadoop.apache.org/releases.html)【注意:下载binary文件,source是未编译的,需要重新编译才能使用】

一.安装JDK

1.将下载好的JDK压缩包通过Xftp上传到服务器中:

在这里,我现在每台服务器上的/usr里新建了一个文件夹java,然后将jdk压缩包上传到该java文件夹里。

然后在java文件夹路径下对压缩包进行解压缩,

2.修改环境变量:

不论在Windows环境还是Linux环境下,在安装好JDK后都需要对环境变量进行更改。环境变量的设置主要是为了要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找。

环境变量文件profile位于/etc/文件夹中,通过  命令对其进行修改。

修改如下:(每台机器JDK安装的路径不同,所以环境变量路径也要做相应的变动)

然后通过命令重新加载profile文件,使得修改的环境变量配置生效。

3.查看配置是否生效:

通过 java -version 命令进行测试,若配置成功将会显示类似如下的信息:

出现如上信息,表示jdk已经配置好了。

二.配置Host文件及修改主机名

配置Host文件主要是实现路由映射,使得各虚拟机节点之间能够通过主机名(例如master、slave1、slave2、slave3)直接进行互相访问。

Host文件位于/etc文件夹之下,所以通过

vi /etc/hosts

对其进行编辑,编辑后的结果如下:

如果没有权限,则切换成root用户 : su root

修改主机名:

在上面的过程中,我们配置了路由,通过master、slave1、slave2等名称可以访问到指定的主机,但是我们还没有将每台主机赋上其应属的名称,因此我们需要给这些主机指定主机名:

临时指定:

hostname master  #这里只是演示指定的是master,其余主机也都要指定一下

这里的指定可能在系统重启后会失效,造成主机之间无法正常通信。下面介绍永久更改主机名的方法:

修改 /etc/sysconfig/network文件:

vi /etc/sysconfig/network

然后在这个文件中写上主机名,如下所示:

# Created by anaconda
NETWORKING=yes
HOSTNAME=master

然后保存文件,此时主机名就永久修改了。

三.关闭防火墙:

需要在每台机器上执行关闭防火墙的命令:

systemctl stop firewalld 注释:centos7后使用该命令,之前的版本使用 service iptables stop

四.安装Hadoop以及修改配置文件:

1.新建存放Hadoop程序的文件夹:

在这里我在/usr/local文件夹下又新建了hdfs文件夹,并将之前下载好的hadoop-2.6.0.tar 压缩包存放在这个文件夹下,然后对其解压:

tar -zxvf hadoop-2.6.0.tar

解压后,会发现文件夹下多了hadoop-2.6.0这个文件夹,这就是我们所需要的Hadoop文件。

2.创建文件目录:

为了便于管理,所以分别为Master的NameNode、DataNode、以及临时文件 创建文件夹,将这些数据存于新建文件夹下:

mkdir /usr/local/data/data
mkdir /usr/local/data/name
mkdir /usr/local/data/tmp

3.修改Hadoop的初始配置文件:

Hadoop文件夹中存有很多配置文件,这些配置文件在刚解压出来时都是默认初始值,所以需要修改其中一些内容,使其符合集群环境,这样Hadoop集群才能正常地运行起来。

首先进入Hadoop的配置文件夹:

cd /usr/local/hdfs/hadoop-2.6.0/etc/hadoop

这里我们需要修改如下6个文件:

分别是core-site.xml、hadoop-env.xml、hdfs-site.xml、mapred-site.xml、slaves、yarn-site.xml

3.1 修改core-site.xml:

vi core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
--> <!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/data/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>

注意:

<name>hadoop.tmp.dir</name>
<value>/usr/local/data/tmp</value>
<description>A base for other temporary directories.</description>

这里面的<value>值为之前创建的tmp文件夹的绝对路径,在这里是: /usr/local/data/tmp

3.2 修改hdfs-site.xml文件:

vi hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
--> <!-- Put site-specific property overrides in this file. --> <configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/data/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/data/data</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>

注意:

<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/data/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/data/data</value>
<final>true</final>
</property>

这两段代码中的value值分别填之前为NameNode、DataNode创建的文件夹路径,这里为:

/usr/local/data/name

/usr/local/data/data

3.3 修改mapred-site.xml:

首先复制mapred-site.xml.template 成mapred-site.xml文件:

cp mapred-site.xml.template mapred-site.xml

然后编辑mapred-site.xml:

vi mapred-site.xml

修改如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
--> <!-- Put site-specific property overrides in this file. --> <configuration> <property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property> </configuration>

3.4 修改yarn-site.xml:

vi yarn-site.xml

修改如下:

<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration> <!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>

3.5 修改hadoop-env.sh:

需要在hadoop-env.sh文件中添加上JAVA_HOME的路径:

export JAVA_HOME=/usr/local/java/jdk1.8.0_171

并将之前的JAVA_HOME语句注释掉:

#export JAVA_HOME=${JAVA_HOME}

3.6 修改slave文件:

将之前的localhost删掉,改成如下内容:

3.7 修改/etc/profile文件,添加上Hadoop的工作路径:

然后通过 source /etc/profile 使配置文件生效。

source /etc/profile

五.配置虚拟机实现SSH免密登陆:

1.首先需要在Master节点上生成私钥:id_rsa 文件以及公钥: id_rsa.pub 文件:

注意:~/.ssh目录的绝对路径是:/root/.ssh , 如果提示没有该文件夹,则通过

mkdir /root/.ssh

进行创建,然后再执行上面的命令。

2.通过将master生成的公钥文件内容加到认证文件 ./authorized_keys 中,就可以实现本机(master) ssh 本机(master)免密操作:

测试:

测试结果显示成功免密登陆

3.实现master节点与其他slave节点之间的免密登陆:

刚才我们通过将master生成的公钥文件内容加入到认证文件authorized_keys中,实现了自己ssh登陆自己免密,如果我们将 ./authorized_keys 文件复制到各个slave节点的/root/.ssh文件夹下,这样我们就能实现各个节点之间的免密登陆了,操作以及验证如下:

首先是将authorized_keys 文件拷贝到slave节点的.ssh文件夹下(如果slave节点上没有.ssh文件夹,则需要新建一下):

scp ./authorized_keys root@slave1:/root/.ssh

然后验证此时是否能够免密远程登录到slave1主机上:

如图所示,此时能够远程登陆到slave1节点上了。

重复上面的scp 操作,将认证文件拷贝到其他的slave节点的.ssh文件夹里,完成所有节点之间的免密ssh操作。

六.将master节点上的文件拷贝到slave节点上:

为了避免重复配置的麻烦,我们直接将之前在master节点上配置的 /etc/profile 文件 以及 /usr/local/hdfs/hadoop 文件夹 全部拷贝到 各个slave节点相对应的文件夹下:

scp /etc/profile root@slave1:/etc/profile

scp /etc/hosts root@slave1:/etc/hosts

scp -r /usr/local/hdfs/hadoop-2.6.0 root@slave1:/usr/local/hdfs/hadoop-2.6.0

scp -r /usr/local/java/jdk1.8.0_171/ root@slave1:/usr/local/java/jdk1.8.0_171/

(注意,使用scp 进行文件夹复制时,确保 slave 上有

/usr/local/hdfs 、/usr/local/java 这个路径,没有需要提前建好文件夹。

这里只是将文件拷到了slave1节点上,其他slave节点的操作类似,需要重复一下scp操作。最后确保每个slave节点的  /etc/hosts、/etc/profile 、 /usr/jave/jdk1.8.0_171、/usr/local/hdfs/hadoop-2.6.0 文件都存在且和master是一样的。)

最后为了使得配置文件生效,需要在每个slave节点上做:

source /etc/profile 

七.启动Hadoop集群:

1.在master节点上格式化NameNode:

执行的命令:

hadoop namenode -format

执行结果如下:

其中 host字段后面的值为 主机名/本机IP地址

2.切换到master节点的 /usr/local/hdfs/hadoop-2.6.0/sbin 目录下:

启动Hadoop集群,主要是在master节点上启动NameNode、SecondaryNameNode 、RecourceManager服务;在slave节点上启动DataNode、NodeManager服务。

这些服务可以通过单独的命令进行启动,比如在master节点的sbin目录下:

./hadoop-daemon.sh start namenode  #启动master的NameNode
./hadoop-daemons.sh start datanode #启动slave节点的DataNode
./start-yarn.sh
#master:启动resourcemanager 以及 slave:启动 NodeManager
./start-dfs.sh #启动master节点的SecondaryNameNode

结果如下:

启动master的NameNode:

启动slave节点的DataNode:

slave上:

启动master的resourcemanager 以及 SecondNameNode 、slave节点的NodeManager:

 (从这里看出,./start-dfs.sh 也可以启动namenode 和 datanode)

jps -显示当前所有java进程pid的命令,简单实用,适合在linux/unix平台上简单察看当前java进程的一些简单情况

ps -用来显示当前系统的进程情况,有哪些进程,及其 id 】

-------------------------------除了上面的启动方法,也可以通过start-all.sh启动(推荐使用)------------------------------

在启动的过程中,会打印出很多启动信息,比如在XX节点上启动XX服务,如果启动过程中遇到问题,一般这里会有所显示。

3.成功启动集群后各节点上运行着的Java进程:

Master:

Slave:

八.测试Hadoop集群:

1.查看hdfs集群状态:

hdfs dfsadmin -report 

hadoop dfsadmin -report

在这里可以查看到启动的datanode节点相关信息。

通过网页查看HDFS信息:

通过网页也可以看到master节点以及slave节点的启动情况

【注意:进入hdfs网页的网址是:  masterIP:50070 例如:10.1.2.47:50070】

2.测试Yarn:

通过网址:masterIP:18088 (端口号在yarn-site.xml中定义)查看Yarn:

3.测试MapReduce:

Hadoop中提供了测试用例:在/usr/local/hdfs/hadoop-2.6.0目录下:

./hadoop jar /usr/local/hdfs/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 5 10

运行MapReduce示例:

在Yarn网页中可以查看到Job信息:

至此,Hadoop集群已经搭建好了。


 关于Hadoop的介绍,以及本文中用到的所有软件资源:

https://pan.baidu.com/s/1Jx_P8TIlbv78XHfSmKAiuw

Linux环境下Hadoop集群搭建的更多相关文章

  1. Linux环境下nginx集群搭建

    #确保安装nginx,stream模块默认不安装的,需要手动添加参数:–with-stream, nginx1.9或以上版本 #nginx.conf文件中,添加以下内容(只供参考),这个不能放在htt ...

  2. Linux环境下HDFS集群环境搭建关键步骤

    Linux环境下HDFS集群环境搭建关键步骤记录. 介质版本:hadoop-2.7.3.tar.gz 节点数量:3节点. 一.下载安装介质 官网下载地址:http://hadoop.apache.or ...

  3. Linux环境下SolrCloud集群环境搭建关键步骤

    Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/close ...

  4. Linux环境下ZooKeeper集群环境搭建关键步骤

    ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...

  5. Linux环境下Redis集群实践

    环境:centos 7 一.编译及安装redis源码 源码地址:redis版本发布列表 cd redis-3.2.8 sudo make && make install 二.创建节点 ...

  6. Linux(Centos7)下redis5集群搭建和使用

    1.简要说明 2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,是集群的构建方式复杂 ...

  7. 正式生产环境下hadoop集群的DNS+NFS+ssh免password登陆配置

    博客地址:http://www.loveweir.com/ 环境虚拟机centos6.5 主机名h1  IP 192.168.137.11  作为DNS FNS的server 主机名h2  IP 19 ...

  8. Ubuntu下hadoop集群搭建

    --修改IP地址(克隆镜像后可修改可不修改) http://jingyan.baidu.com/article/e5c39bf5bbe0e739d7603396.html -------------- ...

  9. 1.Hadoop集群搭建之Linux主机环境准备

    Hadoop集群搭建之Linux主机环境 创建虚拟机包含1个主节点master,2个从节点slave1,slave2 虚拟机网络连接模式为host-only(非虚拟机环境可跳过) 集群规划如下表: 主 ...

随机推荐

  1. 掌握Thinkphp3.2.0----内置标签

    使用内置标签的时候,一定要注意闭合-----单标签自闭合,双标签对应闭合 标签的学习在于记忆和应用 一. 判断比较 //IF 语句的完整格式 <if condition="$user ...

  2. python批量处理excel文件数据

    https://www.zhihu.com/question/39299070?sort=created 作者:水中柳影链接:https://www.zhihu.com/question/392990 ...

  3. Copy和MutableCopy

    实现拷贝的方法 -copy: 1.只会产生不可变的副本对象(比如:NSString) 2.[NSMutableString copy] 产品一个不可变的nsstring对象 -mutaleCopy: ...

  4. 解决Windows和Ubuntu时间不一致的问题

    问题原因是使用的时间不一致导致的.win10直接从bios读出来的时间认为就是实际时间,ubuntu认为加上8个小时 后的才是.win10用的rtc ,ubuntu用的utc 在ubuntu16.04 ...

  5. C++中的::operator new, ::operator delete

    一般在使用new  和 delete的时候,做了两件事情,一是空间的配置( new 是分配,delete是回收),而是调用对象的析构函数 但是也有办法将这两个过程分开 那就是显式的调用::operat ...

  6. BI

    http://www.cnblogs.com/biwork/p/3276455.html http://www.cnblogs.com/biwork/p/3328879.html http://www ...

  7. Android之Notification的多种用法(转)

    我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的. 我们也 ...

  8. Android开发笔记一(hello world)

    UI: <Button android:layout_width="wrap_content" android:layout_height="wrap_conten ...

  9. bnuoj 4225 杨辉三角形(规律)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4225 [题意]: 给定任意杨辉三角的行数n,请输出杨辉三角中前n行中总共有多少偶数. [题解]: 找 ...

  10. 利用Highcharts制作web图表学习(二)

        最近中海油的项目需要用到图表展示数据,最近还是一直边学习边开发,今天做了一个展示,炼化厂加热炉效率展示的柱状图,把代码贴出来,大家指点一下互相学习,我是通过数组给Highcharts绑定的值, ...