Alluxio集群部署到Spark Standalone
2016-09-14 16:09
501 查看
Alluxio集群部署
原文链接:http://blog.csdn.net/zy_zhengyang/article/details/52538898
$ wget http://alluxio.org/downloads/files/1.2.0/alluxio-1.2.0-bin.tar.gz $ tar xvfz alluxio-1.2.0-bin.tar.gz
2. 在alluxio/conf目录下,将alluxio-env.sh.template拷贝到alluxio-env.sh。
1)确保JAVA_HOME指向有效的Java
7安装路径。
2)将ALLUXIO_MASTER_HOSTNAME更新为运行AlluxioMaster的机器的主机名。
3)配置所有worker使用worker上总内存的2/3。
4)将hdfs指定的目录挂载到alluxio
export JAVA_HOME=/atlas/dist/sys/java
exportALLUXIO_MASTER_HOSTNAME=sparktest-m1
export ALLUXIO_WORKER_MEMORY_SIZE=6GB
export ALLUXIO_UNDERFS_ADDRESS=hdfs://sparktest-m1:9000
3. 世系关系(lineage):在alluxio/conf目录下,将alluxio-site.properties.template拷贝到alluxio-site.properties。
默认情况下,世系关系是不生效的。你可以通过在配置文件中将
alluxio.user.lineage.enabled=true
4. 添加所有worker节点的IP地址到alluxio/conf/workers文件。最后,同步worker节点的所有信息。可使用
sparktest-m1
sparktest-s1
sparktest-s2
sparktest-s3
$ ./bin/alluxio copyDir <dirname>
5. 同步所有文件和文件夹到alluxio/conf/workers 文件中指定的主机里。
6. 现在可以启动Alluxio:
$ cdalluxio
$ ./bin/alluxio format
$ ./bin/alluxio-start.sh# use the right parameters here. e.g. allMount
# Notice: the Mount and SudoMountparameters will format the existing RamFS.
7. 证Alluxio是否运行,可以访问http://<alluxio_master_hostname>:19999,或查看alluxio/logs文件夹下的日志。也可以运行一个样例程序
$ ./bin/alluxio runTests
提示:如果使用EC2,确保master节点的安全组设置中允许Alluxio
webUI端口上的连接。
Spark。HDFS作为一个分布式底层存储系统的一个例子。请注意,Alluxio除HDFS之外也支持其它的底层存储系统,计算框架(如Spark)可以通过Alluxio从任意数量的底层存储系统读写数据。
1. 请添加如下代码到
或者请添加如下代码到
2. ###针对HDFS的额外设置
如果Alluxio运行Hadoop 1.x集群之上,创建一个新文件
如果你使用zookeeper让Alluxio运行在容错模式并且Hadoop集群是1.x,添加如下内容到先前创建的
以及如下内容到
在
打开浏览器,查看http://10.100.129.120:19999/browse。可以发现多出一个输出文件
注意:Alluxio没有文件的概念。你可以通过浏览web UI验证这点。在
Master运行在
打开浏览器,查看http://10.100.129.120:19999/browse。可以发现多出一个输出文件
注意:部分读取的块缓存默认是开启的,但如果已经将这个选项关闭的话,
ticket获取更多细节(这里可以找到Spark社区的解决方案)。
提示:Alluxio使用主机名来表示网络地址,只有0.7.1版本使用了IP地址。Spark
1.5.x版本与Alluxio0.7.1做法一致,都使用了IP地址来表示网络地址,数据本地化不加修改即可使用。但是从0.8.0往后,为了与HDFS一致,Alluxio使用主机名表示网络地址。用户启动Spark时想要获取数据本地化,可以用Spark提供的如下脚本显式指定主机名。以slave-hostname启动Spark
Worker:
举例而言:
也可以通过设置
用以上任何一种方法,Spark Worker的地址变为主机名并且定位等级变为NODE_LOCAL,如下Spark
WebUI所示:
##在YARN上运行SPARK
为了最大化Spark作业所能达到数据本地化的数量,应当尽可能多地使用executor,希望至少每个节点拥有一个executor。按照Alluxio所有方法的部署,所有的计算节点上也应当拥有一个Alluxio
worker。
当一个Spark作业在YARN上运行时,Spark启动executors不会考虑数据的本地化。之后Spark在决定怎样为它的executors分配任务时会正确地考虑数据的本地化。举例而言:如果
参考链接:
(1) http://www.alluxio.org/docs/master/cn/Running-Alluxio-on-a-Cluster.html
(2) http://www.alluxio.org/docs/master/cn/Configuring-Alluxio-with-HDFS.html
(3) http://www.alluxio.org/docs/master/cn/Running-Spark-on-Alluxio.html
(4) http://www.alluxio.com/2016/04/getting-started-with-alluxio-and-spark/?utm_source=tuicool&utm_medium=referral
(5) https://zhuanlan.zhihu.com/p/20624086
原文链接:http://blog.csdn.net/zy_zhengyang/article/details/52538898
一、配置Alluxio独立集群
1. 下载Alluxio tar文件并解压:$ wget http://alluxio.org/downloads/files/1.2.0/alluxio-1.2.0-bin.tar.gz $ tar xvfz alluxio-1.2.0-bin.tar.gz
2. 在alluxio/conf目录下,将alluxio-env.sh.template拷贝到alluxio-env.sh。
1)确保JAVA_HOME指向有效的Java
7安装路径。
2)将ALLUXIO_MASTER_HOSTNAME更新为运行AlluxioMaster的机器的主机名。
3)配置所有worker使用worker上总内存的2/3。
4)将hdfs指定的目录挂载到alluxio
export JAVA_HOME=/atlas/dist/sys/java
exportALLUXIO_MASTER_HOSTNAME=sparktest-m1
export ALLUXIO_WORKER_MEMORY_SIZE=6GB
export ALLUXIO_UNDERFS_ADDRESS=hdfs://sparktest-m1:9000
3. 世系关系(lineage):在alluxio/conf目录下,将alluxio-site.properties.template拷贝到alluxio-site.properties。
默认情况下,世系关系是不生效的。你可以通过在配置文件中将
alluxio.user.lineage.enabled属性设置为
true来使其生效。
alluxio.user.lineage.enabled=true
4. 添加所有worker节点的IP地址到alluxio/conf/workers文件。最后,同步worker节点的所有信息。可使用
sparktest-m1
sparktest-s1
sparktest-s2
sparktest-s3
$ ./bin/alluxio copyDir <dirname>
5. 同步所有文件和文件夹到alluxio/conf/workers 文件中指定的主机里。
6. 现在可以启动Alluxio:
$ cdalluxio
$ ./bin/alluxio format
$ ./bin/alluxio-start.sh# use the right parameters here. e.g. allMount
# Notice: the Mount and SudoMountparameters will format the existing RamFS.
7. 证Alluxio是否运行,可以访问http://<alluxio_master_hostname>:19999,或查看alluxio/logs文件夹下的日志。也可以运行一个样例程序
$ ./bin/alluxio runTests
提示:如果使用EC2,确保master节点的安全组设置中允许Alluxio
webUI端口上的连接。
二、部署Alluxio到Spark
该指南描述了如何在Alluxio上运行ApacheSpark。HDFS作为一个分布式底层存储系统的一个例子。请注意,Alluxio除HDFS之外也支持其它的底层存储系统,计算框架(如Spark)可以通过Alluxio从任意数量的底层存储系统读写数据。
1. 请添加如下代码到
spark/conf/spark-env.sh。(该方法已经不提倡使用)
export SPARK_CLASSPATH= [code]/atlas/dist/sys/spark/spark-1.6.1-bin-hadoop2.4/lib/alluxio-core-client-1.2.0-jar-with-dependencies.jar:$SPARK_CLASSPATH[/code]
或者请添加如下代码到
spark/conf/spark-defaults.conf
spark.driver.extraClassPath /atlas/dist/sys/spark/spark-1.6.1-bin-hadoop2.4/lib/alluxio-core-client-1.2.0-jar-with-dependencies.jar
spark.executor.extraClassPath /atlas/dist/sys/spark/spark-1.6.1-bin-hadoop2.4/lib/alluxio-core-client-1.2.0-jar-with-dependencies.jar
2. ###针对HDFS的额外设置
如果Alluxio运行Hadoop 1.x集群之上,创建一个新文件
spark/conf/core-site.xml包含以下内容:
<configuration>
<property>[/code]
<name>
fs.alluxio.impl</name>[/code]
<value>
alluxio.hadoop.FileSystem</value>[/code]
</property>[/code]
</configuration>
如果你使用zookeeper让Alluxio运行在容错模式并且Hadoop集群是1.x,添加如下内容到先前创建的
spark/conf/core-site.xml:(暂未使用)
<property>
<name>
fs.alluxio-ft.impl</name>[/code]
<value>
alluxio.hadoop.FaultTolerantFileSystem</value>[/code]
</property>
以及如下内容到
spark/conf/spark-env.sh:
export SPARK_JAVA_OPTS="
-Dalluxio.zookeeper.address=zookeeperHost1:2181,zookeeperHost2:2181
-Dalluxio.zookeeper.enabled=true
$SPARK_JAVA_OPTS
"
三、使用Alluxio作为输入输出
这一部分说明如何将Alluxio作为Spark应用的输入输出源。使用已经存于Alluxio的数据
首先,我们将从Alluxio文件系统中拷贝一些本地数据。将文件LICENSE放到Alluxio(假定你正处在Alluxio工程目录下):
$ [code]bin/alluxio fs copyFromLocal LICENSE /LICENSE
在
spark-shell --master spark://10.100.129.120:7077--total-executor-cores 12 --executor-memory 2G --executor-cores 2中运行如下命令:
>vals=sc.textFile("alluxio://sparktest-m1:19998/LICENSE")
>valdouble=s.map(line=>line+line)
>double.saveAsTextFile("alluxio://sparktest-m1:19998/LICENSE2")
打开浏览器,查看http://10.100.129.120:19999/browse。可以发现多出一个输出文件
LICENSE2,每一行是由文件
LICENSE的对应行复制2次得到。
使用来自HDFS的数据
Alluxio支持在给出具体的路径时,透明的从底层文件系统中取数据。将文件LICENSE放到Alluxio所挂载的目录下(默认是/alluxio)的HDFS中,意味着在这个目录下的HDFS中的任何文件都能被Alluxio发现。通过改变位于Server上的alluxio-env.sh文件中的
ALLUXIO_UNDERFS_ADDRESS属性可以修改这个设置。假定namenode节点运行在sparktest-m1,并且Alluxio默认的挂载目录是
alluxio:
$ [code]hadoop fs -put -f /alluxio/LICENSE hdfs://sparktest-m1
:9000/alluxio/LICENSE
注意:Alluxio没有文件的概念。你可以通过浏览web UI验证这点。在
spark-shell中运行如下命令(假定Alluxio
Master运行在
localhost):
>vals=sc.textFile("alluxio://sparktest-m1:19998/LICENSE")
>valdouble=s.map(line=>line+line)
>double.saveAsTextFile("alluxio://sparktest-m1:19998/LICENSE2")
打开浏览器,查看http://10.100.129.120:19999/browse。可以发现多出一个输出文件
LICENSE2,每一行是由文件
LICENSE的对应行复制2次得到。并且,现在
LICENSE文件出现在Alluxio文件系统空间。
注意:部分读取的块缓存默认是开启的,但如果已经将这个选项关闭的话,
LICENSE文件很可能不在Alluxio存储(非In-Memory)中。这是因为Alluxio只存储完整读入块,如果文件太小,Spark作业中,每个executor读入部分块。为了避免这种情况,你可以在Spark中定制分块数目。对于这个例子,由于只有一个块,我们将设置分块数为1。
scala> val s = sc.textFile("alluxio://sparktest-m1:19998/LICENSE", 1)
>val double = s.map(line => line + line)
>double.saveAsTextFile("alluxio://sparktest-m1:19998/LICENSE2")
使用容错模式(暂未使用)
当以容错模式运行Alluxio时,可以使用任何一个Alluxio master:>vals=sc.textFile("alluxio-ft://stanbyHost:19998/LICENSE")
>valdouble=s.map(line=>line+line)
>double.saveAsTextFile("alluxio-ft://activeHost:19998/LICENSE2")
四、其他:数据本地化
如果Spark任务的定位应该是NODE_LOCAL而实际是
ANY,可能是因为Alluxio和Spark使用了不同的网络地址表示,可能其中一个使用了主机名而另一个使用了IP地址。请参考 thisjira
ticket获取更多细节(这里可以找到Spark社区的解决方案)。
提示:Alluxio使用主机名来表示网络地址,只有0.7.1版本使用了IP地址。Spark
1.5.x版本与Alluxio0.7.1做法一致,都使用了IP地址来表示网络地址,数据本地化不加修改即可使用。但是从0.8.0往后,为了与HDFS一致,Alluxio使用主机名表示网络地址。用户启动Spark时想要获取数据本地化,可以用Spark提供的如下脚本显式指定主机名。以slave-hostname启动Spark
Worker:
$ $SPARK_HOME[code]/sbin/start-slave.sh -h <slave-hostname> <spark master uri>
举例而言:
$ $SPARK_HOME[code]/sbin/start-slave.sh -h simple30 spark://simple27:7077
也可以通过设置
$SPARK_HOME/conf/spark-env.sh里的
SPARK_LOCAL_HOSTNAME获取数据本地化。举例而言:
SPARK_LOCAL_HOSTNAME=[code]simple30
用以上任何一种方法,Spark Worker的地址变为主机名并且定位等级变为NODE_LOCAL,如下Spark
WebUI所示:
##在YARN上运行SPARK
为了最大化Spark作业所能达到数据本地化的数量,应当尽可能多地使用executor,希望至少每个节点拥有一个executor。按照Alluxio所有方法的部署,所有的计算节点上也应当拥有一个Alluxio
worker。
当一个Spark作业在YARN上运行时,Spark启动executors不会考虑数据的本地化。之后Spark在决定怎样为它的executors分配任务时会正确地考虑数据的本地化。举例而言:如果
host1包含了
blockA并且使用
blockA的作业已经在YARN集群上以
--num-executors=1的方式启动了,Spark会将唯一的executor放置在
host2上,本地化就比较差。但是,如果以
--num-executors=2的方式启动并且executors开始于
host1和
host2上,Spark会足够智能地将作业优先放置在
host1上。
参考链接:
(1) http://www.alluxio.org/docs/master/cn/Running-Alluxio-on-a-Cluster.html
(2) http://www.alluxio.org/docs/master/cn/Configuring-Alluxio-with-HDFS.html
(3) http://www.alluxio.org/docs/master/cn/Running-Spark-on-Alluxio.html
(4) http://www.alluxio.com/2016/04/getting-started-with-alluxio-and-spark/?utm_source=tuicool&utm_medium=referral
(5) https://zhuanlan.zhihu.com/p/20624086
相关文章推荐
- Spark standalone安装(最小化集群部署)
- spark stand alone 集群部署
- Spark Standalone 集群部署图文分享
- linux环境部署Spark集群(Standalone Mode)
- spark standalone 集群环境搭建
- Spark(一)-- Standalone HA的部署
- Spark1.2集群环境搭建(Standalone+HA) 4G内存5个节点也是蛮拼的
- Spark(一)-- Standalone HA的部署
- Spark1.0.0 on Standalone 模式部署
- Java Web提交任务到Spark Standalone集群并监控
- Spark1.2集群环境搭建(Standalone+HA) 4G内存5个节点
- Spark1.0.0 on Standalone 模式部署
- Spark standalone集群安装
- spark standalone zookeeper HA部署方式
- 配置Spark standalone集群启动
- 使用spark-submit提交jar包到spark standalone集群(续)
- spark standalone zookeeper HA部署方式
- spark standalone zookeeper HA部署方式
- Spark1.2集群环境搭建(Standalone+HA) 4G内存5个节点也是蛮拼的
- Spark standalone cluster模式部署实践