从 pyspark 读取 hbase
read hbase from pyspark
我正在尝试使用 pyspark 从 hbase 读取数据。
- hbase版本:HBase 1.2.0-cdh5.16.2
- pyspark版本:版本2.3.0.cloudera4
我想我需要使用这个 jar hbase-spark-1.2.0-cdh5.16.2.jar
我下载了它 运行 代码:
from pyspark.sql import SparkSession
app_name = "hbase"
spark = (
SparkSession.builder.master("yarn")
.appName(app_name)
.config("spark.jars", "hbase-spark-1.2.0-cdh5.16.2.jar")
.getOrCreate()
)
dataSourceFormat = "org.apache.hadoop.hbase.spark"
readCatalog = """{
"table":{"namespace":"namespace_dev", "name":"logs"},
"rowkey":"key",
"columns":{
"key":{"cf":"rowkey", "col":"key", "type":"string"},
"ARTICLE":{"cf":"atlas_data","col":"ARTICLE","type":"int"}
}
}"""
readDF = spark.read.options(catalog=readCatalog).format(dataSourceFormat).load()
但出现错误:
Py4JJavaError: An error occurred while calling o87.load.
: java.lang.ClassNotFoundException: org.apache.spark.Logging was removed in Spark 2.0. Please check if your library is compatible with Spark 2.0
据我了解,我当前的版本与 Spark 2 不兼容,是否正确?
在这种情况下,我在哪里可以找到相同但可用于 Spark 2.X 的驱动程序?
Spark 版本为 2.3.0,hbase-connector 为 spark 1.2.0,请尝试从 maven 中央存储库使用较新的版本,例如 this。
问题是您正在使用 spark.jars
并且仅传递 HBase Spark 连接器的名称。但是这个连接器本身取决于大量的罐子,例如 hbase-client
等,并且找不到这些罐子中的 类,例如 TableDescriptor
中的 [=] 11=] - 因为你没有指定它们。
您有几种解决方案:
- 在
spark.jars
中明确指定所有依赖项 - 但这可能很麻烦,因为依赖项的数量很多
- 在启动
spark-shell
或 spark-submit
时通过 --packages org.apache.hbase:hbase-spark:1.2.0-cdh5.16.2
指定 Spark HBase 连接器 - 它更容易,但您可能还需要指定 --repository
才能拉取Cloudera 构建
- 为 HBase Spark 连接器创建一个 fat jar 及其所有依赖项 - 但它应该由您自己完成,因为我没有看到官方的“fat jar”
我个人会选择选项 2...
我正在尝试使用 pyspark 从 hbase 读取数据。
- hbase版本:HBase 1.2.0-cdh5.16.2
- pyspark版本:版本2.3.0.cloudera4
我想我需要使用这个 jar hbase-spark-1.2.0-cdh5.16.2.jar
我下载了它 运行 代码:
from pyspark.sql import SparkSession
app_name = "hbase"
spark = (
SparkSession.builder.master("yarn")
.appName(app_name)
.config("spark.jars", "hbase-spark-1.2.0-cdh5.16.2.jar")
.getOrCreate()
)
dataSourceFormat = "org.apache.hadoop.hbase.spark"
readCatalog = """{
"table":{"namespace":"namespace_dev", "name":"logs"},
"rowkey":"key",
"columns":{
"key":{"cf":"rowkey", "col":"key", "type":"string"},
"ARTICLE":{"cf":"atlas_data","col":"ARTICLE","type":"int"}
}
}"""
readDF = spark.read.options(catalog=readCatalog).format(dataSourceFormat).load()
但出现错误:
Py4JJavaError: An error occurred while calling o87.load.
: java.lang.ClassNotFoundException: org.apache.spark.Logging was removed in Spark 2.0. Please check if your library is compatible with Spark 2.0
据我了解,我当前的版本与 Spark 2 不兼容,是否正确? 在这种情况下,我在哪里可以找到相同但可用于 Spark 2.X 的驱动程序?
Spark 版本为 2.3.0,hbase-connector 为 spark 1.2.0,请尝试从 maven 中央存储库使用较新的版本,例如 this。
问题是您正在使用 spark.jars
并且仅传递 HBase Spark 连接器的名称。但是这个连接器本身取决于大量的罐子,例如 hbase-client
等,并且找不到这些罐子中的 类,例如 TableDescriptor
中的 [=] 11=] - 因为你没有指定它们。
您有几种解决方案:
- 在
spark.jars
中明确指定所有依赖项 - 但这可能很麻烦,因为依赖项的数量很多 - 在启动
spark-shell
或spark-submit
时通过--packages org.apache.hbase:hbase-spark:1.2.0-cdh5.16.2
指定 Spark HBase 连接器 - 它更容易,但您可能还需要指定--repository
才能拉取Cloudera 构建 - 为 HBase Spark 连接器创建一个 fat jar 及其所有依赖项 - 但它应该由您自己完成,因为我没有看到官方的“fat jar”
我个人会选择选项 2...