IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    hadoop自学笔记1——hadoop2.6.5 ubuntu16.04单机和伪分布环境搭建教程

    summer发表于 2016-12-30 14:21:47
    love 0

    本教程主要实现了在ubuntu16.04上搭建hadoop2.6.5的单机和伪分布运行环境。搭建过程中用到的软件jdk1.7、hadoop2.6.5、ubuntu16.04都是64位的。

    1、安装ubuntu。
    这个网上很多教程,大家去搜下即可。一般是在win7中使用vmware创建一个虚拟机,然后在虚拟机中安装ubuntu。我用的是最新的ubuntu16.04 64位桌面版。下载地址为:https://www.ubuntu.com/download/desktop。提供一个在虚拟机中安装ubuntu的教程:
    http://jingyan.baidu.com/article/14bd256e0ca52ebb6d26129c.html。在选择虚拟机内存的时候一定要选择2G的内存,否则在后面伪分布模式运行hadoop是会出现内存吃紧的情况。

    2、创建hadoop用户。
    安装好ubuntu后,就开始创建一个名为hadoop的用户,可以在安装ubuntu时安装,也可以安装ubuntu后安装。
    创建过程如下:
    sudo addgroup hadoop 创建hadoop组
    sudo adduser --ingroup hadoop hadoop在hadoop组中创建hadoop用户
    sudo usermod -aG adm hadoop将hadoop加入管理员组,在ubuntu16.04中adm是管理员组,之前的某些版本管理员组是admin。

    3、安装ssh
    一般情况下使用sudo apt-get install openssh-server命令就可以安装ssh。但是我在ubuntu16.04中安装ssh时就出现错误:E:软件包openssh-server还没有可供安装的候选者。这是因为ubuntu16.04中没有ssh的安装包,我们必须从网络上下载。下载命令为:sudo apt-get update。
    下载完毕后使用sudo apt-get install openssh-server命令进行安装。
    使用sudo /etc/init.d/ssh start命令开启ssh服务。
    启动后使用ps -e | grep ssh命令查看ssh服务是否正确启动。
    因为需要访问hadoop集群中的节点,这就要求把该节点的机器设置免密码登录,而面密码登录需要私钥和公钥,命令和步骤如下:
    ssh-keygen -t rsa -P ""
    2016123006
    因为我已有私钥,所以会提示是否覆盖当前私钥。第一次操作时会提示输入密码,按Enter直接过,这时会在~/home/{username}/.ssh下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥,现在我们将公钥追加到authorized_keys中(authorized_keys用于保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容)。命令为:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys。
    接着我们需要两次登入ssh确认以后登录时不用输入密码。
    第一次登入:ssh localhost。
    2016123007
    接着exit命令退出。
    然后第二次登录:ssh localhost。再次登出:exit。这样以后就不需要密码登录了。

    4、安装java环境
    (1)、上传jdk。在win7中安装WinSCP软件,然后确保ssh服务是开启的,然后打开WinSCP软件,把jdk上传到/home/hadoop目录中。必须确保jdk是linux版本,而不是window版本,很多小白在这里都弄错了,然后发现搭建好的hadoop无法正常运行。
    (2)、安装jdk。
    我是把jdk安装在/usr/local/haoop下面,因此我们要在/usr/local文件夹下面创建一个hadoop的用户,命令为:mkdir hadoop。我在创建文件夹时,显示:mkdir: 无法创建目录"hadoop": 权限不够。这是因为hadoop用户的权限不够,无法创建文件夹。在这里有两个解决方案,一个是给hadoop授权,一个是使用root用户创建hadoop文件夹,然后把文件夹的用户和组都改变为hadoop。我用的是第二种方法,操作步骤如下:
    (1)、su命令,然后输入root的密码
    (2)、mkdir hadoop命令创建hadoop用户。
    (3)、chown hadoop hadoop命令吧hadoop文件夹的拥有者改为hadoop用户。
    (4)、chgrp hadoop hadoop命令吧hadoop文件夹的用户组从root改为hadoop。
    (5)、exit命令退出root账号。
    到此hadoop文件夹已经创建完毕,hadoop用户可以对它进行任何的操作了。
    使用cp /home/hadoop/jdk-7u51-linux-x64.tar.gz /usr/local/hadoop命令将jdk的压缩文件拷贝到/usr/local/hadoop文件夹下面。
    使用tar xzf jdk-7u51-linux-x64.tar.gz命令解压缩jdk文件。

    下面开始设置jdk的环境变量,在设置环境变量是出现两个问题:
    (1)、使用 gedit /etc/profile修改profile文件时出现
    Failed to connect to Mir: Failed to connect to server socket: 没有那个文件或目录
    Unable to init server: 无法连接: 拒绝连接
    (gedit:4679): Gtk-WARNING **: cannot open display: 的错误。如果在ubuntu主机上使用该命令就没问题,如果使用putty远程连接ubuntu时则会出现上面的错误。这是因为gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。它使用GTK+编写而成。必须在GNOME桌面上使用。

    (2)vi无法正常编辑/etc/profile文件。
    既然在putty上无法使用gedit命令,那么我就使用vi编辑器编辑profile文件。先使用su命令切换到管理员权限(因为profile只有管理员才可以修改),输入vi /etc/profile命令,这时可以打开profile文件了,但是却无法进入编辑模式,输入i、a、o时都无法再左下角显示insert字段,使用上下左右箭头时就会出现一些字符,无法正常的输入。后来经过查询,这是因为ubuntu16.04只安装了vi,没有安装vim的原因。
    安装vim的命令:sudo apt-get install vim。安装好vim后,使用vi编辑器一切正常。

    在profile文件的末端加入如下的代码:
    export JAVA_HOME=/usr/local/jdk1.7
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    保存后退出。切记JAVA_HOME是jdk的安装目录,路径一定要准确。

    使用source /etc/profile 使得刚刚修改的配置生效。然后输入java -version命令,显示的结果为:
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
    表明jdk安装成功。

    5、安装hadoop。
    从apache的官网上下载hadoop2.65(目前最稳定版本),下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.6.5/,选择hadoop-2.6.5.tar.gz下载。然后上传到/usr/local/文件夹中。
    解压hadoop项目的命令:sudo tar xzf hadoop-2.6.5.tar.gz。此时文件目录结构是:/usr/local/hadoop2.6.5。

    设定hadoop项目运行的jdk。这里主要是对/hadoop2.6.5/etc/hadoop/hadoop-env.sh文件进行修改,在改文件的末尾添加下面的代码:
    export JAVA_HOME=/usr/local/jdk1.7
    export HADOOP_HOME=/usr/local/hadoop2.6.5
    export PATH=$PATH:/usr/local/hadoop2.6.5/bin

    记住,对hadoop-env.sh修改后,要使用source命令使该文件生效:
    source /usr/local/hadoop2.6.5/etc/hadoop/hadoop-env.sh。要使用hadoop用户执行。

    执行下hadoop version命令,如果显示下面的内容,则表示hadoop安装成功:
    Hadoop 2.6.5
    Subversion https://github.com/apache/hadoop.git -r e8c9fe0b4c252caf2ebf1464220599650f119997
    Compiled by sjlee on 2016-10-02T23:43Z
    Compiled with protoc 2.5.0
    From source with checksum f05c9fa095a395faa9db9f7ba5d754
    This command was run using /usr/local/hadoop2.6.5/share/hadoop/common/hadoop-common-2.6.5.jar。
    如果显示没有执行权限,则表示当前用户没有执行/usr/local/hadoop2.6.5/bin文件夹的权限,只要对该用户进行相应的授权即可,执行命令为:sudo chmod -R 764 /hadoop2.6.5/bin。

    如果显示找不到hadoop命令,那么是因为刚刚对hadoop-env.sh文件的修改后没有执行source命令,只要执行一次即可。

    为了在ubuntu的命令行上直接执行hadoopd的命令,必须使用root账号在/etc/environment中添加如下的代码:/usr/local/hadoop2.6.5/sbin:/usr/local/hadoop2.6.5/bin:
    如下图,切换到root账号执行vi /etc/environment命令:
    2016123008

    然后添加/usr/local/hadoop2.6.5/sbin:/usr/local/hadoop2.6.5/bin:。如下图所示:
    2016123009
    /usr/local/hadoop2.6.5,是我的电脑中hadoop的安装地址。然后切换回hadoop用户,然后执行source /etc/environment。使得该环境变量设置对hadoop用户生效。

    到目前为止,hadoop的单机环境已经安装完毕,我们运行下hadoop自带的wordcount例子来检验下hadoop是否能正常运行。
    在hadoop2.6.5目录下新建一个input的目录,然后把/etc/hadoop下面的文件拷贝到里面,命令为:cp etc/hadoop/* input。

    然后执行如下的命令:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount input output。该命令是指计算input目录下所有文件中每个词组出现的次数,并把结果保存在output文件夹中。通过使用cat output/*即可查看到执行后的结果。

    6、搭建hadoop伪分布运行环境
    hadoop伪分布运行环境是在单机环境上演变而来的,其实就是单台主机既当namenode又当datanode。我们只需要对core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml四个文件进行相应的配置,就由单机模式变为伪分布模式。下面我们就介绍下如何修改那四个文件。
    (1)修改core-site.xml
    在core-site.xml添加如下的代码:

    <configuration>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/home/hadoop/tmp</value>
            <description>Abase for other temporary directories.</description>
        </property>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:8020</value>
        </property>
        </configuration>

    (2)修改hdfs-site.xml文件
    在hdfs-site.xml文件中添加如下的代码:

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/home/hadoop/dfs/name</value> 
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/home/hadoop/dfs/data</value>
        </property>
        <property>
            <name>dfs.permissions</name>
            <value>false</value>
        </property>
    </configuration>

    上面中的dfs.replication是指定hadoop文件的拷贝备份数量,在伪分布模式是1,而在完全分布模式则是根据具体的datanode数量而设置的。

    (3)修改mapred-site.xml文件。
    在mapred-site.xml文件中添加如下代码:

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <name>mapreduce.jobhistory.address</name>
            <value>hadoop-master:10020</value>
            <description>MapReduce JobHistory Server IPC host:port</description>
        </property>
        <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>hadoop-master:19888</value>
            <description>MapReduce JobHistory Server Web UI host:port</description>
        </property>
    </configuration>

    上面中的hadoop-master是我运行hadoop的主机名,大家根据自己的主机名进行修改。也可以设置为具体的主机IP。

    (4)修改yarn-site.xml文件
    在yarn-site.xml文件中添加如下的代码:

    <configuration>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>hadoop-master</value>
        </property>
        <property>
            <description>The address of the applications manager interface in the RM.      </description>
            <name>yarn.resourcemanager.address</name>
            <value>${yarn.resourcemanager.hostname}:8032</value>
        </property>
        <property>
            <description>The address of the scheduler interface.</description>
            <name>yarn.resourcemanager.scheduler.address</name>
            <value>${yarn.resourcemanager.hostname}:8030</value>
         </property>
         <property>
             <description>The http address of the RM web application.</description>
             <name>yarn.resourcemanager.webapp.address</name>
             <value>${yarn.resourcemanager.hostname}:8088</value>
         </property>
         <property>
             <description>The https adddress of the RM web application.</description>
             <name>yarn.resourcemanager.webapp.https.address</name>
             <value>${yarn.resourcemanager.hostname}:8090</value>
         </property>
         <property>
              <name>yarn.resourcemanager.resource-tracker.address</name>
              <value>${yarn.resourcemanager.hostname}:8031</value>
          </property>
          <property>
               <description>The address of the RM admin interface.</description>
               <name>yarn.resourcemanager.admin.address</name>
               <value>${yarn.resourcemanager.hostname}:8033</value>
          </property>
          <property>
               <name>yarn.nodemanager.aux-services</name>
               <value>mapreduce_shuffle</value>
           </property>
    </configuration>

    同样上面配置文件中的hadoop-master也是运行hadoop主机的主机名。

    修改完上面的配置文件之后,hadoop伪分布模式运行环境就搭建完毕,现在来测试下是否搭建成功。

    首先要格式化namenode,执行hdfs namenode -format命令。出现下图中的情况则表示hadoop格式化成功。
    aUF36zf

    接着执行start-dfs.sh命令,启动namenode。出现如下界面则表明namenode启动成功。
    2016123001
    执行jps则会看到如下的进程:
    2016123002
    接着执行start-yarn.sh命令启动yarn。出现如下的界面则表示启动yarn成功。
    20161203
    支持hadoop伪分布模式已经启动成功。我们通过浏览器打开 http://192.168.31.5:50070 查看namenode和datanode或者DFS的信息。192.168.31.5是我本机的IP,各位要换成自己的实际IP。
    2016123003
    最后来测试下hadoop伪分布模式环境是否能够正常运行。在上面的单机模式,读取的是本地文件,则可以直接利用ubuntu的命令创建一个input文件然后把文件拷贝进去,然后单机版的hadoop就可以直接读取input文件下面的文件了。而hadoop伪分布模式读取的是hadoop HDFS文件系统中的文件,而用ubuntu命令创建的文件夹hadoop伪分布模式是无法识别的,必须使用hadoop文件系统的命令创建文件夹和上传文件,hadoop伪分布模式才可以识别。下面介绍如何使用hadoop命令创建文件夹和拷贝文件。
    hdfs dfs -mkdir -p /user/hadoop # 在HDFS中创建用户目录
    hdfs dfs -mkdir input # 在用户目录下创建input目录
    hdfs dfs -put ./etc/hadoop/*.xml input # 将一些测试文件移入input目录,就移配置xml文件作为输入。

    然后使用ubuntu命令将当前目录切换到hadoop安装的位置。命令为:
    cd /usr/local/hadoop2.6.5/。/usr/local/hadoop2.6.5/是我本地上hadoop安装的位置,各位可以按照自己hadoop安装的位置对命令做一些修改。
    然后执行:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount input output 命令。出现如下的命令则表明hadoop自带的单词统计例子运行成功。
    2016123004

    执行hdfs dfs -cat output/*命令查看运行结果:
    2016123005
    到此hadoop2.6.5伪分布模式运行环境搭建成功,并且经过测试通过。



沪ICP备19023445号-2号
友情链接