• Apache Spark源码走读之10 -- 在YARN上运行SparkPi


    y欢迎转载,转载请注明出处,徽沪一郎。

    概要

    “spark已经比较头痛了,还要将其运行在yarn上,yarn是什么,我一点概念都没有哎,再怎么办啊。不要跟我讲什么原理了,能不能直接告诉我怎么将spark在yarn上面跑起来,I'm a dummy, just told me how to do it.” 

    如果你和我一样是一个对形而上的东西不是太感兴趣,而只纠结于怎么去做的话,看这份guide保证不会让你失望, :)。

    前期准备

    本文所有的操作基于arch linux,保证下述软件已经安装

    1. jdk
    2. scala
    3. maven

    搭建hadoop

    hadoop像它的Logo一样,真得是一个体形无比巨大的大象,如果直接入手去搞这个东东的话,肯定会昏上好长一段时间。个人取巧,从storm弄起,一路走来还算平滑。

    hadoop最主要的是hdfs和MapReduce Framework,针对第二代的hadoop即hadoop 2这个Framework变成了非常流行的YARN, 要是没听说过YARN,都不好意思说自己玩过Hadoop了。

    不开玩笑了,注意上面一段话中最主要的信息就是hdfs和mapreduce framework,我们接下来的所有配置都是围绕这两个主题来的。

    创建用户

    添加用户组: hadoop,  添加用户hduser

    groupadd hadoop
    useradd -b /home -m -g hadoop hduser
    

    下载hadoop运行版

    假设当前是以root用户登录,现在要切换成用户hduser

    su - hduser
    id ##检验一下切换是否成功,如果一切ok,将显示下列内容
    uid=1000(hduser) gid=1000(hadoop) groups=1000(hadoop)
    

    下载hadoop 2.4并解压

    cd /home/hduser
    wget http://mirror.esocc.com/apache/hadoop/common/hadoop-2.4.0/hadoop-2.4.0.tar.gz
    tar zvxf hadoop-2.4.0.tar.gz

    设置环境变量

    export HADOOP_HOME=$HOME/hadoop-2.4.0
    export HADOOP_MAPRED_HOME=$HOME/hadoop-2.4.0
    export HADOOP_COMMON_HOME=$HOME/hadoop-2.4.0
    export HADOOP_HDFS_HOME=$HOME/hadoop-2.4.0
    export HADOOP_YARN_HOME=$HOME/hadoop-2.4.0
    export HADOOP_CONF_DIR=$HOME/hadoop-2.4.0/etc/hadoop
    

    为了避免每次都要重复设置这些变量,可以将上述语句加入到.bashrc文件中。

    创建目录

    接下来创建的目录是为hadoop中hdfs相关的namenode即datanode使用

    mkdir -p $HOME/yarn_data/hdfs/namenode
    mkdir -p $HOME/yarn_data/hdfs/datanode
    

    修改Hadoop配置文件

    下列文件需要相应的配置

    1. yarn-site.xml
    2. core-site.xml
    3. hdfs-site.xml
    4. mapred-site.xml

    切换到hadoop安装目录

    $cd $HADOOP_HOME
    

    修改etc/hadoop/yarn-site.xml, 在<configuration>和</configuration>之间添加如下内容,其它文件添加位置与此一致

    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    <property>
       <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
       <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>

    etc/hadoop/core-site.xml

    <property>
       <name>fs.default.name</name>
       <value>hdfs://localhost:9000</value> <!--YarnClient会用到该配置项-->
    </property>

    etc/hadoop/hdfs-site.xml

     <property>
       <name>dfs.replication</name>
       <value>1</value>
     </property>
     <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:/home/hduser/yarn_data/hdfs/namenode</value> <!--节点格式化中被用到-->
     </property>
     <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:/home/hduser/yarn_data/hdfs/datanode</value>
     </property>

    etc/hadoop/mapred-site.xml

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

    格式化namenode

    $ bin/hadoop namenode -format
    

    启动hdfs相关进程

    启动namenode

    $ sbin/hadoop-daemon.sh start namenode
    

    启动datanode

    $sbin/hadoop-daemon.sh start datanode
    

    启动mapreduce framework相关进程

    启动Resource Manager

    sbin/yarn-daemon.sh start resourcemanager

    启动Node Manager

    sbin/yarn-daemon.sh start nodemanager
    

    启动Job History Server

    sbin/mr-jobhistory-daemon.sh start historyserver

    验证部署

    $jps
    18509 Jps
    17107 NameNode
    17170 DataNode
    17252 ResourceManager
    17309 NodeManager
    17626 JobHistoryServer
    

    运行wordCount

    验证一下hadoop搭建成功与否的最好办法就是在上面跑个wordcount试试

    $mkdir in
    $cat > in/file
    This is one line
    This is another line
    

    将文件复制到hdfs中

    $bin/hdfs dfs -copyFromLocal in /in
    

    运行wordcount

    bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.0.jar wordcount /in /out
    

    查看运行结果

    bin/hdfs dfs -cat /out/*
    

    先歇一会,配置到这里,已经一头汗了,接下来将spark在yarn上的运行,再坚持一小会

    在yarn上运行SparkPi

    下载spark

    下载spark for hadoop2的版本

    运行SparkPi

    继续以hduser身份运行,最主要的一点就是设置YARN_CONF_DIR或HADOOP_CONF_DIR环境变量

    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    SPARK_JAR=./assembly/target/scala-2.10/spark-assembly_2.10-0.9.1-hadoop2.2.0.jar 
    ./bin/spark-class org.apache.spark.deploy.yarn.Client 
    --jar ./examples/target/scala-2.10/spark-examples_2.10-assembly-0.9.1.jar 
    --class org.apache.spark.examples.JavaSparkPi 
    --args yarn-standalone 
    --num-workers 1 
    --master-memory 512m 
    --worker-memory 512m 
    --worker-cores 1
    

    检查运行结果

    运行结果保存在相关application的stdout目录,使用以下指令可以找到

    cd $HADOOP_HOME
    find . -name "*stdout"
    

    假设找到的文件为./logs/userlogs/application_1400479924971_0002/container_1400479924971_0002_01_000001/stdout,使用cat可以看到结果

    cat ./logs/userlogs/application_1400479924971_0002/container_1400479924971_0002_01_000001/stdout
    Pi is roughly 3.14028
    
  • 相关阅读:
    解密时遇到 填充无效 无法被移除
    固态硬盘SSD,机械硬盘HDD,4K速度对比。
    onsubmit ajax return false 无效
    chrome flash
    ubuntu base make 未找到命令
    winrar 压缩命令
    查看耗时长,CPU 100% 的SQL
    【转】SQL Server日志文件过大 大日志文件清理方法 不分离数据库
    安装老版本redis .NET 客户端
    python2.0_day22_web聊天室二
  • 原文地址:https://www.cnblogs.com/hseagle/p/3737216.html
Copyright © 2020-2023  润新知