最近在研究基于内存处理技术,其中就有比较出名的Apache Ignite的项目。应用场景是,通过Spark/Java等工具处理Parquet文件,但是直接通过Java API处理Parquet文件的性能较差,主要原因在于不能实现并行化处理。

Ignite特性

  Ignite的应用场景比较多,主要用在数据库缓存方便。当然,集合Ignite也可以结合Spark共享RDD用作缓存处理。

  更多关于 Ignite的介绍,可以查看官方文档V1.7。如果对实际操作比较感兴趣,可以查看Ignite在Github上的实例代码

安装Ignite

  版主使用四节点实现分布式Ignite的安装,由于 Ignite具有自动发现机制,因此即使不进行配置,在同一局域网中也可以实现多个Server的分布式配置。

配置环境

  1. CDH5.8.0;
  2. JDK1.8.0;
  3. Spark1.6。

配置代码

  同一般Spark集群不同的地方在于,Ignite安装在Yarn节点上,且配置Yarn节点与Spark Geteway环境变量,在/XXX/conf.cloudera.spark_on_yarn2/spark-env.sh文件中添加:

# Optionally set IGNITE_HOME here.
# IGNITE_HOME=/path/to/ignite
IGNITE_LIBS="\${IGNITE_HOME}/libs/*"
for file in \${IGNITE_HOME}/libs/*
do
if [ -d \${file} ] && [ "\${file}"!="\${IGNITE_HOME}"/libs/optional ]; then
 IGNITE_LIBS=\${IGNITE_LIBS}:\${file}/*
fi
done
export SPARK_DIST_CLASSPATH=$IGNITE_LIBS

这里与官方文档中唯一的区别在于,官方文档中使用的CLASSPATH为SPARK_CLASSPATH,这里使用的CLASSPATH为SPARK_DIST_CLASSPATH

测试Ignite

使用简单测试代码(spark-shell):

import org.apache.ignite.configuration._
import org.apache.ignite.spark._

// 使用default-config下面的配置
val igniteContext = new IgniteContext(sc, () => new IgniteConfiguration())
// val igniteContext = new IgniteContext(sc, "config/default-config.xml")
val cache = igniteContext.fromCache[Integer,Integer]("partitioned")
println("Name: "+cache.cacheName+"\tCount: "+cache.count())
    
cache.savePairs(sc.parallelize(1 to 10000, 10).map( item => (item, item)))
println("Name: "+cache.cacheName+"\tCount: "+cache.count())

报错信息:

java.lang.NoClassDefFoundError: javax/cache/configuration/MutableConfiguration

  这个类主要是在cache-api中,在Ignite的libs里面有,将给Jar包的路径包含在Jars的路径中即可。另外一种,可能的解决方案为:Ignite Installation with Spark under CDH

ClassNoDefMethodError: org.apache.ignite.configuration.IgniteConfiguration

  缺少Jar包:将要Ignite下面的Ignite-core包含在Jars里面,或者配置路径。

  另,Ignite-Spark这个Jar包不回在Ignite_Home/libs下面,所以需要手动下载到相应的路径下面,最好的办法就是将libs下面所有的Jar包放在spark_home/jars下面。

org.apache.ignite.IgniteCheckedException: Work directory does not exist and cannot be created


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

SAS中实用函数 上一篇
简单Python爬取链接二手房信息 下一篇