Hadoop 2.7分布式部署

news/2024/5/20 4:09:07 标签: hadoop, 开源, mapreduce, hdfs, 集群

转载请注明出处 http://blog.csdn.net/u012842205/article/details/52503514


Hadoop是一个开源的计算框架,致力于在廉价计算机集群上大规模数据集的分布式存储和计算。简介可通过此文章了解:Hadoop概述

当然,最好的学习方式,通过wikipedia,官网,各大博客论坛,书籍,都是很好的方法。本文主要叙述自身搭建Apache Hadoop集群各项操作和一些注意事项。


一  环境

1、软件:

Apache Hadoop2.7.1  我直接下载了二进制版,已经编译好的软件包。

JDK 1.8.0_73


2、系统:

集群一共四台实体机,系统都是CentOS 7.2


3、网络配置:

主机名IP角色
M1192.168.1.30NameNode
M2192.168.1.31DataNode
S1192.168.1.32DataNode
S2192.168.1.33DataNode
所有主机都在同一个网段上。将这些主机配置到hosts文件:

192.168.1.30   M1
192.168.1.31   M2
192.168.1.32   S1
192.168.1.33   S2

注意:hosts文件中不要定义127.0.0.1映射到本机主机名,可以映射到localhost。否则后面总会出现些奇奇怪怪的问题。


二  环境配置

1、Java 环境配置(JDK)

        这个材料太多了,不详细讲了。每台机器上都要有Java环境。Apache Hadoop由Java编写的,当然得有Java支持。本文中JAVA_HOME是/usr/lib64/jvm/jdk1.8.0_73,自己配一个喜欢的地方吧,每个节点都要配

注:目前java环境的配置,起作用的主要是CLASSPATH,JAVA_HOME,PATH中加入java的bin,特别是前两者。不注意很有可能出现ClassNotFound和未找到JAVA环境的问题。


2、Apache Hadoop解压

        通过官网下载到Hadoop二进制包,解压(一般压缩包为.tar.gz,可直接勇tar -xzvf 解压)并放置到一个自己喜欢的目录下即可,每个节点都如此操作

注意

(1)解压后,解压目录(比如hadoop2.7.1)的所有者必须是启动这个集群的系统用户或组,也及是有足够的执行权限。可以新创建一个hadoop用户,并将hadoop软件包解压(使用hadoop用户解压则这个目录就是hadoop用户的,若使用sudo了,所有者则是root)到其home目录下,注意这时候查看清除这个解压后的目录是不是hadoop用户和hadoop组。

(2)解压后根目录名称可以更改,因为之后要配环境变量$HADOOP_HOME,直接指向这个目录。


解压后,hadoop目录如下,简单介绍:

bin: 二进制文件,里面多是一些工具shell,用于管理hadoop

etc: 这个路劲下存储配置文件

include: 用于提供给C/C++的调用头文件

lib: 本地二进制库,主要是些a文件或so文件,也就是linux上类似dll的东西,主要供C/C++调用。

log: 看名也知道,是存储日志的目录。

libexec: 里面多是shell或批处理脚本,目前没用过,可能是些配置工具。

sbin: 这个目录中的脚本很重要,多是些启动脚本,daemon脚本等。用于Hadoop各个daemon的启动。

share: 目录中有jar文件。也就是Hadoop软件模块所在。这些jar文件也可以供其他软件使用,比如HBase。

        最后再提一句,hadoop根目录下的一些LICENSE、NOTICE等文本文件最好别删除。之前弄Sqoop时总是删除掉其中的RELEASE文件,这时运行sqoop便报错说找不到软件包,原来sqoop启动脚本是通过这个文件判断sqoop是用户自己编译的还是下载的二进制版本。


3、 SSH免密码登录配置

Hadoop主节点(启动整个集群服务的那个节点)通过SSH操作其他节点上的启动命令,并执行一些系统级shell。若不配这一步也可,只是每次启动Hadoop时将提示输入各节点密码,若集群很大的话,可想而知了 ;)。每个节点都必须有ssh服务器程序。没有自行安装,本文中所有节点ssh都是OpenSSH,进程是sshd。

(1)先在主节点M1上生成当前用户hadoop的RSA密钥,使用ssh-keygen这个工具,一般安装了SSH服务器都会带上。

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

注意:

1) 若指定的-f文件名不是id_rsa,则有可能不能成功免密码登录,比如我在Ubuntu server16.04系统上生成密钥,指定的-f是id_rsa_empty,这时就算导入到authorized_keys也不行,因为产生的文件是id_rsa_empty和id_rsa_empty.pub,好像是找不到私钥,只认id_rsa这个文件名,若将id_rsa_empty改成id_rsa,则可以通过。很奇怪,在我的Ubuntu桌面版就可以任意指定-f,而且查看了配置文件,配置也是一模一样。这有点物语。

2) 以上命令需在hadoop用户上执行,密码-P为空;最后一条命令一定确保权限足够。文件名authorized_keys是在sshd配置文件中写明的,且每个节点的sshd必须配置允许使用公钥免密码登录:在sshd_config文件中配置以下三个值再重启SSH:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys # 这里就是文件名,指定此文件中每一行公钥允许免密码登录

完成以上操作,可以使用以下命令验证是否能在本机免密码登录:

ssh localhost # 用户是hadoop,已经省略了

(2)将公钥文件发送集群中其他节点上。并将公钥追加到hadoop用户下的authorized_keys文件中。

cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

同理在M1上执行ssh S1, ssh M2等命令试试看能不能免密码登录,通过则配置成功。

注意:执行的用户非常重要,本文中,主节点M1的用户是hadoop,则hadoop使用ssh hadoop登录S1等其他节点后启动其上的hadoop进程,所以最好保持各节点的系统用户一致,至于这个问题是否可配置,有待高人告知了。我给每个节点操作系统都创建了hadoop用户(默认为hadoop用户组),并把hadoop解压目录复制到/home/hadoop/下。

就目前自己亲自配置和使用来看,不需要每个节点都配置公钥并给与其他节点。


三  Apache Hadoop集群配置

        Hadoop主要配置的是HDFS(Hadoop‘s Distributed File System),Yarn(俗称的MapReduce2),这两个模块都很重要。第一个为分布式存储提供服务,第二个为MapReduce调用接口提供服务,两者都会开启各自的一个或几个进程。除此之外,还有一些状态监视进程等。若没有特殊配置需要,大部分选项都可使用默认值,不配即可。以下配置文件都在$HADOOP_HOME/etc/hadoop/目录下。

1、配置环境变量

       目前我只配置了$HADOOP_HOME,将这个变量配置到系统/etc/profile或/etc/profile.d/中某个文件,或hadoop家目录下.bashrc文件中都可以,只要能访问到即可。每个节点都配,配置好后最好重启。本文中我配置在~/.bashrc文件:

export HADOOP_HOME=/ezpriv/deploy/hadoop-2.7.1
export PATH=$HADOOP_HOME/bin:$PATH
并追加了bin目录到$PATH

2、 配置core-site.xml文件

这个文件中主要配置一些hadoop系统级的选项,每个节点都要配,相同即可(一些特殊配置可能根据节点不同值不同,本文未涉及到)。

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://M1:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/bigdata/hadoop-2.7.1/tmp_test</value>
        </property>
</configuration>
本文主要配置两项,第一项是HDFS对外提供的服务接口,此处设置绑定在M1的网卡,在9000端口。

第二项配置临时路径。hadoop用户需有此路径读写权限。此项可以不配值,默认则保存在系统/tmp路劲下,有的Linux系统/tmp路径在重启后会清空。


3、 配额HDFS

HDFS配置在$HADOOP_HOME/etc/hadoop/hdfs-site.xml文件。每个节点都配,相同即可

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:///bigdata/hadoop-2.7.1/dfs/name_test</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///bigdata/hadoop-2.7.1/dfs/data_test</value>
        </property>
</configuration>
最主要的是第一项,配置HDFS文件系统中Block在集群中的备份数量。此处配置为1。 注意:此值最好不要超过集群节点总数。

剩下两项配置数据存储的路径、文件系统元数据存储路径。在不同的机器上路径可以不同(本文中为方便我配了相同值)。确保路径存在且hadoop用户有读写权限。


4、 配置mapred-site.xml文件

第二项配置要配上,很重要。我贴出自己的配置,这些配置多半因为机器资源(memory等)问题而配置的。所有节点都得配置,相同即可

<configuration>
        <property>
                <name>mapreduce.cluster.temp.dir</name>
                <value>/usr/data/hadoop/mapred_tempdir</value>
        </property>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>

        <property>
                <name>mapreduce.map.memory.mb</name>
                <value>1024</value>
        </property>
        <property>
                <name>mapreduce.task.timeout</name>
                <value>800000</value>
        </property>
        <property>
                <name>mapreduce.reduce.memory.mb</name>
                <value>1024</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.resource.mb</name>
                <value>1024</value>
        </property>
</configuration>

5、 配置yarn-site.xml文件

第一项配置最好写上,比较重要。同上我也贴出自己的配置。所有节点都得配置,相同即可

<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>


        <property>
                <name>yarn.web-proxy.address</name>
                <value>M1:8888</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>M1:8031</value>
        </property>

        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>M1</value>
        </property>
        <property>
                <name>yarn.nodemanager.address</name>
                <value>0.0.0.0:8034</value>
        </property>
        <property>
                <name>yarn.scheduler.minimum-allocation-mb</name>
                <value>512</value>
        </property>
        <property>
                <name>yarn.scheduler.maximum-allocation-mb</name>
                <value>2048</value>
        </property>
        <property>
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
        </property>
        <property>
                <name>yarn.nodemanager.vmem-pmem-ratio</name>
                <value>5</value>
        </property>
        <property>
                <name>yarn.nodemanager.resource.cpu-vcores</name>
                <value>1</value>
        </property>

</configuration>
注意:

(1)ResourceManager可以运行在指定的机器上,这里我指定了M1(yarn.resourcemanager.hostname),也可以是其他的。

(2)NodeManager是每个节点在启动yarn时都会启动的,所以值设置成0.0.0.0:8034,端口可以自己拟定,但保证不冲突,防火墙通过什么的。


6、 配置slaves文件

这个文件用于指定DataNode是哪些节点,在本文中,除了M1,其他的M2,S1,S2都是DataNode。每一个节点一行,可以是机器名(必须配置了系统/etc/hosts文件),也可以是ip。所有节点都得配,相同即可。这个文件是启动脚本调用的,不是jar调用的。

M2
S1
S2
之前也看到有人说还有一个masters文件,但这个masters文件貌似是用于指定SecondaryNameNode运行节点的。目前没有尝试过。

四 启动集群

Hadoop指定启动集群的那个节点就是主节点。这个节点会启动NameNode进程。以下命令都在M1上进行,这些命令会自动与其他节点链接(SSH)并启动其上的各项进程。

1、 格式化HDFS

在$HADOOP_HOME目录下以hadoop系统用户执行:

bin/hdfs namenode -format

此后在namenode存储路径中会生成一些元数据信息。

注意:若已经格式化了,再重新格式化,其在namenode路劲中产生的VERSION文件值可能与其他数据节点的不一致而启动不起来,需要手动将这个值修改到每个DataNode。或者这个重格式化操作有其他命令,暂时没有研究过。


2、 启动HDFS

在$HADOOP_HOME目录使用如下命令:

sbin/start-dfs.sh
使用JDK中的jps命令查询JVM状态。M1开启了如下进程(可能会有其他进程,目前这两个是最重要的):

SecondaryNameNode:用于管理HDFS edit log文件的进程。

NameNode: 用于提供文件系统元数据服务的进程。


在其他节点将开启如下进程:

DataNode: 数据节点服务


3、 启动yarn

在$HADOOP_HOME目录使用如下命令:

sbin/start-yarn.sh

在主节点开启如下进程:

ResourceManager: 用于对外提供yarn服务,资源分配等,还负责托管用户提交的mapreduce作业,负载均衡等。

在其他节点开启:

NodeManager: 每个能为MapReduce作业提供资源(内存,磁盘空间,CPU)的节点都会启动,用于与ResourceManager通信,报告节点实时情况。


五 废话

以上是本人搭建分布式时的一些总结和拙见,希望能帮助大家。若有错误纯属不懂,谢谢指正!



http://www.niftyadmin.cn/n/983412.html

相关文章

kafkaAPI使用以及常用配置介绍

这篇文章主要介绍kafka中JAVA API的使用&#xff0c;这里面为了介绍配置&#xff0c;所以使用的是原生的javaapi操作&#xff0c;kafka可以与spring通过xml配置集成&#xff0c;或者更加简单通过spring boot引入starter&#xff0c;通过&#xff08;AutoConfiguration&#xff…

TDengine在钢铁冶金行业能源管理系统中的应用

作者介绍&#xff1a; 徐子攀&#xff0c;上海旬思科技有限公司研发总监&#xff0c;长期从事底层工业通讯协议开发&#xff0c;独立完成多种主流PLC、流量计等工业设备通讯采集驱动开发&#xff0c;对工业现场数据采集相关技术有深入研究。近年参与工业互联网平台构建工作&…

70 后互联网老兵经验分享:成为开源软件贡献者并不难!

作者&#xff5c;李夏昕 / 审核&#xff5c;臧秀涛TDengine 线上 Meetup 第三期《70 后互联网老兵经验分享&#xff1a;成为开源软件贡献者并不难&#xff01;》将于 2021 年 8 月 4 日(本周三) 20:00 和大家见面&#xff5e;一起来听听 TDengine 研发工程师桑树多讲述从使用者…

命题逻辑真值表_命题逻辑

命题逻辑真值表You likely learned about the distributive property in your middle school algebra class. The distributive rule says that a term multiplied by two or more terms in parentheses is applied to each of those terms individually. For instance: 您可能…

三分钟梳理TDengine安装部署的逻辑

小 T 导读&#xff1a;TDengine&#xff0c;是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品&#xff0c;除却读写性能、存储压缩能力强大之外&#xff0c;还有安装简单、操作难度低等优势。今天我们就从常见的使用方式开始&#xff0c;给大家…

Java基础代码库:ACM的A+B问题

import java.util.*; public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);while(in.hasNext()){int a in.nextInt();int b in.nextInt();System.out.println(ab); }} } 转载于:https://www.cnblogs.com/todsong/archive/2…

sparkstreaming对接kafka出现的数据积压问题

kafka数据积压问题 1. 问题描述 生产环境开发了一套sparkstreaming对接kafka&#xff0c;并进行数据处理的程序。刚开始程序运行的很好&#xff0c;kafka集群被人动过之后&#xff0c;重启spark程序时出现如下报警信息&#xff1a; 18/06/20 15:29:21 WARN kafka010.KafkaUt…

Redis 简介

原文地址&#xff1a;http://redis.io/topics/introduction Redis是一个开源的&#xff08;以BSD licensed释出&#xff09;&#xff0c;基于内存的结构化数据存储&#xff0c;多用作数据库&#xff0c;缓存和消息代理。目前支持的数据结构有string&#xff0c;hashes&#xf…