您的位置:首页 > 大数据 > 云计算

spark-03-spark on yarn

2015-06-13 23:06 225 查看
spark on yarn 

spark 简介
     spark 是一个比较流行的内存计算(迭代计算,DAG计算)框架
     从架构和应用的角度来看,spark是一个仅包含计算逻辑的开发库,而不包含任何资源管理和调度相关的实现,这使的spark可以灵活运行在目前比较主流的资源管理系统上。
     目前典型的资源管理系统为mesos和yarn。
yarn 简介 
    yarn是一个新的mapreduce框架。
     mapreduce是一种编程模型,用于大规模数据集的并行计算,它极大的方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
     mapdeduce存在一些缺点比如,可扩展性、内存消耗、线程模型、可靠性和性能上的缺陷,为了根本上解决MapReduce上存在的问题,从hadoop0.23.0版本开始,hadoop的MapReduce框架完全重构,新的MapReduce 命名为MapReduceV2,又称之为yarn。

    

spark on yarn 提交方式

yarn-cluster方式提交

    

./spark-submit \

--master yarn-cluster \

--executor-memory lg \

--num-executors 4 \

--conf spark.yarn.jar = hdfs://cluster1/spark/spark-assembly-1.3.1-hadoop2.6.0.jar \

--class java.cloud.bigdata.spark.SparkListTest \

/home/hadoop/spark-1.3.1/bin/sparkyarn1.jar
提交任务

master

提交到hdfs上的spark-hadoop.jar文件

jar包中的class类

本地写的程序打成的jar包
如果有参数的话可以在以上命令下面加入参数 
yarn-client方式提交
         如果想使用yarn-client方式提交,只需要将yarn-cluster改成yarn-client即可

./spark-submit \

--master yarn-client\

--executor-memory lg \

--num-executors 4 \

--conf spark.yarn.jar = hdfs://cluster1/spark/spark-assembly-1.3.1-hadoop2.6.0.jar \

--class java.cloud.bigdata.spark.SparkListTest \

/home/hadoop/spark-1.3.1/bin/sparkyarn1.jar
  提交jar到HDFS
     
  在上面的命令中, --conf spark.yarn.jar 指定的路径是hdfs的文件路径,我们可以提交本地文件到hdfs上面,命令如下:

  
进入hadoop文件夹下执行下面命令:

./hadoop fs -put /home/hadoop/spark-1.3.1/lib/spark-assembly-1.3.1-hadoop2.6.0.jar /

上面的命令会把文件提交的HDFS的根目录下面,如果要把文件提交某个文件夹之下,可以执行下面的命令:

/hadoop fs -put /home/hadoop/spark-1.3.1/lib/spark-assembly-1.3.1-hadoop2.6.0.jar /spark/

执行上面的命令要先创建 spark文件夹
创建文件夹命令如下:

/hadoop fs -makdir spark
需要配置的环境变量

 在执行的时候报了一个错误,大意指找不到HADOOP_CONF_DIR与YARN_CONF_DIR环境变量。环境变量的配置如下:

打开etc/profile,输入:

export HADOOP_HOME=/home/hadoop/hadoop

export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export YARN_CONF_DIR =${HADOOP_HOME}/etc/hadoop

保存之后执行:

source ect/profile
HDFS   nodename 状态

在执行命令的时候出现下面这个错误。

Operation category WRITE is not supported in state standby
后来查看HDFS nodename状态发现当前状态为standby 

之前hadoop1的核心组成是两部分,即HDFS和mapdeduce。目前在hadoop2中变为HDFS和yarn 。
新的HDFS中的namenode不再只有一个了,可以有多个,每个都有相同的职能。如果有2个NodeName的话,一个的状态是active,一个为standby 。active状态的的nodeName是正常运行的,standby处于待命状态。一旦一个nodeName不能工作,可以通过自动或手动切换,standby状态的namenode就会转变为active状态的继续工作。

所以当出现上面的错误,可以把此nodename的状态更改为active。

下面是几个节点命令用来参考(未测试)

启动standby的nodename: sbin/hadoop-daemon.sh start namenode
注意hdfs路径

在提交下面的命令的时候,

..

--conf spark.yarn.jar=hdfs://spark/spark-assembly-1.3.1-hadoop2.6.0.jar

..
报错为:java.net.unknownHostException:spark

这个错误的原因是hdfs的路径没有写正确,应该加入集群的名字:

--conf spark.yarn.jar=hdfs://cluster1/spark/spark-assembly-1.3.1-hadoop2.6.0.jar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息