hadoop集群搭建【伪分布式】

--整理来源:《hadoop权威指南第三版》、《hadoop官网doc文档》
--本文原创,转载请注明


看了好多前人们在hadoop配置上留下的足迹,一时没有发现一篇全面、通熟易懂的,的确让我这个新手菜鸟十分苦恼。所以将一些资料进行了整理并加上了自己的理解。能够帮助后继者 快速完成Hadoop安装,以便对Hadoop分布式文件系统(HDFS)和Map-Reduce框架有所体会。 

笔者的配置环境:
  1. Linux distributions:CentOS 7.1 64位,VM虚拟机
  2. Hadoop 2.7.1(Stable)


-->先决条件

Hadoop目前同时支持Linux与Windows平台,在Linux上已经得到了较好的运行与验证。在Windows下需要安装Cygwin( https://www.cygwin.com/ 插件提供除了JDK,SSH之外的shell支持。 前面的linux知识中也提到Window优势在于用户界面的亲和,系统操作容易上手,网上也有大牛在windows上玩得十分的爽快,鉴于自己先天性的手抽综合症,还是选择了大众化的虚拟机+Linux,不然玩着玩着把整个windows玩崩了,就是在玩火了。

  • GNU/Linux是产品开发和运行的平台。 Hadoop已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证。
  • Win32平台是作为开发平台支持的。由于分布式操作尚未在Win32平台上充分测试,所以还不作为一个生产平台被支持。

-->需要的环境

  • JavaTM1.5.x,必须安装,建议选择Sun公司发行的Java版本。
  • ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。

-->需要准备

  1. 下载最近发布的hadoop稳定版(http://hadoop.apache.org/releases.html),可以从镜像网站上下载。这样速度可能会快一些。记得是在CentOS linux系统中的浏览器下载,windows中的文件是无法像平时鼠标一拖直接扔过去的。图中source指的是源代码,需要编译之后才能使用,binary指的是已经编译好的二进制文件,能直接解压缩使用,所以我们直接下载binary(约200M)。
  2. 虚拟机的联网环境。Centos通过yum来安装软件,需要联网的环境。这里就要吐槽一下使用锐捷客户端的校园网了,网卡地址冲突,目前已经不想解决了,放弃校园网了。




-->了解Hadoop的三种安装模式

  • 单机模式 (standalone) 单机模式是Hadoop的默认模式。当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置。在这种默认模式下所有3个XML文件均为空。当配置文件为空时,Hadoop会完全运行在本地。因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。
  • 伪分布式模式 (Pseudo-Distributed Mode)在单节点上以一种伪分布式模式运行。就是假装是分布式多台机,实际上只有一个节点, 所有的守护进程都运行在同一台机器上。有点像古语里面的”草木皆兵“,适合个人在没有硬件的情况下去搭建hadoop集群,入门学习。所以接下来的主要都是使用伪分布式去搭建集群的过程。
  • 完全分布式模式 (Fully Distributed Mode)就是真正意义上的集群了,部署在多台机上,有待学习研究,再来更新。


-->安装SSH

  • 创建用户
首先最好先为CentOS Linux创建一个hadoop的用户,在以后的漫漫学习长路上,如果只使用单个用户说不定就劈腿了,我想还是很有必要的。
  1. 在终端(文字界面)中输入"su",按下回车。
  2. 输入root账户的密码,这个是在安装linux的过程中设定的,注意一点:屏幕中不会显示输入的内容,实际上是有输入的,所以看着键盘一鼓作气输完它,不要停顿。。
  3. 接着在root用户中输入 useradd -m hadoop -/bin/bash,创建hadoop用户,接着输入“passwd hadoop”为该用户设置登录密码。
  4. 可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,在当前的root用户执行:“visudo”,按下Esc键,输入:98,回车,然后如图下增加一行内容。再按下Esc键,输入":wq",按下回车键即可。



几个注意点:
  1. vi是一种编辑器,输入“:wq”是保存编辑器修改的方法。
  2. 完成之后,切换用户或者重启虚拟机,选择hadoop用户登录。
  3. 之后使用“su”/"su hadoop"可实现用户的快速切换。

  • 安装SSH(Secure Shell)
CentOS 使用yum来进行软件的在线安装,CentOS linux已经默认安装了SSH client与SSH server,所以可以不必再安装,若没有安装则可以在终端中输入下面两行 来完成联网安装:
    sudo yum install openssh-clients
    sudo yum install openssh-server

输入"ssh localhost"测试是否可用,第一次登录需要输入“yes”,接着输入hadoop用户的密码,登录到本机。每次都输入密码十分地麻烦,所以可以配置免密钥登录。先改变当前目录,生成秘钥,加入到授权中,这样省去带上路径的麻烦。下面两种都是可行的。


几点说明:
  1. ~表示的是用户的主文件夹,即“/home/用户名”,例如现在你使用hadoop用户,即表示“/home/hadoop”。
  2. -t rsa/-t dsa 指的是生成秘钥的类型,即加密的方式。上网查DSA 用于签名,而 RSA 可用于签名和加密。具体可以上网找下资料,指的是加密的算法。两种都可以在这里使用。强迫症患者可以放心了。
  3. 设置好之后,再次输入“ssh localhost”,就可以免密登录了。输入“exit”退出ssh登录。


-->安装Java环境

建议选择Sun公司发行的Java版本,同样地, CentOS 7.1 中也默认安装了  OpenJDK ,但是CentOS默认安装的只是 Java JRE,即运行环境,而不是 JDK,我们可以在终端中输入“java -version”与“rpm -qa | grep java”来查看当前安装的版本与详细信息。搬砖之路任重道远,为了今后有不时之需,这里还是需要重新去安装JDK。




  • 卸载原来的openjdk
上面我们已经通过 “rpm -qa | grep java”输出了linux自带jdk的具体信息,接着在终端【root】中输入命令来卸载openjdk,不断版本的centos自带的openjdk型号也不同,大家要写准版本号。

[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.75-2.5.4.2.el7_0.x86_64
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64

在网上看到有出现这样的情况,还是记录下来:如果出现找不到openjdk source的话,那么还可以这样卸载

yum -y  remove java-1.7.0-openjdk-headless-1.7.0.75-2.5.4.2.el7_0.x86_64
yum -y  remove java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64

  • 安装JDK
在oracle官网上下载linux版的JDK( http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html ),根据CentOS的版本选择位数,x86指的是32位,x64指的是64位。我们选择64位。有两种方式来下载:
  1. 直接在虚拟机的浏览器中下载,并存放在/usr/local/目录下。
  2. 在windows上下载,通过ftp的方式上传至linux的/usr/local/目录再次吐槽一下校园网,虚拟机连不上网,所以用这个方式更加简单粗暴了。windows与虚拟机linux通信需要设置静态IP/防火墙/ftp等,后续会更新。

下载完成后,在终端中输入“ rpm -ivh jdk-7u79-linux-x64.rpm”来执行安装命令,JDK默认安装在/usr/java下。完成后,可以输入 "javac" "java" “java -version”等命令来验证。


  • 配置环境变量
与我们熟悉的windows操作系统类似,需要设置好系统的环境变量,就像地铁里面功能齐全的指示一样,告诉行人怎样坐车怎样出站。在root用户下输入“vi /etc/profile ”,在最后加入以下几行:

JAVA_HOME=/usr/java/jdk1.7.0_71

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME CLASS_PATH PATH

当然也可以像windows一样直接找到这个配置文件在图形界面编辑,但建议还是多用用命令行的方式,选择了linux,骚年,还是入乡随俗吧,不要过多地依赖图形界面。 执行下面命令立即生效 #source /etc/profile,也可以 # reboot  重启机器,喝个水/走一走。


-->安装Hadoop

准备好之前浏览器中已经下载好的hadoop-2.7.1.tar.gz文件,或者通过ftp从windows本机中上传至linux文件目录中,确保文件的完整性。



  • 解压hadoop
在终端中输入命令将hadoop的发行版进行解压,我们这将其安装到/usr/local中。输入“ sudo tar -zxf ~/下载/hadoop-2.7.1.tar.gz -C /usr/local“。解压完成后进入hadoop的安装目录,更换文件名,方便今后使用,同时也可以进入bin目录下查看hadoop的版本信息。

cd /usr/local/
sudo mv   ./hadoop-2.7.1/   ./hadoop    
cd ./hadoop/bin
hadoop version

  • 伪分布式配置
Hadoop默认的模式为单机模式,完成了以上即相当于搭建好了hadoop的单机模式,不需要其它的配置即可运行,弄到这可以先在网上找些例子刷下成就感再往下。

搭建伪分布式还需要完成一些配置, Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改三个配置文件 core-site.xml  hdfs-site.xml 和 conf/mapred-site.xml

--以下的conf指的是/usr/local/hadoop/etc/hadoop/

  1. 配置conf/hadoop-env.sh文件: 编辑 conf/hadoop-env.sh文件,添加一行export JAVA_HOME=/usr/java/jdk1.7.0_71
  2. 配置hadoop环境变量:类似JDK配置环境变量一样,为了方便以后使用Hadoop的命令,可以配置hadoop的环境变量“vi  /etc/profile ”,添加后执行“source /etc/profile”生效。

export HADOOP_HOME=/usr/local/hadoop
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=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
   3. 配置 conf/core-site.xml,输入“vi  /usr/local/hadoop/etc/hadoop/ core-site.xml
 
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>A base for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
  
   4. 配置 conf/hdfs-site.xml,与上面的方法相同。

<configuration>
    <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>
   5. 配置 conf/mapred-site.xml

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>hadoop-test1:9001</value>
    </property>
</configuration>

  • 启动Hadoop
  1. 格式化一个新的分布式文件系统: .bin/hadoop namenode -format
  2. 启动Hadoop守护进程:$ bin/start-all.sh,表示同时启动HDFS与Map/Reduce,也可以使用$ bin/start-dfs.sh与$ bin/start-mapred.sh分别来启动HDFS与MapReduce。
  3. 观察启动日志,启动完成后可输入“jps”来判断是否启动成功,若启动不成功,可使用“bin/stop-all.sh ”来停止守护进程,再次尝试启动。
  4. 可以浏览NameNode和JobTracker的网络接口,它们的地址默认为:

这样hadoop的伪分布式模式就算是启动成功了, 与 上面的单机模式读取本机数据不同的是,伪分布式读取的是 HDFS 上的数据。我们就可以在hadoop伪分布式上运行hadoop实例了。



1.将输入文件拷贝到分布式文件系统:
$ ./bin/hdfs dfs -mkdir input
$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input
2.运行发行版提供的示例程序:
$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
3.查看输出文件:将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ bin/hdfs dfs -get output output 
$ cat output/*
或者 在分布式文件系统上查看输出文件:
$ bin/hdfs dfs -cat output/*



到这里,恭喜你向hadoop已经成功迈出了一步,人生是个持续/不断积累的过程,小象到了最后就会跳舞了。
























  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值