美文网首页大数据大数据与数据挖掘专栏
Hadoop入门(一)之Hadoop伪分布式环境搭建

Hadoop入门(一)之Hadoop伪分布式环境搭建

作者: PeTu | 来源:发表于2018-09-04 22:17 被阅读35次

    原文地址:http://pengtuo.tech/2018/09/04/hadoop-pseudo-distributed/

    以这篇文章开启大数据开发系列教程更新,本人也是努力学习中

    1. 环境要求

    首先 Java 版本不低于 Hadoop 相应版本要求,一般的,Hadoop 大版本号在 2.6 以前的支持 Java 6,Hadoop 大版本号 在 2.7 ~ 3.0 之间的支持 Java 7,Hadoop 版本在 3.0 之后的支持 Java 8

    详细可见官网 Hadoop Java Versions

    本文所用的 Hadoop 版本为 hadoop-2.6.0-cdh5.7.0,这个版本很稳定,属于大多企业使用的 Hadoop 版本,Java 版本使用的是 java version "1.7.0_80"

    在 Linux 中下载,执行以下命令:

    • 下载 Java 8
    wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz
    
    • 下载 Java 7
    wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz?AuthParam=1523684058_82b7921ee0def49bd2a0930187900e60
    
    • 下载 hadoop-2.6.0-cdh5.7.0
    wget --no-check-certificate -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz
    

    本人的建议文件管理方式,将这些下载都存储到 ~/downloads/ 文件夹里,然后解压到 ~/app/ 文件里

    2. 环境配置

    2.1 配置 Java

    执行解压命令

    tar -zxvf jdk-8u161-linux-x64.tar.gz -C ~/app/
    

    创建.profile 文件,如果有就不用创建了,然后在.profile 文件里添加

    export JAVA_HOME=/root/app/jdk1.7.0_80
    export PATH=$JAVA_HOME/bin:$PATH
    

    保存退出后,执行 source .profile 让配置生效

    2.2 配置 ssh 免密登录

    HDFS 是由一个 NameNode,一个 SecodaryNameNode,以及 n 个 DataNode 组成,当有多台物理机时,NameNodeDataNode 是分布在不同的物理机上,部署则需要 NameNode 能够直接与 DataNode 进行通信,通信方式之一就是使用 SSH (Secure Shell),所以需要在之间设置免密登录

    因为本次是 Hadoop 伪分布式搭建,本机同时充当 NameNodeDataNode 角色,所以只需要配置一个本机的 SSH 免密登录

    执行:

    ssh-keygen -t rsa
    cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
    

    即可

    2.3 修改 hadoop 配置文件

    解压 hadoop 压缩包:

    tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app/
    

    .profile 文件里添加:

    export HADOOP_HOME=/root/app/hadoop-2.6.0-cdh5.7.0
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export PATH=$HADOOP_HOME/bin:$PATH
    

    Hadoop 的配置文件都在 hadoop_home/etc/hadoop/ 里,如果你的文件管理方式和我一样的话,则是在 ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/

    hadoop-env.sh 中添加:

    export JAVA_HOME= 你的 java home 路径
    

    core-site.xml 中添加:

    <configuration>
    
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs:// {你的 IP 地址或 hostname} :8020</value>
    </property>
    
    <property>
        <name>hadoop.tmp.dir</name>
        <value>~/app/tmp</value>
    </property>
    
    </configuration>
    

    hdfs-site.xml 中添加:

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>
    

    2.4 启动 hdfs

    首先格式化文件系统

    注意:仅第一次执行即可,不要重复执行

    cd ~/app/hadoop-2.6.0-cdh5.7.0
    bin/hdfs namenode -format
    

    然后启动 namenodedatanode

    sbin/start-dfs.sh
    

    检验是否启动成功,执行 jps,如果显示:

    3644 SecondaryNameNode
    3341 NameNode
    3450 DataNode
    4141 Jps
    

    则表示环境配置成功,如果少一个就表示启动没有成功,则需要检查相应的日志进行错误排查

    3. 错误排查

    NameNodeSecondaryNameNode以及DataNode的启动日志都在~/app/hadoop-2.6.0-cdh5.7.0/logs/中,查看对应的.log文件可获得启动信息以及错误日志

    本人配置过程的遇到的错误有:

    (1) 地址绑定错误:

    Problem binding to [aliyun:8030] 
    java.net.BindException: Cannot assign requested address; 
    For more details see:  http://wiki.apache.org/hadoop/BindException
    
    Caused by: java.net.BindException: Cannot assign requested address
    

    解决方法:本人是在阿里云服务器上配置,在 /etc/hosts 文件中,主机名配置IP不能用公网IP,需要用内网IP

    (2) 在启动 hadoop 时,有 log4jwarning 警告信息

    解决方法:vim etc/hadoop/log4j.properties,然后添加 log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

    注意:此方法只是修改了 log4j 的活跃等级,并不是解决了 warning 的根源,属于治标不治本

    (3) 执行 jps 后,只启动了 NameNodeSecondaryNameNode,没有启动 DataNode
    查看日志得到错误日志:

    2018-09-04 11:47:38,166 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to aliyun/172.16.252.38:8020. Exiting.
    java.io.IOException: All specified directories are failed to load.
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:478)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1394)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1355)
        at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)
        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228)
        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829)
        at java.lang.Thread.run(Thread.java:745)
    

    这个是文件系统初试化时出了问题

    解决方法:停止已启动的节点,停止命令为 sbin/stop-dfs.sh,删除 ~/app/tmp/dfs 文件夹,然后重新到 ~/app/hadoop-2.6.0-cdh-5.7.0/ 执行 bin/hdfs namenode -format,然后启动 sbin/start-dfs.sh,此时就能够成功启动

    强烈注意bin/hdfs namenode -format格式化文件系统命令,如果你是初次搭建,可以用此方法暴力解决,但是如果已经使用了 Hadoop 一段时间,HDFS 存在重要数据,则需要另找它法。

    OK,后面将会讲解 Hadoop 的重要组成部分以及相关知识

    相关文章

      网友评论

        本文标题:Hadoop入门(一)之Hadoop伪分布式环境搭建

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