خلفية المشكلة
في منصة البيانات ، يتطلب إنشاء المشروع استخدام ES و HBase لإنشاء واجهة استعلام البيانات. أثناء عملية التكامل ، تحدث حزمة JAR: com.google.common.base.stopwatch. () V من الفئة org.apache.hadoop.hbase.zookeeper.metatableCator
org.apache.hadoop.hbase.donotretryioException: java.lang.illegalaccesserror: حاول الوصول إلى طريقة com.google.common.base.stopwatch. org.apache.hadoop.hbase.client.rpcretryingCaller.TransLateException (rpcretryingcaller.java:239) على org.apache.hadoop.hbase.client.rpcretryingcaller.callwithretries (rpcretryingcaller.java:150) ... java.lang.thread.run (thread.java:745) سبب: java.lang.illegalaccesserror: حاول الوصول إلى طريقة com.google.common.base.stopwatch. org.apache.hadoop.hbase.zookeeper.metatableLoCator.Blockuntil ... في org.apache.hadoop.hadoop.hbase.client.regionservercallable.prepare (regionservercallable.java:75) في org.apache.hadoop.hbase.client.rpcretryingCaller.CallWithRetries (rpCretryingCaller.java:134) ... 45 المزيد
حل
بعد التحقيق ، تم التأكيد على أنه كان صراعًا ناجم عن حزمة com.google.guava. يعتمد ES على الإصدار 18 وما فوق ، بينما يدعم HBase الإصدار 16 وما فوقه فقط. تتغير حزمة الجوافة داخليًا من 17 وتتغير الطريقة ، لذلك لن تكون 18 متوافقة مع الإصدار 16. أثناء تشغيل المشروع ، إذا تم تقديم إصدارات 16 و 18 في نفس الوقت ، فسيتم الخلط بين عملية استدعاء ES و HBase. ثم سيكون من السهل القيام به بعد ذلك. يمكننا إعادة التعبئة ، واكتب الجوافا 18 في ES ، ثم عرض الحزمة التي تشير إلى إصدار Goava16 في ملف POM. وبهذه الطريقة ، تستدعي ES Goava18 التي يتم إدخالها داخل الحزمة ، بينما يستدعي HBase Goava16 الذي يتم إدخاله في الخارج.
إعادة التعبئة
قم بإنشاء مشروع Maven جديد وتكوينه في ملف POM على النحو التالي:
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <Dodeversion> 4.0.0 </sodelverversion> <! في ES ، المطلوبة الجوافة 18+ أو فوق. ولكن في HBase يجب أن تستخدم الجوافة 16- أو ضربة. CD دليل المشروع وتشغيله. بعد ذلك ، اضبط Project POM.xml Whatth: <Rependency> <roupeD> douguo.shaded.elasticsearch </groupId> <StifactId> douguo_shaded_elasticsearch </artifactid> <sophid> 1.0-snapshot </version> <Svislusions> <visplusid> org.elastics </groupid> <StifactId> elasticsearch </suntifactid> </section> </siversions> </premency> أخيرًا ، سيتم إصلاح comflic الخاص بك. date: 2017-11-30 author: Zhangjianfeisince: douguo.shaded.elasticsearch -1.0.0-> <roupiD> douguo.shaded.elasticsearch </groupiD> <StifactId> douguo_shaded_elasticsearch </artifactid> <Elasticsearch.version> 2.4.1 </elasticsearch.version> </properties> <تبعية> <reperency> <roupiD> org.elasticsearch </groupId> <StifactId> elasticsearch <StifactId> shield </stifactid> <soph> $ {elasticsearch.version} </version> </reperence> </repreadencies> <build> <clupins> <roupiD> org.apache.maven.plugins </groupid> <SreneePendencyRedGupedPom> false </redentependencyregedpom> </ispification> <evelop> <phase> الحزمة </phase> <irod> <irod> الظل </goal> </tore> <configuration> <roloCations> <rallocation> <dategy> com.google.guava </patterdepattern> douguo <Rexlocation> <turda> org.joda </tation> <SadedPattern> douguo.shaded.elasticsearch.joda </sadedpattern> </shanplocation> <rovel> <datple> com.google <Tugment> com.google.thirdparty </tation> <SadedPattern> douguo.shaded.elasticsearch.thirdparty </sadedpattern> </sromocation> </relocations> <transformers> <transformer> <transformer>/transformers>/transformation>/transformation>/transformation>/transformation>/transformation </ </evelop> </executions> </suncloy> </bustic> <spositories> <Respository> <Id> elasticsearch-releases </id> <Url> http://maven.elasticsearch.org/relise </url> <Urlease> </enipper <uceded> false </texuped> </sflishots> </ropository> </ropository> </spositories> </project> Migrate org.joda وغيرها من الحزم الجرة المتضاربة الأخرى من خلال المكون الإضافي Maven-shade-plugin وحزم جرة إعادة النوع بحيث عند تقديم هذه الحزمة الجرة ، يمكنك استخدام تبعيات حزمة JAR بدلاً من استخدام التبعيات الخارجية. تجدر الإشارة هنا إلى أن جميع com.google.common و 4 حزم أخرى تحتاج إلى أن تكون متوقفة ، وإلا java.lang.IlegalAccessError: حاول الوصول إلى طريقة com.google.common.base خطأ.
حزمة المشروع
MVN تثبيت نظيف
ستكون حزمة التبعية الجديدة في مستودع .m2 Maven. إذا قامت الشركة ببناء المستودع ، فمن الضروري تحميل حزمة JAR. إذا قمت بتشغيل حزمة JAR مباشرة ، تذكر إعادة ترجمة المشروع واستبدال دليل LIB
يقوم المشروع بتحميل الحزمة الجديدة
فقط قم بتكوينه في ملف POM:
<!-douguo.shaded.elasticsearch-> <redency> <roupeD> douguo.shaded.elasticsearch </groupId> <StifactId> douguo_shaded_elasticsearch </stifactid> <splect> <StifactId> elasticsearch </artifactid> </section> </arvisions> </sependency> <!-https://mvnrepository.com/artifact/com.google.guava/guava-> <!-هذا الجوافا يستخدم فقط في ES ، 18.0+ مطلوب ، لكن Hbase يدعم فقط 16.0. تنظيف مثل تثبيت douguo.shaded.elasticsearch -> <reperency> <roupend> com.google.guava </rougeid> <intifactid> goaava </stifactid> <الإصدار> 16.0 </version> </dependency>
وبهذه الطريقة ، تكون حزمة Guava18 تحت douguo.shaded.elasticsearch ، وسيتم استدعاء ES أولاً. سيتم استدعاء Goava16 التي تم تكوينها خارجيًا بواسطة HBase. توجد نسختان من حزم الجرة بشكل مستقل عن بعضها البعض!
في هذه المرحلة ، تم حل المشكلة!
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.