فشل إجراء oozie Sqoop في استيراد البيانات إلى الخلية
سؤال
أواجه مشكلة أثناء تنفيذ إجراء oozie skoop.في السجلات أستطيع أن أرى أن سكووب قادر على استيراد البيانات إلى الدليل المؤقت ثم يقوم سكووب بإنشاء نصوص برمجية للخلية لاستيراد البيانات.
فشل أثناء استيراد البيانات المؤقتة إلى الخلية.
في السجلات لا أحصل على أي استثناء.
يوجد أدناه إجراء سكوب الذي أستخدمه.
<workflow-app name="testSqoopLoadWorkflow" xmlns="uri:oozie:workflow:0.4">
<credentials>
<credential name='hive_credentials' type='hcat'>
<property>
<name>hcat.metastore.uri</name>
<value>${HIVE_THRIFT_URL}</value>
</property>
<property>
<name>hcat.metastore.principal</name>
<value>${KERBEROS_PRINCIPAL}</value>
</property>
</credential>
</credentials>
<start to="loadSqoopDataAction"/>
<action name="loadSqoopDataAction" cred="hive_credentials">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<job-xml>/tmp/hive-oozie-site.xml</job-xml>
<configuration>
<property>
<name>oozie.hive.defaults</name>
<value>/tmp/hive-oozie-site.xml</value>
</property>
</configuration>
<command>job --meta-connect ${SQOOP_METASTORE_URL} --exec TEST_SQOOP_LOAD_JOB</command>
</sqoop>
<ok to="end"/>
<error to="kill"/>
</action>
يوجد أدناه وظيفة سكوب التي أستخدمها لاستيراد البيانات.
sqoop job --meta-connect ${SQOOP_METASTORE_URL} --create TEST_SQOOP_LOAD_JOB -- import --connect '${JDBC_URL}' --table testTable -m 1 --append --check-column pkId --incremental append --hive-import --hive-table testHiveTable;
في سجلات Mapred أتلقى الاستثناء التالي.
72285 [main] INFO org.apache.sqoop.hive.HiveImport - Loading uploaded data into Hive
Intercepting System.exit(1)
<<< Invocation of Main class completed <<<
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1]
Oozie Launcher failed, finishing Hadoop job gracefully
Oozie Launcher ends
الرجاء الاقتراح.
المحلول
هذا يبدو وكأنه نموذجي استيراد سكووب إلى الخلية وظيفة.لذلك يبدو أن Sqoop نجح في استيراد البيانات إلى HDFS وفشل في تحميل تلك البيانات إلى Hive.
إليكم بعض الخلفية عما يحدث..يطلق Oozie مهمة منفصلة (والتي سيتم تنفيذها على أي عقدة في مجموعة hadoop الخاصة بك) لتشغيل أمر Sqoop.يبدأ أمر Sqoop مهمة منفصلة لتحميل البيانات إلى HDFS.بعد ذلك، في نهاية مهمة Sqoop، يقوم skoop بتشغيل برنامج نصي للخلية لتحميل تلك البيانات إلى الخلية.
نظرًا لأن هذا يتم تشغيله نظريًا من أي عقدة في مجموعة Hadoop الخاصة بك، فيجب أن تكون واجهة سطر الأوامر للخلية متاحة على كل عقدة وتتحدث إلى نفس المتجر التعريفي.سيحتاج Hive Metastore إلى التشغيل في الوضع البعيد.
المشكلة الأكثر شيوعًا هي أن Sqoop لا يمكنه التحدث إلى metastore الصحيح.الأسباب الرئيسية لذلك هي عادة:
خدمة خلية ميتاستور لا يعمل، لا يركض.يجب أن يتم تشغيله في الوضع البعيد ويجب بدء تشغيل خدمة منفصلة.إليك طريقة سريعة للتحقق من تشغيله:
حالة خدمة خلية ميتاستور
hive-site.xml
لا يحتويhive.metastore.uris
.هنا مثالhive-site.xml
معhive.metastore.uris
تعيين:<configuration> ... <property> <name>hive.metastore.uris</name> <value>thrift://sqoop2.example.com:9083</value> </property> ... </configuration>
hive-site.xml
لم يتم تضمينه في إجراء Sqoop الخاص بك (أو خصائصه).حاول إضافة hive-site.xml الخاص بك إلى ملف<file>
عنصر في عمل Sqoop الخاص بك.فيما يلي مثال لسير العمل.xml مع<file>
فيه:<workflow-app name="sqoop-to-hive" xmlns="uri:oozie:workflow:0.4"> ... <action name="sqoop2hive"> ... <sqoop xmlns="uri:oozie:sqoop-action:0.2"> ... <file>/tmp/hive-site.xml#hive-site.xml</file> </sqoop> ... </action> ... </workflow-app>
نصائح أخرى
يبدو أن هذا خطأ في SQOOP.لست متأكدا من جيرا #.ذكرت Hortonworks أن القضية لا تزال غير حل حتى في إصدار HDP 2.2.
@ abeaamase - أريد محاولة استخدام الحل الخاص بك.
فقط أريد أن تحقق ما إذا كان أدناه الحل يعمل بشكل جيد بالنسبة لاستيراد SQOOP + خلية في وظيفة OOZIE واحدة؟
... ... ... /tmp/hive-site.xml#hive-site.xml. ... ...
إذا كنت تستخدم CDH، فقد تكون المشكلة بسبب تعارضات الاعتماد المنتورة الخليفة.