No Description

Zhang Li e7e391d815 fix: update metastore uri 1 year ago
api 3a26856436 [LIVY-745] Ensure that a single RSCClientFactory gets loaded. 4 years ago
assembly 97cf2f7592 [LIVY-756] Add Spark 3.0 and Scala 2.12 support 4 years ago
bin e39d8fee43 [LIVY-751] Livy server should allow to customize LIVY_CLASSPATH 4 years ago
client-common 97cf2f7592 [LIVY-756] Add Spark 3.0 and Scala 2.12 support 4 years ago
client-http 06a8d4f67c [LIVY-748] Add support for running Livy Integration tests against secure external clusters 4 years ago
core 97cf2f7592 [LIVY-756] Add Spark 3.0 and Scala 2.12 support 4 years ago
coverage 97cf2f7592 [LIVY-756] Add Spark 3.0 and Scala 2.12 support 4 years ago
dev 1ca3dfd163 [LIVY-738][BUILD] Fix Livy third-party library license generating issue 4 years ago
docker e7e391d815 fix: update metastore uri 1 year ago
docs ee7fdfc45d [MINOR] Modify the description of POST /sessions/{sessionId}/completion 4 years ago
examples 97cf2f7592 [LIVY-756] Add Spark 3.0 and Scala 2.12 support 4 years ago
images 140ef36e3b fix: update readme.md 1 year ago
integration-test 140ef36e3b fix: update readme.md 1 year ago
python-api f4ab5ef5d3 [MINOR] Fix CI breakage in python-api unit tests. 4 years ago
repl 3e83523146 修复连接问题和版本问题 2 years ago
rsc b97ccb6595 fix: add txprodbd 1 year ago
scala 319386a351 [MINOR] Bump version to 0.8.0-incubating-SNAPSHOT for master branch 5 years ago
scala-api 97cf2f7592 [LIVY-756] Add Spark 3.0 and Scala 2.12 support 4 years ago
server 4d8a912699 Add html escape to session name 4 years ago
test-lib 97cf2f7592 [LIVY-756] Add Spark 3.0 and Scala 2.12 support 4 years ago
thriftserver 9ef55c3ec9 add spark.tgz 2 years ago
.dockerignore 53d991e27f update Dockerfile 2 years ago
.gitignore cec29141e3 update 1 year ago
.rat-excludes 97cf2f7592 [LIVY-756] Add Spark 3.0 and Scala 2.12 support 4 years ago
LICENSE f117d358fb 完善docker镜像构建 2 years ago
Makefile b97ccb6595 fix: add txprodbd 1 year ago
README.md 140ef36e3b fix: update readme.md 1 year ago
apache-livy-0.8.0-incubating-SNAPSHOT-bin.zip ad9fbfd332 add livy.zip; 2 years ago
checkstyle-suppressions.xml 7d8fa69f18 [LIVY-491][LIVY-492][LIVY-493] Add Thriftserver module and implementation 6 years ago
checkstyle.xml 412ccc8fcf LIVY-375. Change Livy code package name to org.apache.livy 7 years ago
docker-compose-idcprod.yml cec29141e3 update 1 year ago
docker-compose.yml fea358699f add txtest txprod 2 years ago
hadoop-3.2.3.tar.gz 99d8f7a46b add hadoop 2 years ago
pom.xml 140ef36e3b fix: update readme.md 1 year ago
scalastyle.xml 412ccc8fcf LIVY-375. Change Livy code package name to org.apache.livy 7 years ago
spark-3.0.3-bin-hadoop3.2.tgz 9ef55c3ec9 add spark.tgz 2 years ago

README.md

Livy

Apache Livy 是开源的 Spark REST 接口服务, 通过 Livy 的 REST 接口可以远程地在 Spark Context 中执行代码. 本项目 fork 自 https://github.com/apache/incubator-livy, 在官方代码的基础上进行二次开发, 并修复部分 BUG.

构建及运行方法

1. 构建命令

构建前请将 spark-3.0.3-bin-hadoop3.2.tgz 放置于项目根目录中,

使用如下命令进行构建:

mvn clean package \
    -B -V -e \
    -Pspark-3.0 \
    -Pthriftserver \
    -DskipTests \
    -DskipITs \
    -Dmaven.javadoc.skip=true

构建完成后生成 assembly/target/apache-livy-<版本>-bin.zip

2. Docker 镜像

项目中提供了 Dockerfile, 可以将源码打包为镜像.


# 开始构建 Livy 测试镜像
DOCKER_BUILDKIT=1 docker build -f Dockerfile.dev  --build-arg BUILDKIT_INLINE_CACHE=1  --target image-test -t livy:test .
# 开始构建 Livy 生产镜像
DOCKER_BUILDKIT=1 docker build -f Dockerfile.dev  --build-arg BUILDKIT_INLINE_CACHE=1  --target image-prod -t livy:prod .

通过构建好的 Livy 镜像运行服务

docker run -d \
       --name ylproj-livy \
       --network ylproj \
       -p 8998:8998 \
       -p 31100-31103:31100-31103 \
       -v <kerberos配置>:/etc/krb5.conf:ro \
       -v <hadoop配置>:/opt/cluster/conf:ro \
       -e LIVY_SERVER_JAVA_OPTS=-Dlivy.rsc.launcher.address=livy \
       ylproj-livy

运行参数说明:

  • 文件夹 /opt/cluster/conf 中保存 Hadoop 和 Livy 的配置文件以及 Kerberos 的 keytab
  • /etc/krb5.conf 是 Kerberos 的配置文件
  • 端口 8998 是 Livy 的 RESTful 服务,与 livy.conf 配置文件中一致
  • 端口 31100-31103 是 Livy 与 Hadoop 集群中的 driver 程序通信的 RPC 端口,与 livy-client.conf 中的配置一致
  • 环境变量 LIVY_SERVER_JAVA_OPTS 中填入 Livy 服务的域名或 IP 地址 (Hadoop 集群中的 driver 程序要通过该地址访问 Livy)

配置文件说明

在镜像中挂载的配置目录结构如下:

/
├─ etc/
│  └─ krb5.conf
└─ opt/
   └─ cluster/
      └─ conf/
         ├─ core-site.xml
         ├─ hdfs-site.xml
         ├─ yarn-site.xml
         ├─ mapred-site.xml
         ├─ hive-site.xml
         ├─ livy-client.conf
         ├─ livy.conf
         ├─ log4j.properties
         ├─ spark-defaults.conf
         └─ user.keytab
  • krb5.conf 是 Kerberos 配置文件
  • core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml 是 Hadoop 的配置文件
  • hive-site.xml 是 Hive 的配置文件
  • livy-client.conf 和 livy.conf 是 Livy 服务的配置文件
  • log4j.properties 是日志配置
  • spark-defaults.conf 是 spark 的配置文件
  • user.keytab 是 Livy 服务的 keytab

关于 Kerberos

如果需要 Kerberos 认证的话, 就要把 KDC 配置放到 /etc/krb5.conf 这里

在 livy.conf 中配置

livy.server.launch.kerberos.principal = <Livy 服务使用的 principal>
livy.server.launch.kerberos.keytab = /opt/cluster/conf/user.keytab

对应于 principal 的 keytab 文件请放在 /opt/cluster/conf/user.keytab

如果本地测试不用 Kerberos 的话, 就删除上述配置

关于 Livy 的 conf 文件配置

TODO

测试 livy

code

curl --request POST \
  --url http://172.23.7.140:30998/sessions \
  --header 'content-type: application/json' \
  --data '{
        "kind": "spark"
}' | jq


curl --request GET \
  --url http://172.23.7.140:30998/sessions/0 \
  --header 'content-type: application/json' \
  --data '{
        "kind": "spark"
}' | jq


curl -XPOST 'http://172.23.7.140:30998/sessions/0/statements' \
-H 'Content-Type: application/json' \
-d '{"code": "spark.range(1000 * 1000 * 1000).count()"}' | jq


curl --request GET \
--url http://172.23.7.140:30998/sessions/0/statements/0 | jq


## pyspark

curl --request POST \
  --url http://10.138.143.16:8998/sessions \
  --header 'content-type: application/json' \
  --data '{
        "kind": "pyspark"
}' | jq


# 查看session
curl --request GET \
  --url http://10.138.143.16:8998/sessions/0 \
  --header 'content-type: application/json' \
  --data '{
        "kind": "pyspark"
}' | jq

# 提交任务
curl -XPOST 'http://10.138.143.16:8998/sessions/0/statements' \
-H 'Content-Type: application/json' \
-d '{"code": "sc.range(5).collect()"}'

# 查看结果
curl --request GET \
--url http://10.138.143.16:8998/sessions/0/statements/0 | jq

curl -X DELETE \
--url http://10.138.143.16:8998/sessions/0 | jq