2014-10-01 15 views
6

Tôi đang chạy chương trình java cơ sở thử nghiệm thông qua hành động java oozie. Các lỗi sau đây được gặp phải: Hành động Java Oozie: Đi qua đường dẫn lớp Hbase

Failing Oozie Launcher, Main class [HbaseTest], main() threw exception, org/apache/hadoop/hbase/HBaseConfiguration 
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration 
at HbaseTest.main(HbaseTest.java:28) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:495) 
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50) 
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:417) 
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332) 
at org.apache.hadoop.mapred.Child$4.run(Child.java:268) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:396) 
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1438) 
at org.apache.hadoop.mapred.Child.main(Child.java:262) 
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
... 14 more 

Chương trình

chạy một cách chính xác từ dòng lệnh:

java -cp `hbase classpath` HbaseTest 

Có cách nào tôi có thể vượt qua sản lượng 'HBase classpath' với hành động oozie java. Tôi không muốn sao chép các jar cơ sở dữ liệu vào thư mục lib của luồng công việc vì đó sẽ là phí bảo trì.

Sau đây là những hành động java từ workflow.xml:

<java> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     <configuration> 
      <property> 
       <name>mapred.job.queue.name</name> 
       <value>${queueName}</value> 
      </property> 
     </configuration> 
     <main-class>HbaseTest</main-class> 
     <java-opts></java-opts> 
     <arg>HELLO</arg> 
    </java> 

Trả lời

3

Kể từ Oozie 2.3 bạn có thể sử dụng Chia sẻ thư viện:

Oozie hỗ trợ công việc và chia sẻ hệ thống thư viện cho công việc công việc.

Thư viện chia sẻ có thể đơn giản hóa việc triển khai và quản lý các thành phần phổ biến trên các ứng dụng quy trình làm việc.

Ví dụ, nếu một công việc quy trình làm việc sử dụng thư viện chia sẻ với các tệp tin JARs Streaming, Pig &, nó không phải đóng gói các tệp JAR đó trong đường dẫn lib/path ứng dụng công việc.

Nếu công việc quy trình làm việc sử dụng thư viện chia sẻ, Oozie sẽ bao gồm tất cả các tệp JAR/SO trong thư viện trong classpath/libpath cho tất cả các tác vụ của nó.

Công việc quy trình làm việc có thể chỉ định đường dẫn thư viện chia sẻ bằng cách sử dụng thuộc tính công việc oozie.libpath.

Công việc quy trình làm việc có thể sử dụng thư viện chia sẻ hệ thống bằng cách đặt thuộc tính công việc oozie.use.system.libpath thành true.

http://oozie.apache.org/docs/3.2.0-incubating/WorkflowFunctionalSpec.html#a17_HDFS_Share_Libraries_for_Workflow_Applications_since_Oozie_2.3

Làm thế nào để cài đặt: http://oozie.apache.org/docs/4.0.0/DG_QuickStart.html#OozieShareLib

Các vấn đề liên quan