±³¾°
×î½üÊÕµ½ÕâÑùÒ»¸öÎÊÌ⣺
Storm´¦ÀíÏûϢʱ»á¸ù¾ÝTopologyÉú³ÉÒ»¿ÃÏûÏ¢Ê÷£¬StormÈçºÎ¸ú×Ùÿ¸öÏûÏ¢¡¢ÈçºÎ±£Ö¤ÏûÏ¢²»¶ªÊ§ÒÔ¼°ÈçºÎʵÏÖÖØ·¢ÏûÏ¢»úÖÆ?
ËäÒѻظ´£¬µ«ÐÄÏ뻹ÊÇ¿´ÏÂstormÕâ¿éµÄÔ´Âë°É.ÄÇ¿´¾²Ì¬¶à²»Ë¬°¡£¬ÄÇ×ܵõ÷ÊÔ°É£¬ºÃ°É£¬Ôì¸ö±¾µØ»·¾³À´µ÷°É¡£
ÏÈ¿´¿´mavenµÄbuild¹ý²»¹ý£º
mvn -f pom.xml clean install |
¸ã¶¨stormµÄ±àÒë´ò°ü£¬½Ó×ÅÊÇstorm-starterµÄ±àÒë´ò°ü£¬Ò»ÇкÜ˳Àû°¡£¬ÅÜһϿ´¿´£º
${STORM_HOME}/bin/storm jar ${STORM_JAR} ${STORM_STARTER_JAR} storm.starter.WordCountTopology
|
˳Àû³ö½á¹ûÁË£¬²»¾ÍÊǸöhello worldÂ
½Ó×ÅÔì±¾µØ»·¾³°É£¬½«storm-starterµÄÔ´Âë°´maven·½Ê½µ¼ÈëIntellij IDEA£¬×¢Ò⣬´ÓÕâʱºò±¯´ß¾Í¿ªÊ¼ÁË¡£
hello,world ´òÁ³ÁË
µ¼ÈëIDEºó£¬ÐËÖ²ª²ªµÄµãÁËF5£¬È»ºó£º

ÕâÄáÂ꣬˵ºÃ²»´òÁ³µÄ£¡
¿´ÁËÓÖ¿´ÒÀÀµ¡°¶¼ºÏÊÊ¡±°¡£¬ClassPath¡°¶¼ºÏÊÊ¡±°¡£¬·ñÔò±àÒ벻ͨ¹ý°¡£¬ÎªÃ«ÅÜ£¡²»£¡Æð£¡À´£¡
ÕâͬÑùµÄ²Ù×÷£¬ÔÚeclipseÀïÍ×Í׵İ¡£¬¸÷ÖÖÄÜÅܰ¡£¬ÎªÃ«ÔÚIntellij IDEAÀï³ö´íÁËÄØ£¿
Òì³£ÊÇÈçºÎ²úÉúµÄ
ºÃ°É£¬¼ÈÈ»´òÁ³ÁË£¬ÓÖÊÇÖªÃûIDEµÄ·ÛË¿£¬¼á¾öÒªÖª³Ü¶øºóÓµġ£
ÄÇô£¬¿´ÏÂÒì³£ÈçºÎ²úÉúµÄ°É¡£

(²é¿´´óͼ)
ÉÏÃæµÄͼ£¬»ù±¾¸ÅÀ¨ÁËÒì³£NoClassDefFound²úÉúµÄ·¾¶¡£
¸üϸ½ÚµÄÒì³£²úÉúÇé¿öÈçÏ£º

(²é¿´´óͼ)
×¢Òâ¿´µ÷ÓÃÕ»£º
JVM_GetClassDelaredMethodsÊÇJVMÄÚ·½·¨£¬ÔÚÕÒÈë¿Úº¯ÊýmainµÄ¹ý³ÌÖУ¬´Ë·½·¨±»µ÷Óá£
½Ó×Å£¬´Ë·½·¨»áµ÷ÓÃÑéÖ¤×Ö½ÚÂëµÄ¹ý³Ì£ºverify_code¡£
·¢ÏÖÓÐÓõ½backtype.storm.topology.IRichBolt½Ó¿Ú£¬ÄÇôÕÒÕÒÕâ¸ö½Ó¿ÚËùÔÚµÄ.classÎļþ°É£ºÈç¹ûÎÒÃÇÔËÐÐjava
-cp . xxx£¬Í¨¹ý-cp»òÕß-classpath²ÎÊýÖ¸¶¨ÁËclasspath£¬ÄÇôÕâ¸ö.class¾Í»á±»ÕÒµ½¡£È»ºó½øÈëparseµÄ¹ý³Ì¡£
±¯´ßµÄÊÇ£¬IDEAµÄÔËÐлòÕßµ÷ÊÔÃüÁîf5->run£¬Ã»Óн«backtype/storm/topology/IRichBoltËùÔÚµÄjar°üstorm-core.jar¼ÓÈëclasspath£¬Õâ¶¼ÊǺó»°ÁË¡
ÄÇô£¬¼ÈÈ»ÓиöÕÒ*.classµÄ¹ý³Ì£¬Õâ¸ö¹ý³ÌÈçÏ£º

(²é¿´´óͼ)
¶ÔÉÏͼ×öÒ»µã¼òҪ˵Ã÷£º
Ö´ÐÐjava -cp . $mainClass .
java³ÌÐò£¨ÕâÀïÖ¸javaÕâ¸ö³ÌÐò±¾Éí£©µÄÈë¿Úº¯Êýmain£¬»á´´½¨ÐéÄâ»úJVMʵÀý£¬¹ý³ÌÖлá³õʼ»¯JVM±¾µØClassLoader.
ÔÚJVMѰÕÒ.classÎļþʱ£¬µ÷ÓÃClassLoader::load_classfile·½·¨£¬´Ójar°ü¡¢zip°ü¡¢Ä¿Â¼ÖÐѰÕÒÖ¸¶¨µÄ.classÎļþ
.
±¾ÎÄÖУ¬Ä¾ÓÐÕÒµ½backtype/storm/topology/IRichBolt.class£¬ËùÒÔ»áÖÃÒ»¸öÑÓʱÒì³£__pending_exception£¬Õâ¸öÒì³£¹ØÁªÁËÕâ¸öÀࣨ½Ó¿Ú£©¡¢ÎļþÃû¡¢Òì³£µÄÀàÐÍ£¨NoClassDefFound£©£¬ÄÇÕâ¸öÒ쳣ʲôʱºò´¦ÀíÄØ£¿ºóÎÄÔÙ˵.
¿´ÏÂÕâ¸öÒì³£µÄÄÚÈÝ£º

Òì³£ÊÇÈçºÎ´¦ÀíµÄ
ºÃÁË£¬Òì³£µÄ²úÉúÇå³þÁË£¬»¹ÓиöÎÊÌ⣬ÄǸö__pending_exceptionÊǺÎʱ±»´¦ÀíÄØ£¿
¿´ÏÂͼ£º

(²é¿´´óͼ)
¶ÔÉÏͼ×öϼòҪ˵Ã÷£º
Ö´ÐÐjava -cp . $mainClass .
java³ÌÐòµÄÈë¿Úº¯Êýmain£¬ÔÚ²ã²ã³õʼ»¯µÄ¹ý³ÌÖУ¬»áµ÷Óõ½LoadMainClassº¯Êý£¬ ½áºÏ±¾ÎĵĵÚÒ»·ùͼ¾Í¿ÉÒÔÖªµÀ£¬Õâ¸öº¯Êý×îÖÕ»áÖÆÔìÄǸöNoClassDefFoundµÄÒì³£__pending_exception£¬È»ºó·µ»ØµÄÊÇÒ»¸ö¿ÕµÄmainClass.
½ô¸ú×ÅLoadMainClassº¯Êý£¬ÊÇÒ»¸öCHECK_EXCEPTION_NULL_LEAVEµÄºê£¬Õâ¸öºêÕ¹¿ªºó£¬»á´¦ÀíÉÏÃæÖÆÔìµÄÄǸöÒì³££¬È»ºó£¬´òÓ¡Òì³£ÐÅÏ¢¡£ÕâÀï¾ÍÊÇÄǸö±»´òÁ³µÄÒì³£ÁË¡£
Ϊʲô±»´òÁËÁ³
ÕâÀÒì³£²úÉúµÄ±¾ÖʺÍÒì³£´¦Àí£¬Çå³þÁË¡£
¼òµ¥µÄ¸ÅÀ¨Ï¾ÍÊÇ£º
/* α´úÂë */ main /* javaÕâ¸ö³ÌÐòµÄmain */ -> createJVM() /* ´´½¨JVM */ -> loadMainClass() /* ¼ÓÔØÎÒÃÇÖ¸¶¨µÄ$mainClassÎļþ£¬ÕâÊǸöclassÎļþ */ -> findMethod("main") /* ÔÚ$mainClassÖÐÕÒmain·½·¨£¬javaдµÄ³ÌÐòµÄmain */ -> getMethodFromJVM() /* û»º´æ£¬ÎÊJVMÒª */ -> classLoader.loadFromFile() /* ÔÚclasspathÖÐÕÒ.classÎļþ */ -> ûÕÒµ½£¬ÖÃÒì³£NoClassDefFound. |
µ«ÊÇ£¬Intellij IDEAΪºÎÔÚÔËÐÐʱ²»½«storm-core.jar°üº¬½øclasspathÄØ£¿
»»¾ä»°Ëµ£ºÎªÉ¶±»´òÁ³£¿£¿

(²é¿´´óͼ)
´òÁ³µÄÀíÓɺܼòµ¥£º
F5->run£¬ÏÈmake/compile/build£¬ÔÙÔËÐÐ.
ÒÀÀµµÄscopeÉèΪÁËprovided£¬´ËÉèÖýöÔÚ±àÒë½×¶Î½«ÒÀÀµµÄjar°ü¼ÓÈëclasspath£¬ÔÚÔËÐн׶Σ¬²»»á½«jar°ü¼ÓÈëclasspath.
½â¾öµÄ·½·¨Ò²·Ç³£¼òµ¥£º
Èç¹û²»ÊÇͨ¹ýmvnÀ´ÔËÐУ¬¶øÊÇÔÚIDEϵ÷ÊÔ/ÔËÐУ¬¸Ï½ô½«ÒÀÀµµÄjar°üµÄscopeѡΪcompile°É£¬Í×Í׵IJ»»á±»´òÁ³£¡
¿´ÏÂÊDz»ÊÇÍ×Í×µÄÄØ£¿
 |