分享

hive问题

自定义 Hive 使用的 Map/Reduce 脚本,怎么写,最主要是怎么使用

已有(3)人评论

跳转到指定楼层
pig2 发表于 2013-12-13 18:11:37
具体写法,可以参考这个帖子:
http://www.aboutyun.com/thread-5907-1-1.html
该如何使用,下面仅供参考:hive是facebook发布的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.


有正在逐步完善的jdbc,odbc接口.

下载:
http://hadoop.apache.org/hive/releases.html

0.4 changelog请查看:
http://hadoop.apache.org/hive/docs/r0.4.0/changes.html

hive的sql支持情况:
支持join,子查询,group by
完整参考手册:
http://wiki.apache.org/hadoop/Hive/LanguageManual

如果你觉得在使用hadoop过程中是用于统计分析,觉得编写MapReduce复杂的话,hive是最好的选择,国内也有多家公司在使用.


回复

使用道具 举报

yuwenge 发表于 2013-12-13 18:28:16
这里补充一下:
使用eclipse调试hive mapreduce
我们知道Hive经过一些转换后,提交job到hadoop,一般我们只能debug到submitJob这里,而不知道后面那些mapper到底是怎样执行的。如果想要跟踪一下像SelectOperator是怎么处理的怎样做呢?
解决方法使用local模式运行
确保配置hive-site.xml中mapred.job.tracker设为local
  1. <font size="3"><property>
  2. <name>mapred.job.tracker</name>
  3. <value>local</value>
  4. </property></font>
复制代码

在hadoop的mapred-site.xml也有mapred.job.tracker配置,我这里也设为了local(不确定是否可以不设置)
如果设为local,系统会调用命令的方式运行
  1. <font size="3">//MapRedTask.java
  2.   public int execute(DriverContext driverContext) {
  3.        //....
  4.       // Run ExecDriver in another JVM
  5.       executor = Runtime.getRuntime().exec(cmdLine, env, new File(workDir));
  6.      //....
  7.   }</font>
复制代码
上面的代码会最终调用这样的命令
  1. <font size="3">/home/fatkun/hadoop/bin/hadoop jar /home/fatkun/local/hive-0.7.1-cdh3u4/lib/hive-exec-0.7.1-cdh3u4.jar org.apache.hadoop.hive.ql.exec.ExecDriver  -plan file:/tmp/fatkun/hive_2012-10-21_19-55-58_644_8079645408059698793/-local-10002/plan.xml  -jobconf ...
  2. </font>
复制代码

如果这里提示找不到null/bin/hadoop,是环境变量HADOOP_HOME读取不到的原因,在eclipse的debug environment加上一个HADOOP_HOME配置
远程 debug hadoop其实貌似不像远程debug,都是在本地进行的,我们知道上面是通过hadoop jar运行的。拷贝%HADOOP_HOME%/bin/hadoop一个备份出来,然后修改这个文件。
  1. <font size="3"># 找到jar这一行
  2. elif [ "$COMMAND" = "jar" ] ; then
  3.   CLASS=org.apache.hadoop.util.RunJar
  4.   # 加上下面这一行代码用于调试,6666是端口
  5.   HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=6666,server=y,suspend=y"
  6.   HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"</font>
复制代码

这样,每次调用hadoop jar这个命令时,就会等着eclipse调试了。
eclipse在Debug configuration配置一个Remote Java Application,端口填6666就可以开始调试了。
hadoop调试的更多信息点击这里
这样就可以在ExecMapper.java下断点调试了。

回复

使用道具 举报

sstutu 发表于 2013-12-13 18:43:47
你可以参考这个帖子:Ubuntu下安装eclipse开发环境for Hive(mysql)
http://www.aboutyun.com/thread-5910-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条