如何在EsgynDB中使用机器学习库(ML library)
机器学习(ML)库正变得越来越流行,现在有各种各样的这类库 - 维基百科中提及了49个[1]。 这些机器学习库需要庞大的数据,通常此类数据是存储在关系型数据库中的业务数据,比如存放在EsgynDB或以其他形式存储在Hadoop数据湖中。
备注:EsgynDB为易鲸捷公司基于Trafodion提供的企业版。
简单的集成 - JDBC和HDFS
有多种方法连接机器学习库和EsgynDB。 其中一种方法是使用JDBC,这是大多数软件包支持的方法。 用户在他们选择的系统上运行机器学习代码并通过JDBC读取数据。 如果要传输大量数据,可以通过多个并行连接读取。 某些系统可以通过将SQL查询拆分为多个实例来解决此问题。 例如,Spark jdbcRDD [2]允许查询的参数化,再结合salted EsgynDB表能更高效的工作:
select *
from sales s join customer c on s.cust_id = c.cust_id
where s.”_SALT_” between ? and ?.
Apache Spark将使用non-overlapping值范围启动此查询的多个实例。
相反地从机器学习库到EsgynDB的结果集数据,通常可将数据导出到HDFS的Hive表来完成,然后由EsgynDB读取此Hive表。
在EsgynDB集群上的并行机器学习实例
在这篇博客中,我们重点关注另一种集成方法,即在EsgynDB集群上并行运行机器学习库程序,将EsgynDB中数据作为输入并同时在EsgynDB中处理结果。 对于不同的机器学习库,该方法是通用的,它类似于MapReduce,机器学习程序被构造成多个类似于mapper或reducer的模块。
三大处理模块
为了创建这样的设置,我们结合了三大处理模块:
首先,机器学习程序将data frame作为输入并产生data frame作为输出。 该程序编写类似MapReduce中的mapper或reducer,所以以上程序的多个实例可以并行运行,而无需在实例之间交换状态信息。 例如,程序可以对逻辑上独立的数据运行聚类算法。
Data frame[3] [4]是几个ML包中涉及的概念,它大致相当于SQL中的一个表。 Data frame由指定数据类型的命名列组成。 因为每列具有相同数量的元素,它们可以组成多个行。
第二个模块是由Esgyn为Apache Trafodion [5] [6]提供的用户定义的表值函数(TMUDF),它把机器学习程序与EsgynDB集成到一起。 以文本形式将所需数据提供给机器学习程序的标准输入,并以文本形式接收该程序的输出结果。 许多机器学习库都内置支持以逗号分隔(或以其他方式分隔)格式读取和写入data frame。
后,我们添加一个驱动查询(driving query)来完整机器学习场景。 该驱动查询产生机器学习程序所需的数据,调用用户定义函数(UDF),并以用户期望的方式处理UDF的结果。 当机器学习程序像reducer一样工作时,驱动查询还定义了如何进行数据分区。 如果机器学习库不支持可横向扩展集群(例如R),这可以让您在更大的数据集上并行地运行算法。
例子:TensorFlow神经网络
以Google TensorFlow [7]中识别手写数字作为神经网络示例,我们在一台单独的机器上训练这个神经网络,然后将它部署到EsgynDB,我们用EsgynDB来并行读取数字。 此示例的驱动SQL查询如下:
集成的UDF称之为“filterprog”,它的调用用红色标注。蓝色部分为输入数据,向量化图像。查询返回图像编号并读取数字作为结果。
TensorFlow程序从标准输入读取图像编号和图像数据,执行图像识别,然后将读取的数字和图像编号打印到标准输出,由EsgynDB读取它们。 EsgynDB优化器根据需要可并行化查询。
请注意该操作可以集成更复杂的SQL查询,比如在机器学习代码之前和之后执行join,union,聚合等操作,并且 多个机器学习步骤可以合并成单个的驱动查询。
参考文献:
[1] Wikipedia Machine Learning:
https://en.wikipedia.org/wiki...
[2] Spark JDBC RDD: https://spark.apache.org/docs...
[3] Data Frames in R:
http://www.r-tutor.com/r-intr...
[4] Data Frames in Spark:
https://spark.apache.org/docs...
[5] Trafodion Table-valued UDFs: https://cwiki.apache.org/conf...
[6] Integrating UDF (FilterProg): https://cwiki.apache.org/conf...
[7] Google TensorFlow MNIST example: https://www.tensorflow.org/ve...
相关文章