2014-10-29 54 views
0

我想在S3文件系統上設置Tachyon。我對Tachyon完全陌生,現在我仍然在閱讀我能找到的東西。在S3下設置Tachyon在文件系統下的錯誤

!/usr/bin/env bash 

# This file contains environment variables required to run Tachyon. Copy it as tachyon-env.sh and 
# edit that to configure Tachyon for your site. At a minimum, 
# the following variables should be set: 
# 
# - JAVA_HOME, to point to your JAVA installation 
# - TACHYON_MASTER_ADDRESS, to bind the master to a different IP address or hostname 
# - TACHYON_UNDERFS_ADDRESS, to set the under filesystem address. 
# - TACHYON_WORKER_MEMORY_SIZE, to set how much memory to use (e.g. 1000mb, 2gb) per worker 
# - TACHYON_RAM_FOLDER, to set where worker stores in memory data 
# - TACHYON_UNDERFS_HDFS_IMPL, to set which HDFS implementation to use (e.g. com.mapr.fs.MapRFileSystem, 
# org.apache.hadoop.hdfs.DistributedFileSystem) 

# The following gives an example: 

if [[ `uname -a` == Darwin* ]]; then 
    # Assuming Mac OS X 
    export JAVA_HOME=${JAVA_HOME:-$(/usr/libexec/java_home)} 
    export TACHYON_RAM_FOLDER=/Volumes/ramdisk 
    export TACHYON_JAVA_OPTS="-Djava.security.krb5.realm= -Djava.security.krb5.kdc=" 
else 
    # Assuming Linux 
    if [ -z "$JAVA_HOME" ]; then 
    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 
    fi 
    export TACHYON_RAM_FOLDER=/mnt/ramdisk 
fi 

export JAVA="$JAVA_HOME/bin/java" 
export TACHYON_MASTER_ADDRESS=localhost 
export TACHYON_UNDERFS_ADDRESS=s3n://test 
#export TACHYON_UNDERFS_ADDRESS=hdfs://localhost:9000 
export TACHYON_WORKER_MEMORY_SIZE=0.5GB 
export TACHYON_UNDERFS_HDFS_IMPL=org.apache.hadoop.hdfs.DistributedFileSystem 

CONF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

export TACHYON_JAVA_OPTS+=" 
    -Dlog4j.configuration=file:$CONF_DIR/log4j.properties 
    -Dtachyon.debug=false 
    -Dtachyon.underfs.address=$TACHYON_UNDERFS_ADDRESS 
    -Dtachyon.underfs.hdfs.impl=$TACHYON_UNDERFS_HDFS_IMPL 
    -Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data 
    -Dtachyon.workers.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/workers 
    -Dtachyon.worker.memory.size=$TACHYON_WORKER_MEMORY_SIZE 
    -Dtachyon.worker.data.folder=$TACHYON_RAM_FOLDER/tachyonworker/ 
    -Dtachyon.master.worker.timeout.ms=60000 
    -Dtachyon.master.hostname=$TACHYON_MASTER_ADDRESS 
    -Dtachyon.master.journal.folder=$TACHYON_HOME/journal/ 
    -Dorg.apache.jasper.compiler.disablejsr199=true 
    -Djava.net.preferIPv4Stack=true 
    -Dfs.s3n.awsAccessKeyId=123 
    -Dfs.s3n.awsSecretAccessKey=456 
" 

# Master specific parameters. Default to TACHYON_JAVA_OPTS. 
export TACHYON_MASTER_JAVA_OPTS="$TACHYON_JAVA_OPTS" 

# Worker specific parameters that will be shared to all workers. Default to TACHYON_JAVA_OPTS. 
export TACHYON_WORKER_JAVA_OPTS="$TACHYON_JAVA_OPTS" 

然而,當我試圖格式化的Tachyon,我收到以下錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jets3t/service/S3ServiceException 
    at org.apache.hadoop.fs.s3native.NativeS3FileSystem.createDefaultStore(NativeS3FileSystem.java:224) 
    at org.apache.hadoop.fs.s3native.NativeS3FileSystem.initialize(NativeS3FileSystem.java:214) 
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1386) 
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:66) 
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1404) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:254) 
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:187) 
    at tachyon.UnderFileSystemHdfs.<init>(UnderFileSystemHdfs.java:89) 
    at tachyon.UnderFileSystemHdfs.getClient(UnderFileSystemHdfs.java:56) 
    at tachyon.UnderFileSystem.get(UnderFileSystem.java:69) 
    at tachyon.UnderFileSystem.get(UnderFileSystem.java:54) 
    at tachyon.Format.formatFolder(Format.java:32) 
    at tachyon.Format.main(Format.java:59) 
Caused by: java.lang.ClassNotFoundException: org.jets3t.service.S3ServiceException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 13 more 

我應該改變我的JetS3t jar文件,或低於我的tachyon-env.sh給出這是別的嗎?這個問題可能是非常基本的,但這正是我現在的水平。不過,我用Tachyon跑了一些基本的測試。

我會很高興的任何幫助!

回答

1

問題是,缺省情況下,訪問S3需要比軟件包更多的依賴性。對於超光速粒子0.5.0使用Hadoop 1.0.4工作,你得先路徑導出到: * jets3:0.7.1 *公地的HttpClient 3.1

您同樣可以做到這一點(霸王硬上弓TACHYON_CLASSPATH VAR): export TACHYON_CLASSPATH=~/.m2/repository/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar:~/.m2/repository/net/java/dev/jets3t/jets3t/0.7.1/jets3t-0.7.1.jar

然後,你必須也使用這個變量的啓動腳本,到處TACHYON_JAR用作-cp,前置TACHYON_CLASSPATH

例子: (nohup $JAVA -cp $TACHYON_JAR -Dtachyon.home=$TACHYON_HOME -Dtachyon.logger.type="MASTER_LOGGER" -Dlog4j.configuration=file:$TACHYON_CONF_DIR/log4j.properties $TACHYON_MASTER_JAVA_OPTS tachyon.master.TachyonMaster > /dev/null 2>&1) & 成爲 (nohup $JAVA -cp $TACHYON_CLASSPATH:$TACHYON_JAR -Dtachyon.home=$TACHYON_HOME -Dtachyon.logger.type="MASTER_LOGGER" -Dlog4j.configuration=file:$TACHYON_CONF_DIR/log4j.properties $TACHYON_MASTER_JAVA_OPTS tachyon.master.TachyonMaster > /dev/null 2>&1) &

最後,你可以格式化你的S3存儲和啓動快子: ./bin/tachyon format ./bin/tachyon-start local

警告該計劃s3n:我的代碼看起來更深並發現一些關於s3證書的奇怪東西。顯然,只有s3n方案可行(因爲只有這種口味纔會被注入/複製到conf中)。 因此,UNDERFS網址爲s3 必須使用s3n方案,並且您在tachyon-env.sh中的java屬性也是如此。幸運的是,你已經很好,但其他人可能不會。