给力星

Web Developer

Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS

本教程讲述如何配置 Hadoop 集群,默认读者已经掌握了 Hadoop 的单机伪分布式配置,否则请先查看Hadoop安装教程_单机/伪分布式配置CentOS安装Hadoop_单机/伪分布式配置

本教程适合于原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1 等版本,主要参考了官方安装教程,步骤详细,辅以适当说明,保证按照步骤来,都能顺利安装并运行 Hadoop。另外有Hadoop安装配置简略版方便有基础的读者快速完成安装。本教程由给力星出品,转载请注明。

为了方便新手入门,我们准备了两篇不同系统的 Hadoop 伪分布式配置教程。但其他 Hadoop 教程我们将不再区分,可同时适用于 Ubuntu 和 CentOS/RedHat 系统。例如本教程以 Ubuntu 系统为主要演示环境,但对 Ubuntu/CentOS 的不同配置之处、CentOS 6.x 与 CentOS 7 的操作区别等都会尽量给出注明。

环境

本教程使用 Ubuntu 14.04 64位 作为系统环境,基于原生 Hadoop 2,在 Hadoop 2.6.0 (stable) 版本下验证通过,可适合任何 Hadoop 2.x.y 版本,例如 Hadoop 2.7.1,Hadoop 2.4.1 等。

本教程简单的使用两个节点作为集群环境: 一个作为 Master 节点,局域网 IP 为 192.168.1.121;另一个作为 Slave 节点,局域网 IP 为 192.168.1.122。

准备工作

Hadoop 集群的安装配置大致为如下流程:

  1. 选定一台机器作为 Master
  2. 在 Master 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
  3. 在 Master 节点上安装 Hadoop,并完成配置
  4. 在其他 Slave 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
  5. 将 Master 节点上的 /usr/local/hadoop 目录复制到其他 Slave 节点上
  6. 在 Master 节点上开启 Hadoop

配置 hadoop 用户、安装 SSH server、安装 Java 环境、安装 Hadoop 等过程已经在Hadoop安装教程_单机/伪分布式配置CentOS安装Hadoop_单机/伪分布式配置中有详细介绍,请前往查看,不再重复叙述。

继续下一步配置前,请先完成上述流程的前 4 个步骤

网络配置

假设集群所用的节点都位于同一个局域网。

如果使用的是虚拟机安装的系统,那么需要更改网络连接方式为桥接(Bridge)模式,才能实现多个节点互连,例如在 VirturalBox 中的设置如下图。此外,如果节点的系统是在虚拟机中直接复制的,要确保各个节点的 Mac 地址不同(可以点右边的按钮随机生成 MAC 地址,否则 IP 会冲突):

VirturalBox中节点的网络设置VirturalBox中节点的网络设置

Linux 中查看节点 IP 地址的命令为 ifconfig,即下图所示的 inet 地址(注意虚拟机安装的 CentoS 不会自动联网,需要点右上角连上网络才能看到 IP 地址):

Linux查看IP命令Linux查看IP命令

首先在 Master 节点上完成准备工作,并关闭 Hadoop (/usr/local/hadoop/sbin/stop-dfs.sh),再进行后续集群配置。

为了便于区分,可以修改各个节点的主机名(在终端标题、命令行中可以看到主机名,以便区分)。在 Ubuntu/CentOS 7 中,我们在 Master 节点上执行如下命令修改主机名(即改为 Master,注意是区分大小写的):

sudo vim /etc/hostname

如果是用 CentOS 6.x 系统,则是修改 /etc/sysconfig/network 文件,改为 HOSTNAME=Master,如下图所示:

CentOS中hostname设置CentOS中hostname设置

然后执行如下命令修改自己所用节点的IP映射:

sudo vim /etc/hosts

例如本教程使用两个节点的名称与对应的 IP 关系如下:

192.168.1.121   Master
192.168.1.122   Slave1

我们在 /etc/hosts 中将该映射关系填写上去即可,如下图所示(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 Master” 这样的记录):

Hadoop中的hosts设置Hadoop中的hosts设置

CentOS 中的 /etc/hosts 配置则如下图所示:

CentOS中的hosts设置CentOS中的hosts设置

修改完成后需要重启一下,重启后在终端中才会看到机器名的变化。接下来的教程中请注意区分 Master 节点与 Slave 节点的操作。

需要在所有节点上完成网络配置

如上面讲的是 Master 节点的配置,而在其他的 Slave 节点上,也要对 /etc/hostname(修改为 Slave1、Slave2 等) 和 /etc/hosts(跟 Master 的配置一样)这两个文件进行修改!

配置好后需要在各个节点上执行如下命令,测试是否相互 ping 得通,如果 ping 不通,后面就无法顺利配置成功:

ping Master -c 3   # 只ping 3次,否则要按 Ctrl+c 中断
ping Slave1 -c 3

例如我在 Master 节点上 ping Slave1,ping 通的话会显示 time,显示的结果如下图所示:

检查是否ping得通检查是否ping得通

继续下一步配置前,请先完成所有节点的网络配置,修改过主机名的话需重启才能生效

SSH无密码登陆节点

这个操作是要让 Master 节点可以无密码 SSH 登陆到各个 Slave 节点上。

首先生成 Master 节点的公匙,在 Master 节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次):

cd ~/.ssh               # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*            # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa       # 一直按回车就可以

让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行:

cat ./id_rsa.pub >> ./authorized_keys

完成后可执行 ssh Master 验证一下(可能需要输入 yes,成功后执行 exit 返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点:

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 Slave1 上 hadoop 用户的密码(hadoop),输入完成后会提示传输完毕,如下图所示:

通过scp向远程主机拷贝文件通过scp向远程主机拷贝文件

接着在 Slave1 节点上,将 ssh 公匙加入授权:

mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub    # 用完就可以删掉了

如果有其他 Slave 节点,也要执行将 Master 公匙传输到 Slave 节点、在 Slave 节点上加入授权这两步。

这样,在 Master 节点上就可以无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行如下命令进行检验,如下图所示:

ssh Slave1

在Master节点中ssh到Slave节点在Master节点中ssh到Slave节点

配置PATH变量

(CentOS 单机配置 Hadoop 的教程中有配置这一项了,这一步可以跳过)

在单机伪分布式配置教程的最后,说到可以将 Hadoop 安装目录加入 PATH 变量中,这样就可以在任意目录中直接使用 hadoo、hdfs 等命令了,如果还没有配置的,需要在 Master 节点上进行配置。首先执行 vim ~/.bashrc,加入一行:

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

如下图所示:

配置PATH变量配置PATH变量

保存后执行 source ~/.bashrc 使配置生效。

配置集群/分布式环境

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

1, 文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。

本教程让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加一行内容:Slave1。

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

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

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

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

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

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>

5, 文件 yarn-site.xml

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

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

cd /usr/local
sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/*   # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop

在 Slave1 节点上执行:

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

同样,如果有其他 Slave 节点,也要执行将 hadoop.master.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件的操作。

首次启动需要先在 Master 节点执行 NameNode 的格式化:

hdfs namenode -format       # 首次运行需要执行初始化,之后不需要
CentOS系统需要关闭防火墙

CentOS系统默认开启了防火墙,在开启 Hadoop 集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping 得通但 telnet 端口不通,从而导致 DataNode 启动了,但 Live datanodes 为 0 的情况。

在 CentOS 6.x 中,可以通过如下命令关闭防火墙:

sudo service iptables stop   # 关闭防火墙服务
sudo chkconfig iptables off  # 禁止防火墙开机自启,就不用手动关闭了

若用是 CentOS 7,需通过如下命令关闭(防火墙服务改成了 firewall):

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

如下图,是在 CentOS 6.x 中关闭防火墙:

CentOS6.x系统关闭防火墙CentOS6.x系统关闭防火墙

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

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

通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程,如下图所示:

通过jps查看Master的Hadoop进程通过jps查看Master的Hadoop进程

在 Slave 节点可以看到 DataNode 和 NodeManager 进程,如下图所示:

通过jps查看Slave的Hadoop进程通过jps查看Slave的Hadoop进程

缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。例如我这边一共有 1 个 Datanodes:

通过dfsadmin查看DataNode的状态通过dfsadmin查看DataNode的状态

也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070/。如果不成功,可以通过启动日志排查原因。

伪分布式、分布式配置切换时的注意事项

  1. 从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件;
  2. 在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp 文件夹,再重新执行一次 hdfs namenode -format,再次启动试试。

执行分布式实例

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

hdfs dfs -mkdir -p /user/hadoop

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

hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中,如下图所示:

通过Web页面查看DataNode的状态通过Web页面查看DataNode的状态

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

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

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

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

显示MapReduce Job的进度显示MapReduce Job的进度

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

通过Web页面查看集群和MapReduce作业的信息通过Web页面查看集群和MapReduce作业的信息

执行完毕后的输出结果:

MapReduce作业的输出结果MapReduce作业的输出结果

关闭 Hadoop 集群也是在 Master 节点上执行的:

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

此外,同伪分布式一样,也可以不启动 YARN,但要记得改掉 mapred-site.xml 的文件名。

自此,你就掌握了 Hadoop 的集群搭建与基本使用了。

相关教程

参考资料

  1. 楼主,请问为什么我虚拟机一重启IP地址就改变了,又要重新设置Master和Slave1的ip

    • 虚拟机网络设置模式为NAT了,NAT是自动分配ip的,改用桥接吧

  2. 感谢博主分享,下面是我遇到的情况。在HDFS上传文件时有警告,但又能上传上去,请教下博主,这是由哪个配置不当或是原因引起的??

    [hadoop@Master hadoop]$ hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
    16/07/12 19:21:56 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
    16/07/12 19:21:58 WARN hdfs.DFSClient: Caught exception
    java.lang.InterruptedException
    at java.lang.Object.wait(Native Method)
    at java.lang.Thread.join(Thread.java:1245)
    at java.lang.Thread.join(Thread.java:1319)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:609)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:370)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:546)
    16/07/12 19:21:58 WARN hdfs.DFSClient: Caught exception
    java.lang.InterruptedException
    at java.lang.Object.wait(Native Method)
    at java.lang.Thread.join(Thread.java:1245)
    at java.lang.Thread.join(Thread.java:1319)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:609)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:370)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:546)
    16/07/12 19:21:59 WARN hdfs.DFSClient: Caught exception
    java.lang.InterruptedException
    at java.lang.Object.wait(Native Method)
    at java.lang.Thread.join(Thread.java:1245)
    at java.lang.Thread.join(Thread.java:1319)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:609)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:370)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:546)
    16/07/12 19:21:59 WARN hdfs.DFSClient: Caught exception
    java.lang.InterruptedException
    at java.lang.Object.wait(Native Method)
    at java.lang.Thread.join(Thread.java:1245)
    at java.lang.Thread.join(Thread.java:1319)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:609)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:370)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:546)
    16/07/12 19:21:59 WARN hdfs.DFSClient: Caught exception
    java.lang.InterruptedException
    at java.lang.Object.wait(Native Method)
    at java.lang.Thread.join(Thread.java:1245)
    at java.lang.Thread.join(Thread.java:1319)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:609)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:370)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:546)
    [hadoop@Master hadoop]$ hdfs dfs -ls input
    16/07/12 19:22:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
    Found 9 items
    -rw-r–r– 1 hadoop supergroup 4436 2016-07-12 19:21 input/capacity-scheduler.xml
    -rw-r–r– 1 hadoop supergroup 1072 2016-07-12 19:21 input/core-site.xml
    -rw-r–r– 1 hadoop supergroup 9683 2016-07-12 19:21 input/hadoop-policy.xml
    -rw-r–r– 1 hadoop supergroup 1322 2016-07-12 19:21 input/hdfs-site.xml
    -rw-r–r– 1 hadoop supergroup 620 2016-07-12 19:21 input/httpfs-site.xml
    -rw-r–r– 1 hadoop supergroup 3518 2016-07-12 19:21 input/kms-acls.xml
    -rw-r–r– 1 hadoop supergroup 5511 2016-07-12 19:21 input/kms-site.xml
    -rw-r–r– 1 hadoop supergroup 1134 2016-07-12 19:21 input/mapred-site.xml
    -rw-r–r– 1 hadoop supergroup 930 2016-07-12 19:21 input/yarn-site.xml

    • 请问,你的问题解决了吗?
      我也是这个问题

    • 请问,你的问题解决了吗?
      我也是这个问题

        • 你这个回答太模糊。
          在slave上用telnet master 9000查看能否连到master,在master上用netstat -an | grep 9000检测端口9000的打开情况,看一下master的ip是否在里边。如果没有在,就是设置的core-site.xml里边的9000端口被其他IP给占了。看一下etc/hosts,里边有几个master对应关系,我的是把127.0.1.1也对应为master了,所以9000端口只监听了127.0.1.1,没有监听master。删掉127.0.1.1,然后重启dfs和yarn就可以了。

  3. 请问一台电脑装ubuntu,一台装centos, 会有影响吗,能否顺利搭建集群?

    • 你好,我目前一台Ubuntu,一台debian,请问你是否完成了不同系统间的搭建?

  4. 楼主,跑mr任务的时候遇到过这个错误吗:
    Error: java.lang.IllegalArgumentException: Can’t read partitions file
    at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:116)
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:76)
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:136)
    at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:701)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
    Caused by: java.io.FileNotFoundException: File file:/tmp/hadoop-root/nm-local-dir/usercache/root/appcache/application_1476690873712_0004/container_1476690873712_0004_01_000004/_partition.lst does not exist
    at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:606)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:819)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:596)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421)
    at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1752)
    at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1776)
    at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.readPartitions(TotalOrderPartitioner.java:301)
    at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:88)
    … 10 more

    • 看下 core-site.xml 中 hadoop.tmp.dir 这个配置项是否正确,确保 hadoop 用户有这个文件夹的权限

  5. windows下eclipse远程连接Hadoop集群运行wountcount例子时出现如下问题,久久未能解决,版主能帮我看看指明下思路嘛

    16/09/23 10:57:29 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
    16/09/23 10:57:29 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
    16/09/23 10:57:30 INFO input.FileInputFormat: Total input paths to process : 1
    16/09/23 10:57:30 INFO mapreduce.JobSubmitter: number of splits:1
    16/09/23 10:57:30 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar
    16/09/23 10:57:30 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local415219527_0001
    16/09/23 10:57:31 INFO mapreduce.Job: The url to track the job: http://localhost:8080/
    16/09/23 10:57:31 INFO mapreduce.Job: Running job: job_local415219527_0001
    16/09/23 10:57:31 INFO mapred.LocalJobRunner: OutputCommitter set in config null
    16/09/23 10:57:31 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
    16/09/23 10:57:31 INFO mapred.LocalJobRunner: OutputCommitter is org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
    16/09/23 10:57:31 INFO mapred.LocalJobRunner: Waiting for map tasks
    16/09/23 10:57:31 INFO mapred.LocalJobRunner: Starting task: attempt_local415219527_0001_m_000000_0
    16/09/23 10:57:31 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
    16/09/23 10:57:31 INFO util.ProcfsBasedProcessTree: ProcfsBasedProcessTree currently is supported only on Linux.
    16/09/23 10:57:32 INFO mapreduce.Job: Job job_local415219527_0001 running in uber mode : false
    16/09/23 10:57:32 INFO mapreduce.Job: map 0% reduce 0%
    16/09/23 10:57:35 INFO mapred.Task: Using ResourceCalculatorProcessTree : org.apache.hadoop.yarn.util.WindowsBasedProcessTree@4e97b29a
    16/09/23 10:57:35 INFO mapred.MapTask: Processing split: hdfs://10.10.33.17:9000/tmp/input/hdfs-site.xml:0+468
    16/09/23 10:57:35 INFO mapred.MapTask: (EQUATOR) 0 kvi 26214396(104857584)
    16/09/23 10:57:35 INFO mapred.MapTask: mapreduce.task.io.sort.mb: 100
    16/09/23 10:57:35 INFO mapred.MapTask: soft limit at 83886080
    16/09/23 10:57:35 INFO mapred.MapTask: bufstart = 0; bufvoid = 104857600
    16/09/23 10:57:35 INFO mapred.MapTask: kvstart = 26214396; length = 6553600
    16/09/23 10:57:35 INFO mapred.MapTask: Map output collector class = org.apache.hadoop.mapred.MapTask$MapOutputBuffer
    16/09/23 10:57:56 WARN hdfs.BlockReaderFactory: I/O error constructing remote block reader.
    java.net.ConnectException: Connection timed out: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
    at org.apache.hadoop.hdfs.DFSClient.newConnectedPeer(DFSClient.java:3436)
    at org.apache.hadoop.hdfs.BlockReaderFactory.nextTcpPeer(BlockReaderFactory.java:777)
    at org.apache.hadoop.hdfs.BlockReaderFactory.getRemoteBlockReaderFromTcp(BlockReaderFactory.java:694)
    at org.apache.hadoop.hdfs.BlockReaderFactory.build(BlockReaderFactory.java:355)
    at org.apache.hadoop.hdfs.DFSInputStream.blockSeekTo(DFSInputStream.java:656)
    at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:882)
    at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:934)
    at java.io.DataInputStream.read(DataInputStream.java:149)
    at org.apache.hadoop.mapreduce.lib.input.UncompressedSplitLineReader.fillBuffer(UncompressedSplitLineReader.java:59)
    at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:216)
    at org.apache.hadoop.util.LineReader.readLine(LineReader.java:174)
    at org.apache.hadoop.mapreduce.lib.input.UncompressedSplitLineReader.readLine(UncompressedSplitLineReader.java:91)
    at org.apache.hadoop.mapreduce.lib.input.LineRecordReader.skipUtfByteOrderMark(LineRecordReader.java:144)
    at org.apache.hadoop.mapreduce.lib.input.LineRecordReader.nextKeyValue(LineRecordReader.java:184)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:556)
    at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80)
    at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    16/09/23 10:57:56 WARN hdfs.DFSClient: Failed to connect to /192.168.1.109:50010 for block, add to deadNodes and continue. java.net.ConnectException: Connection timed out: no further information
    java.net.ConnectException: Connection timed out: no further information

  6. 你好,请问你能够继续出windows下远程连接hadoop集群的教程吗,不少人在windows下远程连接hadoop开发遇到不少问题啊

  7. hadoop@Master:/sbin$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output ‘dfs[a-z.]+’
    java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/lib/partition/InputSampler$Sampler
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2625)
    at java.lang.Class.getMethod0(Class.java:2866)
    at java.lang.Class.getMethod(Class.java:1676)
    at org.apache.hadoop.util.ProgramDriver$ProgramDescription.<init>(ProgramDriver.java:56)
    at org.apache.hadoop.util.ProgramDriver.addClass(ProgramDriver.java:99)
    at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
    Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.lib.partition.InputSampler$Sampler
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    … 12 more
    报错NoClassDefFoundError这是怎么回事啊?

  8. 在虚拟机上按上述步骤安装Hadoop, 执行到命令: HOSTNAME=master .ssh]# cat ./id_rsa.pub >> ./authorized_keys 报错如下:
    [root@NETWORKING=yes
    HOSTNAME=master .ssh]# ssh master
    The authenticity of host ‘master (192.168.147.131)’ can’t be established.
    ECDSA key fingerprint is 52:fb:c2:a1:26:3b:44:06:7f:38:bb:aa:6c:1b:e4:d4.
    Are you sure you want to continue connecting (yes/no)? yes

    再执行命令:HOSTNAME=master ~]# scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/ 报错如下:
    Read from socket failed: Connection reset by peer
    lost connection

    请版主解决。

    • [root@NETWORKING=yes HOSTNAME=master .ssh] 命令前的提示符 root@hostname,即用户名@机器名,你这样显示的话说明设置机器名时没弄好,如果设置没错就重启再看下。

      • 之前那个SSH连接的问题解决了,现在的问题是执行 hdfs namenode -format时报错:WARN net.DNS: Unable to determine address of the host-falling back to "localhost" address
        我的NameNode虚机中/etc/hosts内容如下:
        127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
        ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
        192.168.3.103 master master
        192.168.3.104 slave1 slave1

        NameNode虚机的 /etc/hostname文件内容如下
        HOSTNAME=master

        NameNode虚机的/etc/sysconfig/network文件内容如下
        NETWORKING=yes
        NETWORKING_IPV6=yes
        HOSTNAME=master
        service network restart
        #Created by anaconda

        DataNode虚机的/etc/sysconfig/network文件内容如下
        NETWORKING=yes
        NETWORKING_IPV6=yes
        HOSTNAME=slave1
        service network restart
        #Created by anaconda

        DataNode虚机 /etc/hostname文件内容如下
        HOSTNAME=slave1

        求版主解决。

        • 建议自行搜索一下这个错误提示,我搜了下几个解决方法,并不确定哪个能解决。

    • 这个问题是 SSH登录失败造成的。已经解决。但在执行namenode初始化:hdfs namenode -format时报错如下:
      WARN net.DNS: Unable to determine address of the host-falling back to "localhost" address

  9. 你好,我看这个文档namenode是单节点,那只是有风险的,怎么样让namenode变成双节点呢

  10. 请教博主
    我的master IP:192.168.1.249 ssh prot:22
    slave IP 192.168.1.68 ssh port :30000
    在启动 start-dfs.sh 时报错,因为ssh默认连接22端口,改了hadoop-env的HADOOP_SSH_OPTS="-p 30000"后, 连接自己的时候出错..
    这怎么办

  11. 博主的这个是我找到的最详细的一份给个赞,但是我master和slave1上jps都没有问题一个都不少,但是输入hdfs dfsadmin -report没有 live datanodes字段,而其余的值都是0.这有可能是什么造成的?

  12. 用一台腾讯云跟几台阿里云做集群,腾讯云是Master,然后我发现只有hosts中对应Master 内网ip时才能正常启动namenode,但这样的话,其他slave就不能ping通Master了;

    [hadoop@Master hadoop]$ hdfs dfsadmin -report

    Configured Capacity: 0 (0 B)
    Present Capacity: 0 (0 B)
    DFS Remaining: 0 (0 B)
    DFS Used: 0 (0 B)
    DFS Used%: NaN%
    Under replicated blocks: 0
    Blocks with corrupt replicas: 0
    Missing blocks: 0
    Missing blocks (with replication factor 1): 0

  13. 博主你好,根据你教程我把 hadoop 搭好在真机上跑了起来,我是这两天才接触分布式集群的,所以有些问题想问下,如果方便的,希望可以指导一下,谢谢!
    我搜索到运行自己的 Demo 的话,编译好 jar 包,类似教程那样运行就好了,但是现在存储的是文件,想问下怎么把数据库和这个框架关联起来呢?我想把写入数据库的内容都保存在hdfs里面然后再调出来分析的?另外有没有一些博客或教程可以较全面的学习这个框架和它一系列的操作流程(除了文档,文档要看,主要是想先有一个大体的框架意识)

  14. 虚拟机需要分配多大的内存,跑分布实例的时候,系统内存的占用一直升高。我给master节点配置了2G内存都不够,还是不会出现job的过程。一直都卡在0%

  15. 楼主好,我在启动的时候,遇到下面的问题

    hadoop@DUBA_Master:/usr/local/hadoop$ start-dfs.sh
    Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
    Starting namenodes on []
    DUBA_Slave1: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DUBA_Slave1.out
    DUBA_Slave2: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DUBA_Slave2.out
    DUBA_Slave1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-DUBA_Slave1.out
    DUBA_Slave2: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-DUBA_Slave2.out

  16. 楼主,请教,我在一主两从的Linux上安装了hadoop2.7.2,运行起来会提示“… have disabled stack guard…”,以及“unable to load native-hadoop library for your plaform…”;网上查了很多资料,还是搞不清楚原因。另外,想创建目录,会出错:Name node is in safe mode。按照网上说的用-safemode leave,提示safe mode is OFF,但再次mkdir还是会提示in safe mode。请问楼主有没有遇到过?谢谢!

  17. 请教一下,我按照你的教程都设置好了集群,jps也正常,datanode都启动了,但是在执行mapreduce测试的时候,报了如下错误,进度在0%之后就error了。请问这是啥原因……

    Application application_1464072620507_0003 failed 2 times due to Error launching appattempt_1464072620507_0003_000002. Got exception: org.apache.hadoop.security.AccessControlException: Unable to find SASL server implementation for DIGEST-MD5
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-internal/Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-internal/NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(java.base@9-internal/DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(java.base@9-internal/Constructor.java:453)
    at org.apache.hadoop.yarn.ipc.RPCUtil.instantiateException(RPCUtil.java:53)
    at org.apache.hadoop.yarn.ipc.RPCUtil.unwrapAndThrowException(RPCUtil.java:104)
    at org.apache.hadoop.yarn.api.impl.pb.client.ContainerManagementProtocolPBClientImpl.startContainers(ContainerManagementProtocolPBClientImpl.java:99)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(java.base@9-internal/Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(java.base@9-internal/NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(java.base@9-internal/DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(java.base@9-internal/Method.java:531)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:191)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
    at com.sun.proxy.$Proxy83.startContainers(Unknown Source)
    at org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher.launch(AMLauncher.java:118)
    at org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher.run(AMLauncher.java:250)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@9-internal/ThreadPoolExecutor.java:1158)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@9-internal/ThreadPoolExecutor.java:632)
    at java.lang.Thread.run(java.base@9-internal/Thread.java:804)
    Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Unable to find SASL server implementation for DIGEST-MD5
    at org.apache.hadoop.ipc.Client.call(Client.java:1475)
    at org.apache.hadoop.ipc.Client.call(Client.java:1412)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)
    at com.sun.proxy.$Proxy82.startContainers(Unknown Source)
    at org.apache.hadoop.yarn.api.impl.pb.client.ContainerManagementProtocolPBClientImpl.startContainers(ContainerManagementProtocolPBClientImpl.java:96)
    … 12 more
    . Failing the application.

    • 你处理好了么 我发现是jdk的问题 换了一个就好啦

  18. 十分感谢您的教程,中间自己出了很多小问题 不过最后还是全部跑起来了
    Night_Knight

  19. 对了有个疑问 ,按照安装步骤走为什么在JPS的时候WORKER,MASTER 没有显示呢?这个代表什么意思

  20. 输入hdfs dfsadmin -report后,please help me!
    hadoop@namenode:~$ hdfs dfsadmin -report
    Configured Capacity: 0 (0 B)
    Present Capacity: 0 (0 B)
    DFS Remaining: 0 (0 B)
    DFS Used: 0 (0 B)
    DFS Used%: NaN%
    Under replicated blocks: 0
    Blocks with corrupt replicas: 0
    Missing blocks: 0

    • 在slave节点里,执行
      telnet master 9000

      正确的话会提示”Escape character is …”(按ctrl+c结束)
      提示”Unable to connect”那就是防火墙问题了。

  21. 部署好配置文件后,执行hdfs namenode -format 终端就会自动关闭。
    然后执行start-dfs.sh
    出现以下错误:
    Starting namenodes on [Master]
    Master: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-Master.out
    Master: /usr/local/hadoop/sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hadoop-namenode.pid: Permission denied
    Slave1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-Slave.out
    Slave1: /usr/local/hadoop/bin/hdfs: 行 276: /user/lib/jvm/java-7-oracle/bin/java: 没有那个文件或目录
    Starting secondary namenodes [Master]
    Master: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-Master.out
    Master: /usr/local/hadoop/sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hadoop-secondarynamenode.pid: Permission denied
    求博主帮忙看下,感谢

    • Slave1: /usr/local/hadoop/bin/hdfs: 行 276: /user/lib/jvm/java-7-oracle/bin/java: 没有那个文件或目录

      Slave1节点的JAVA_HOME没配置好。

      • 现在配置好了,但是后面的问题还在
        hadoop@Master:~$ start-dfs.sh
        Starting namenodes on [Master]
        Master: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-Master.out
        Master: /usr/local/hadoop/sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hadoop-namenode.pid: Permission denied
        Slave1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-Slave.out
        Starting secondary namenodes [Master]
        Master: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-Master.out
        Master: /usr/local/hadoop/sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hadoop-secondarynamenode.pid: Permission denied

        • Master: /usr/local/hadoop/sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hadoop-namenode.pid: Permission denied
          估计你没给hadoop加上sudo权限。或者用 sudo start-dfs.sh 尝试。

  22. 太感谢博主了 非常详细清晰
    另外说一下提交任务后出现connection refused错误时 我的解决办法:
    遵循博主文章中提到的修改hostname方法,把hostname改成对应的Master和Slave1
    我一开始没有改主机名 出现了connection的错误,改完重启之后就可以提交执行任务了

  23. hadoop@MasterHadoop:/usr/hadoop$ hdfs dfsadmin -report
    16/04/06 01:19:35 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
    Configured Capacity: 0 (0 B)
    Present Capacity: 0 (0 B)
    DFS Remaining: 0 (0 B)
    DFS Used: 0 (0 B)
    DFS Used%: NaN%
    Under replicated blocks: 0
    Blocks with corrupt replicas: 0
    Missing blocks: 0
    Missing blocks (with replication factor 1): 0
    这个是什么错误?防火墙已关而且telnet成功。。。
    slave1上jps只显示一个jps进程,其他的都没有,如何解决

      • 看了日志,是xml中标签拼写错误,一个非常低级的错误!!!!文章很给力,对于大数据初学者非常有帮助!!!希望可以出一下hbase的集群安装和hive,kafka的安装教程!!!

  24. 博主您好!搭建hadoop集群之后跑起来成功了,但我还需要安装hive,在网上查了一下很乱每个写的都不太一样。想请问您有什么推荐的教程吗?谢谢!

  25. 博主您好,我按照您的教程配置的集群,我们只使用hdfs,上面直接跑spark,所以只配置了core-site.xml和hdfs-site.xml这两个文件,在Master上运行脚本start-dfs.sh,发现几台机器的datanode进程都启动了,但是master的namenode和secondarynode都没有(master的datanode进程正常),我已经把tmp的路径改好了,也重新格式化过,删过旧的,但就是不成功,而namenode和secondarynode的日志都是正常的啊!晕死了,怎么办?

  26. 给力星,看你在文章中修改hosts文件处说不能够出现127.0.0.1 master条目,我在运行mapreduce程序时出现了程序卡在map 100% reduce 0%的地方,最后在网上查到有人说hosts文件应该有127.0.0.1 localhost 和127.0.0.1 master两个条目才行,我想问一下这里可能会是什么原因,我确定我的代码木有问题~

    • hosts 文件中一个名称只能对应一个 ip,如果 hosts 中有 127.0.0.1 master,那就不能再加 192.168.1.123 master 这样的记录了。
      可能某些情况下我的教程行不通,那建议你先跑一下 hadoop 的 examples,确定不是代码问题,然后按照网上说的这个方法自己测试一下。我没遇到过这种问题也没办法帮你测试。

  27. 一直停留在 16/03/31 18:41:26 INFO mapreduce.Job: Running job: job_1459420753979_0001
    这个状态 网上找的方法都试了 还是没解决

    • 在运行前确保hostname –fqdn命令的结果正确:即在master上显示master,在slave1上显示slave1,这可以通过修改/etc/hosts做到

      • 显示正确,但还是停留在INFO mapreduce.Job: Running job :job_1465134972039_0001 这是为什么呢?

  28. 执行hadoop@Master:~$ hdfs dfsadmin -report
    结果
    Configured Capacity: 0 (0 B)
    Present Capacity: 0 (0 B)
    DFS Remaining: 0 (0 B)
    DFS Used: 0 (0 B)
    DFS Used%: NaN%
    Under replicated blocks: 0
    Blocks with corrupt replicas: 0
    Missing blocks: 0
    是为什么呢

    • 找到原因了 core-site.xml 里面的localhost得改成master的ip slave1节点的也得改

      • 我的也遇到这样的问题,但是在那个core-site.xml中并没有找到localhost呀,配置和给力星这篇是一样的,求指教

  29. ssh: connect to host slave1 port 22: Connection refused 是什么原因 ssh Slave1 也是这个错误 昨天是可以的 中间关机过一次

    • 检查一下是否是ip变动了,一般局域网的ip地址是动态分配的,需要重新修改hosts文件。

    • 改虚拟机内存还是不管用的话,那就得改Yarn的内存配置了。具体改那几个参数我忘了,你得网上搜搜看了..

      • java.io.IOException: Unable to close file because the last block does not have enough number of replicas.

        • 有一个简单粗暴但是很有效的方法:把所有节点中/usr/local/hadoop下的tmp文件删除,重新在master节点执行 hdfs namenode -format,然后再重新启动就行了。但这样会丢失原先HDFS里的文件。

          • 16/03/28 20:04:12 INFO hdfs.DFSClient: Could not complete /tmp/hadoop-yarn/staging/hadoop/.staging/job_1459219966881_0001/job.jar retrying…
            16/03/28 20:04:12 INFO mapreduce.JobSubmitter: Cleaning up the staging area /tmp/hadoop-yarn/staging/hadoop/.staging/job_1459219966881_0001
            java.io.IOException: Unable to close file because the last block does not have enough number of replicas.
            还是一样啊。。。。这是什么问题啊??

          • 我搜了下,很少有出现这个情况的,也没什么靠谱的解决方法。我能想到的是,hdfs-site.xml中的配置项dfs.replication跟节点数不符?比如只有1个slave节点,但dfs.replication设置为2?如果不是这样,我就不清楚了。

  30. 您好,看了您这个教程收获很多,在搭建了完全分布式后再配置hbase有什么好的教程推荐吗?谢谢您!

      • 谢谢博主,还有个问题,我在网上看到说zookeeper是和hbase一起使用的,我不是特别理解,请教一下zookeeper是否也需要安装,还有hbase1.1.2与hadoop2.6.0是否匹配?谢谢您!

      • 而且我看了那个教程貌似也不是集群配置,我搭建的是一主两从的集群结构,不需要改什么环境变量和一些文件的内容么?初学hadoop,谢谢您了!

        • 那篇文章是单机模式的。如果你英语尚可的话,可以参考官方文档 http://hbase.apache.org/book.html#quickstart_fully_distributed
          大致看了下,HBase的集群安装过程跟Hadoop差不多的。zookeeper是需要安装的,安装不难,可以参考 http://www.powerxing.com/install-storm/ 当中说到的 zookeeper安装(配置zookeeper时,dataDir项要跟后面HBase的配置项hbase.zookeeper.property.dataDir一样);hbase1.1.2与hadoop2.6.0应该不会冲突。

          • 首先真的感谢您!对于hbase的集群配置,由于对英语和hadoop都不擅长,所以看起来很吃力,主要的是配置hadoop集群时按照您的教程,配置变量和相关文档的时候不用考虑什么用户名的问题,得心应手,刚刚我自己看了官网上的说明,感觉很难进行,包括zookeeper的使用也和有的中文教程上面不太一样。能不能麻烦您整理一下hbase的集群配置过程,也方便我们学习,真的谢谢您!或者说能不能有幸加您的qq,方便进一步的探讨!感谢!

  31. 你好,我遇到这样一个问题,服务器作为master(192.168.1.135),一台ubuntu作为slave1(192.168.1.118),/etc/hosts已经按教程设置好,但是master和slave1相互ping的时候都报错Destination Host Unreachable,然而我用另一电脑(192.168.1.111)ping slave1可以ping通,ping服务器master仍然报错Destination Host Unreachable是什么原因呢?

  32. 博主你好~~master和slave都能正常启动运行,但是执行hdfs dfsadmin -report时,式中显示
    Configured Capacity: 0 (0 KB)
    Present Capacity: 0 (0 KB)
    DFS Remaining: 0 (0 KB)
    DFS Used: 0 (0 KB)…
    请问这有可能是什么原因?

    • 防火墙问题?可以试下能否连接端口。
      在slave节点里,执行
      telnet master 9000

      正确的话会提示”Escape character is …”(按ctrl+c结束)
      提示”Unable to connect”那就是防火墙问题了。

  33. 博主大神,请问下我搭建好了两台集群在eclipse下提交任务却报连接拒绝错误,如下Call From Master/192.168.100.100 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒绝连接;
    我是小白,不知道哪里出了问题,我怀疑是没有在ecplise里指定datanode或者是nodemanager的地址造成的,具体请大神帮忙啊

  34. 您好,有问题请教,maste没起来,但两个slave正常启动,三台机器的配置相同,master上jps只显示jps没有其他。执行hdfs dfsadmin -report时出现
    INFO ipc.Client: Retrying connect to server: Master.Hadoop/172.18.113.65:9000. Already tried 24 time(s); maxRetries=45
    我的host、hostname配置完好、ssh没问题,有点爆炸,请楼主赐教

    • 追加一下,在namenode format的时候,出现shutdown,但log中没有报错,只有startmsg

      • 可以将节点的 /usr/local/hadoop/tmp 这个目录删掉,然后在 master 节点上再 format 一下试试。 format 时是会有 shutting down 的字样,要看下最后几行的信息,正确的话会有 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错

        • shutdown 确实是成功的,那个目录删了,但master的进程还是起不来,我在hadoop-env.sh中除了JAVA_HOME还要写别的吗?麻烦博主了

        • hdfs dfsadmin -report : Call From Master.Hadoop/172.18.113.65 to Master.Hadoop:9000 failed on connection exception: java.net.ConnectException: Connection refused

  35. 谢谢给力星~这是我看过最好的新手教程了,安装过程中遇到的一些问题的解决方案你也给出来了,文章思路很清晰,所以感觉照着做的时候自己的思路也很清晰,超棒哦~!

  36. Failed to locate the winutils binary in the hadoop binary path
    java.io.IOException: Could not locate executable nullbinwinutils.exe in the Hadoop binaries.

  37. 给力星,谢谢你的文档!
    我在单机环境,伪分布式环境都没有问题,就是在分布式时,完成搭建后,跑脚本是报错了:
    hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep /data/hadoop/input /data/hadoop/output ‘dfs[a-z.]+’
    错误:
    java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/exceptions/YarnException

    哪怕我把mapred-site.xml 去掉,关闭yarn 也还是会有相关yarn的报错。

    疯了,,,急求解决。

  38. slave节点,jps,ResourceManager、SecondaryNameNode、NameNode,和你截图不一样,除此之外没什么不同。。可以解释一下吗?

  39. 楼主,你好,有没有试过两个用户同时使用hadoop而互相不干扰???

  40. 博主你好,我使用了你的教程使用VPS搭建hadoop,操作系统是centos6.5,执行最后那个例子
    hadoop jar /usr/local/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep /input /output ‘dfs[a-z.]+’
    的时候,没有成功,日志的简略版是这样的

    16/01/12 05:53:38 INFO mapreduce.Job: map 0% reduce 0%
    16/01/12 05:53:38 INFO mapreduce.Job: Job job_1452595136155_0002 failed with state FAILED due to: Application application_1452595136155_0002 failed 2 times due to Error launching appattempt_1452595136155_0002_000002. Got exception: java.net.ConnectException: Call From localhost.localdomain/127.0.0.1 to localhost:47959 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused

    我已经关闭了防火墙… 为什么会有拒绝链接的错误? 使用jps查看,是没有问题的,master启动了5项,slave启动了3项

  41. 感谢,之前一直在web控制台看不到节点,搞了好久都没解决,今天看到你的才知道没关防火墙,太感谢了!

  42. 教程写的很棒,不过启动hadoop后,在master和两个从节点上都启动的相应的进程,但在网址中显示存活的节点数为0,是什么原因引起的?谢谢了

    • 一般是由于防火墙的原因,虽然进程开启了,但相互之间的端口连接不了,所以活动节点数为0。关闭防火墙再重启 Hadoop 就可以了(文中有给出 CentOS 的关闭防火墙命令)

      • 我们是在ubuntu系统下执行的,找到原因了,是hosts文件里面127.0.0.1对应的除localhost外,还有master
        不过你的教程还是写的非常仔细,谢谢你!

  43. 楼主写的很赞,我是刚学习hadoop的,在ping slave和ping master 的时候无法ping 通,但却可以ping 通其他的地址,在master和slave两边的主机名以及hosts都做了相应的修改,向您咨询下这种情况怎么办,谢谢啊!

  44. 你好,教程很好,但是我成功运行grep后,无法打开8088界面查看任务状况。该怎么解决。

  45. 找到原因了,下载的Hadoop二进制文件本地库默认是32bit下构建的。重新构建64bit版本就可以了。而64bit Ubuntu 15.04支持32bit程序,64bitCentOS 6.4不支持32Bit程序。

  46. 您好,我根据您的教程已经安装完成并且单机版的例子也能运行。但是在分布式的情况下,我运行sbin/start-dfs.sh后在master输入jps,显示
    hadoop@master:/usr/local/hadoop$ jps
    8412 NameNode
    8758 Jps
    8629 SecondaryNameNode
    没有ResourceManager。
    在slave上输入jps显示只有DataNode没有nodemanager
    然后我运行例子,提示我一直在连接ResourceManager。
    这是提示信息:
    15/11/18 10:58:55 INFO client.RMProxy: Connecting to ResourceManager at master/10.103.241.212:8032
    15/11/18 10:58:56 INFO ipc.Client: Retrying connect to server: master/10.103.241.212:8032. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)

    • 哈,我找到问题了。是我自己的问题。
      在我的/etc/hosts文件中,我多加了几个127.0.0.1
      ———————————-
      错误的hosts文件:
      127.0.0.1 localhost
      127.0.0.1 slave
      127.0.0.1 master
      ————————————
      修改方法:
      把hosts中的
      127.0.0.1 slave
      127.0.0.1 master
      去掉。只留下127.0.0.1 localhost一个。
      博主在教程中也说过,我没有注意。大家引以为鉴。
      最后谢谢博主。

  47. 可以在root用户下执行bin/hdfs dfs -mkdir -p /user/hadoop? 如果能执行,文件夹创建在哪里了?

    • 文件夹是在 hdfs 上创建的,由 hdfs 控制存储在各个 datanode 节点中,最终的存储位置是 hdfs-site.xml 中的 dfs.datanode.data.dir 项指定的位置。

  48. 楼主,其他都对,就是slaves启动后没有datanode,只有nodemanage,这是怎么回事?

    • 你好,我也出现过这个问题,最后是把临时文件tmp删除后,重启hadoop,就可以啦,文章中有提到

  49. hi ,按照您的教程最后我的namenode开启不了。。

  50. 刚刚开始学习hadoop,单机的,分布式的也是按照你的教程来,给我了很大的帮助,谢谢你哈!不过,在集群下最后一步执行mapreduce successfully之后,又多了一句redirecting connect server什么的,导致后面报错,结果也输出不出来不知道为什么

  51. 您好,我请问下,我用http://master:50070登录HDFSweb页面,在其中的
    Utilities —Browse Directory中,我想下载我上传的文件,但我点击download,就提示找不到页面,请问这是什么原因,谢谢

    • 我也是这个问题,博主看到能帮忙解决一下吗?非常感谢

  52. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar grep input output ‘dfs[a-z.]+’ 这条命令是什么意思?还有’dfs[a-z.]+’这个又是什么意思? 还有文中将etc/hadoop中的文件作为输入文件复制到分布式文件系统中:bin/hdfs dfs -put etc/hadoop input 。假如我需要更换输入文件,换成我自己的输入文件,我应该如何操作?

    • 命令是在input中抓取正则表达式dfs[a-z.]+(这个表达式的意思是dfs开头+多个小写字母和.构成的字符串)并将结果放入output文件夹中

      这里的input和output都是hdfs里面的文件夹

      可以用bin/hdfs dfs -ls命令查看

  53. 到 bin/hdfs dfs -put etc/hadoop input 那步:put: File /user/peiming/input/hadoop/yarn-site.xml._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.但是jps查看Slave1是有启动datanode的啊。这是为什么?

  54. mapred-site.xml 应该要配置成mapreduce.jobhistory.addressMaster.Hadoop:10020要不然 bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar grep input output ‘dfs[a-z.]+’ 一直报错java.net.ConnectException: to 0.0.0.0:10020 failed错误

  55. 您好,我执行例程的时候总是卡在15/08/24 19:51:24 INFO mapreduce.Job: map 0% reduce 0%这里,不知道为什么。好无语。请问您知道怎么解决吗

  56. 您好,我执行了分布式实例后 在reduce未完成时发生错误:error:java.io.Filenotfoundexception: Path is not a file: /usr/hadoop/input/hadoop 不知道如何解决,是不是配置出错了?

  57. 楼主求助,目前我两个虚拟机的datanode进程都启动了,master跟slave的jps看起来都没有问题,但是用hdfs dfsadmin -report看的时候却没有node,网页上看的时候live node跟dead node都是0,好奇怪啊,是我哪里配错了么?

    • 看了slave的log,貌似一直在连接失败,都是这样的信息2015-08-02 15:27:52,657 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 3 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)是不是我hosts设置不对呢?但是重复检查了好几遍,并没有找出问题所在。。

        • 你好,我想问下怎么改的,我也是这个问题

          • 我也是同样的问题,但是不是core-site.xml的原因。查datanode的log发现是slave无法连接你的master。这时候去、etc/hosts发现一个master给了两个ip,删掉127.0.1.1 master就ok!仔细看看logs吧

  58. 大神,我在Master节点上启动hadoop,通过命令jps查看各个节点所启动的进程,发现 master 多了nodemanager和datanode,而slave01只有jps,slave02也是,这是什么问题呢

    • 应该是配置错误,配置正确的话,master 不会有 datanode 进程的。检查一下 /usr/local/hadoop/etc/hadoop/slaves 这个文件的配置,或者查看一下启动日志。

  59. ssh Slave1那里,应该要加上Slave1主机的用户名吧:ssh B@Slave1(假设我Master的用户名是A,Slave1的用户名是B)

    • ssh的时候,如果没有指定用户名,则是默认使用当前的用户名。之前写教程的时候用的都是hadoop用户名,所以没有这个问题,改天我补充一下。

  60. 求问大神:执行到Master无密码登录Slave1那一步。在Master终端上输入ssh Slave1,结果提示要输入A@slave1’s password。奇怪的是A是Master的用户名,而且slave1的s小写了。

  61. 到最后一步运行Job之前都没有什么问题,但是运行bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep /input output ‘dfs[a-z.]+’的时候, 一直在这一步没有反应15/07/20 22:11:06 INFO mapreduce.Job: Running job: job_1437444490434_0001按你提示重启了也没有改变。用hadoop job -status 查看工作进程 Job: job_1437444490434_0001Job File: /tmp/hadoop-yarn/staging/root/.staging/job_1437444490434_0001/job.xmlJob Tracking URL : http://node1-1.sb5.orbit-lab.org:8088/proxy/application_1437444490434_0001/Uber job : falseNumber of maps: 0Number of reduces: 0map() completion: 0.0reduce() completion: 0.0Job state: PREPretired: falsereason for failure: Counters: 0状态是PREP 一直在等待状态。 请问有什么办法解决吗

    • 1. 我看你的输入文件夹是 /input,这是hdfs根目录下的input,但输出结果目录是 /user/hadoop/output,你确认一下。2. 检查一下 datanode 的状态: bin/hdfs dfsadmin -report3. 我搜索了一下,网上也没多少说法,有一个说法是”原因是job得不到执行所需的内存资源,解决办法是调整yarn-site.xml中和分配内存相关的几个参数,这个取决于你具体执行的job所需内存以及你各个节点的物理可用内存”,你不妨试一下。

        • 请问你是把内存调到了多大,设置了哪些参数,我也是这个问题,我是1台master,2台slave,每台都是1core,1G的vm,也遇到了这个问题

          • 请问您这个问题解决了吗?我也遇到了同样的问题,请指教,我已经被这个问题困扰好几天了,希望能得到您的帮助,谢谢!

    • 您好,请问您是怎么解决的这个问题的。我也遇到了同样的问题,该如何调整yarn-site.xml的内存呢?请您指教,我已经被这个问题困扰好几天了,谢谢了。

    • 您好,请问您是怎么解决的这个问题的。我也遇到了同样的问题,该如何调整yarn-site.xml的内存呢?请您指教,我已经被这个问题困扰好几天了,谢谢了。

  62. scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/。。。我ping Slave1是可以的。为什么使用这个命令后没有反应,没有提示输入密码。一直没反应,接着就提示Connection time out

  63. 你好,请教个问题,我在虚拟机上,两台机器,建了个master,建了一个slave,是完全分布式模式,在master启动hdfs后,通过jps看都正常,但是就是没有datanode,大概是因为什么原因啊?

    • 查看一下启动日志 /usr/local/hadoop/logs/hadoop-hadoop-datanode-*.out,看下最后面有带 Fatal、Error 或者 Java Exception 的信息。

  64. 朋友 我是一个hadoop新手 那个hadoop集群完全分布配置 我第一步就卡住了 怎么建立两个主机啊

    • 集群一般是多台机器(电脑),我教程中所说的就是两台机器。如果条件不允许,可以使用虚拟机,同时开启两个虚拟机,也可以搭集群。

      • 我可以加你的qq么 好想认识你啊 我建立完虚拟机 让他们ping 结果就From bogon (192.168.1.120) icmp_seq=2 Destination Host Unreachable 这个192.168.1.120也没有设置过啊

      • 我建立了一个虚拟机,又克隆了这个虚拟机。在两个虚拟机中分别$sudo vim /etc/hostname # 修改了主机名为Master和Slave12.$sudo vim /etc/hosts # 在此处修改主机Ip:192.168.1.121 和 分机IP为192.168.1.122 。之后我在主机里ping Slave1 出现了From bogon (192.168.1.120) icmp_seq=2 Destination Host UnreachableFrom bogon (192.168.1.120) icmp_seq=5 Destination Host Unreachable

  65. 将etc/hadoop中的文件作为输入文件复制到分布式文件系统中。bin/hdfs dfs -put etc/hadoop input 会提示,input不存在。是不是得建一个,那么前面的user/hadoop 建了又是干啥的呢???这南非大裂谷般的跳跃实在超出我的理解范围了

    • 我也遇到这个问题了!!请问层主解决了没有?同样疑问“前面的user/hadoop 建了又是干啥的呢?”看单机篇没有提及啊

      • 感觉是在hadoop下的文件系统里建立的文件夹
        用来存储hadoop运行过程中的一些文件