2016-11-16 6 views
0

私はsparkとscalaを使用してHBaseデータを取得しようとしています。しかし、私は熟考することができないエラーが発生しています。HBase TimeoutIOException

コード

import org.apache.spark.{SparkConf, SparkContext} 
import org.apache.hadoop.hbase.HBaseConfiguration 
import org.apache.hadoop.hbase.HConstants 
import org.apache.hadoop.hbase.client.{HBaseAdmin, Result} 
import org.apache.hadoop.hbase.io.ImmutableBytesWritable 
import org.apache.hadoop.hbase.mapreduce.TableInputFormat 
import org.apache.hadoop.hbase.util.Bytes 
import org.apache.spark.SparkConf 
object HBase { 
def main(args: Array[String]): Unit = { 
val tableName = "posts" 
val sc = new SparkContext(new SparkConf().setAppName("HBaseReadWrite").setMaster("local[4]")) 
val conf = HBaseConfiguration.create() 
conf.set(HConstants.ZOOKEEPER_QUORUM, "localhost") 
conf.set(TableInputFormat.INPUT_TABLE, tableName) 

val admin = new HBaseAdmin(conf) 
if(!admin.isTableAvailable(conf.get(tableName))) { 
    println("Table doesn't exist") 
    return 
} 
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], 
    classOf[ImmutableBytesWritable], classOf[Result]) 
println(hBaseRDD.map(x => x._2).map(result => Bytes.toString(result.getRow)).collect().take(5).mkString("\n")) 

} 
} 

build.sbt私は依存関係、まだ進展なしのバージョンを変更しようとしている

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/exceptions/TimeoutIOException 
at HBase$.main(HBase.scala:20) 
at HBase.main(HBase.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.exceptions.TimeoutIOException 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 

name := "NLPAnnotationController" 

version := "1.0" 

scalaVersion := "2.10.5" 

resolvers += "Cloudera Repository" at "https://repository.cloudera.com/artifactory/cloudera-repos/" 
resolvers += "sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/" 

organization := "com.scryAnalytics" 

val hadoop_version = "0.98.19-hadoop2" 

libraryDependencies ++= Seq(
    "org.apache.spark" % "spark-core_2.10" % "1.2.0", 
    "org.apache.hbase" % "hbase-spark" % "1.2.0-cdh5.7.2", 
    "org.apache.hbase" % "hbase-client" % hadoop_version excludeAll(ExclusionRule(organization = "javax.servlet", name="javax.servlet-api"), ExclusionRule(organization = "org.mortbay.jetty", name="jetty"), ExclusionRule(organization = "org.mortbay.jetty", name="servlet-api-2.5")), 
    "org.apache.hbase" % "hbase-common" % hadoop_version excludeAll(ExclusionRule(organization = "javax.servlet", name="javax.servlet-api"), ExclusionRule(organization = "org.mortbay.jetty", name="jetty"), ExclusionRule(organization = "org.mortbay.jetty", name="servlet-api-2.5")), 
    "org.apache.hbase" % "hbase-server" % hadoop_version excludeAll(ExclusionRule(organization = "javax.servlet", name="javax.servlet-api"), ExclusionRule(organization = "org.mortbay.jetty", name="jetty"), ExclusionRule(organization = "org.mortbay.jetty", name="servlet-api-2.5")), 
    "org.scala-lang" % "scala-library" % "2.10.5", 
    "it.nerdammer.bigdata" % "spark-hbase-connector_2.10" % "1.0.3" 
) 

エラー。 助けがあれば助かります。前もって感謝します。

+0

分散システムを使用していて、ローカルプログラムがリモートシステム(データベースまたはHadoop)と通信していると思います。 Hadoopは例外をスローします。例外はネットワークプロトコル経由でシリアル化されて返されます。最後に、アプリケーションは 'org/apache/hadoop/hbase/exceptions/TimeoutIOException'型の例外オブジェクトにエラーメッセージを逆直列化したいと考えています。このためには、クラスパス内でそのクラスを見つける必要がありますが、失敗します。そのクラスパスにそのライブラリがありますか?そうでない場合は、 – radumanolescu

+0

というライブラリを追加してください。ビルドファイルにhbaseの依存関係があります。 – wadhwasahil

+0

@wadhwasahil: 'conf.setInt(" timeout "、120000)を使ってタイムアウトを設定することもできます。ジョブを実行するときにすべての依存関係が利用可能であることを確認する必要がある場合は、 - jarsを使用してHbaseの依存関係を渡すことができます。 spark-submitコマンドを使用します。 – Shankar

答えて

0

ほとんどの場合、従業員に提供するjarファイルには、依存関係のクラスが含まれていない可能性があります。 sbt-assemblyを使用して「脂肪」瓶を作り、それをスパークするためにアップロードします。