2014-10-13 2 views
0

Мы два узла Hadoop пряжи кластера, то Hadoop 2,2, на котором мы запланировали два действия в одном рабочем процессе с использованием oozie, первое действие является питон карта-свертка потокового действия, а второй - sqoop export job, который фактически передает результат действия по уменьшению количества карт в базу данных mysql.Sqoop работа работает навсегда с помощью Oozie

Эффект потоковой передачи успешно выполняется, что приводит к запуску работы sqoop, которая остается запущенной навсегда.

stdout приводит к следующему.

Sqoop command arguments : 
     export 
     --connect 
     jdbc:mysql://localhost/database 
     --username 
     root 
     --password 
     root 
     --table 
     tableName 
     --direct 
     --export-dir 
     /user/hduser/oozieProject/workflow/output 

================================================================= 
Invoking Sqoop command line now >>> 

2137 [main] WARN org.apache.sqoop.tool.SqoopTool - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration. 
2158 [main] INFO org.apache.sqoop.Sqoop - Running Sqoop version: 1.4.4.2.0.6.1-102 
2170 [main] WARN org.apache.sqoop.tool.BaseSqoopTool - Setting your password on the command-line is insecure. Consider using -P instead. 
2178 [main] WARN org.apache.sqoop.ConnFactory - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration. 
2197 [main] INFO org.apache.sqoop.manager.MySQLManager - Preparing to use a MySQL streaming resultset. 
2197 [main] INFO org.apache.sqoop.tool.CodeGenTool - Beginning code generation 
2464 [main] INFO org.apache.sqoop.manager.SqlManager - Executing SQL statement:  SELECT t.* FROM `missedCalls` AS t LIMIT 1 
2483 [main] INFO org.apache.sqoop.manager.SqlManager - Executing SQL statement: SELECT t.* FROM `missedCalls` AS t LIMIT 1 
2485 [main] INFO org.apache.sqoop.orm.CompilationManager - HADOOP_MAPRED_HOME is /usr/local/hadoop 
3838 [main] INFO org.apache.sqoop.orm.CompilationManager - Writing jar file: /tmp/sqoop-hduser/compile/21bd1d5fe13adeed4f46a09f8b3d38fe/missedCalls.jar 
3847 [main] INFO org.apache.sqoop.mapreduce.ExportJobBase - Beginning export of missedCalls 
Heart beat 
Heart beat 
Heart beat 
Heart beat 
Heart beat 
Heart beat 
Heart beat 
Heart beat 

свойства рабочих мест заключается в следующем

nameNode=hdfs://master:54310 
jobTracker=master:8035 
queueName=default 

oozie.libpath=${nameNode}/user/hduser/share/lib 
oozie.use.system.libpath=true 
oozie.wf.rerun.failnodes=true 

oozieProjectRoot=${nameNode}/user/hduser/oozieProject 
appPath=${oozieProjectRoot}/workflow 
oozie.wf.application.path=${appPath} 
oozieLibPath=${oozie.libpath} 

mapred.tasktracker.map.tasks.maximum=4 
mapred.tasktracker.reduce.tasks.maximum=4 

inputDir=${oozieProjectRoot}/data/* 
outputDir=${appPath}/output 

XML-технологический процесс выглядит следующим образом

<!--Oozie workflow file: workflow.xml --> 
<workflow-app name="WorkflowStreamingMRAction-Python" xmlns="uri:oozie:workflow:0.1"> 
<start to="streamingaAction"/> 
<action name="streamingaAction"> 
    <map-reduce> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     <prepare> 
      <delete path="${outputDir}"/> 
     </prepare> 
     <streaming> 
      <mapper>python mapper.py</mapper> 
      <reducer>python reducer.py</reducer> 
     </streaming> 
     <configuration> 
      <property> 
       <name>oozie.libpath</name> 
       <value>${oozieLibPath}/mapreduce-streaming</value> 
      </property> 
      <property> 
       <name>mapred.input.dir</name> 
       <value>${inputDir}</value> 
      </property> 
      <property> 
       <name>mapred.output.dir</name> 
       <value>${outputDir}</value> 
      </property> 
      <property> 
       <name>mapred.reduce.tasks</name> 
       <value>4</value> 
      </property> 
     </configuration> 
     <file>${appPath}/mapper.py#mapper.py</file> 
     <file>${appPath}/reducer.py#reducer.py</file> 
    </map-reduce> 
    <ok to="sqoopAction"/> 
    <error to="killJobAction"/> 
    </action> 

    <action name="sqoopAction"> 
     <sqoop xmlns="uri:oozie:sqoop-action:0.2"> 
      <job-tracker>${jobTracker}</job-tracker> 
      <name-node>${nameNode}</name-node> 
      <command>export --connect jdbc:mysql://localhost/database --username root --password myPwd --table tableName --direct --export-dir /user/hduser/oozieProject/workflow/output</command> 
     </sqoop>   
    <ok to="end"/> 
    <error to="killJobAction"/> 
    </action> 
<kill name="killJobAction"> 
<message>"Killed job due to error: ${wf:errorMessage(wf:lastErrorNode())}"</message> 
</kill> 
<end name="end" /> 

Пожалуйста, советы, что могло пойти не так?

Спасибо

ответ

1

Не работает навсегда. Вам просто нужно подождать.

Во-первых, работа по экспорту Sqoop, которую вы видите выше, является просто графическим заданием Oozie. И Heart beat означает, что он работает сейчас. Вам просто нужно подождать. На самом деле вы можете перейти на страницу менеджера ресурсов YARN (обычно http: // $ namenode: 8088/cluster), а затем вы можете найти «реальное» экспортное задание Sqoop. (Я думаю, что по умолчанию число картографов равно 4.)

Во-вторых, Sqoop выполняет «экспорт» с помощью оператора INSERT, поэтому он относительно медленный. Я бы не предложил использовать экспорт Sqoop, если таблица большая, например, когда она содержит более 1 миллиона записей.

В-третьих, так как я заметил, вы пытаетесь экспортировать в MySQL, вы можете попробовать пакетный режим, который запускает INSERT запрос следующим образом: INSERT INTO <TABLE> VALUES (<ROW1>), (<ROW2>), etc.

Таким образом, вы можете изменить свою команду: sqoop export -D sqoop.export.records.per.statement=1000 --connect jdbc:mysql://localhost/database --username root --password myPwd --table tableName --direct --export-dir /user/hduser/oozieProject/workflow/output --batch

+0

Thank вы FengWang :) – Maverick

+0

На самом деле причина, по которой мы столкнулись с проблемой, связана с MySQL. я настроил адрес привязки в файле my.cnf с localhost на IP-адрес машины, на которой находится сервер MySQL, и предоставил привилегии другим компьютерам в сети для доступа к серверу MySQL, а затем в команде sqoop мы заменили «localhost» на имя компьютера, в котором находится сервер. таким образом, решая мою проблему. – Maverick

Смежные вопросы