[喵咪大数据]Hadoop集群模式-阿里云开发者社区

开发者社区> 喵了个咪_> 正文

[喵咪大数据]Hadoop集群模式

简介: 既然是大数据无论存储和处理都需要相当大的磁盘或者是处理的资源消耗,那么单机肯定是满足不了我们的需求的,所以本节我们就来了解Hadoop的集群模式搭建,在集群情况下一同配合处理任务分发,存储分担等相关的功能进行实践.
+关注继续查看

既然是大数据无论存储和处理都需要相当大的磁盘或者是处理的资源消耗,那么单机肯定是满足不了我们的需求的,所以本节我们就来了解Hadoop的集群模式搭建,在集群情况下一同配合处理任务分发,存储分担等相关的功能进行实践.

附上:

Hadoop的官网:hadoop.apache.org
喵了个咪的博客:w-blog.cn

1.准备工作

安装包清单

统一存放到/app/install目录下,暂时只用存放到hadoop-1上,配置好了之后scp到slave节点上

jdk-8u101-linux-x64.tar.gz
hadoop-2.7.3.tar.gz

服务器环境

服务器系统使用centos7.X 64位版本

# hadoop-1      192.168.1.101
# hadoop-2      192.168.1.102
# hadoop-3      192.168.1.103

创建install目录存放各项包,使用oneinstack更新基础组件

> mkdir -p /app/install && cd /app/install
# 使用oneinstack更新一下环境基础组件 全部选择N即可
> wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
> tar -zxvf oneinstack-full.tar.gz
> cd oneinstack && ./install.sh

关闭各个节点防火墙(hadoop各个端口通讯会被拦截)或者是下面配置的一些端口全部加入到白名单中

> systemctl stop firewalld.service    # 关闭firewall
> systemctl disable firewalld.service # 禁止firewall开机启动

分别修改服务器的主机名

# 最后主机名会全小写状态显示
> hostnamectl set-hostname hadoop-1
> hostnamectl set-hostname hadoop-2
> hostnamectl set-hostname hadoop-3

修改服务器的host(方便互相连通是的时候使用hostname)

> vim /etc/hosts
192.168.1.101 hadoop-1
192.168.1.102 hadoop-2
192.168.1.103 hadoop-3

重启服务器使其修改生效,重启完成后会发现主机名已经改回来了,然后使用ping命令检查是否可以互相连通

> ping hadoop-1
> ping hadoop-2
> ping hadoop-3

为所有集群节点创建hadoop用户(如果暴露外网IP务必使用复杂密码避免攻击)

> useradd -m hadoop -s /bin/bash
> passwd hadoop

为 hadoop 用户增加管理员权限,可以使用sudo来以root权限来进行操作

> visudo
# 找到root复制一条改为hadoop
root    ALL=(ALL)       ALL
hadoop  ALL=(ALL)       ALL

给hadoop-1添加SHH免密登录(hadoop-1 是我们的master主机)

# 先切换到hadoop用户
> su hadoop
> ssh-keygen -t rsa              # 会有提示,都按回车就可以
> cd ~/.ssh/  
> cat id_rsa.pub >> authorized_keys  # 加入授权
> chmod 600 ./authorized_keys    # 修改文件权限
> ssh localhost      # 此时使用ssh首次需要yes以下不用密码即可登录

让hadoop-1可以免密码登录到hadoop-2和hadoop-3
在2和3上执行

> su hadoop
> ssh-keygen -t rsa 

在hadoop-1上执行

> scp ~/.ssh/authorized_keys hadoop@hadoop-2:/home/hadoop/.ssh/
> scp ~/.ssh/authorized_keys hadoop@hadoop-3:/home/hadoop/.ssh/

此时就可以使用如下命令通过hadoop1号登录2和3

> ssh hadoop-2
> ssh hadoop-3

2.配置集群

Java环境

首先需要在每台服务器上配置好java环境

> cd /app/install
> sudo tar -zxvf jdk-8u101-linux-x64.tar.gz 
> sudo mv jdk1.8.0_101/ /usr/local/jdk1.8
> scp /app/install/jdk-8u101-linux-x64.tar.gz hadoop@hadoop-2:~
> scp /app/install/jdk-8u101-linux-x64.tar.gz hadoop@hadoop-3:~

在hadoop-2 和 hadoop-3 上以root的身份执行

> sudo mv ~/jdk-8u101-linux-x64.tar.gz /app/install
> cd /app/install
> sudo tar -zxvf jdk-8u101-linux-x64.tar.gz 
> sudo mv jdk1.8.0_101/ /usr/local/jdk1.8

所有节点环境变量增加如下内容

> sudo vim /etc/profile
# java
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=/usr/local/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
# 使环境变量生效
> source /etc/profile

如下结果为安装成功

> java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

Hadoop环境

首先在hadoop-1上准备hadoop环境

> cd /app/install
> sudo tar -zxvf hadoop-2.7.3.tar.gz
> sudo mv hadoop-2.7.3 /usr/local/
> sudo chown -R hadoop:hadoop /usr/local/hadoop-2.7.3

所有节点环境变量增加如下内容

> sudo vim /etc/profile
# hadoop
export HADOOP_HOME=/usr/local/hadoop-2.7.3
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=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# 使环境变量生效
> source /etc/profile

配置Hadoop集群

集群/分布式模式需要修改 /usr/local/hadoop-2.7.3/etc/hadoop 中的6个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项:vim hadoop-env.sh 、 slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。

1.修改hadoop-env.sh中的JAVA环境变量

> vim /usr/local/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8

1, 文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 hadoop-1 节点仅作为 NameNode 使用。
本教程让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加如下内容。

> vim /usr/local/hadoop-2.7.3/etc/hadoop/slaves
hadoop-2
hadoop-3

2, 文件 core-site.xml 改为下面的配置:

> vim /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop-1:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop-2.7.3/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

3, 文件 hdfs-site.xml,dfs.replication 一般设为 3,但我们只有两个 Slave 节点,所以 dfs.replication 的值还是设为 2:

NameNode:管理文件系统的元数据,所有的数据读取工作都会先经过NameNode获取源数据在哪个DataNode里面在进行获取操作

DataNode:实际数据存储节点,具体的映射关系会存储在NameNode下

replication:复制因子,HDFS还有一个重要功能就是复制,当磁盘损坏的时候HDFS的数据并不会丢掉,可以理解为冗余备份机制

这里和单机模式不同的是需要配置NameNode的调用地址,DataNode节点才能连接上

> vim /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop-1:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop-2.7.3/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop-2.7.3/tmp/dfs/data</value>
        </property>
</configuration>

4, 文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:

> mv /usr/local/hadoop-2.7.3/etc/hadoop/mapred-site.xml.template /usr/local/hadoop-2.7.3/etc/hadoop/mapred-site.xml
> vim /usr/local/hadoop-2.7.3/etc/hadoop/mapred-site.xml 
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>hadoop-1:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>hadoop-1:19888</value>
        </property>
</configuration>

5, 文件 yarn-site.xml:

> vim /usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml 
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop-1</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

配置好后,将 Master 上的 /usr/local/Hadoop-2.7.3 文件夹复制到各个节点上。因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 Master 节点上执行:

> scp -r /usr/local/hadoop-2.7.3 hadoop-2:/home/hadoop
> scp -r /usr/local/hadoop-2.7.3 hadoop-3:/home/hadoop

在 2和3节点上执行:

> sudo mv ~/hadoop-2.7.3 /usr/local
> sudo chown -R hadoop /usr/local/hadoop-2.7.3

首次启动和单机模式一样需要先在 Master 节点(hadoop1)执行 NameNode 的格式化:

> hdfs namenode -format

接着可以启动 hadoop 了,启动需要在 Master 节点上进行:

> start-dfs.sh
> start-yarn.sh
> mr-jobhistory-daemon.sh start historyserver

运行start-dfs.sh有如下提示

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
该警告通过如下方法消除了:
在hadoop-env.sh中 修改HADOOP_OPTS:
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib:$HADOOP_PREFIX/lib/native"

查看集群情况(关于磁盘占用,服务器状态等)

当整个集群运行起来之后可以通过hadoop-1:50070进行集群状态的查看和hdfs dfsadmin -report效果一样

> hdfs dfsadmin -report

如果不在需要使用可以使用如下命令关闭整个集群

> stop-yarn.sh
> stop-dfs.sh
> mr-jobhistory-daemon.sh stop historyserver

因为在环境变量中配置了$HADOOP_HOME/sbin也可以直接使用Hadoop快速启动快速关闭命令来对Hadoop整个集群启动或关闭

start-all.sh
stop-all.sh

3.集群模式下运行测试程序

执行集群任务执行过程与伪分布式模式一样,首先创建 HDFS 上的用户目录:

> hdfs dfs -mkdir -p /user/hadoop

将 /usr/local/hadoop-2.7.3/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中:

> hdfs dfs -mkdir input
> hdfs dfs -put /usr/local/hadoop-2.7.3/etc/hadoop/*.xml input
> hdfs dfs -ls /user/hadoop/input

接着就可以运行 MapReduce 作业了:

> hadoop jar /usr/local/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'

运行时的输出信息与伪分布式类似,会显示 Job 的进度。

可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。

需要在所有集群中yarn-site.xml中增加

> vim /usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml
<property>  
    <name>yarn.nodemanager.resource.memory-mb</name>  
    <value>20480</value>  
</property>  
<property>  
   <name>yarn.scheduler.minimum-allocation-mb</name>  
   <value>2048</value>  
</property>  
<property>  
    <name>yarn.nodemanager.vmem-pmem-ratio</name>  
    <value>2.1</value>  
</property>  

如果你使用的是阿里云的服务器这里有一个大坑,阿里云默认的host里面会写一些配置影响的hadoop正常运行,如下:

如果还是出现 failed on connection exception 异常运行不起来的情况可以去/etc/hosts中注释如下配置:

#127.0.0.1   localhost localhost.localdomain localhost4 localhost
#127.0.0.1 izbp1cvz54m4x8i9l5clyiz
#127.0.0.1 izbp1cvz54m4x8i9l5clyiz4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

同样可以通过 Web 界面查看任务进度 hadoop-1:8088/cluster,在 Web 界面点击 “Tracking UI” 这一列的 History 连接,可以看到任务的运行信息,如下图所示:

查看处理结果

> hdfs dfs -cat output/*

4 总结

本节已经成功的在集群的情况下协调进行了任务的处理工作数据的存储工作,下一节中我们将讲到一些关于Hadoop维护相关的内容,最后多谢大家的支持欢迎大家一同交流!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
你的大数据安全么?“Hadoop集群遭遇勒索软件攻击 ”
近期,各大安全组织检测到勒索软件正在攻击Hadoop集群,再次表明黑客正在尝试从“大数据”中获利,你的数据资产有没有被黑客get了? ◇◆◇◆◇ 勒索软件攻击Hadoop事件综述 最近,部分黑客组织针对几款特定产品展开了勒索攻击。
8381 0
上云新姿势,阿里云数据库专属集群 MyBase 企业客户交流深圳站圆满结束
阿里云数据库专属集群MyBase于2019年11月正式商业化,历经阿里集团十多年数据库技术经验沉淀,为客户打造稳定可靠的云上专有数据中心。
505 0
CentOS7安装Hadoop集群
http://www.jianshu.com/p/a69972d8a119 安装Hadoop之前,请先安装好zookeeper集群并启动 参考 CentOS7安装Zookeeper集群 我这里准备了三台服务器,一台主机名为hadoop1(做NameNo...
1137 0
手把手教你在CentOS上搭建Kubernetes集群
作者:ChamPly安装CentOS 1.安装net-tools[root@localhost ~]# yum install -y net-tools2.关闭firewalld[root@localhost ~]# systemctl stop firewalld && systemctl di...
1221 0
[喵咪大数据]Hadoop集群模式
既然是大数据无论存储和处理都需要相当大的磁盘或者是处理的资源消耗,那么单机肯定是满足不了我们的需求的,所以本节我们就来了解Hadoop的集群模式搭建,在集群情况下一同配合处理任务分发,存储分担等相关的功能进行实践.
105 0
【数道云大数据】Hadoop大数据技术有什么市场价值?2019年Hadoop大数据技术7大应用领域
由于国家对大数据、AI等等技术的关注,在多次发展规划中都提高了大数据技术,因此大数据技术对于这个时代的发展来说至关重要,大数据也正处于发展期、巩固期,基于已有的技术去完善和不断的发展大数据技术产品,满足互联网不符按发在的需求,使国家的技术产业得到进步和发展。
948 0
[喵咪大数据]Hadoop单机模式
千里之行始于足下,学习大数据我们首先就要先接触Hadoop,上节介绍到Hadoop分为Hadoop-HDFS,Hadoop-YARN,Hadoop-Mapreduce组成,分别负责分布式文件存储,任务调度,计算处理,本机我们在单机模式下把Hadoop运行起来并且简单的使用接触Hadoop相关的机制.
68 0
+关注
喵了个咪_
后端程序员,开源PHP框架PhalApi核心开发者,编写录制phalapi教程,phalcon爱好者编写phalcon教程以及zephir文档翻译,热爱交流沟通,喜欢go语言,欢迎大家一起交流沟通,探讨技术,座右铭:代码即真理,你的真理是什么呢?
166
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载