Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JDBC将Impala表直接加载到Spark?_Jdbc_Apache Spark_Pyspark_Kerberos_Impala - Fatal编程技术网

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

如何使用JDBC将Impala表直接加载到Spark?,jdbc,apache-spark,pyspark,kerberos,impala,Jdbc,Apache Spark,Pyspark,Kerberos,Impala,我正试图用Python编写一个spark作业,它将打开与Impala的jdbc连接,并将视图直接从Impala加载到数据帧中。这个问题非常接近,但在scala中: 我该怎么做?其他数据源(如MySQL、PostgreSQL等)有很多例子,但我还没有看到Impala+Python+Kerberos的例子。举个例子会很有帮助。谢谢大家! 尝试使用来自web的信息执行此操作,但无效 星火笔记本 Python代码 我收到此错误消息(): Py4JJavaError:调用o42.jdbc时出错。 :jav

我正试图用Python编写一个spark作业,它将打开与Impala的jdbc连接,并将视图直接从Impala加载到数据帧中。这个问题非常接近,但在scala中:

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

尝试使用来自web的信息执行此操作,但无效

星火笔记本 Python代码 我收到此错误消息():
Py4JJavaError:调用o42.jdbc时出错。 :java.lang.ClassNotFoundException:com.cloudera.impala.jdbc41.Driver

您可以使用

--jars $(echo /dir/of/jars/*.jar | tr ' ' ',') 
而不是

--jars /home/anave/spark-csv_2.11-1.4.0.jar $JDBC_PATH/*.jar
或者要了解另一种方法,请参见我的

这对我有用:

spark-shell --driver-class-path ImpalaJDBC41.jar --jars ImpalaJDBC41.jar 

val jdbcURL = s"jdbc:impala://192.168.56.101:21050;AuthMech=0"

val connectionProperties = new java.util.Properties()

val hbaseDF = sqlContext.read.jdbc(jdbcURL, "impala_table", connectionProperties)

第一种方法是在下面的impala_jdbc_connection.py脚本上使用spark submit,比如
spark submit--driver class path/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/jars/ImpalaJDBC41.jar--jars/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/jars/ImpalaJDBC41.jar--类com.cloudera.ImpalaJDBC41.driverimpala_jdbc_connection.py

impala_jdbc_connection.py

properties = {
"drivers": "com.cloudera.impala.jdbc41.Driver"
}

#initalize the spark session
spark = (
        SparkSession.builder
        .config("spark.jars.packages", "jar-packages-list")
        .config("spark.sql.warehouse.dir","hdfs://dwh-hdp-node01.dev.ergo.liferunoffinsuranceplatform.com:8020/user/hive/warehouse")
        .enableHiveSupport()
        .getOrCreate() 
        )

db_df = spark.read.jdbc(url= 'jdbc:impala://host_ip_address:21050/database_name', table ='table_name', properties = properties)

db_df.show()
第二种方法不是从黑斑羚直接导入spark,而是将结果转换为spark数据帧

pip安装impyla
来源:

连接到impala并从impala数据库获取结果,并将结果转换为spark数据帧

from impala.dbapi import connect

conn = connect(host = 'IP_ADDRESS_OF_HOST', port=21050)

cursor = conn.cursor()

cursor.execute('select * from database.table')

res= cursor.fetchall() # convert res to spark dataframe

for data in res:
        print(data)

在群集库中设置jar后,在Azure Databricks笔记本中执行此操作。除了d是驱动程序配置的大写字母外,一般遵循上一篇文章。工作得很好

properties = {
"Driver": "com.cloudera.impala.jdbc41.Driver"
}


db_df = spark.read.jdbc(url= 'jdbc:impala://hostname.domain.net:21050/dbname;AuthMech=3;UID=xxxx;PWD=xxxx', table ='product', properties = properties)

db_df.show()

好的,对于初学者来说,
--jars
。对于Java8,您可能应该查找JDBC4.2。这里可能还有我遗漏的东西。@alfredox:请。请检查我的答案,让我知道它是否有效。@RamPrasadG:我刚刚发现我的公司没有这些驱动程序,而且他们实际上还没有配置内部环境,甚至没有通过jdbc提供访问权限,所以很遗憾,我无法再测试它了。但事实证明,他们确实通过somply执行df=sqlContext.sql(查询)将Spark配置为直接从Impala读取
from impala.dbapi import connect

conn = connect(host = 'IP_ADDRESS_OF_HOST', port=21050)

cursor = conn.cursor()

cursor.execute('select * from database.table')

res= cursor.fetchall() # convert res to spark dataframe

for data in res:
        print(data)
properties = {
"Driver": "com.cloudera.impala.jdbc41.Driver"
}


db_df = spark.read.jdbc(url= 'jdbc:impala://hostname.domain.net:21050/dbname;AuthMech=3;UID=xxxx;PWD=xxxx', table ='product', properties = properties)

db_df.show()