如何在Zeppelin中使用来自S3的依赖项?

sha*_*dzy 2 amazon-s3 apache-zeppelin

有没有一种方法可以将Zeppelin的依赖项添加到S3上的存储桶中?尝试过z.load(s3n://...)z.addRepo(some_name).url(s3n://...)但是他们似乎没有做..

shu*_*lov 5

您可以从S3下载jar,然后将其放在本地FS上。可以在%dep解释器内部完成,如下所示:

%dep
import com.amazonaws.services.s3.AmazonS3Client
import java.io.File
import java.nio.file.{Files, StandardCopyOption}

val dest = "/tmp/dependency.jar"
val s3 = new AmazonS3Client()
val stream = s3.getObject("buckename", "path.jar").getObjectContent

Files.copy(stream, new File(dest).toPath, StandardCopyOption.REPLACE_EXISTING)

z.load(dest)
Run Code Online (Sandbox Code Playgroud)

注意:您必须生成胖子jar,即包括默认情况下未提供的所有自定义依赖项(例如,当您的项目中有多个模块时)。在maven中,可以使用maven-shade-plugin来实现:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.2</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <artifactSet>
                    <includes>
                        <include>com.yourcompany:*</include>
                    </includes>
                </artifactSet>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)