如何使用 JDBC 将 Impala 表直接加载到 Spark?

alf*_*dox 5 kerberos jdbc impala apache-spark pyspark

我正在尝试使用 Python 编写一个 Spark 作业,该作业将打开与 Impala 的 jdbc 连接,并将 VIEW 直接从 Impala 加载到 Dataframe 中。这个问题非常接近,但在 Scala 中:Calling JDBC to impala/hive from inside a spark job and created a table

我该怎么做呢?对于其他数据源,例如 MySQL、PostgreSQL 等,有很多示例,但我还没有看到 Impala + Python + Kerberos 的示例。一个例子会有很大帮助。谢谢!

用网络上的信息试过这个,但没有用。

星火笔记本

#!/bin/bash
export PYSPARK_PYTHON=/home/anave/anaconda2/bin/python
export HADOOP_CONF_DIR=/etc/hive/conf
export PYSPARK_DRIVER_PYTHON=/home/anave/anaconda2/bin/ipython
export PYSPARK_DRIVER_PYTHON_OPTS='notebook --ip=* --no-browser'

# use Java8
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH

# JDBC Drivers for Impala
export CLASSPATH=/home/anave/impala_jdbc_2.5.30.1049/Cloudera_ImpalaJDBC41_2.5.30/*.jar:$CLASSPATH
export JDBC_PATH=/home/anave/impala_jdbc_2.5.30.1049/Cloudera_ImpalaJDBC41_2.5.30

# --jars $SRCDIR/spark-csv-assembly-1.4.0-SNAPSHOT.jar \
# --conf spark.sql.parquet.binaryAsString=true \
# --conf spark.sql.hive.convertMetastoreParquet=false

pyspark --master yarn-client \
        --driver-memory 4G \
        --executor-memory 2G \
        # --num-executors 10 \
        --jars /home/anave/spark-csv_2.11-1.4.0.jar $JDBC_PATH/*.jar
        --driver-class-path $JDBC_PATH/*.jar
Run Code Online (Sandbox Code Playgroud)

Python代码

properties = {
    "driver": "com.cloudera.impala.jdbc41.Driver",
    "AuthMech": "1",
#     "KrbRealm": "EXAMPLE.COM",
#     "KrbHostFQDN": "impala.example.com",
    "KrbServiceName": "impala"
}

# imp_env is the hostname of the db, works with other impala queries ran inside python
url = "jdbc:impala:imp_env;auth=noSasl"

db_df = sqlContext.read.jdbc(url=url, table='summary', properties=properties)
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息(完整错误日志):
Py4JJavaError:调用 o42.jdbc 时发生错误。:java.lang.ClassNotFoundException:com.cloudera.impala.jdbc41.Driver

Ram*_*ram 2

您可以使用

--jars $(echo /dir/of/jars/*.jar | tr ' ' ',') 
Run Code Online (Sandbox Code Playgroud)

代替

--jars /home/anave/spark-csv_2.11-1.4.0.jar $JDBC_PATH/*.jar
Run Code Online (Sandbox Code Playgroud)

或者其他方法请参阅我的答案