在CentOS中搭建Hadoop

作者: Wizey | 来源:发表于2018-03-26 22:45 被阅读298次

    搭建说明:第一次搭建 Hadoop 的小伙伴,请严格按照文章中的软件环境和步骤搭建,不一样的版本都可能会导致问题。

    软件环境:

    虚拟机:VMware Pro14

    Linux:CentOS-6.4(下载地址,下载DVD版本即可)

    JDK:OpenJDK1.8.0 (强力建议不要使用 Oracle 公司的 Linux 版本的 JDK)

    Hadoop:2.6.5(下载地址

    虚拟机的安装和Linux系统的安装这里就省略了,可以参照网上的教程安装,一般没什么大问题,需要注意的是记住这里你输入的用户密码,下面还要用,如下图所示。

    设置用户密码.png

    用户选择

    使用虚拟机安装好系统后,可以看到登录界面,如下图所示。

    进入系统.png

    选择 Other ,在 Username 输入框中输入 root,回车,再在 Password 输入框中输入你创建用户时密码。root 用户是安装 CentOS 自动创建的超级用户,但密码和你安装系统时创建的普通用户密码是一样的。

    平时在使用 CentOS 时,并不推荐使用 root 用户,因为该用户具有整个系统的最高权限,使用该用户可能会导致严重的后果,但前提是你对 Linux 很熟,才会误操作。搭建 Hadoop 的大数据平台,使用普通用户,很多命令需要 sudo 命令来获取 root 用户的权限,比较麻烦,所以索性直接使用 root 用户。

    安装SSH

    集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令)。

    首先确保你的 CentOS 系统可以正常的上网,你可以查看桌面右上角的网络图标,若显示红叉则表明未联网,可点击选择可用网络,也可以使用桌面左上角的火狐浏览器输入网址验证是否网络连接正常。如果还是无法上网,检查虚拟机的设置,选用 NAT 模式,或者上网百度解决。

    检查网络状况.png

    确定网络连接正常后,打开 CentOS 的终端,可在 CentOS 的桌面点击鼠标右键,选择 Open In Terminal,如下图所示。

    打开终端.png

    一般情况下,CentOS 默认已安装了 SSH client、SSH server,可打开终端执行如下命令进行检验:

    rpm -qa | grep ssh
    

    如果返回的结果如下图所示,包含了 SSH client 跟 SSH server,则不需要再安装。

    查看SSH是否已安装.png

    如果需要安装,则可以通过 yum 这个包管理器进行安装。(安装过程中会让你输入 [y/N],输入 y 即可)

    注意:命令是单条执行的,不是直接把两条命令粘贴过去。

    终端中的粘贴可通过鼠标点击右键选择 Paste 粘贴,也可通过快捷键 【Shift + Insert】粘贴。

    yum install openssh-clients
    yum install openssh-server
    

    SSH安装完成后,执行如下命令测试一下 SSH 是否可用(SSH首次登陆提示 yes/no 信息,输入 yes 即可,然后按照提示输入 root 用户的密码,这样就登录到本机了),如下图所示。

    首次登录SSH.png

    但这样登陆需要每次都输入密码,我们需要配置成SSH无密码登陆比较方便。

    首先输入 exit 退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中。

    exit                           # 退出刚才的 ssh localhost
    cd ~/.ssh/                     # 若提示没有该目录,请先执行一次ssh localhost
    ssh-keygen -t rsa              # 会有提示,都按回车即可
    cat id_rsa.pub >> authorized_keys  # 加入授权
    chmod 600 ./authorized_keys    # 修改文件权限
    

    此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了,如下图所示。

    再次登录SSH.png

    安装 Java 环境

    Java 环境可选择 Oracle 的 JDK,或是 OpenJDK(可看作 JDK 的开源版本),现在一般 Linux 系统默认安装的基本是 OpenJDK,这里安装的是 OpenJDK1.8.0版本的。

    有的 CentOS 6.4 默认安装了 OpenJDK 1.7,这里我们可以使用命令检查一下,和 Windows 下的命令一样,还可以查看 JAVA_HOME 这个环境变量的值。

    java -version                 # 查看 java 的版本
    javac -version              # 查看编译命令 Javac 的版本
    echo $JAVA_HOME              # 查看 $JAVA_HOME 这个环境变量的值
    

    如果系统没有安装 OpenJDK,我们可以通过 yum 包管理器来安装。(安装过程中会让输入 [y/N],输入 y 即可)

    yum install java-1.8.0-openjdk  java-1.8.0-openjdk-devel  #安装 openjdk1.8.0
    

    通过上述命令安装 OpenJDK,默认安装位置为 /usr/lib/jvm/java-1.8.0,下面配置 JAVA_HOME 时就使用这个位置。

    接着需要配置一下 JAVA_HOME 环境变量,为了方便,直接在 ~/.bashrc 中进行设置,相当于配置的是 Windows 的用户环境变量,只对单个用户生效,当用户登录后,每次打开 shell 终端,.bashrc 文件都会被读取。

    修改文件,可以直接使用 vim 编辑器打开文件,也可以使用类似于 Windows 记事本的 gedit 文本编辑器。

    下面命令任选其一。

    vim ~/.bashrc              # 使用 vim 编辑器在终端中打开 .bashrc 文件
    gedit ~/.bashrc              # 使用 gedit 文本编辑器打开 .bashrc 文件
    

    在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存

    配置JAVA_HOME环境变量.png

    接着还需要让该环境变量生效,执行如下命令。

    source ~/.bashrc             # 使变量设置生效
    

    设置好后我们来检验一下是否设置正确,如下图所示。

    echo $JAVA_HOME     # 检验变量值
    java -version
    javac -version
    $JAVA_HOME/bin/java -version  # 与直接执行 java -version 一样
    
    检查JAVA_HOME环境变量是否配置正确.png

    这样,Hadoop 所需的 Java 运行环境就安装好了。

    安装 Hadoop

    在前面软件环境已经给出了 hadoop2.6.5 的下载地址,可以直接通过火狐浏览器打开下载,默认下载位置是在用户的 Home 中的 Downloads 文件夹下,如下图所示。

    下载Hadoop.png

    下载完成后,我们将 Hadoop 解压到 /usr/local/ 中。

    tar -zxf ~/下载/hadoop-2.6.5.tar.gz -C /usr/local    # 解压到/usr/local目录中
    cd /usr/local/                          # 切换当前目录为 /usr/local 目录
    mv ./hadoop-2.6.5/ ./hadoop            # 将文件夹名改为hadoop
    chown -R root:root ./hadoop         # 修改文件权限,root 是当前用户名
    

    Hadoop 解压后即可使用,输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息。

    cd /usr/local/hadoop                  # 切换当前目录为 /usr/local/hadoop 目录
    ./bin/hadoop version                  # 查看 Hadoop 的版本信息
    

    或者直接输入 hadoop version 命令也可以查看。

    hadoop version                          # 查看 Hadoop 的版本信息
    
    查看Hadoop版本信息.png

    Hadoop 安装方式有三种,分别是单机模式,伪分布式模式,分布式模式。

    • 单机模式:Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。

    • 伪分布式模式:Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。

    • 分布式模式:使用多个节点构成集群环境来运行Hadoop,需要多台主机,也可以是虚拟主机。

    Hadoop 伪分布式配置

    现在我们就可以来使用 Hadoop 运行一些例子,Hadoop 附带了很多的例子,可以运行 hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar 看到所有的例子。

    我们这里来运行一个查询的例子,将 input 文件夹作为输入文件夹,筛选当中符合正则表达式 dfs[a-z.]+ 的单词,统计它的次数,将筛选结果输出到 output 文件夹中。

    cd /usr/local/hadoop      # 切换当前目录为 /usr/local/hadoop 目录
    mkdir ./input              # 在当前目录下创建 input 文件夹
    cp ./etc/hadoop/*.xml ./input   # 将 hadoop 的配置文件复制到新建的输入文件夹 input 中
    ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+' 
    cat ./output/*               # 查看输出结果
    

    通过命令 cat ./output/* 查看结果,符合正则的单词 dfsadmin 出现了 1次。

    运行测试Hadoop例子.png

    若运行出错,如出现如下图提示。

    运行Hadoop例子出错.png

    若出现提示 “WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,该 WARN 提示可以忽略,不影响 Hadoop 正常运行。

    注意:Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 output 文件夹删除。

    rm -rf ./output              # 在 /usr/local/hadoop 目录下执行
    

    测试我们的 Hadoop 安装没有问题,我们可以开始设置 Hadoop 的环境变量,同样在 ~/.bashrc 文件中配置。

    gedit ~/.bashrc              # 使用 gedit 文本编辑器打开 .bashrc 文件
    

    在 .bashrc 文件最后面增加如下内容,注意 HADOOP_HOME 的位置对不对,如果都是按照前面的配置,这部分可照抄。

    # Hadoop Environment Variables
    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
    
    Hadoop环境变量的配置.png

    保存后记得关掉 gedit 程序,否则会占用终端,无法执行下面的命令,可以按 【Ctrl + C】键终止该程序。

    保存后,不要忘记执行如下命令使配置生效。

    source ~/.bashrc
    

    Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 下,伪分布式需要修改2个配置文件 core-site.xmlhdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

    修改配置文件 core-site.xml (通过 gedit 编辑会比较方便,输入命令, gedit ./etc/hadoop/core-site.xml)。

    <configuration></configuration> 中间插入如下的代码。

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

    同样的,修改配置文件 hdfs-site.xmlgedit ./etc/hadoop/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>
    

    配置完成后,执行 NameNode 的格式化。(Hadoop 首次启动需要该命令)

    hdfs namenode -format
    

    成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。

    NameNode格式化.png

    接下来启动 Hadoop。

    start-dfs.sh              # 开启 NameNode 和 DataNode 进程
    

    若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可。

    启动Hadoop注意事项.png

    启动完成后,可以通过命令 jps 来判断是否成功启动,若出现下面 NameNode、DataNode、SecondaryNameNode、Jps 四个进程,则 Hadoop 启动成功。

    jps                          # 查看进程判断 Hadoop 是否启动成功
    
    判断Hadoop是否启动成功.png

    成功启动后,也可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

    Hadoop正常启动Web界面.png

    启动YARN

    YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性。(伪分布式不启动 YARN 也可以,一般不会影响程序执行)

    上述通过 start-dfs.sh 命令启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。

    首先修改配置文件 mapred-site.xml,需要先将 mapred-site.xml.template 文件的重命名为 mapred-site.xml。

    mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml  # 文件重命名
    gedit ./etc/hadoop/mapred-site.xml                                  # 用gedit 文本编辑器打开
    
    <configuration>
     <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
     </property>
    </configuration>
    

    接着修改配置文件 yarn-site.xml

    gedit ./etc/hadoop/yarn-site.xml                                  # 用gedit 文本编辑器打开
    
    <configuration>
     <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
     </property>
    </configuration>
    

    然后就可以启动 YARN 了,执行 start-yarn.sh 命令。

    注意:在启动 YARN 之前,要确保 dfs Hadoop 已经启动,也就是执行过 start-dfs.sh

    start-yarn.sh                                # 启动YARN
    mr-jobhistory-daemon.sh start historyserver  # 开启历史服务器,才能在Web中查看任务运行情况
    

    开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个进程,如下图所示。

    启动YARN.png

    启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:http://localhost:8088/cluster 如下图所示。

    YARN的Web界面.png

    YARN 主要是为集群提供更好的资源管理与任务调度,如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。

    关闭 YARN 的命令如下,开启是 start,关闭是 stop。

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

    在平时的学习中,我们使用伪分布式就足够了。

    参考文章:

    1. Hadoop安装教程伪分布式配置CentOS6.4/Hadoop2.6.0

    2. 大数据处理架构Hadoop 学习指南

    3. CentOS7 使用yum命令安装Java SDK(openjdk)

    相关文章

      网友评论

        本文标题:在CentOS中搭建Hadoop

        本文链接:https://www.haomeiwen.com/subject/doudcftx.html