基于hadoop2.6安装hive与pig的问题

安装hive、pig时,需要在/etc/profile添加下面的环境变量

export HIVE_HOME=/usr/local/hive
export PIG_HOME=/usr/local/pig
export HIVE_CLASSPATH=/usr/local/hadoop/etc/hadoop/
export PIG_CLASSPATH=/usr/local/hadoop/etc/hadoop/

首先在安装hive1.1.0时候,遇到下面的问题,这里主要看有ERROR的地方:

[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
从字面意思可以很容易看出来,是由于jline的问题。

然后查看/usr/local/hadoop/share/hadoop/yarn/lib下面jline的版本为jline0.96.jar。而/usr/local/hive/lib目录下的jline的版本为jline2.12.jar。故而使用hive/lib目录下的jline.2.12.jar替换掉/usr/local/hadoop/share/hadoop/yarn/lib目录下的jline.0.96.jar。然后就可以正常启动hive了。

下面安装pig的是pig 0.14。然后出现了下面的错误:

[main]ERROR org.apache.pig.Main -ERROR 2998:Unhandled internal error.Found interface jline.Terminal,but class was expected
仔细研究错误,又是这个jline的问题。。。。。。

pig用的jline的版本是jlibe1.0.jar。目前Apache下面的版本是2.12。

整个下午翻遍internet没有结果。突然想到一个折,去Apache官网看看各个软件的发行时间。看到pig0.14的发行时间是2014年11月18,而hive1.1.0发行时间到2015年,不兼容是必须的情况嘛。然后更改hive的版本,改为hive1.0,发现这个版本的jline版本为jline-0.9.94.jar。然后利用pig/lib下的jline1.0.jar替换掉/usr/local/hadoop/share/hadoop/yarn/lib目录下的jline,然后启动hive、pig,发现均能正常启动了。。。。


网上找的pig与hive的区别:

Pig是一种编程语言,它简化了Hadoop常见的工作任务。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。
 
  Hive在Hadoop中扮演数据仓库的角色。Hive添加数据的结构在HDFS(hive superimposes structure on data in HDFS),并允许使用类似于SQL语法进行数据查询。与Pig一样,Hive的核心功能是可扩展的。
 
Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使其成为Hadoop与其他BI工具结合的理想交集。Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的应用程序。Pig相比Hive相对轻量,它主要的优势是相比于直接使用Hadoop Java APIs可大幅削减代码量。
 
本质上说说Pig与Hive。
经过Pig Latin的转换后变成了一道MapReduce的作业,通过MapReduce多个线程,进程或者独立系统并行执行处理的结果集进行分类和归纳。Map() 和 Reduce() 两个函数会并行运行,即使不是在同一的系统的同一时刻也在同时运行一套任务,当所有的处理都完成之后,结果将被排序,格式化,并且保存到一个文件。Pig利用MapReduce将计算分成两个阶段,第一个阶段分解成为小块并且分布到每一个存储数据的节点上进行执行,对计算的压力进行分散,第二个阶段聚合第一个阶段执行的这些结果,这样可以达到非常高的吞吐量,通过不多的代码和工作量就能够驱动上千台机器并行计算,充分的利用计算机的资源,打消运行中的瓶颈。
 
也就是说,Pig最大的作用就是对mapreduce算法(框架)实现了一套shell脚本 ,类似我们通常熟悉的SQL语句,在Pig中称之为Pig Latin,在这套脚本中我们可以对加载出来的数据进行排序、过滤、求和、分组(group by)、关联(Joining),Pig也可以由用户自定义一些函数对数据集进行操作,也就是传说中的UDF(user-defined functions)。
结论性的阅读感觉是:Pig用来写一些即时脚本吧,比如领导问你要份数据,半个小时要出来之类;Hive嘛,就是一个产品经理过来,问这个啥回事?于是你Hive一下,一个简洁的类SQL语句...Done!





你可能感兴趣的:(基于hadoop2.6安装hive与pig的问题)