【发布时间】:2017-01-16 22:15:23
【问题描述】:
我正在尝试使用 Python 编写一个 spark 作业,该作业将打开与 Impala 的 jdbc 连接并将 VIEW 直接从 Impala 加载到 Dataframe 中。这个问题非常接近,但在 scala 中:Calling JDBC to impala/hive from within a spark job and creating a table
我该怎么做?有很多其他数据源的示例,例如 MySQL、PostgreSQL 等,但我还没有看到 Impala + Python + Kerberos 的示例。一个例子会有很大帮助。谢谢!
用网络上的信息试过了,但没有用。
SPARK 笔记本
#!/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
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)
我收到此错误消息 (Full Error Log):
Py4JJavaError:调用 o42.jdbc 时出错。
: java.lang.ClassNotFoundException: com.cloudera.impala.jdbc41.Driver
【问题讨论】:
-
好的,对于初学者
--jarsshould be comma separated list。对于 Java 8,您可能应该寻找 JDBC 4.2。我这里可能还缺少其他东西。 -
@alfredox:请。检查我的答案,让我知道它是否有效。
-
@RamPrasadG:我刚刚发现我的公司没有这些驱动程序可用,而且他们实际上没有配置内部环境甚至可以通过 jdbc 进行访问,所以很遗憾我不能测试它了。事实证明,他们确实通过简单地执行 df = sqlContext.sql(query) 将 Spark 配置为直接从 Impala 读取
标签: jdbc apache-spark pyspark kerberos impala