炼数成金 门户 大数据 Spark 查看内容

如何衔接Spark 和Tensorflow?

2018-9-4 14:29| 发布者: 炼数成金_小数| 查看: 10287| 评论: 0|原作者: 祝威廉|来自: Spark技术日报

摘要: 我们知道,Spark 目前是大数据处理组件的王者,实现了让大数据处理更轻松的远景。Tensorflow则是深度学习当之无愧最热的框架。而在现实当中,Spark 和Tensorflow的衔接往往是脱节的。我们希望保留Spark/TF各自的优势 ...

Python 算法 Java Spark Tensorflow 数据处理

001、Spark&Tensorflow
我们知道,Spark 目前是大数据处理组件的王者,实现了让大数据处理更轻松的远景。Tensorflow则是深度学习当之无愧最热的框架。而在现实当中,Spark 和Tensorflow的衔接往往是脱节的。我们希望保留Spark/TF各自的优势和习惯,并且能够实现无缝衔接。

因为我自身是比较熟悉Spark的,Spark一开始就立足于提供一个完整技术栈,这自然包括数据组织,处理,还有机器学习

奈何深度学习突然崛起,原有的MLlib和GraphX 突然就不够用了,和深度学习的整合成了Spark一个非常重要的挑战。无论是文本,图像,序列,还是AI,本质都是数据处理,只是说AI是一个比较高阶的数据处理而已。

为什么说Spark必须想办法和深度学习整合呢?因为深度学习框架譬如Tensorflow,自身也在不断调整数据读取和处理的API,比如DataSet API,这部分其实会反噬Spark的护城河。

从技术角度而言,如果将Spark 和Tensorflow集成后,那么数据获取,处理,训练,预测就会在一条pipeline上,无缝衔接。Spark提供了一套规范,约束了整个流程,使得维护变得简单。

002、Spark 强大的数据处理能力
Spark 在Mllib里提供了大量的针对机器学习的数据预处理API,这些API可以将数据快速转化为Tensorlfow能够识别的数学表示形态,比如词向量,普通向量,矩阵等。

从团队角度而言,算法和研发都被规范到了Spark这条线上后,Spark开发工程师拿着TF的训练代码丢到自己的Spark程序里就可以跑起来。

算法工程师不需要各种数据处理代码写完后,研发还要再写一遍,因为都是直接用spark写成的。同时值得一提的是,这还充分实现团队的弹性。比如研发资源紧张,那么要求算法工程师把数据处理的代码写完,直接丢给研发即可。如果算法资源紧张,算法只要写完模型训练代码,研发写数据获取和处理的代码。双方只要都掌握pyspark做衔接即可很好沟通和交流。

另外,大家可能会好奇,Spark 和 Tensorflow 如何进行衔接呢? 首先是Spark支持Python, Scala, Java, R 等语言,Tensorflow其实也支持Python, Java等语言,只要我们确定一个语言,那么其实就可以实现集成的。我最终选择了Python语言,因为这是算法和研发都相对容易接受的语言,并且两个框架都支持的不错。

003、环境准备
推荐实验环境如下:
JDK 1.8: 下载地址
spark-2.2.0-bin-Hadoop2.7 : 下载地址
python 2.7 /virtualenv
Kafka

软件似乎有点多,读者可能感受到一丝压力,然而安装和使用它们是一件非常容易的事情。这里我会假设读者使用的电脑是Mac,并且使用homebrew进行软件管理。

Step 1:
下载JDK 1.8,你下载后双击安装即可。安装后的路径应该是在:

/Library/Java/JavaVirtualMachines
比如我的目录结构会是这样的:


Step2:
接着根据前面提供的地址下载Spark安装包。下载完成后简单的解压即可。假设解压后的目录如下:

~/Softwares/spark-2.2.0-bin-hadoop2.7

Step3:
配置tensorflow环境。这里推荐用virtualenv,非常好用。

安装virtualenv:
pip install --upgrade virtualenv
之后创建virutalenv环境。
virtualenv --system-site-packages ~/python2.7/tensorflow

切换到该环境下:
source ~/python2.7/tensorflow/bin/activate  

最后的样子:
(tensorflow) [w@me]$
Step4:

现在让我们安装tensorflow:
pip install tensorflow

验证下:
(tensorflow) [w@me]$ python
Python 2.7.10 (default, Feb  7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.>>> import tensorflow as tf>>> tf.__version__'1.4.0'>>>

对了,为了方便起见,我们还是设置下SPARKHOME和JAVAHOME两个环境变量。可以在
~/.bash_profile
文件中添加如下两行:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/export SPARK_HOME=[YOUR-HOME]/Softwares/spark-2.2.0-bin-hadoop2.7

记得把YOUR-HOME替换成你自己的目录。

Step5:
通常有了上面的配置就够了。当时为了方便开发,我们还需要装一些python的依赖。把下面内容拷贝到一个文件里,假设是requirements.txt:

# This file should list any python package dependencies.coverage>=4.4.1h5py>=2.7.0keras==2.0.4 # NOTE: this package has only been tested with keras 2.0.4 and may not work with other releasesnose>=1.3.7  # for testingnumpy>=1.11.2pillow>=4.1.1,<4.2pygments>=2.2.0pandas>=0.19.1six>=1.10.0kafka-python>=1.3.5tensorflowonspark>=1.0.5tensorflow-tensorboard>=0.1.6jieba>=0.39PIL>=1.1.7Redis>=2.10.6scikit-learn>=0.19.0scipy>=0.19.1

在激活有的virtualenv后,运行如下命令安装:
pip install -r requirements.txt 
pyspark不是必须的,因为在Spark里已经集成,但是为了能够实现代码提示,我们还是通过pip安装下。以为它特别大,所以可以使用阿里云的镜像来加速:

pip install pyspark -i  http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

声明:文章收集于网络,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
软件开发技术群
兴趣范围包括:Java,C/C++,Python,PHP,Ruby,shell等各种语言开发经验交流,各种框架使用,外包项目机会,学习、培训、跳槽等交流
QQ群:26931708

Hadoop源代码研究群
兴趣范围包括:Hadoop源代码解读,改进,优化,分布式系统场景定制,与Hadoop有关的各种开源项目,总之就是玩转Hadoop
QQ群:288410967 

鲜花

握手

雷人

路过
1

鸡蛋

刚表态过的朋友 (1 人)

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-9-21 00:46 , Processed in 0.163703 second(s), 25 queries .