共享的部署意味着IgniteNodes独立于Spark程序和存储状态甚至sparkJob结束后。
集群部署:
IgniteNodes应该在每个Spark worker nodes里部署,
支持环境:
Name | Value |
---|---|
JDK |
Oracle JDK 7 and above |
OS |
Linux (any flavor), |
Network |
No restrictions (10G recommended) |
1):https://ignite.apache.org/ 下载ApacheIgnite的zip包;
2):解压到安装文件夹;
3):配置IGNITE_HOME 环境变量;
通过默认配置文件启动节点bin/ignite.sh,节点之间会自动发现彼此,ignite.sh启动通过默认配置文件config/default-config.xml
.
default-config.xml
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
...
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>节点1IP:47500..47509</value>
<pre name="code" class="html"><span style="white-space:pre"> </span> <value>节点2IP:47500..47509</value>
<value>节点3IP:47500..47509</value>
<span style="white-space:pre"> </span>...
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
通过配置文件来启动节点
$ bin/ignite.sh examples/config/example-cache.xml
部署完毕后通过ignite.sh
脚本在每个sparkworker上启动每个node。
Spark动态类加载器没有实现getResource方法,所以无法访问外部jar.
Java日志记录器使用应用程序类装入器(不是上下文类加载器)加载日志处理程序,使用Java日志时导致ClassNotFoundException.
有一个方法可以解决这个问题(需要在spark所有节点配置,master,worker和driver nodes)
$SPARK_HOME/conf/spark-env.sh
若这个文件不存在,则用 $SPARK_HOMR/conf/spark-env.sh.template 创建一个。
在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_CLASSPATH=$IGNITE_LIBS
现在可以启动/bin/spark-shell输入下面的代码导入ignite包了:
scala> import org.apache.ignite.configuration._
import org.apache.ignite.configuration._