美文网首页Hadoop系Hadoop我爱编程
Win10上利用子系统搭建hadoop本地开发环境及常见问题解决

Win10上利用子系统搭建hadoop本地开发环境及常见问题解决

作者: manlier | 来源:发表于2017-12-31 03:26 被阅读118次

    Win10上利用子系统搭建hadoop本地开发环境及常见问题解决

    说明

    满心鼓舞的准备学习hadoop,没想到困难重重,具体多坑?
    Hadoop对微软如此不友好,
    原本打算安装在docker上可以吧,一搜索,一个教程都没有,我???,
    那装个虚拟机吧,配置限制了我的想象,
    那搞个双系统吧,linux上又不能安装qq等必须软件,
    虽然也可编译Hadoop源码为windows版本,但是hadoop那么多生态环境,难道我要每一个都编译?
    你可能会将代码打包为jar包再发送到服务器上运行,但是这增加了大量的调试工作,而且浪费了大量时间。
    我拿这windows能怎么办?甚至一度想换个黑苹果(忍住了)。

    估计我大微软自己也发觉这样下去无法盈利,只能赶紧叫上兄弟Ubuntu来填坑。
    本教程利用win10自带的Ubuntu子系统来配置Hadoop运行环境。

    要求

    系统:win10(只有win10可以安装子系统)

    步骤

    第一步:安装Ubuntu子系统

    打开windows商店,搜索Ubuntu,找到后点击安装,等待安装完毕即可。
    安装完成后,为了之后能加快部署速度,设置包源为阿里源

    第二步:配置Ubuntu子系统

    • 设置主机名(不是必须的)

    子系统主机名默认使用windows宿主机的名字,如果你从来没改过显示的应该是一串字符,为了方便开发,你应该修改主机名。通过设置->系统->关于->重命名这台电脑更改主机名。

    • 设置root密码
    sudo passwd root
    
    • 设置默认登录用户

    为了能方便开发,可以设置Ubuntu的默认登录用户为当前登录win10的用户名,因为你开发时是以当前登录用户执行程序的,所以为了避免权限问题,推荐你这么做。
    例如当前我win10的用户为manlier,那就设置默认用户为manlier,如果当前ubuntu中没有该用户,会让你创建。

    在Power shell 中执行

    ubuntu config --default-user <username>
    
    • 安装ssh服务

    Ubuntu 默认安装了ssh服务,如果没有安装,执行

    sudo apt-get install openssh-client
    sudo apt-get install openssh-server
    
    • 启动ssh服务
    sudo service ssh start
    

    如果遇到问题,重新安装ssh服务

    sudo apt-get purge openssh-server
    sudo apt-get install openssh-server
    

    再次运行suddo service ssh --full-restart查看是否已启动成功

    • 配置ssh端口

    ssh端口默认是22号端口,该端口在win10中已经被sshProxy服务占了,你可以关闭该服务。也可以通过下面的命令在Ubuntu中更改ssh端口。

    修改/etc/ssh/sshd_configPort 22为其它端口

    vi /etc/ssh/sshd_config
    

    重启ssh服务

    sudo service ssh --full-restart
    

    本文选择第一种,即直接关闭sshProxy服务。若你选择第二种,之后需要配置Hadoop集群的ssh端口。

    • 配置免密登录

    众所周知,Hadoop需要建立在ssh的免密服务之上,因此需要进行ssh的公钥登录配置。

    修改sshd_config文件,主要更改下面几行

    UsePrivilegeSeparation no
    PermitRootLogin no         #如果你确实要用root方式登录的话设为yes
    PasswordAuthentication yes
    

    在Ubuntu中重启ssh服务

    sudo service ssh --full-restart
    

    执行ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa生成密钥,注意不要使用dsa加密,它不安全也不再被支持。

    执行ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@localhost将公钥发送至Ubuntu,期间需要输入一次(之后就不需要了)用户的密码。

    至此免密服务已经配置完毕。运行ssh localhost查看是否不需要密码登录,若出现问题,请查看输出到屏幕的日志。

    第三步:安装Hadoop

    在配置完ssh后,你可以直接按照官方文档中的说明,在linux环境下安装Hadoop了,这里列出主要步骤。

    • 安装JDK

    Hadoop 依赖JDK,首先需要安装Java,这里安装Oracle Java 8

    sudo apt-get install python-software-properties
    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update
    sudo apt-get install oracle-java8-installer
    
    • 配置JAVA_HOME

    查看JAVA安装路径

    sudo update-alternatives --config java
    
      Selection    Path                                     Priority   Status
    ------------------------------------------------------------
      0            /usr/lib/jvm/java-8-oracle/jre/bin/java   1081      auto mode
    * 1            /usr/lib/jvm/java-8-oracle/jre/bin/java   1081      manual mode
    

    看到JDK路径为/usr/lib/jvm/java-8-oracle

    /etc/environment中第一行添加如下内容:

    JAVA_HOME="/usr/lib/jvm/java-8-oracle"
    

    更新环境变量

    source /etc/enviroment
    
    • 下载Hadoop并解压
    cd /opt
    wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz
    tar xzvf hadoop-2.9.0.tar.gz
    
    • 设置HADOOP_HOME路径

    /etc/environment文件中第一行添加HADOOP_HOME变量,为了输入命令时的方便着想,你可以加入到PATH环境变量中。

    HADOOP_HOME="/opt/hadoop-2.9.0"
    PATH="$HADOOP_HOME/bin:..."
    
    source /etc/environment
    
    • 设置JAVA_HOME路径

    修改etc/hadoop/hadoop-env.sh文件中的JAVA_HOME变量

    export JAVA_HOME=/usr/lib/jvm/java-8-oracle
    
    • 以伪分布模式配置Hadoop

    修改etc/hadoop/core-site.xml文件内容如下:

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
    

    修改etc/hadoop/hdfs-site.xml文件内容如下:

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>
    
    • 配置YARN(若你使用YARN作为资源管理器)

    修改etc/hadoop/mapred-site.xml如下:

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    

    修改etc/hadoop/yarn-site.xml如下:

    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    </configuration>
    
    • 格式化文件系统
    bin/hdfs namenode -format
    
    • 开启 NameNode 和 DataNode 守护进程
    sbin/start-dfs.sh
    
    • 开启YARN
    sbin/start-yarn.sh
    
    • 查看是否启动成功

    输入jps命令,若以下进程都启动了,说明启动成功

    1984 SecondaryNameNode
    2212 ResourceManager
    2376 Jps
    1738 DataNode
    1612 NameNode
    2334 NodeManager
    
    • 创建用户目录
    hadoop fs -mkdir /user
    hadoop fs -mkdir /user/<username>
    

    至此windows上的hadoop环境就搭建完成了,你可以打开localhost:50070查看是否启动成功。

    好了,现在你可以使用idea或其它开发工具进行开发和调试了,而不用每次都打包到服务器上运行了(鼓掌)

    常见错误

    • 用户权限问题

    若你在Ubuntu中以root身份启动了hadoop,并且创建了文件,那么这个文件就属于root。而在开发环境中,你是作为其它用户运行程序的,没有权限访问该文件,要访问文件,可通过以下指令更改文件所有者:

    sudo hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
    

    OWNER:GROUP就是用户:所属组,例如更改为manlier:supergroup将文件的所有者改为了supergroup组下的manlier用户

    • datanode进程未启动

    查看logs/hadoop-<username>-datanode-<hostname>.log文件检查错误。

    若出现java.io.IOException: Incompatible clusterIDs,则说明你的data进程的集群id与name进程的集群id不一致,解决办法如下:

    找到你的hdfs的文件存放路径,若你从未指定,默认为/tmp/hadoop-<username>,彻底删除它,重新格式化文件系统,重启hadoop即可,查看具体原因

    • 出现 Unable to load native-hadoop library for your platform...

    查看当前是否配置好了HADOOP_HOME环境变量

    echo $HADOOP_HOME
    

    如果输出为空,你需要在/etc/enviroment文件中设置Hadoop目录:

    HADOOP_HOME=your_hadoop_path
    

    并重新更新环境变量

    source /etc/enviroment
    

    相关文章

      网友评论

      • 猫疏:Hadoop是网页服务器么
        manlier:@猫疏 Hadoop简单来说是分布式文件系统再加上上层的资源调配系统,主要是服务于大数据的

      本文标题:Win10上利用子系统搭建hadoop本地开发环境及常见问题解决

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