Hadoop多节点集群安装配置

Hadoop(02) Hadoop-3.3.6 集群的配置教程 为了简化分布式模式的部署难度,我们可以使用两个节点(两台物理机器)来搭建一个简单的集群环境。为了便于区分,我们将其中一台机器将作为Master节点,其主机名命名为hadoop01;另一台机器将作为Slave节点,其主机名命名为hadoop02。如果需要构建由三个以上节点组成的集群,可以采用类似的方法进行安装和部署。 阅读详情

1、集群部署介绍

1.1 Hadoop简介

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

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

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

1.2 环境说明

我的环境是在虚拟机中配置的,Hadoop集群中包括4个节点:1个Master,2个Salve,节点之间局域网连接,可以相互ping通,节点IP地址分布如下:

 

虚拟机系统

机器名称

IP地址

Ubuntu 13.04

Master.Hadoop

192.168.1.141

Ubuntu 9.11

Salve1.Hadoop

192.168.1.142

Fedora 17

Salve2.Hadoop

192.168.1.137

 

Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;3个Salve机器配置DataNode 和TaskTracker的角色,负责分布式数据存储以及任务的执行。其实应该还应该有1个Master机器,用来作为备用,以防止Master服务器宕机,还有一个备用马上启用。后续经验积累一定阶段后补上一台备用Master机器(可通过配置文件修改备用机器数)。

    注意:由于hadoop要求所有机器上hadoop的部署目录结构要求相同(因为在启动时按与主节点相同的目录启动其它任务节点),并且都有一个相同的用户名账户。参考各种文档上说的是所有机器都建立一个hadoop用户,使用这个账户来实现无密码认证。这里为了方便,分别在三台机器上都重新建立一个hadoop用户。

1.3 环境配置

Hadoop集群要按照1.2小节表格所示进行配置,下面介绍如何修改机器名称和配置hosts文件,以方便使用。

注意:我的虚拟机都采用NAT方式连接网络,IP地址是自动分配的,所以这里就使用自动分配的IP地址而未特地修改为某些IP地址。

(1)修改当前机器名称

假定我们发现我们的机器的主机名不是我们想要的。

1)在Ubuntu下修改机器名称

修改文件/etc/hostname里的值即可,修改成功后用hostname命令查看当前主机名是否设置成功。

clip_image002[12]

       另外为了能正确解析主机名,最好也修改/etc/hosts文件里对应的主机名 
       clip_image003[12]

2)在Fedora下修改机器名称

通过对"/etc/sysconfig/network"文件修改其中"HOSTNAME"后面的值,改成我们规定的名称。

命令:vi /etc/sysconfig/network,修改如下: 
    clip_image004[12] 
        clip_image005[12]

    同样为了能正确解析主机名,最好也修改/etc/hosts文件里对应的主机名。

(2)配置hosts文件(必须)

"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName  IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名对应的IP地址。

我们要测试两台机器之间知否连通,一般用"ping 机器的IP",如果想用"ping 机器的主机名"发现找不见该名称的机器(这也就是为什么在修改主机名的同时最好修改该文件中对应的主机名),解决的办法就是修改"/etc/hosts"这个文件,通过把LAN内的各主机的IP地址和HostName的一一对应写入这个文件的时候,就可以解决问题。

例如:机器为"Master.Hadoop:192.168.1.141"对机器为"Salve1.Hadoop:192.168.1.142"用命令"ping"记性连接测试。测试结果如下: 
    clip_image006[12]

从上图中的值,直接对IP地址进行测试,能够ping通,但是对主机名进行测试,发现没有ping通,提示"unknown host——未知主机",这时查看"Master.Hadoop"的"/etc/hosts"文件内容会发现里面没有"192.168.1.142  Slave1.Hadoop"内容,故而本机器是无法对机器的主机名为"Slave1.Hadoop" 解析。

在进行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的"/etc/hosts"文件中都要添加如下内容:

192.168.1.141 Master.Hadoop

192.168.1.142 Slave1.Hadoop

192.168.1.137 Slave2.Hadoop

命令:vi /etc/hosts,添加结果如下: 
clip_image007[12]

现在我们在进行对机器为"Slave1.Hadoop"的主机名进行ping通测试,看是否能测试成功。

clip_image009[12]

从上图中我们已经能用主机名进行ping通了,说明我们刚才添加的内容,在局域网内能进行DNS解析了,那么现在剩下的事儿就是在其余的Slave机器上进行相同的配置。然后进行测试。

1.4 所需软件

(1)JDK软件

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

    JDK版本:jdk-7u25-linux-i586.tar.gz

(2)Hadoop软件

    下载地址:http://hadoop.apache.org/common/releases.html

    Hadoop版本:hadoop-1.1.2.tar.gz

2、SSH无密码验证配置

Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode。

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

Ubuntu下安装ssh:sudo apt-get install openssh-server

Fedora下安装ssh:yum install openssh-server

2.1 SSH基本原理和用法

1)SSH基本原理

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

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

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

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

2)SSH基本用法

    假如用户名为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

1)SSH无密码原理

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

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

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

在Master节点上执行以下命令:

ssh-keygen –t rsa –P ''

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

查看"/home/用户名/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。

    clip_image011[12]

b. 接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。

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

clip_image012[12]

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

chmod 600 authorized_keys

c. 用root用户登录修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。

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

RSAAuthentication yes # 启用 RSA 认证

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

AuthorizedKeysFile  %h/.ssh/authorized_keys # 公钥文件路径 
    clip_image013[12]


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

    clip_image014[12]   

退出root登录,使用普通用户验证是否设置成功。

clip_image015[12] 

从上图中得知无密码登录本级已经设置完毕,接下来的事儿是把公钥复制所

有的Slave机器上。

    注意:有时候在测试时可能会出现错误: Agent admitted failure to sign using the key.解决办法是:ssh-add   ~/.ssh/id_rsa ,如下所示:

   clip_image016[12]

    d.使用ssh-copy-id命令将公钥传送到远程主机上(这里以Slave1.Hadoop为例)。

clip_image018[12]

e. 测试是否无密码登录其它机器成功。

clip_image020[12]

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

接下来配置所有Slave无密码登录Master,其和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加到Master的".ssh"文件夹下的"authorized_keys"中,记得是追加(>>)。

注意:期间可能会出现一些问题如下:

(1)如果在ssh连接时出现错误“ssh:connect to host port 22: Connection refused”,如下图所示: 
clip_image021[12]

则可能是因为远程登录的那台机器没有安装ssh服务或安装了没有开启ssh服务,下面到Slave3.Hadoop主机进行测试: 
clip_image023[12]

为了一劳永逸,设置系统启动时开启服务:# systemctl enable sshd.service 
clip_image025[12]

(2)如果在用命令ssh-copy-id时发现找不到该命令“ssh-copy-id:Command not found”,则可能是ssh服务的版本太低的原因,比如若你的机器是Redhat系统就可能该问题,解决办法是:手动复制本地的pubkey内容到远程服务器,命令如下:

 cat ~/.ssh/id_rsa.pub | ssh hadoop@Master.Hadoop 'cat >> ~/.ssh/authorized_keys'

该命令等价于下面两个命令:

①在本地机器上执行:scp ~/.ssh/id_rsa.pub hadoop@Master.Hadoop:/~

②到远程机器上执行:cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

clip_image027[12]

3、Java环境安装

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

3.1 安装JDK

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

3.2 配置环境变量

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

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

# set java environment

export JAVA_HOME=/usr/java/jdk1.7.0_25/

export JRE_HOME=/usr/java/jdk1.7.0_25/jre

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

或者

# set java environment

export JAVA_HOME=/usr/java/jdk1.7.0_25/

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

以上两种意思一样,那么我们就选择第1种来进行设置。

clip_image028[12]

(2)使配置生效

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

source /etc/profile 或 . /etc/profile

clip_image029[11]

3.3 验证安装成功

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

java -version

clip_image030[11]

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

3.4 安装剩余机器

这时用普通用户hadoop通过scp命令格式把"/usr/java/"文件复制到其他Slave上面,剩下的事儿就是在其余的Slave服务器上按照上图的步骤配置环境变量和测试是否安装成功,这里以Slave1.Master为例:

scp -r /usr/java seed@Slave1.Master:/usr/ 

注意:有的机器库函数版本较低,可能安装不了高版本的JDK,比如有些Redhat9,此时不可以选择较低版本的JDK进行安装,因为所有集群中的JDK版本必须相同(经过测试),有两种方法可解决:一是放弃该机器,选用另一台能装该版本的JDK的机子;二是选择低版本的JDK,在所有机器上重新安装。

4、Hadoop集群安装

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

4.1 安装hadoop

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

cd /usr

tar –xzvf hadoop-1.1.2.tar.gz

mv hadoop-1.1.2 hadoop

chown –R hadoop:hadoop hadoop #将文件夹"hadoop"读权限分配给hadoop普通用户

rm -rf hadoop-1.1.2.tar.gz

最后在"/usr/hadoop"下面创建tmp文件夹,并把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件,将以下语句添加到末尾,并使其生效(. /etc/profile):

# set hadoop path

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH :$HADOOP_HOME/bin

clip_image031[11]

4.2 配置hadoop

(1)配置hadoop-env.sh

该"hadoop-env.sh"文件位于"/usr/hadoop/conf"目录下。

在文件中修改下面内容:

export JAVA_HOME=/usr/java/jdk1.7.0_25

clip_image032[11]

Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。 由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core- site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在 HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。

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

修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS master(即namenode)的地址和端口号。

<configuration>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/usr/hadoop/tmp</value>

        (备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹)

        <description>A base for other temporary directories.</description>

    </property>

<!-- file system properties -->

    <property>

        <name>fs.default.name</name>

        <value>hdfs://192.168.1.141:9000</value>

    </property>

</configuration>

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

clip_image033[11]

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

修改Hadoop中HDFS的配置,配置的备份方式默认为3。

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>1</value>

        (备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)

    </property>

<configuration>

 clip_image034[11]

(4)配置mapred-site.xml文件

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

<configuration>

    <property>

        <name>mapred.job.tracker</name>

        <value>http://192.168.1.141:9001</value>

    </property>

</configuration>

clip_image035[11]

(5)配置masters文件

有两种方案:

    (1)第一种

    修改localhost为Master.Hadoop

    (2)第二种

    去掉"localhost",加入Master机器的IP:192.168.1.141

为保险起见,启用第二种,因为万一忘记配置"/etc/hosts"局域网的DNS失效,这样就会出现意想不到的错误,但是一旦IP配对,网络畅通,就能通过IP找到相应主机。

clip_image036[11]

(6)配置slaves文件(Master主机特有)

    有两种方案:

    (1)第一种

    去掉"localhost",每行添加一个主机名,把剩余的Slave主机名都填上。

    例如:添加形式如下:

Slave1.Hadoop

Slave2.Hadoop

    (2)第二种

    去掉"localhost",加入集群中所有Slave机器的IP,也是每行一个。

    例如:添加形式如下

192.168.1.142

192.168.1.137

原因和添加"masters"文件一样,选择第二种方式。

clip_image037[11]

现在在Master机器上的Hadoop配置就结束了,剩下的就是配置Slave机器上的Hadoop。

最简单的方法是将 Master上配置好的hadoop所在文件夹"/usr/hadoop"复制到所有的Slave的"/usr"目录下(实际上Slave机器上的slavers文件是不必要的, 复制了也没问题)。用下面命令格式进行。(备注:此时用户可以为普通用户也可以为root)   

scp -r /usr/hadoop root@服务器IP:/usr/

例如:从"Master.Hadoop"到"Slave1.Hadoop"复制配置Hadoop的文件。

scp -r /usr/hadoop root@Slave1.Hadoop:/usr/

以root用户进行复制,当然不管是用户root还是普通用户,虽然Master机器上的"/usr/hadoop"文件夹用户hadoop有权限,但是Slave1上的hadoop用户却没有"/usr"权限,所以没有创建文件夹的权限。所以无论是哪个用户进行拷贝,右面都是"root@机器 IP"格式。因为我们只是建立起了普通用户的SSH无密码连接,所以用root进行"scp"时,扔提示让你输入"Slave1.Hadoop" 服务器用户root的密码。

clip_image039[11]

    查看"Slave1.Hadoop"服务器的"/usr"目录下是否已经存在"hadoop"文件夹,确认已经复制成功。查看结果如下:

clip_image040[11] 

从上图中知道,hadoop文件夹确实已经复制了,但是我们发现hadoop权限是root,所以我们现在要给"Slave1.Hadoop"服务器上的用户hadoop添加对"/usr/hadoop"读权限。

以root用户登录"Slave1.Hadoop",执行下面命令。

chown -R hadoop:hadoop(用户名:用户组) hadoop(文件夹)

接着在"Slave1 .Hadoop"上修改"/etc/profile"文件,将以下语句添加到末尾,并使其有效(source /etc/profile):

# set hadoop environment

export HADOOP_HOME=/usr/hadoop

export PATH=$PATH :$HADOOP_HOME/bin

如果不知道怎么设置,可以查看前面"Master.Hadoop"机器的"/etc/profile"文件的配置,到此为止在一台Slave机器上的Hadoop配置就结束了。剩下的事儿就是照葫芦画瓢把剩余的几台Slave机器进行部署Hadoop。

4.3 启动及验证

(1)格式化HDFS文件系统

在"Master.Hadoop"上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)

hadoop namenode -format

clip_image041[11] 

从上图中知道我们已经成功格式化了,但是美中不足就是出现了一个警告,从网上得知这个警告并不影响hadoop执行,但是也有办法解决,详情看后面的"常见问题FAQ"。

(2)启动hadoop

在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。使用下面命令启动。

start-all.sh

clip_image043[11]

可以通过以下启动日志看出,首先启动namenode 接着启动datanode1,datanode2,…,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,tasktracker2,…。

启动 hadoop成功后,在 Master 中的 tmp 文件夹中生成了 dfs 文件夹,在Slave 中的 tmp 文件夹中均生成了 dfs 文件夹和 mapred 文件夹。

(3)验证hadoop

(1)验证方法一:用"jps"命令

在Master上用 java自带的小工具jps查看进程。

clip_image044[11]

在Slave2上用jps查看进程。

clip_image045[12]

如果在查看Slave机器中发现"DataNode"和"TaskTracker"没有起来时,先查看一下日志的,如果是"namespaceID"不一致问题,采用"常见问题FAQ6.2"进行解决,如果是"No route to host"问题,采用"常见问题FAQ6.3"进行解决。

(2)验证方式二:用"hadoop dfsadmin -report"

用这个命令可以查看Hadoop集群的状态。

clip_image046[11]

 

 

 

4.4 网页查看集群

(1)访问"http://192.168.1.141:50030"

clip_image048[11]

(2)访问"http://192.168.1.142:50070"

clip_image050[11]

5、常见问题FAQ

5.1 关于 Warning: $HADOOP_HOME is deprecated.

hadoop安装完之后敲入hadoop命令时,老是提示这个警告:

    Warning: $HADOOP_HOME is deprecated.

经查hadoop-1.1.2/bin/hadoop脚本和"hadoop-config.sh"脚本,发现脚本中对HADOOP_HOME的环境变量设置做了判断,其实根本不需要设置HADOOP_HOME环境变量。

解决方案一:编辑"/etc/profile"文件,去掉HADOOP_HOME的变量设定,重新输入hadoop fs命令,警告消失。

解决方案二:编辑"/etc/profile"文件,添加一个环境变量,之后警告消失:

    export HADOOP_HOME_WARN_SUPPRESS=1

5.2 解决"no datanode to stop"问题

当我停止Hadoop时发现如下信息:

    no datanode to stop

原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,有两种解决方案:

第一种解决方案如下:

1)先删除"/usr/hadoop/tmp"

rm -rf /usr/hadoop/tmp

2)创建"/usr/hadoop/tmp"文件夹

mkdir /usr/hadoop/tmp

3)删除"/tmp"下以"hadoop"开头文件

rm -rf /tmp/hadoop*

4)重新格式化hadoop

 

hadoop namenode -format

5)启动hadoop

start-all.sh

使用第一种方案,有种不好处就是原来集群上的重要数据全没有了。假如说Hadoop集群已经运行了一段时间。建议采用第二种。

第二种方案如下:

1)修改每个Slave的namespaceID使其与Master的namespaceID一致。

   或者

2)修改Master的namespaceID使其与Slave的namespaceID一致。

该"namespaceID"位于"/usr/hadoop/tmp/dfs/name/current/VERSION"文件中,前面蓝色的可能根据实际情况变化,但后面红色一般是不变的。

例如:查看"Master"下的"VERSION"文件

clip_image051[19]

本人建议采用第二种,这样方便快捷,而且还能防止误删。

5.3 Slave服务器中datanode启动后又自动关闭

查看日志发下如下错误。

    ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to ... failed on local exception: java.net.NoRouteToHostException: No route to host

解决方案是:关闭防火墙

5.4 从本地往hdfs文件系统上传文件

出现如下错误:

INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.IOException: Bad connect ack with firstBadLink

INFO hdfs.DFSClient: Abandoning block blk_-1300529705803292651_37023

WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Unable to create new block.

解决方案是:

1)关闭防火墙

2)禁用selinux

    编辑 "/etc/selinux/config"文件,设置"SELINUX=disabled"

5.5 安全模式导致的错误

出现如下错误:

org.apache.hadoop.dfs.SafeModeException: Cannot delete ..., Name node is in safe mode

在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。

解决方案是:关闭安全模式

hadoop dfsadmin -safemode leave

5.6 解决Exceeded MAX_FAILED_UNIQUE_FETCHES

出现错误如下:

Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out

程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。

解决方案是:修改2个文件。

1)"/etc/security/limits.conf"

    vi /etc/security/limits.conf

加上:

    soft nofile 102400

    hard nofile 409600

2)"/etc/pam.d/login"

    vim /etc/pam.d/login

添加:

    session required /lib/security/pam_limits.so

针对第一个问题我纠正下答案:

这是reduce预处理阶段shuffle时获取已完成的map的输出失败次数超过上限造成的,上限默认为5。引起此问题的方式可能会有很多种,比如网络连接不正常,连接超时,带宽较差以及端口阻塞等。通常框架内网络情况较好是不会出现此错误的。

5.7 解决"Too many fetch-failures"

出现这个问题主要是结点间的连通不够全面。

解决方案是:

1)检查"/etc/hosts"

要求本机ip 对应服务器名

要求要包含所有的服务器ip +服务器名

2)检查".ssh/authorized_keys"

要求包含所有服务器(包括其自身)的public key

5.8 处理速度特别的慢

出现map很快,但是reduce很慢,而且反复出现"reduce=0%"。

解决方案如下:

结合解决方案5.7,然后修改"conf/hadoop-env.sh"中的"export HADOOP_HEAPSIZE=4000"

5.9 解决hadoop OutOfMemoryError问题

出现这种异常,明显是jvm内存不够得原因。

解决方案如下:要修改所有的datanode的jvm内存大小。

    Java –Xms 1024m -Xmx 4096m

一般jvm的最大内存使用应该为总内存大小的一半,我们使用的8G内存,所以设置为4096m,这一值可能依旧不是最优的值。

相机标定原理与张氏标定法 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar 阅读详情

相关推荐

修改串口服务器,串口虚拟化 | 串口服务器Nport 5630 设置

原标题:串口虚拟化 | 串口服务器Nport 5630 设置JZGKCHINA项目改造,客户需要对IFix4.5进行升级,并优化通讯,在不改变原来配置的基础上逐步进行替换。需要将IFix升级到IFix5.9,数据库升级为SQL Server 2016,客户现场使用的智能仪表都是支持Modbus RTU协议的,因原来的手拉手的通讯方式的,当一台仪表掉线后,会影响到其他仪表的通讯,所以此次在不改变原有...

weixin_31688465的博客 2408

一步步教你Hadoop多节点集群安装配置

1、集群部署介绍 1.1 Hadoop简介  Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。 对于Hadoop的集群来讲,可以分成两大类角色

vincent2610的专栏 1414

科研党必备:用Python+Excel批量下载文献的保姆级教程(附常见错误解决)

本文提供了一套利用Python和Excel实现外文文献批量下载的自动化解决方案。教程详细介绍了如何从数据库导出并清洗DOI信息,编写健壮的Python脚本进行批量下载,并包含错误处理与进阶优化技巧,旨在帮助科研人员将重复性劳动自动化,大幅提升文献收集效率。

weixin_29050513的博客 305

【Hadoop】创建Hadoop集群(3个节点)—— 安装部署一个3个节点构成的hbase集群

互联网的快速发展带来了数据快速增加,海量数据的存储已经不是一台机器所能处理的问题了。Hadoop的技术应运而生,对于伪分布式存储,Hadoop有自己的一套系统Hadoop distribution file system来处理,为什么分布式存储需要一个额外的系统来处理,而不是就把1TB以上的文件分开存放就好了呢,如果不采用新的系统,我们存放的东西没办法进行一个统一的管理。

disy924的博客 7300

【吐血整理-历时两个月,长达万字】FDTD Solutions学习笔记

原教学视频来自于Ansys-Lumerical官方的FDTD100,所看视频来自B站大佬UP主 【Nestor_呐等】 的幸苦翻译,本文内容粘贴自我个人在学习FDTD100时,通过字幕和一些个人理解总结的一份word。整理不易,强烈建议收藏!...

weixin_45719141的博客 10万+

ABAP内表数据导出Excel:OLE、ALV与GUI_DOWNLOAD方案全解析

在企业级应用开发中,数据导出是连接后台系统与前端业务分析的关键桥梁。其核心原理是将结构化数据转换为通用文件格式,以实现跨平台的数据交换与可视化。从技术价值看,一个健壮的导出功能能显著提升数据处理效率,减少人工干预,是衡量系统实用性的重要指标。常见的应用场景包括报表生成、数据交接和临时数据提取。本文聚焦于SAP ABAP开发领域,深入探讨如何将内表数据高效、稳定地导出至Excel,涵盖了OLE自动化、ALV标准导出以及基于CL_GUI_FRONTEND_SERVICES与GUI_DOWNLOAD的通用方案,并

weixin_32715349的博客 320

快速启动hadoop集群

注:针对hadoop2.0,该版本没有secondNameNode 1)进入到NameNode对应节点的Hadoop安装目录下。 2)执行启动脚本: bin/start-dfs.sh (如果配置过环境变量,可以直接start-dfs.sh,但要在NameNode节点下) 这一脚本会逐个启动NameNode,然后根据conf/slaves中的记录逐个启动DataNode,接着启动journal

醉糊涂仙的博客 611

EMC原理-传导(共模、差模)与辐射(近场、远场)详解

本文深入介绍了电磁兼容(EMC)的基本概念,包括EMI和EMS,以及如何处理传导干扰(共模、差模)和辐射干扰(近场、远场)。详细讨论了近场感应、远场辐射的原理,滤波器和屏蔽技术在抑制噪声信号中的作用。此外,探讨了差模和共模干扰的来源、影响及滤除方法,如使用差模电感、电容和共模线圈。最后,提到了穿心电容在滤除高频噪声中的应用。

让你爱上电路设计 3550

linux下zookeeper集群搭建

目录 1.前提 2.配置主机名到IP地址的映射 3.修改zoo.cfg配置 4.新建myid文件并写入集群标识 5.在另外两台机器进行相同操作 6.查看集群状态配置结束   接着上一篇博客linux下zookeeper单机搭建,本篇进阶一下,利用三台机器进行集群操作。保证高可用。   1.前提 作者默认读者已经准备好了三台不同ip的机器或者虚拟机,并且都已经安装好jdk,li...

南君宇的博客 8307

win10锁屏或登录时会自动弹出触摸按键的问题解决办法

本篇文章主要讲解win10锁屏或登录时会自动弹出触摸按键的问题解决方式。日期:2023年5月17日作者:任聪聪。

任聪聪的博客 1万+

3、全面掌握QGIS开发:从调试到应用的全方位指南

本文全面介绍了QGIS开发的各个环节,涵盖插件调试、PyQGIS API导航、插件创建与分发、独立地理空间应用开发,以及全局和项目级首选项的管理。通过详细的步骤说明、代码示例和流程图,帮助开发者系统掌握QGIS扩展与集成的核心技能,并展望了未来在功能拓展、跨平台兼容性和技术融合方面的可能性。

hill8的博客 89

hadoop 安装_1.1hadoop多节点集群安装配置

hadoop多节点集群安装配置为了后续Hadoop实验的进行,我们需要安装多节点的Hadoop集群(实现真正意义上的分布式存储)本文将用4个节点组织,1个主节点和3个从节点。节点使用VMworkstiaon生成虚拟机来实现。前排提示建议在克隆生成节点时使用全部相同的用户名,在后续ssh连接的时候会带来很多方便。而且推荐使用不同的主机名。这也是后续如果出现各个节点进程都能启动但是web端无法显示的问...

weixin_39692761的博客 251

六、Tool 工具系统:让大模型拥有“手脚“

我问你一个问题:大模型能不能告诉你"北京今天天气怎么样"?能——它能用非常流畅的中文回答你不能——它不知道这个答案因为它没有联网能力,也没有实时数据。它可能会自信地编一个"今天晴,25 度"给你——这就是幻觉。问题出在哪?大模型是一个"推理引擎",不是一个"执行引擎"。它知道天气 API 怎么调用,但不能真的发出 HTTP 请求。它知道 Python 代码怎么写,但不能真的运行代码。它知道数学公式,但做不了精确的大数计算。Tool 工具系统解决的,就是这个"最后一公里"问题。

牛肉胡辣汤 157

Hadoop2.6完全分布式多节点集群安装配置

创建ubuntu虚拟机搭建Hadoop2.6版本多节点集群

xiaoqiangai0220的博客 1732

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

第五篇:Hadoop多节点集群安装配置

1、集群部署介绍 1.1 Hadoop简介  Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。 对于Hadoop的集群来讲,可以分

wangjia55的专栏 1071

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【转载】一步步教你Hadoop多节点集群安装配置

1、集群部署介绍 1.1Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。 对于Hadoop的集群来讲,可以分成两大类角色:Ma...

lynne_cat的博客 305

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: Centos 利用sqoop从sqlserver导入数据到HDFS或Hive
下一篇: 推荐!国外程序员整理的 C++ 资源大全
雪岢奇
博客等级 码龄17年 310粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值