当前位置: 首页 > 知识库问答 >
问题:

Spark Hbase连接器(SHC)没有从Hbase表返回任何数据

赵智
2023-03-14

我正在按照spark hbase connector basic示例阅读spark2 shell version 2.2.0中的hbase表。代码看起来很正常,但是当我运行df.show()命令时,我看不到任何结果,它似乎永远都在运行。

import org.apache.spark.sql.{ DataFrame, Row, SQLContext }
import org.apache.spark.sql.execution.datasources.hbase._

val sqlContext = new org.apache.spark.sql.SQLContext(sc); 

def catalog = s"""{
         |"table":{"namespace":"default", "name":"testmeta"},
         |"rowkey":"vgil",
         |"columns":{
            |"id":{"cf":"rowkey", "col":"vgil", "type":"string"},
           |"col1":{"cf":"pp", "col":"dtyp", "type":"string"}
         |}
       |}""".stripMargin


def withCatalog(cat: String): DataFrame = { sqlContext.read.options(Map(HBaseTableCatalog.tableCatalog->cat)).format("org.apache.spark.sql.execution.datasources.hbase").load()}

val df = withCatalog(catalog)

df.show()
hbase(main):001:0> scan 'testmeta'
ROW                                 COLUMN+CELL                                                                                            
 fmix                            column=pp:dtyp, timestamp=1541714925380, value=ss1                                                     
 fmix                            column=pp:lati, timestamp=1541714925371, value=41.50                                                   
 fmix                            column=pp:long, timestamp=1541714925374, value=-81.61                                                  
 fmix                            column=pp:modm, timestamp=1541714925377, value=ABC                                                                                                   
 vgil                            column=pp:dtyp, timestamp=1541714925405, value=ss2                                                     
 vgil                            column=pp:lati, timestamp=1541714925397, value=41.50                                                   

提前感谢您的帮助!

共有1个答案

莫典
2023-03-14

经过大量的尝试,我发布了我的答案,所以我发现添加--conf选项来启动spark shell有助于我连接到HBase。

spark2-shell --master yarn --deploy-mode client --packages com.hortonworks:shc-core:1.1.1-2.1-s_2.11,it.nerdammer.bigdata:spark-hbase-connector_2.10:1.0.3 --repositories http://repo.hortonworks.com/content/groups/public/ --conf spark.hbase.host=192.168.xxx.xxx --files /mnt/fs1/opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/share/doc/hbase-solr-doc-1.5+cdh5.13.0+71/demo/hbase-site.xml

然后,下面的代码片段可以获取一个列限定符的值。

val hBaseRDD_iacp = sc.hbaseTable[(String)]("testmeta").select("lati").inColumnFamily("pp").withStartRow("vg").withStopRow("vgz")      
object myschema {
      val column1 = StructField("column1",  StringType)
      val struct = StructType(Array(column1))
    }


val rowRDD = hBaseRDD.map(x => Row(x))
val myDf = sqlContext.createDataFrame(rowRDD,myschema.struct)  
myDf.show()
 类似资料:
  • 在HBASE 0.98.4上使用Phoenix4.2版本(我知道是老版本)。

  • 使用来自DBCP的BasicDataSource,如果我们执行getConnection()并且在最后一个块中我们关闭连接,它是真的将连接返回到池还是关闭连接。我正在检查的代码片段是这样的 我正在检查BasicDataSource的源代码,并访问了这个包装类以获取连接。 委托对象的类型为java。sql。联系包装器代码调用委托的close方法,该方法将关闭集合,而不是将连接返回到池。这是DBCP的

  • 如您所见,它将参数和的和保存在变量中,然后将包含它们的和的eax寄存器保存在变量中,就像函数返回值一样。 这样做是因为函数是用返回值定义的吗?

  • 问题内容: 我必须在设计糟糕的旧数据库中应用JPA。不幸的是无法更改它。幸运的是,仅用于只读访问。 我发现的最奇怪的事情之一是没有联接(或中间)表的“多对多”关系。这是表结构的简化: ACCESS_GROUP列可以在两个表中重复 一位用户可以与N个访问相关 一个访问可以与N个用户相关 必须按照这种方式“概念上”将此表与Java类映射: 但是我认为这是不可能的。您认为在JPA中访问此表并进行浏览的最

  • 我们使用Debezium(MongoDB)和Confluent S3连接器以分布式模式运行Kafka Connect(Confluent Platform 5.4,即Kafka 2.4)。通过REST API添加新连接器时,连接器将在RUNNING状态下创建,但不会为连接器创建任何任务。 暂停和恢复连接器没有帮助。当我们停止所有工作人员,然后再次启动他们时,任务就会创建,一切都会按应有的方式运行。

  • Hbase运行不完美,我在尝试在Hbase上创建表时遇到问题,当然我无法访问上的Hbase状态UI。请帮助!! 以下是我的所有配置文件: (hadoop conf)core-site.xml:(主服务器和从服务器配置相同)

  • 问题内容: 我必须在设计糟糕的旧数据库中应用JPA。不幸的是无法更改它。幸运的是,仅用于只读访问。 我发现的最奇怪的事情之一是没有联接(或中间)表的“多对多”关系。这是表结构的简化: ACCESS_GROUP列可以在两个表中重复 一位用户可以与N个访问相关 一个访问可以与N个用户相关 必须按照这种方式“概念上”将此表与Java类映射: 但是我认为这是不可能的。您认为在JPA中访问此表并浏览它们的最

  • 我试图从Windows运行一个HBase Java客户端程序。我所拥有的只有1)一个没有任何编译器错误的Java程序2)hbase-site.xml(我没有其他HDFS或HBase配置文件。只有上面的一个。)当我运行程序时,我得到了以下错误--在最后一个块中给出的。我错过了什么吗?我在这里都给出了。