在kubernetes上运行apache hive(无Yarn)

7uhlpewt  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(1093)

有没有可能在kubernetes上运行apachehive(没有在kubernetes上运行yarn)?
我在网上找不到任何合理的信息——在Kubernetes岛上运行Hive是一件不寻常的事情吗?

7ajki6be

7ajki6be1#

请看一下我的博客:
https://medium.com/@mykidong/hive-on-spark-in-kubernetes-115c8e9fa5c1型
假设您正在运行spark作为数据湖的批处理执行引擎,那么在spark上运行hiveserver2将很容易,即spark-thrift服务器,它与hiveserver2兼容。
在kubernetes上提交spark thrift server之前,应该在kubernetes上安装hive metastore,在kubernetes上安装hive metastore有一个很好的方法:https://github.com/joshuarobinson/presto-on-k8s/tree/master/hive_metastore
因为spark submit会阻止在kubernetes上运行spark thrift server,使其无法在群集模式下运行,所以您可以编写一个简单的 Package 器类,其中运行spark thrift server类,如下所示:

public class SparkThriftServerRunner {

    public static void main(String[] args) {
        org.apache.spark.sql.hive.thriftserver.HiveThriftServer2.main(args);
    }
}

,并使用maven shade插件构建spark应用程序uberjar。
现在,您已经准备好将spark thrift服务器提交到kubernetes上。为此,请运行以下命令:

spark-submit \
--master k8s://https://10.233.0.1:443 \
--deploy-mode cluster \
--name spark-thrift-server \
--class io.spongebob.hive.SparkThriftServerRunner \
--packages com.amazonaws:aws-java-sdk-s3:1.11.375,org.apache.hadoop:hadoop-aws:3.2.0 \
--conf spark.kubernetes.file.upload.path=s3a://mykidong/spark-thrift-server \
--conf spark.kubernetes.container.image.pullPolicy=Always \
--conf spark.kubernetes.namespace=spark \
--conf spark.kubernetes.container.image=mykidong/spark:v3.0.0 \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
--conf spark.hadoop.hive.metastore.client.connect.retry.delay=5 \
--conf spark.hadoop.hive.metastore.client.socket.timeout=1800 \
--conf spark.hadoop.hive.metastore.uris=thrift://metastore.hive-metastore.svc.cluster.local:9083 \
--conf spark.hadoop.hive.server2.enable.doAs=false \
--conf spark.hadoop.hive.server2.thrift.http.port=10002 \
--conf spark.hadoop.hive.server2.thrift.port=10016 \
--conf spark.hadoop.hive.server2.transport.mode=binary \
--conf spark.hadoop.metastore.catalog.default=spark \
--conf spark.hadoop.hive.execution.engine=spark \
--conf spark.hadoop.hive.input.format=io.delta.hive.HiveInputFormat \
--conf spark.hadoop.hive.tez.input.format=io.delta.hive.HiveInputFormat \
--conf spark.sql.warehouse.dir=s3a://mykidong/apps/spark/warehouse \
--conf spark.hadoop.fs.defaultFS=s3a://mykidong \
--conf spark.hadoop.fs.s3a.access.key=bWluaW8= \
--conf spark.hadoop.fs.s3a.secret.key=bWluaW8xMjM= \
--conf spark.hadoop.fs.s3a.endpoint=http://10.233.25.63:9099 \
--conf spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
--conf spark.hadoop.fs.s3a.fast.upload=true \
--conf spark.driver.extraJavaOptions="-Divy.cache.dir=/tmp -Divy.home=/tmp" \
--conf spark.executor.instances=4 \
--conf spark.executor.memory=2G \
--conf spark.executor.cores=2 \
--conf spark.driver.memory=1G \
--conf spark.jars=/home/pcp/delta-lake/connectors/dist/delta-core-shaded-assembly_2.12-0.1.0.jar,/home/pcp/delta-lake/connectors/dist/hive-delta_2.12-0.1.0.jar \
file:///home/pcp/spongebob/examples/spark-thrift-server/target/spark-thrift-server-1.0.0-SNAPSHOT-spark-job.jar;

,然后spark thrift服务器驱动程序和执行程序将以集群模式在kubernetes上运行。
看看s3路径,比如 s3a://mykidong/spark-thrift-server 你的spark应用程序uberjar和depsjar文件将被上传,这些文件将从spark-thrift服务器驱动程序和执行程序下载并加载到它们的类加载器。对于上传的文件,您应该有像s3 bucket或hdfs这样的外部存储库。
要作为配置单元server2访问spark thrift服务器,可以键入以下内容:

[pcp@master-0 ~]$ kubectl get po -n spark -o wide
NAME                                          READY   STATUS    RESTARTS   AGE    IP              NODE       NOMINATED NODE   READINESS GATES
spark-thrift-server-54001673a399bdb7-exec-1   1/1     Running   0          116m   10.233.69.130   minion-2   <none>           <none>
spark-thrift-server-54001673a399bdb7-exec-2   1/1     Running   0          116m   10.233.67.207   minion-0   <none>           <none>
spark-thrift-server-54001673a399bdb7-exec-3   1/1     Running   0          116m   10.233.68.14    minion-1   <none>           <none>
spark-thrift-server-54001673a399bdb7-exec-4   1/1     Running   0          116m   10.233.69.131   minion-2   <none>           <none>
spark-thrift-server-ac08d873a397a201-driver   1/1     Running   0          118m   10.233.67.206   minion-0   <none>           <none>

pod的ip地址 spark-thrift-server-ac08d873a397a201-driver 将用于连接到spark thrift服务器。
现在,使用beeline连接到它:

cd <spark-home>;

bin/beeline -u jdbc:hive2://10.233.67.206:10016;

# type some queries.

...
show tables;
...
e5njpo68

e5njpo682#

mr3上的配置单元在kubernetes上运行,因为mr3(hadoop和kubernetes的新执行引擎)为kubernetes提供了本机支持。
https://mr3docs.datamonad.com/docs/k8s/

相关问题