spark&&alluxio

来源:互联网 发布:如何查看mac版本 编辑:程序博客网 时间:2024/06/10 17:43

概述

Alluxio(在1.0版本之前名为Tachyon)是一个以内存分布式存储系统。它统一了数据访问的方式,为上层计算框架和底层存储系统构建了桥梁。 应用只需要连接Alluxio即可访问存储在底层任意存储系统中的数据。此外,Alluxio的以内存为中心的架构使得数据的访问速度能比现有常规方案快几个数量级。

Spark使用Alluxio的好处有如下几点:

  • 数据可以长期存储在内存中,多个应用可以共享缓存数据
  • 数据缓存在JVM外部可以减少程序的GC时间
  • 缓存的数据不会因为程序的意外崩溃而消失
  • Alluxiou与Hadoop兼容,无需修改spark代码,可直接运行

配置

Alluxio的编译部署

从源码主分支编译支持Spark,Hadoop2.4的Alluxio

git clone git://github.com/alluxio/alluxio.gitcd alluxiomvn install -Pspark -Dhadoop.version=2.4.1 -DskipTests

如果需要编译一个指定的版本,使用gitcheckout命令即可,例如编译1.2版本

cd alluxiogit checkout v1.2.0

在HDFS上配置Alluxio

编译完成后,修改配置文件

cd alluxio/confcp alluxio-env.sh.template alluxio-env.shALLUXIO_UNDERFS_ADDRESS=hdfs://localhost:9000/alluxioALLUXIO_MASTER_HOSTNAME=xxxALLUXIO_RAM_FOLDER=/home/admin/alluxio/ramdisk

在Spark上配置Alluxio

可以在spark-env.sh中配置SPARK_CLASSPATH

export SPARK_CLASSPATH=/usr/install/alluxio/core/client/target/alluxio-core-client-1.3.0-SNAPSHOT-jar-with-dependencies.jar

在spark1.6以上,可以配置在spark-defaults.conf

spark.executor.extraClassPath /usr/install/alluxio/core/client/target/alluxio-core-client-1.3.0-SNAPSHOT-jar-with-dependencies.jarspark.driver.extraClassPath /usr/install/alluxio/core/client/target/alluxio-core-client-1.3.0-SNAPSHOT-jar-with-dependencies.jar

修改spark/conf下的core-site.xml

<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">name</span>></span>fs.alluxio.impl<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">name</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">value</span>></span>alluxio.hadoop.FileSystem<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">value</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">description</span>></span>The Alluxio FileSystem (Hadoop 1.x and 2.x)<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">description</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">name</span>></span>fs.alluxio-ft.impl<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">name</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">value</span>></span>alluxio.hadoop.FaultTolerantFileSystem<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">value</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">description</span>></span>The Alluxio FileSystem (Hadoop 1.x and 2.x) with fault tolerant support<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">description</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">name</span>></span>fs.AbstractFileSystem.alluxio.impl<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">name</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">value</span>></span>alluxio.hadoop.AlluxioFileSystem<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">value</span>></span>  <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">description</span>></span>The Alluxio AbstractFileSystem (Hadoop 2.x)<span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">description</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">property</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>

启动Alluxio

./bin/alluxio format./bin/alluxio-start.sh local

此时可以通过http://localhost:19999访问Alluxio web ui,运行一个test

./bin/alluxio runTests

如果运行成功可以在Browse中看到生成的default_tests_files文件

在Alluxio上运行Spark

就和从普通的文件系统中读取文件一样

将LICENSE上传到HDFS的alluxio目录

hadoop fs -put -f /alluxio/LICENSE hdfs://localhost:9000/alluxio/LICENSE

进行一些操作

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">val s = sc.textFile(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"alluxio://localhost:19998/LICENSE"</span>)val double = s.map(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> => <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> + <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span>)double.saveAsTextFile(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"alluxio://localhost:19998/LICENSE2"</span>)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

可以在web ui 中看到保存的文件,当然DataFrame的操作也是一样的,例如

<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">val df = sc.parallelize(Se<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">q("zhangsan","lisi")</span>).toDF(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"name"</span>)df.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">write</span>.parquet(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"alluxio://localhost:19998/people"</span>)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

一些运行截图

这里写图片描述


ALLUXIO QQ群:256996048


0 0
原创粉丝点击