安了一天hive,总算安好了。安装过程中出现了不少问题,记录一下……
hadoop版本 hadoop-0.20.2
按着网上文档,安装比较顺利
刚学了HIVE,想试着安装一下
文档上写的是用hive-0.8.1
发现apache无法下载这个版本了,最老的是hive-0.10.0
网上随便找了一个。
1.解压
[hadoop@hadoop0 ~]tar -zxvf hive-0.8.1.tar.gz
(我的hadoop、hive相关目录全在hadoop用户下)
2.配环境变量
[hadoop@hadoop0 ~]$ vi .bash_profile
# .bash_profile
# Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin MYSQL_HOME=/home/hadoop/mysql-5.5.24-linux2.6-i686 JAVA_HOME=/usr/java/jdk1.6.0_45 HIVE_HOME=/home/hadoop/hive-0.10.0 HADOOP_HOME=/home/hadoop/hadoop-0.20.2 PATH=$JAVA_HOME/bin:$MYSQL_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/tools.jar
export PATH CLASSPATH JAVA_HOME HADOOP_HOME HIVE_HOME MYSQL_HOME
(注:必须配好HADOOP_HOME。hive是建立在hadoop上的,存在依赖关系,执行hive命令的时候,会自动寻找HADOOP_HOME,必须保证能找到)
3.配置文件
cp hive-default.xml.template hive-site.xml
4.测试
执行hive
没报错
执行show tables;
没报错,OK!
hive 的元数据要保存到关系型数据库中,默认的会放到hive自带的derby中。网上看了,这种方式是不支持多用户同时访问的,所以要改成mysql数据库。
5.安装mysql数据库(我用的是mysql-5.5.24-linux2.6-i686)
网上要新建用户,赋权什么的,感觉麻烦,直接用了root ,设置密码123456
同时把mysql-connector-java-5.1.25-bin.jar 放到/home/hadoop/hive-0.10.0/lib 中
ok !
6.修改配置文件
cat hive-site.xml <configuration> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> </configuration>
以上是我按网上的操作执行,本来以为万无一失的,但是错了……
执行show tables;
java.lang.IllegalArgumentException: URI: does not have a scheme
网上说是找不到元数据信息什么的,或是说连接数据库的URI错了
我仔细看了hive-site.xml,实在看不出有什么问题
难道是我网上下的HIVE有问题?
于是我网上到apache官网下了hive-0.10.0。
解压,配$HIVE_HOME.
执行hive
报错。我看了一下,应该是没有找到hive的配置文件。
执行
cp hive-default.xml.template hive-site.xml
执行hive
报错。
查看日志文件
我勒个去……官方的xml文件竟然也有错,有好几处的<description>竟然没有对应的</description>
我觉得以后有必要对官方的开源项目持必要的质疑态度了
把对应的地方给填上</description>
执行hive
OK!
执行show tables;
OK!
配配置文件hive-site.xml
cat hive-site.xml <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> </configuration>
注意,hive-0.10.0的配置文件里是没有
<property><name>hive.metastore.local</name>
<value>true</value>
</property>
这个属性的。配好上面的,就会自动转成用MYSQL存储元信息
引入mysql-connector-java-5.1.25-bin.jar
执行hive
OK
执行show tables;
Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
更改hive-log4j.properties
hive.root.logger=DEBUG,DRFA
在执行hive
show tables;
到/tmp/hadoop/hive.log里查看日志信息,发现
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
网上查了,才明白原因。
对于数据库,要想通过用户名远程访问,必须要开设相关权限才行
我以前在windows上用MYSQL是图形安装的,可能已经赋过权限了
现在在LINUX上没有进行赋权操作,难怪不行呢
进入MYSQL,执行
CREATE USER 'hive' IDENTIFIED BY 'hive'; GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
修改hive-site.xml
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> </configuration> 执行hive
执行show tables;
终于成功了!
我又在我之前的hive-0.8.1上试了,但是还是不行。具体原因也懒得追究了
总结:
安装过程
1.解压hive.tar.gz
2.配环境变量HIVE_HOME
3.安装mysql
4.建立hive用户和数据库,并赋权
5.配hive-site.xml
OK!
说着简单,但是不尝试真的不知道还有一些东西是需要学习的!