安装篇
intel BIGDL的安装似乎很简单,从官网下载一个包,解压就可以了。使用似乎更简单,把包放入spark-submit的路径中,运行就可以了。但是真的是这么简单吗?未必。
-
确定spark版本 。在BigDL官网,可以看到多个 版本。从0.1 到 0.2 ,从spark 1.5 到 spark 2.1.1
-
Cloudera默认装spark 1.6,此外还可以另外安装spark 2。从Cloudear官网,下载SPARK2_ON_YARN-2.1.0.cloudera1.jar,就是2.1.1;如果是SPARK2_ON_YARN-2.1.0.cloudera2.jar,就是2.1.2
-
安装结束之后,要运行spark2-submit, pyspark2等命令,验证spark2有效
-
bigdl下载回来之后,假设/data/app/bigdl2为应用目录,将zip文件移到这个目录下,然后解压缩,会看到3个文件夹,分别为bin , conf 和lib。
-
到此,安装结束。
验证篇
bigDL提供了一些例子,例如lenet数字识别。如果要运行run.example.sh,则需要准备很多环境变量,非常麻烦,所以我建立了一个简化的版本。
以下部分是训练模型,最后训练好的模型会保存到/data/sample/lenet_model/yyyymmdd_hhmmss 下,预测的时候,会用到:
BIGDL_VERSION=0.2.0
BIGDL_JAR=/data/app/bigdl2/lib/bigdl-SPARK_2.1-${BIGDL_VERSION}-jar-with-dependencies.jar
MAX_EPOCH=10
MODEL_DIR=/data/sample/lenet_model
DATA_DIR=/data/sample/mnist
CORES=4
NODES=4
MEMORY=2G
BATCH_SIZE=1024
MODEL=lenet
spark2-submit --master $SPARK_URL \
--conf spark.dynamicAllocation.minExecutors=20 \
--conf spark.dynamicAllocation.maxExecutors=20 \
--total-executor-cores $(($CORES * $NODES)) \
--executor-cores $CORES \
--driver-cores $CORES \
--driver-memory $MEMORY \
--executor-memory $MEMORY \
--num-executors $NODES \
--class com.intel.analytics.bigdl.models.$MODEL.Train $BIGDL_JAR \
-f $DATA_DIR/ -b $BATCH_SIZE \
--maxEpoch $MAX_EPOCH
--overWrite
--checkpoint $MODEL_DIR
预测部分,请看--model参数,这里需要指定一个具体的模型文件名称:
spark2-submit \
--master yarn \
--conf spark.dynamicAllocation.maxExecutors=16 \
--conf spark.dynamicAllocation.minExecutors=16 \
--total-executor-cores $(($CORES * $NODES)) \
--executor-cores $CORES \
--driver-cores $CORES \
--driver-memory $MEMORY \
--executor-memory $MEMORY \
--num-executors $NODES \
--class com.intel.analytics.bigdl.models.$MODEL.Test $BIGDL_JAR \
-f $DATA_DIR/ \
--model $MODEL_DIR/20171023_124010/model.119 \
-b $BATCH_SIZE
此外,本次验证了在spark2.2上跑bigdl for 2.1.1,结果失败了,提示数据类型转换异常。在spark1.6上跑是可以的。
#!/usr/bin/bash
BigDL_HOME=/data/app/bigdl2
BIGDL_VERSION=0.2.0
MASTER=yarn
SPARK_VERSION=SPARK_2.1
PYTHON_API_ZIP_PATH=${BigDL_HOME}/lib/bigdl-${BIGDL_VERSION}-python-api.zip
BigDL_JAR_PATH=${BigDL_HOME}/lib/bigdl-${SPARK_VERSION}-${BIGDL_VERSION}-jar-with-dependencies.jar
export PYTHONPATH=${PYTHON_API_ZIP_PATH}:$PYTHONPATH
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --notebook-dir=./ --ip=* --no-browser"
pyspark2 \
--master ${MASTER} \
--properties-file ${BigDL_HOME}/conf/spark-bigdl.conf \
--driver-cores 5 \
--driver-memory 2g \
--total-executor-cores 8 \
--executor-cores 1 \
--num-executors 4 \
--executor-memory 2g \
--py-files ${PYTHON_API_ZIP_PATH} \
--jars ${BigDL_JAR_PATH} \
--conf spark.driver.extraClassPath=${BigDL_JAR_PATH} \
--conf spark.executor.extraClassPath=bigdl-${SPARK_VERSION}-${BIGDL_VERSION}-jar-with-dependencies.jar