Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册

竹子

人生为棋,我愿为卒,行动虽慢,可谁曾见我后退一步。

  • 博客访问: 338941
  • 博文数量: 28
  • 博客积分: 111
  • 博客等级: 民兵
  • 技术积分: 1307
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-26 20:51
文章分类

全部博文(28)

文章存档

2014年(19)

2013年(9)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
Spark On Yarn环境搭建 2014-07-06 21:27:16

分类: HADOOP

最近在打Spark环境,下面hi简单总结:

一、 基本布局

1、 服务器分布:

10.168.9.240  主名字节点,同时为数据节点

10.168.9.241   备名字节点,同时数据节点

10.168.9.242  数据节点

2、 HOSTS设置

10.168.9.240  namenode1

10.168.9.241  namenode2 

10.168.9.242  datanode1 

注意:hostname不能使localhost127.0.0.1),应该设成本机具体IP,并且要保持/etc/hosts/etc/sysconf/network一致

3、 SSH免密码登录:

具体参见脚本:


点击(此处)折叠或打开

  1. #!/bin/sh
  2. rm -rf ~/.ssh
  3. ssh-keygen
  4. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  5. chmod 600 ~/.ssh/authorized_keys
  6. #scp ~/.ssh/id_rsa.pub root@namenode2: ~/.ssh/
  7. service sshd restart
  8. ssh localhost


注:权限对ssh的设置影响很大

下面的各个操作,可以只在一台机器上进行,然后利用sshscp拷贝到其它机器上,命令格式为:scp ~/.ssh/id_rsa.pub root@namenode2: ~/.ssh/,其中root不是用户名,是权限的意思。 

二、安装一些相关软件(主要是为了编译hadoop和开发环境搭建)

安装的软件有:JDK1.8版本存在问题)、MAVENPROTOBUFcmakencursesopenss以及hadoop。我在进行安装时都是以共享连接的形式ln -s/usr/local/目录下的,注意此时要用绝对路径。

三、Hadoop YARN 分布式集群配置

1、 添加相应的环境变量:

# vim /etc/profile

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_PID_DIR=/data/hadoop/pids

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

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_CONF_DIR=$HADOOP_HOME/etc/hadoop

export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# source /etc/profile

2、 创建(主要是为hadooptmp.dir配置路径,不配也行试过)

mkdir -p $HADOOP_HOME/{pids,storage}

mkdir -p $HADOOP_HOME/{pids,storage1}

mkdir -p $HADOOP_HOME/storage/{hdfs,tmp}

 mkdir -p $HADOOP_HOME/torage/hdfs/{name,data}

3、 配置 core-site.xmlvi $HADOOP_HOME/etc/hadoop/core-site.xml


点击(此处)折叠或打开

  1. <configuration>
  2.     <property>
  3.         <name>fs.defaultFS</name>
  4.         <value>hdfs://namenode1:9000</value>
  5.     </property>
  6. <!--单次文件缓存大小,默认是4K(32位的一个页面大小 )-->
  7.     <property>
  8.         <name>io.file.buffer.size</name>
  9.         <value>131072</value>
  10.     </property>
  11.     <property>
  12.         <name>hadoop.tmp.dir</name>
  13.         <value>file:$HADOOP_HOME/storage/tmp</value>
  14.     </property>
  15. </configuration>


4、 配置 hdfs-site.xmlvi $HADOOP_HOME/etc/hadoop/hdfs-site.xml


点击(此处)折叠或打开

  1. <configuration>
  2. <!--此处可以不填,不填此时将启动的node作为备份节点-->
  3.     <property>
  4.         <name>dfs.namenode.secondary.http-address</name>
  5.         <value>namenode2:9000</value>
  6.     </property>
  7. <!--此处要是只用一个目录,则会给出警告-->
  8.     <property>
  9.         <name>dfs.namenode.name.dir</name>
  10.      <value>file:///$HADOOP_HOME/storage/hdfs/name,file:///$HADOOP_HOME/storage1/hdfs/name</value>
  11.     </property>
  12.     <property>
  13.         <name>dfs.datanode.data.dir</name>
  14.         <value>file:///$HADOOP_HOME/storage/hdfs/data,file:///$HADOOP_HOME/storage1/hdfs/data</value>
  15.     </property>
  16.     <property>
  17.        <!--设置拷贝数据的个数,与slaves个数保持一致-->
  18.        <name>dfs.replication</name>
  19.         <value>3</value>
  20.     </property>
  21.     <property>
  22.         <name>dfs.webhdfs.enabled</name>
  23.         <value>true</value>
  24.     </property>
  25. </configuration>


5、 配置mapred-site.xmlvi  $HADOOP_HOME/etc/hadoop/mapred-site.xml


点击(此处)折叠或打开

  1. <configuration>
  2.     <property>
  3.         <name>mapreduce.framework.name</name>
  4.         <value>yarn</value>
  5.     </property>
  6.     <property>
  7.         <name>mapreduce.jobhistory.address</name>
  8.         <value>namenode1:10020</value>
  9.     </property>
  10.     <property>
  11.         <name>mapreduce.jobhistory.webapp.address</name>
  12.         <value>namenode1:19888</value>
  13.     </property>
  14. </configuration>


6、 配置yarn-site.xmlvi $HADOOP_HOME/etc/hadoop/yarn-site.xml


点击(此处)折叠或打开

  1. <configuration>
  2.     <property>
  3.         <name>yarn.nodemanager.aux-services</name>
  4.         <value>mapreduce_shuffle</value>
  5.     </property>
  6.     <property>
  7. <!--
  8. 此处要是用mapreduce_shuffle,会给出一个警告;
  9. 此处要是用mapreduce.shuffle,则会报错;
  10. 此处要是不填,则正常
  11. -->
  12.         <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  13.     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  14.     </property>
  15.     <property>
  16.         <name>yarn.resourcemanager.scheduler.address</name>
  17.         <value>namenode1:8030</value>
  18.     </property>
  19.     <property>
  20.         <name>yarn.resourcemanager.resource-tracker.address</name>
  21.         <value>namenode1:8031</value>
  22.     </property>
  23.     <property>
  24.         <name>yarn.resourcemanager.address</name>
  25.         <value>namenode1:8032</value>
  26.     </property>
  27.     <property>
  28.         <name>yarn.resourcemanager.admin.address</name>
  29.         <value>namenode1:8033</value>
  30.     </property>
  31.     <property>
  32.         <name>yarn.resourcemanager.webapp.address</name>
  33.         <value>namenode1:80</value>
  34.     </property>
  35. </configuration>


7、 配置 hadoop-env.shmapred-env.shyarn-env.sh(在开头添加)

1)、文件路径:

$HADOOP_HOME/etc/hadoop/hadoop-env.sh

$HADOOP_HOME/etc/hadoop/mapred-env.sh

$HADOOP_HOME/etc/hadoop/yarn-env.sh

2)、添加内容

export JAVA_HOME=/usr/local/jdk

export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_PID_DIR=/data/hadoop/pids

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

export HADOOP_PREFIX=$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_CONF_DIR=$HADOOP_HOME/etc/hadoop

export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

8、 数据slaves节点配置(放在此处的节点为slaves节点

位置:vi $HADOOP_HOME/etc/hadoop/slaves

9、 Hadoop简单测试:(都在master节点上进行)

hadoop namenode -format

tart-dfs.sh

#看看相应的resourcemanagerdatanode等节点是否起来。

hdfsmapreduce测试

#创建个目录: /usr/rocketzhang

hdfs dfs -mkdir -p /user/rocketzhang

#上传一个本地文件

hdfs dfs -put bin/hdfs.cmd /user/rocketzhang

#WordCount程序 测试

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /user/rocketzhang /user/out

注意:在此过程中经常出现两种错误:无法连接和datanode节点没起来,大多数是因为防火墙没关闭和需要删除core*.xml中定义tmp.dir目录下的current并重新format

查看监控页面URLhttp://10.168.9.240:8080/(我搭建时的url),看是否可以正常显示。

二、 Spark 分布式集群配置

1、 下载相关软件:
http://www.scala-lang.org/files/archive/scala-2.9.3.tgz

http://d3 kbcqa49mib13.cloudfront.net/spark-0.8.1-incubating-bin-hadoop2.tgz

安装并设置相关的环境变量,装完之后利用ln -s命令将其link/user/local

录下,注意此时最好用绝对路径

2、 spark进行操作,如下:

cd /usr/local/spark/conf

 vi spark-env.sh

export JAVA_HOME=/usr/local/jdk

export SCALA_HOME=/usr/local/scala
export HADOOP_HOME=/usr/local/hadoop

mv spark-env.sh.template spark-env.sh

            设置slaves,打开slaves,添加datanode节点

3、 启动Yarn,有三种方式:start-all.shstart-dfs.shstart-yarn.sh)、start-yarn.shyarn-demo.sh

4、 简单测试:

还是提供过URL打开和上面一样,显示如下界面:

切换到/usr/local/spark目录

1)、本地测试:

./run-example org.apache.spark.examples.SparkPi local

2)普通集群模式

./run-example org.apache.spark.examples.SparkPi spark://namenode1:7077

./run-example org.apache.spark.examples.SparkLR spark://namenode1:7077

./run-example org.apache.spark.examples.SparkKMeans spark://namenode1:7077 file:/usr/local/spark/kmeans_data.txt 2 1

注:此处不能用namenode1,要用具体IP地址

运行完之后,url界面会有如下显示:

5、 结合HDFS的集群模式

hadoop fs -put README.md /  /user/rocketzhang(不能用相对路径,无法识别)

MASTER=spark://10.168.9.240:7077 ./spark-shell

scala> val file = sc.textFile("hdfs://namenode1:9000/user/root/README.md")

scala> val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)

scala> count.collect()

scala> :quit
本文出自:http://blog.chinaunix.net/uid/28311809/abstract/1.html

阅读(31399) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

oufuji2015-12-15 15:55:36

正在学习spark,发现网上到处搜spark on yarn得到的结果都是差不多这样安装,全部节点都部署,最后还启动了master:7077页面。我想问,这个叫spark on yarn?

这不是明显是standalone启动了集群管理了么?

我看到高手的spark on yarn 是只要一个节点部署spark,不用开任何进程,然后提交任务给yarn,任务启动后然后通过4040端口检测任务执行。还会跳转到yarn application管理界面上看到具体的执行日志。

这个才叫spark on yarn,如果每个节点都部署了,然后起master和worker,然后任务再--master yarn-client之类的,那又有何价值?
spark on yarn对于一些很早就上hadoop的场景,只需要简单部署就能跑业务。

不信?stop-all.sh 把spark 进程停了,在提交--master yarn-client试试吧。

评论热议
请登录后评论。

登录 注册