文件/RDBMS -> flume/sqoop -> HDFS -> Hive -> HDFS -> Sqoop -> RDBMS

其中,本文实现了

  • 使用 sqoop 从 RDBMS 中读取数据(非Oozie实现,具体错误将在本文最后说明)
  • 从 Hive 处理数据存储到 HDFS
  • 使用 sqoop 将 HDFS 存储到 RDBMS 中\

1.复制一个 sqoop example,拷贝 hive-site.xml 文件,拷贝 mysql 依赖包到 lib 目录下

2.增加 sqoop-import.sql 文件用以从 RDBMS 读取数据到 Hive 中

  1. --connect
  2. jdbc:mysql://cen-ubuntu:3306/test
  3. --username
  4. root
  5. --password
  6. ubuntu
  7. --table
  8. user
  9. --hive-database
  10. default
  11. --hive-table
  12. import_from_mysql
  13. --hive-import
  14. --hive-overwrite
  15. --delete-target-dir

3.增加 select.sql 用于使用 Hive 处理数据导出到 HDFS 中(注意说明输出分隔符)

  1. insert overwrite directory '/user/cen/oozie-apps/sqoop2hive2sqoop/output/' ROW format delimited fields terminated by ',' select id,name from default.import_from_mysql;

4.增加 sqoop-export.sql 用于使用 sqoop 将 HDFS 文件导入到 RDBMS 中

  1. --connect
  2. jdbc:mysql://cen-ubuntu:3306/test
  3. --username
  4. root
  5. --password
  6. ubuntu
  7. --table
  8. export_from_hdfs
  9. --export-dir
  10. /user/cen/oozie-apps/sqoop2hive2sqoop/output/
  11. --fields-terminated-by
  12. ','

5.修改 job.properties 文件

  1. nameNode=hdfs://cen-ubuntu.cenzhongman.com:8020
  2. jobTracker=localhost:8032
  3. queueName=default
  4. oozieAppsRoot=oozie-apps
  5. oozie.use.system.libpath=true
  6. oozie.wf.application.path=${nameNode}/user/cen/${oozieAppsRoot}/sqoop2hive2sqoop/
  7. outputDir=sqoop2hive2sqoop/output

6.修改 workflow.xml 文件

  1. <workflow-app xmlns="uri:oozie:workflow:0.5" name="sqoop2hive2sqoop-wf">
  2. <start to="hive-node"/>
  3. <action name="hive-node">
  4. <hive xmlns="uri:oozie:hive-action:0.5">
  5. <job-tracker>${jobTracker}</job-tracker>
  6. <name-node>${nameNode}</name-node>
  7. <prepare>
  8. <delete path="${nameNode}/user/cen/${oozieAppsRoot}/${outputDir}"/>
  9. </prepare>
  10. <job-xml>${nameNode}/user/cen/${oozieAppsRoot}/sqoop2hive2sqoop/hive-site.xml</job-xml>
  11. <configuration>
  12. <property>
  13. <name>mapred.job.queue.name</name>
  14. <value>${queueName}</value>
  15. </property>
  16. </configuration>
  17. <script>select.sql</script>
  18. </hive>
  19. <ok to="sqoop-export-node"/>
  20. <error to="hive-fail"/>
  21. </action>
  22. <action name="sqoop-export-node">
  23. <sqoop xmlns="uri:oozie:sqoop-action:0.3">
  24. <job-tracker>${jobTracker}</job-tracker>
  25. <name-node>${nameNode}</name-node>
  26. <configuration>
  27. <property>
  28. <name>mapred.job.queue.name</name>
  29. <value>${queueName}</value>
  30. </property>
  31. </configuration>
  32. <command>export --options-file sqoop-export.sql</command>
  33. <file>${nameNode}/user/cen/${oozieAppsRoot}/sqoop2hive2sqoop/sqoop-export.sql#sqoop-export.sql</file>
  34. </sqoop>
  35. <ok to="end"/>
  36. <error to="sqoop-export-fail"/>
  37. </action>
  38. <kill name="hive-fail">
  39. <message>hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  40. </kill>
  41. <kill name="sqoop-export-fail">
  42. <message>Sqoop export failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  43. </kill>
  44. <end name="end"/>
  45. </workflow-app>

注意事项

  • 各个 action 节点的版本号
  • 用到文件拷贝,请使用 file 属性
  • Hive 的配置文件不能忘记

7.上传文件到 HDFS 上

8.执行 sqoop 从 MySQL 中读取数据到 Hive 中(此处出现错误 could not load org.apache.hadoop.hive.conf.HiveConf.Make sure HIVE_CONF_DIR is set corretly.原因及解决请看 注2 )

  1. bin/sqoop import --options-file /opt/cdh5.3.6/oozie-4.1.0-cdh5.12.0/oozie-apps/sqoop2hive2sqoop/sqoop-import.sql

9.检查 Hive 中是否已经存在数据,并执行 Oozie

  1. export OOZIE_URL=http://cen-ubuntu:11000/oozie/
  2. bin/oozie job --config /opt/cdh5.3.6/oozie-4.1.0-cdh5.12.0/oozie-apps/sqoop2hive2sqoop/job.properties -run

10.检查程序执行 Wordflow 和 MySQL 中的输出结果

注1:使用 Oozie 通过 sqoop import to hive 执行失败(同样的程序,本地执行成功),但日志无输出,此处贴出完整 wordflow.xml 文件仅供参考

  1. <workflow-app xmlns="uri:oozie:workflow:0.5" name="sqoop2hive2sqoop-wf">
  2. <start to="sqoop-import-node"/>
  3. <action name="sqoop-import-node">
  4. <sqoop xmlns="uri:oozie:sqoop-action:0.3">
  5. <job-tracker>${jobTracker}</job-tracker>
  6. <name-node>${nameNode}</name-node>
  7. <configuration>
  8. <property>
  9. <name>mapred.job.queue.name</name>
  10. <value>${queueName}</value>
  11. </property>
  12. </configuration>
  13. <command>import --options-file sqoop-import.sql</command>
  14. <file>${nameNode}/user/cen/${oozieAppsRoot}/sqoop2hive2sqoop/sqoop-import.sql#sqoop-import.sql</file>
  15. </sqoop>
  16. <ok to="hive-node"/>
  17. <error to="sqoop-import-fail"/>
  18. </action>
  19. <action name="hive-node">
  20. <hive xmlns="uri:oozie:hive-action:0.5">
  21. <job-tracker>${jobTracker}</job-tracker>
  22. <name-node>${nameNode}</name-node>
  23. <prepare>
  24. <delete path="${nameNode}/user/cen/${oozieAppsRoot}/${outputDir}"/>
  25. </prepare>
  26. <job-xml>${nameNode}/user/cen/${oozieAppsRoot}/sqoop2hive2sqoop/hive-site.xml</job-xml>
  27. <configuration>
  28. <property>
  29. <name>mapred.job.queue.name</name>
  30. <value>${queueName}</value>
  31. </property>
  32. </configuration>
  33. <script>select.sql</script>
  34. </hive>
  35. <ok to="sqoop-export-node"/>
  36. <error to="hive-fail"/>
  37. </action>
  38. <action name="sqoop-export-node">
  39. <sqoop xmlns="uri:oozie:sqoop-action:0.3">
  40. <job-tracker>${jobTracker}</job-tracker>
  41. <name-node>${nameNode}</name-node>
  42. <configuration>
  43. <property>
  44. <name>mapred.job.queue.name</name>
  45. <value>${queueName}</value>
  46. </property>
  47. </configuration>
  48. <command>export --options-file sqoop-export.sql</command>
  49. <file>${nameNode}/user/cen/${oozieAppsRoot}/sqoop2hive2sqoop/sqoop-export.sql#sqoop-export.sql</file>
  50. </sqoop>
  51. <ok to="end"/>
  52. <error to="sqoop-export-fail"/>
  53. </action>
  54. <kill name="sqoop-import-fail">
  55. <message>Sqoop import failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  56. </kill>
  57. <kill name="hive-fail">
  58. <message>hive failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  59. </kill>
  60. <kill name="sqoop-export-fail">
  61. <message>Sqoop export failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  62. </kill>
  63. <end name="end"/>
  64. </workflow-app>

原因剖析:错误出现在 sqoop-import-node

  • 找不到 hive 配置文件,尝试 (1):如 hive-node 一样增加说明 --> 无效 尝试(2):在 sqoop-import.sql 中增加 --hive-home /opt/xxx/xxx/xxx --> 无效 尝试(3):修改conf/cation-conf/hive.xml --> 并未配置
  • 无法从本地的 sqoop 执行 Hive ? ? 有机会再探索

注2:执行 sqoop 过程出现错误could not load org.apache.hadoop.hive.conf.HiveConf.Make sure HIVE_CONF_DIR is set corretly.

  • 原因:系统使用了变量$HADOOP_CLASSPATH 但本机未定义

  • 解决:增加用户环境变量~/.bash_profile

    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/cdh5.3.6/hive-1.1.0-cdh5.12.0/lib/*

详情请参考

Oozie 配合 sqoop hive 实现数据分析输出到 mysql的更多相关文章

  1. [转]云计算之hadoop、hive、hue、oozie、sqoop、hbase、zookeeper环境搭建及配置文件

     云计算之hadoop.hive.hue.oozie.sqoop.hbase.zookeeper环境搭建及配置文件已经托管到githubhttps://github.com/sxyx2008/clou ...

  2. 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式

    https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...

  3. Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递

    http://niuzhenxin.iteye.com/blog/1706203   Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql.postgresql.. ...

  4. oozie调度sqoop Job 数据库密码无法保存

    问题描述 通过oozie调度sqoop作业时,需要输入数据库作业密码,但在sqoop元数据服务配置密码后,过一段时间会失效. 解决方法 将数据库密码写入HDFS文件,通过配置Sqoop job,实现传 ...

  5. oozie调度sqoop脚本时操作符号替换

    oozie调度sqoop脚本时,sqoop中使用的sql查询语句,需要使用以下字符串替换操作符,否则会出现各种诡异的错误: //替换字符 < < Less than 小于 > > ...

  6. Hive中如何添加自定义UDF函数以及oozie中使用hive的自定义函数

    操作步骤: 1. 修改.hiverc文件 在hive的conf文件夹下面,如果没有.hiverc文件,手工自己创建一个. 参照如下格式添加: add jar /usr/local/hive/exter ...

  7. HUE中Oozie执行Sqoop

    Oozie执行Sqoop,传入参数(注意,在使用--query时,参数中一定不要带有空格,否则出错)1. 新建一个workflow 2. 拖入一个sqoop 3. sqoop抽取命令如下(建议先在命令 ...

  8. Oozie 之 sqoop 实战

    1.创建 lib 目录并拷贝 mysql 支持包 2.修改 job.properties 文件 nameNode=hdfs://cen-ubuntu.cenzhongman.com:8020 jobT ...

  9. Sqoop hive导出到mysql[转]

    通过Sqoop将Hive表数据导入到MySQL通常有两种情况. 第一种是将hive上某张表的全部数据导入到mysql对应的表中. 第二种是将hive上某张表中的部分数据导入到mysql对应的表中. 两 ...

随机推荐

  1. 二、Python安装扩展库

    第一步:推荐easy_install工具 下载地址:https://pypi.python.org/pypi/setuptools 下载"ez_setup.py"文件; 通过运行c ...

  2. SAP订单编排和流程增强概述

    SAP产品里的订单处理,无论是On-Premises解决方案还是云产品,我认为归根到底可以概括成四个字:订单编排,包含两个层次的内容: 1. 单个订单通过业务流程或者工作流驱动的状态迁移: 2. 多种 ...

  3. Gym - 101334F 单调栈

    当时我的第一想法也是用单调栈,但是被我写炸了:我也不知道错在哪里: 看了大神的写法,用数组模拟的: 记录下单调递增栈的下标,以及每个数字作为最小值的最左边的位置. 当有数据要出栈的时候,说明栈里的数据 ...

  4. 贪心算法,今年暑假不AC

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037 活动安排问题,可用贪心. 1.把活动按结束时间递增排序. 2.直观上,选择相对活动为未安排活动留 ...

  5. Bokeh 学习

    这段时间由于在做K-means对文本进行处理,需要进行绘图,实验室编程大哥向我介绍了Bokeh来进行绘图,一直是根据自己的需求来进行对其探索,今儿个看到一篇博文,对Bokeh进行了详细的解说,做个笔记 ...

  6. POJ 1330 Nearest Common Ancestors 【LCA模板题】

    任意门:http://poj.org/problem?id=1330 Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000 ...

  7. JavaScript常用方法

    判断运行客户端 function isPhone() { var flag = false; var userAgentInfo = navigator.userAgent; var Agents = ...

  8. 使用带有对象的data-ng-bind

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  9. Java基础随笔

    1.一些简单的dos命令: –       d: 回车     盘符切换 –       dir(directory):列出当前目录下的文件以及文件夹 –       del:删除文件 –       ...

  10. Alert Log删除

    标题:Renaming or Deleting the Alert Log While an Oracle Instance is Up & Running (文档 ID 74966.1) Q ...