hive相关

On 十一月 24, 2012, in 技术记录, by pensz

最近一直使用hadoop hive做数据分析,遇到一些问题,也收获一些,记一下。

一些经验和大家分享:

1 使用external table会比较方便管理,将数据放到hdfs中,然后再基于hdfs建external表,这样你可以随心所欲的管理你的数据,可以使用hive的external table来查询,也可以自己直接写mapreduce job来处理;使用external table的另外一个好处是可以随便改变table的schema,因为在drop table时数据不会丢失;只是删除元信息,所以,如果schema需要调整,删掉重新建就是了。

2 能使用hql做的事情还是用hql吧,写mapreduce毕竟麻烦,数据调试是个问题。

3 hql和sql还是有些地方不一样的,比如group by的时候不能用column的alias,详情可以参考我的这个回答

4 hql里面的条件可以随便的使用like ‘%%’ 了,因为基本上所有的hql都会转换成mapreduce job,所以,你使用like ‘%%’只是在map的时候稍微多了点计算量而已。

5 hwi玩玩还可以,但是无法真正用于生产环境:结果默认保存到内存中;输入的hql有错又不知道是什么错;跑一段时间会挂掉;界面极度难用等等,这些问题都是它被正式使用的障碍。

一些问题的解决方法:

hive报metadata错:

FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Unexpected exception caught.
NestedThrowables:
java.lang.reflect.InvocationTargetException
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

解决方法:删掉 $HADOOP_HOME/build ,这种情况很有可能是大家的hadoop用的是src版本,然后编译出来有build,具体为什么会因此报错,还不得而知。

hadoop datanode无法启动:

这个主要是mac os上会遇到,在$HADOOP_HOME/logs/*datanode*out 中看日志,会发现有:

Unable to load realm info from SCDynamicStore

在$HADOOP_HOME/conf/hadoop-env.sh 中设置一下HADOOP_OPTS即可

export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk"

hwi无法启动:

在$HIVE_HOME/conf/hdfs-site.xml中加入

<property>
    <name>hive.hwi.war.file</name>
    <value>/lib/hive-hwi-0.8.1.war</value>
    <description>注意上面的地,war换成你自己的包文件名称</description>
</property>
Tagged with:  

hadoop trails

On 十一月 24, 2012, in 技术记录, by pensz

最近在捣鼓hadoop相关东东,部门里面需要总结一个hadoop相关的trails,方便后面freshmen加入时可以参考。写了写,可能不对,供新手参考。自己也还是一个新手啊。

hadoop还是很多值得学习的地方,hadoop建立者Dogg Cutting 也是lucene的作者,现在又是ASF的主席。

 

名词解释

与hadoop关联的软件、名词非常多,这里列出一些常用的。

  • hadoop: 一整套分布式存储、计算解决方案
  • hdfs: 一套分布式文件系统
  • mapreduce: 一套分布式计算框架
  • hbase: 基于hdfs的column family 的nosql数据库
  • hive: 一套将类似sql的hql转换成mapreduce job的工具
  • thrift: 一套用于各种语言间通讯的协议以及实现

搭建环境

搭建基本的hadoop环境

  • 在本地环境搭建伪分布式的hadoop环境,包括基本的hdfs和mapreduce
  • 在本地环境搭建hive和hbase等关联的环境

检验

  • 本地能够搭建一个hadoop环境,并且实现以下功能
  • 将本地文件放入hdfs
  • 运行一个基于hdfs的mapreduce示例程序

使用hdfs

需要知道的知识

  • hadoop文件存放的方式
  • hadoop对文件系统操作命令行的使用

检验

  • 上传文件到hdfs
  • 从hdfs中获取文件到本地

使用mapreduce

需要知道的知识

  • 基本的java面向类编程
  • mapreduce的过程
  • 如何自己写一个mapreduce程序
  • 如何运行mapreduce程序

检验

  • 知道什么逻辑应该在map端处理,什么逻辑在reduce时处理
  • 写一个程序统计一个文件中各个单词出现的次数

进一步了解hdfs

需要知道的知识

  • hdfs的架构
  • namenode和datanode的作用
  • hdfs中的block

检验

  • 描述一个客户端上传文件到hdfs时,各个结点之间的通讯次序。

进一步了解mapreduce

需要知道的知识

  • 数据如何在map和reduce过程传递的
  • job是如何分配的
  • 输入的数据是如何分配给map程序的
  • map计算出来的结果是如何组织的,然后传递给reduce的
  • 一个任务map的个数取决于哪些因素

检验

  • 描述一个客户端提交了一个mapreduce的任务,hadoop内部各个结点做了哪些动作。
  • 自定义mapreduce的InputFormat, OutputFormat, Writable

 

Tagged with: