首先解释一下标题,为什么叫“hive体验”,是因为windows上并不能运行hive。
本人想在win7,cygwin平台上把hive试验出来,尝试了2个星期,试验了好几种hadoop和hive的版本,均以失败而告终。google搜索出来的各种信息也均表示windows上并不能运行hive,就连一向解燃眉之急的stackoverflow上搜索之也都是只有问题,没有回答。所以本人经历了N次失败后,决定暂时放弃了。
说一下我实验的步骤和结果:我是按照 [url=https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-SimpleExampleUseCases]官方Simple Example Use Cases[/url] 来做的,前面几步包括进入hive,执行show tables, CREATE TABLE,LOAD DATA都成功了,唯独卡在最后一步SELECT COUNT(*) FROM u_data上,屡次试验都以失败告终。
这里记录一下前面几步的步骤,对于想在windows上“体验”hive的同学来说也算是一个参考吧。
1.环境
以下两套试验成功(但最后一步SELECT COUNT(*) FROM u_data失败)
[table]
||环境A|环境B|
|win7|64bit|64bit|
|cygwin|64bit|64bit|
|jdk|1.6.0_43 64bit|1.6.0_43 64bit|
|hadoop|0.20.2|1.2.1|
|hive|0.5.0-dev|0.13.1|
[/table]
2.步骤
这里的步骤基于环境A来说的。
2.1 启动ssh
2.2 启动hadoop
2.3 进入hive
输入bin/hive
有些同志(包括我)启动hive后,然后出现 hive> 提示符后不管输入什么,命令行就是没有反应!我一开始还以为hive没装成功呢,然后搜到[url=https://hadooptips.wordpress.com/2013/08/13/hive-and-piggrunt-shell-hangs-on-cygwin/]国外某个老兄的博客[/url]后发现原来这是cygwin的一个问题。
问题出在cygwin创建在桌面的快捷图标。
如果右键单击图标,会发现路径是
<cygwin_home>\bin\mintty.exe -i /Cygwin-Terminal.ico -
把他改为以下即可
<cygwin_home>\Cygwin.bat -i /Cygwin-Terminal.ico -
当然,不改也行,我们直接到<cygwin_home>目录下,然后双击Cygwin.bat就可以了
OK啦,我们用这种方法进入cygwin,然后进入到hive目录执行
$ [color=blue]bin/hive[/color]
Logging initialized using configuration in jar:file:/D:/opensource/hadoop/hive-0
.13.1/lib/hive-common-0.13.1.jar!/hive-log4j.properties
hive> [color=blue]show tables;[/color]
OK
Time taken: 0.523 seconds
hive>
这样就一切正常了。
这国外老兄怎么发现这个解决方案的,佩服佩服!
2.4 按照[url=https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-SimpleExampleUseCases]官方Simple Example Use Cases[/url] 来做
$ [color=blue]bin/hive[/color]
hive> [color=blue]show tables;[/color]
OK
Time taken: 8.05 seconds
hive>[color=blue]CREATE TABLE u_data (
userid INT,
movieid INT,
rating INT,
unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;[/color]
OK
Time taken: 0.618 seconds
hive> [color=blue]show tables;[/color]
OK
u_data
Time taken: 0.091 seconds
下载数据http://files.grouplens.org/datasets/movielens/ml-100k.zip,解压复制到d盘
hive>[color=blue]LOAD DATA LOCAL INPATH 'd:\u.data'
OVERWRITE INTO TABLE u_data;[/color]
如果这句失败请换一种方法:
先把文件复制到hdfs中,然后再load from hdfs
[color=blue]hadoop fs -copyFromLocal d:/u.data /data/u.data
LOAD DATA INPATH '/data/u.data'
OVERWRITE INTO TABLE u_data;[/color]
以上都是成功的,然后下面最后这句死活不成功:
SELECT COUNT(*) FROM u_data;
SELECT COUNT(1) FROM u_data;
* hive0.5请用SELECT COUNT(1), 之后的版本请用SELECT COUNT(*)
3. 环境B的注意点
如果用hadoop1.2.1+hive1.13.1的话,以下点要注意:
3.1 需要下载改过的hadoop-core-1.2.1.jar
不改会报诸如此类的错:
Exception in thread "main" java.io.IOException:Failed to set permissions of path: to 0700
请参考[url]http://yangshangchuan.iteye.com/blog/1839784[/url]并下载高手改过的hadoop-core-1.2.1.jar,然后替换原来的jar包。如果不想删原来的jar包那也一定要将它的扩展名改掉,比如改成hadoop-core-1.2.1.jar.bak。
3.2 忽略安全
修改hdfs-site.xml,增加如下配置
然后步骤和2描述的一样,到最后这句还是失败:
SELECT COUNT(*) FROM u_data;
4.写在最后
最后,说一句,有linux条件的同学还是在linux上实验吧,因为在linux下是没有问题的。当然个人觉得把hadoop java api编程学好也可以了。毕竟感觉hive还是给不懂java的数据分析人员用的,hive只是把sql转换成map reduce程序罢了。不知道我理解的的对不对,欢迎指正 :)
本人想在win7,cygwin平台上把hive试验出来,尝试了2个星期,试验了好几种hadoop和hive的版本,均以失败而告终。google搜索出来的各种信息也均表示windows上并不能运行hive,就连一向解燃眉之急的stackoverflow上搜索之也都是只有问题,没有回答。所以本人经历了N次失败后,决定暂时放弃了。
说一下我实验的步骤和结果:我是按照 [url=https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-SimpleExampleUseCases]官方Simple Example Use Cases[/url] 来做的,前面几步包括进入hive,执行show tables, CREATE TABLE,LOAD DATA都成功了,唯独卡在最后一步SELECT COUNT(*) FROM u_data上,屡次试验都以失败告终。
这里记录一下前面几步的步骤,对于想在windows上“体验”hive的同学来说也算是一个参考吧。
1.环境
以下两套试验成功(但最后一步SELECT COUNT(*) FROM u_data失败)
[table]
||环境A|环境B|
|win7|64bit|64bit|
|cygwin|64bit|64bit|
|jdk|1.6.0_43 64bit|1.6.0_43 64bit|
|hadoop|0.20.2|1.2.1|
|hive|0.5.0-dev|0.13.1|
[/table]
2.步骤
这里的步骤基于环境A来说的。
2.1 启动ssh
2.2 启动hadoop
2.3 进入hive
输入bin/hive
有些同志(包括我)启动hive后,然后出现 hive> 提示符后不管输入什么,命令行就是没有反应!我一开始还以为hive没装成功呢,然后搜到[url=https://hadooptips.wordpress.com/2013/08/13/hive-and-piggrunt-shell-hangs-on-cygwin/]国外某个老兄的博客[/url]后发现原来这是cygwin的一个问题。
问题出在cygwin创建在桌面的快捷图标。
如果右键单击图标,会发现路径是
<cygwin_home>\bin\mintty.exe -i /Cygwin-Terminal.ico -
把他改为以下即可
<cygwin_home>\Cygwin.bat -i /Cygwin-Terminal.ico -
当然,不改也行,我们直接到<cygwin_home>目录下,然后双击Cygwin.bat就可以了
OK啦,我们用这种方法进入cygwin,然后进入到hive目录执行
$ [color=blue]bin/hive[/color]
Logging initialized using configuration in jar:file:/D:/opensource/hadoop/hive-0
.13.1/lib/hive-common-0.13.1.jar!/hive-log4j.properties
hive> [color=blue]show tables;[/color]
OK
Time taken: 0.523 seconds
hive>
这样就一切正常了。
这国外老兄怎么发现这个解决方案的,佩服佩服!
2.4 按照[url=https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-SimpleExampleUseCases]官方Simple Example Use Cases[/url] 来做
$ [color=blue]bin/hive[/color]
hive> [color=blue]show tables;[/color]
OK
Time taken: 8.05 seconds
hive>[color=blue]CREATE TABLE u_data (
userid INT,
movieid INT,
rating INT,
unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;[/color]
OK
Time taken: 0.618 seconds
hive> [color=blue]show tables;[/color]
OK
u_data
Time taken: 0.091 seconds
下载数据http://files.grouplens.org/datasets/movielens/ml-100k.zip,解压复制到d盘
hive>[color=blue]LOAD DATA LOCAL INPATH 'd:\u.data'
OVERWRITE INTO TABLE u_data;[/color]
如果这句失败请换一种方法:
先把文件复制到hdfs中,然后再load from hdfs
[color=blue]hadoop fs -copyFromLocal d:/u.data /data/u.data
LOAD DATA INPATH '/data/u.data'
OVERWRITE INTO TABLE u_data;[/color]
以上都是成功的,然后下面最后这句死活不成功:
SELECT COUNT(*) FROM u_data;
SELECT COUNT(1) FROM u_data;
* hive0.5请用SELECT COUNT(1), 之后的版本请用SELECT COUNT(*)
3. 环境B的注意点
如果用hadoop1.2.1+hive1.13.1的话,以下点要注意:
3.1 需要下载改过的hadoop-core-1.2.1.jar
不改会报诸如此类的错:
Exception in thread "main" java.io.IOException:Failed to set permissions of path: to 0700
请参考[url]http://yangshangchuan.iteye.com/blog/1839784[/url]并下载高手改过的hadoop-core-1.2.1.jar,然后替换原来的jar包。如果不想删原来的jar包那也一定要将它的扩展名改掉,比如改成hadoop-core-1.2.1.jar.bak。
3.2 忽略安全
修改hdfs-site.xml,增加如下配置
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
然后步骤和2描述的一样,到最后这句还是失败:
SELECT COUNT(*) FROM u_data;
4.写在最后
最后,说一句,有linux条件的同学还是在linux上实验吧,因为在linux下是没有问题的。当然个人觉得把hadoop java api编程学好也可以了。毕竟感觉hive还是给不懂java的数据分析人员用的,hive只是把sql转换成map reduce程序罢了。不知道我理解的的对不对,欢迎指正 :)