我试图从 Spark 在 Hbase 中创建一个表并插入数据,从中读取数据。
当我从命令行运行 spark 作业时它工作正常。但是,每次我尝试使用 oozie 运行它时,它都会抛出不同类型的异常。
这是我的 spark hbase 代码
val sc = new SparkContext("local", "Hbase spark")
val tableName = "Morbidity_Dummy2"
val conf = HBaseConfiguration.create()
// Add local HBase conf
conf.addResource(new Path("file:///opt/cloudera/....../hbase-site.xml"))
conf.set(TableInputFormat.INPUT_TABLE, tableName)
// create m7 table with column family
val admin = new HBaseAdmin(conf)
if(!admin.isTableAvailable(tableName)) {
print("Creating GHbase Table")
val tableDesc = new HTableDescriptor(tableName)
tableDesc.addFamily(new HColumnDescriptor("cf1"
.getBytes()))
admin.createTable(tableDesc)
}else{
print("Table already exists!!")
}
//put data into table
val myTable = new HTable(conf, tableName)
for (i <- 414540 to 414545) {
var p = new Put(Bytes.toBytes(""+i))
p.add("cf1".getBytes(), "morbidity_score".getBytes(), Bytes.toBytes(""+(i*5)))
p.add("cf1".getBytes(), "effective_date".getBytes(), Bytes.toBytes("2016-07-01"))
p.add("cf1".getBytes(), "cmi_id".getBytes(), Bytes.toBytes(""+i))
myTable.put(p)
}
myTable.flushCommits()
// create rdd
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
classOf[org.apache.hadoop.hbase.client.Result])
//get the row count
val count = hBaseRDD.count()
print("HBase RDD count:"+count)
System.exit(0)
这是我得到的异常
Exception1: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.hadoop.hbase.ZooKeeperConnectionException: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase
Exception2: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/exceptions/TimeoutIOException
Exception3: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseIOException
我还在 lib 文件夹中包含了 hbase-0.90.2.jar
和 hbase-client-1.2.1.jar
以及 spark jar。我不明白为什么它在命令行下运行而不是在 oozie 上运行。
最佳答案
Exception2: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/exceptions/TimeoutIOException
Exception3: java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseIOException
您需要添加 hbase-common jar。 (试用版1.1.2)
你能确定你有这些 jar 吗。
hbase-procedure-1.1.2.jar
hbase-server-1.1.2.jar
hbase-common-1.1.2.jar
hbase-client-1.1.2.jar
hbase-protocol-1.1.2.jar
这是一个反复试验的过程。您需要找到类的相应 jar 并添加到类路径中。
关于scala - 使用 Oozie 将 Spark 转为 Hbase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37840473/