Hadoop集群搭建详细步骤(2.6.0)

本文记录在3台物理机上搭建Hadoop 2.6.0的详细步骤及碰到的问题解决。默认使用root账号操作,实际中建议使用专用的hadoop用户账号。

1. 环境

机器: 物理机3台,ip分别为192.168.1.130、192.168.1.132、192.168.1.134
操作系统: CentOS 6.6
Java: 1.7
Hadoop: 2.6.0

请确保JDK已安装,使用java -version确认。

hosts配置

配置主机hosts文件:

vim /etc/hosts
192.168.1.130 master
192.168.1.132 slave1
192.168.1.134 slave2

ssh配置

master上的namenode需要无密码ssh访问两台salve,一次需要配置无密码ssh。步骤如下:
在master上:
使用下面命令生成密钥对:

ssh-keygen -t rsa

-t参数表示类型,这里选择rsa。选择保存位置的时候直接回车,使用默认的/root/.ssh/id_rsa。提示输入密码的时候,直接回车。如下图:

这里写图片描述

上述命令将在/root/.ssh目录下生成公钥文件id_rsa.pub。将此文件拷贝到.ssh目录下的authorized_keys:

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

ssh登录本机,确保能够免密码登录:

这里写图片描述

然后将公钥复制到两台slave:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.132
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.134

ssh-copy-id 把公钥分发即追加到远程主机的 .ssh/authorized_key 上,并确保目录及文件有对应的权限。确保可以从master免密码登录到slave1和slave2:

这里写图片描述

这里写图片描述

配置文件目录

在master常见name,data,ymp分别用于保存HDFS的namenode文件,数据及临时文件:

mkdir /home/data/hdfs
cd /home/data/hdfs
mkdir name
mkdir data
mkdir tmp

然后将hdfs文件拷贝到两台slave对应的位置:

scp -r hdfs/ root@192.168.1.132:/home/data/hdfs
scp -r hdfs/ root@192.168.1.134:/home/data/hdfs

2. 安装及配置

下载hadoop 2.6

cd /home/soft/
mkdir hadoop
cd hadoop
wget http://apache.fayea.com/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz

解压到home目录下:

tar zxvf hadoop-2.6.0.tar.gz -C /home/

配置Hadoop集群:

Hadoop的配置文件位于安装目录下的etc/hadoop文件。

配置core-site.xml

vim /home/hadoop-2.6.0/etc/hadoop/core-site.xml 
<configuration>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/home/data/hdfs/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>

配置hdfs-site.xml
基本配置包括副本数量,数据存放目录等。

vim /home/hadoop-2.6.0/etc/hadoop/hdfs-site.xml 
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/data/hdfs/name</value>
    <final>true</final>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/data/hdfs/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>

配置yarn-site.xml

vim /home/hadoop-2.6.0/etc/hadoop/yarn-site.xml 
<configuration>

  <!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
  </property>

  <property>
    <name>yarn.resourcemanager.address</name>
    <value>master:18040</value>
  </property>

  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>master:18030</value>

  <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>
    <name>yarn.resourcemanager.admin.address</name>
    <value>master:18141</value>
  </property>

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

  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
</configuration>

配置mapred-site.xml

vim /home/hadoop-2.6.0/etc/hadoop/mapred-site.xml 
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

配置salve

vim /home/hadoop-2.6.0/etc/hadoop/slaves 
slave1
slave2

将hadoop整个文件copy到两台slave:

cd /home
scp -r  hadoop-2.6.0 root@slave1:/home/
scp -r  hadoop-2.6.0 root@slave2:/home/

配置path

vim /etc/profile
export HADOOP_HOME=/home/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
. /etc/profile

这样在master机器上的任意路径都可以运行hadoop命令。

3. 运行Hadoop

Hadoop提供了很丰富的脚本供使用,主要在安装目录中的bin及sbin。

启动namenode

启动之前需要格式化一下:
在master机器上执行下面的命令,格式化HDFS文件系统:

hadoop namenode -format

这里写图片描述

格式化成功,现在启动namenode守护进程:

hadoop-daemon.sh start namenode

查看hadoop进程:

ps -ef | grep hadoop

可以看到已经有hadoop进程启动:

这里写图片描述

使用jps命令查看JVM进程:

jps

可以看到namenode成功启动:
这里写图片描述

如果提示你找不到jps,请确保你安装了JDK而不是jre并将jdk/bin设置到PATH环境变量中。

启动datanode

启动datanode命令如下:

hadoop-daemons.sh start datanode

该命令会远程启动slave上的datanode守护进程。但是启动出现错误:

这里写图片描述

echo $JAVA_HOME看到已经配置了,查明是因为hadoop-env.sh没有配置JAVA_HOME,修改配置如下(集群其他节点需同步修改):

 vim /home/hadoop-2.6.0/etc/hadoop/hadoop-env.sh

这里写图片描述

重新启动datanode:

这里写图片描述

在slave上运行jps,发现没有datanode,查看日志:

vim /home/hadoop-2.6.0/logs/hadoop-root-datanode-brandon132.out

这里写图片描述

提示mapred-site.xml配置有问题,查看果然如此:

这里写图片描述

修正后重新启动datanode:

这里写图片描述

两台slave运行jps都证明datanode启动成功:
这里写图片描述

这里写图片描述

上述两个步骤(启动namenode和datanode可以合并为一个命令)

start-dfs.sh 

该脚本位于Hadoop安装目录中bin目录下,我们已经加入到PATH环境变量中。

启动YARN:

yarn-daemon.sh start resourcemanager

启动nodemanager:

yarm-daemon.sg start nodemanager

上述两步一样可以合并为:

start-yarn.sh

这里写图片描述

在master上运行jps,ResourceManager已启动:

这里写图片描述

在salve上运行jps,发现只有datanode而没有nodemanager:

这里写图片描述

查看log日志:

这里写图片描述

发现shuffle这个aux-serviece配置非法,经查证,新版本中mapreduce.shuffle需改为mapreduce-shuffle,即在mapred-site.xml中配置修改如下(集群其他节点需同步修改):
原来:

 <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>

改为下划线:

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

修改后重启,成功:

这里写图片描述

查看HDFS管理界面:

这里写图片描述

访问YARN管理界面:

这里写图片描述

这里写图片描述

4. 运行实例

搭建完成之后,我们运行一个Mapreduce作业感受一下:

hadoop jar /home/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 5 10

启动之后发现总是卡住:

这里写图片描述

管理界面的状态也一直处于Accepted,没有任何变化:

这里写图片描述

折腾了很久,总算找到原因,是因为hostname配置与/etc/hosts中的配置不一样,/etc/hosts中master的配置如下:

192.168.1.130 master

master机器上使用hostname查,显示为brandon130。先使用hostname命令临时修改一下主机名:

hostname master

其他两台slave对应修改。

然后重新提交pi运算作业,总算成功:

这里写图片描述

这里写图片描述

从进度日志可以看到map和reduce作业是可以一定程度上并行的:

这里写图片描述

查看YARN管理界面:

这里写图片描述

大功告成。

5. 常见问题及其他

1) 防火墙

请确保集群机器的防火墙都关闭,否则可能会出现各种莫名的问题,需要你自己去看日志排查原因。关闭防火墙方法如下:
临时生效,重启后复原:

service iptables start // 开启
service iptables stop  // 关闭

永久性生效,重启后不会复原

chkconfig iptables on // 开启
chkconfig iptables off // 关闭

2) 主机名配置

前面提到的主机名修改是临时的,重启机器之后会恢复原来的样子,要永久修改主机名,需要对应修改/etc/sysconfig/network文件,如下图,将HOSTNAME改成对应的master,其他两台对应slave1,slave2。

这里写图片描述

(完)

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

Docker的安装配置及使用详解 - 2016-07-14 14:07:12

基本概念 Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 先理解了这三个概念,就理解了 Docker 的整个生命周期。 1、docker安装与启动 yum install -y epel-releaseyum install docker-io # 安装docker # 配置文件 /etc/sysconfig/docker chkconfig docker on # 加入开机启动 service docker start # 启动docker服
mahout之推荐系统源码笔记(4) —总结与优化 花了几天的时间阅读分析了mahout推荐系统中基于java单机和基于hadoop的分布式mapreduce源码。根据其推荐系统hadoop程序的job划分写了笔记1、2、3。在这里,基于笔记1,2,3做一个总结。 我们先从相似度开始。 什么是相似度,就是我们在构建推荐系统时,基于user或者基于item都需要计算出相应的候选item或者是user。那么在mahout的hadoop程序中,他运用的是基于item的推荐系统,同样的,也需要计算相似度。 计算相
分享主要分为以下五个部分: HAWQ基本介绍; HAWQ架构以及各重要组件的基本原理; HAWQ的中短期规划; 如何贡献到HAWQ和成为Apache Committer; Q A。 一、HAWQ基本介绍 HAWQ是一个Hadoop原生大规模并行SQL分析引擎,针对的是分析性应用。和其他关系型数据库类似,接受SQL,返回结果集。但它具有大规模并行处理很多传统数据库以及其他数据库没有的特性及功能。主要如下: 对标准的完善支持:ANSI SQL标准,OLAP扩展,标准JDBC/ODBC支持,比其他Hadoop
Hadoop 的 HDFS 集群在使用一段时间后,各个 DataNode 节点的磁盘使用率肯定会出现不平衡的情况,也就是数据量层面的数据倾斜,如图: 引起这种情况的方式很多: 1.        添加新的 Datanode 节点 2.        人为干预将数据的副本数降低或者增加   我们都知道当 HDFS 出现数据不平衡的时候,就会造成 MapReduce 或 Spark 等应用程序无法很好的利用本地计算的优势,而且 Datanode 节点之间也没有更好的网络带宽利用率,某些 Datanode 节点
线性判别分析(Linear Discriminant Analysis) 标签(空格分隔): 监督学习 @author : duanxxnj@163.com @time : 2016-07-11 线性判别分析Linear Discriminant Analysis 线性分类器 判别式函数discriminant functions 从判别式或后验概率到决策面 线性判别分析Linear Discriminant Analysis 二次判别分析QDA Fisher判别式 类间距离 类内距离 Fisher线性判

Jenkins 2.0新时代:从CI到CD - 2016-07-12 14:07:50

2.0 破茧重生 自从去年9月底Jenkins的创始人Kohsuke Kawaguchi提出Jenkins 2.0(后称2.0)的愿景和草案之后,整个Jenkins社区为之欢欣鼓舞,不管是官方博客还是Google论坛,大家都在热烈讨论和期盼2.0的到来。4月20日,历经Alpha(2/29),Beta(3/24),RC(4/7)3个版本的迭代,2.0终于正式发布。这也是Jenkins面世11年以来(算上前身Hudson)的首次大版本升级。那么,这次升级具体包含了哪些内容呢? 外部 从外部来看,2.0最大的
基本流程图如下: 命令如下: 将用sqoop导入Oracle数据到HDFS./sqoop import --connect jdbc:oracle:thin:@192.168.146.128:1521:orcal -- username scoot --passwd tiger --table emp --columns 'empno, ename, job, sal, deptno' -m 1 --target -dir '/sqoop/emp'使用sqoop导入oracle数据到hive中,./sqo

HIVE和HBASE区别 - 2016-07-11 17:07:52

1. 两者分别是什么?    Apache Hive是一个构建在Hadoop基础设施之上的数据仓库。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce. 虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询--因为它只能够在Haoop上批量的执行Hadoop。     Apache HBase是一种Key/Value系统,它运行在HDFS之上。和Hive不一样,Hbase的能够在它的数据库上实时运行,而不是运行MapRe
内容翻译:@穆文(微信公众号 数据挖掘机养成记) 寒小阳 校正调整: 寒小阳 龙心尘 时间:2016年7月 出处: http://blog.csdn.net/han_xiaoyang/article/details/51871068 http://blog.csdn.net/longxinchen_ml/article/details/51823339 说明:本文为斯坦福大学CS224d课程的中文版内容笔记整理,已得到斯坦福大学课程@Richard Socher教授的授权翻译 0.前言 之前的课程里介绍了
​(上图为马云试乘互联网汽车) 与几乎所有人的认知相反,我们现在才刚刚站在移动互联网新时代的大门口。 从1975年PC诞生到2007年iPhone诞生,这30年是基于PC互联网的商业社会;从2007年到2016年这10年是商业社会从PC互联网向移动互联网过渡的10年,这10年也是云计算和大数据崛起的10年;以2016年7月阿里和上汽联合推出的互联网汽车为标志,未来的30年才是真正的移动互联网世代,商业社会的主要基础设施也将过渡到智能终端和移动互联网,智能终端则将从智能手机和互联网汽车过渡到更多品类。 在真