继续昨天的工作,首先设置了一下SecureCRT的自动登录,还是比较简单的。

之后在~/.bashrc里设置环境变量:

export JAVA_HOME=/home/work/xxx/java6
export JRE_HOME=/home/work/xxx/java6/jre
export HADOOP_HOME=/home/work/xxx/hadoop
export HIVE_HOME=/home/work/xxx/hive
export PAth=.:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

~/.bash_profile是在bashrc之后执行的,当然一些个性设置也可以设置到bash_profile里。之后运行. ~/.bashrc使设置生效。

查看mysql,可以用root登录localhost了,修改hive设置。

启动hadoop:bin/start-all.sh,失败,查看hadoop的bin目录,发现没有start-all.sh这个文件,想了一下,这个hadoop只是给hive用的一个连接hadoop集群的客户端,其实集群已经运行起来了,所以不需要start。

启动hive,show tables,报错“Access deny, can't connect by root@127.0.0.1”,到mysql里测试,localhost可以连,127.0.0.1不行。记得redhat有这个毛病,需要修改网络设置。ifconfig不能用,用/sbin/ifconfig,没有发现怎么修改,之后google到修改/etc/hosts,发现hosts里面已经设置了。找到这篇文章(mysql能用localhost连接不能使用127.0.0.1连接的解决办法http://www.2cto.com/database/201111/112601.html),但感觉原因都不像,又看到mysql.user表的小问题,利用下面的语句解决问题:

grant all privileges on *.* to 'root'@'127.0.0.1' identified by 'xxx';
flush privileges;

再进入hive,show tables依然报错“FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Unknown database 'inf_hive'”,修改hive-site。xml配置:

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <!--value>jdbc:mysql://localhost:3306/inf_hive</value-->
    <value>jdbc:mysql://localhost:3306/inf_hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
</property>

依然报错,“Specified key was too long; max key length is 765 bytes”,到mysql中的hive数据库里执行 alter database hive character set latin1;改变hive元数据库的字符集,问题解决!

进入hive,建表,导入测试数据,一切正常。到hdfs中查看,xxx目录下没有产生任何东西。退出hive再进去,表中的数据丢失。到mysql中调查,查看DBS表中的DB_LOCATION_URI,元数据库被建在hdfs的tmp目录下,是一个session_warehouse开头的文件名。google没有找到任何相关的内容。查看hive及hadoop设置无果。怀疑是mysql报错导致元数据库不完整。重装mysql,运行到中间失败,cancel掉,kill掉mysql相关的进程(见Linux 查看进程和删除进程):

ps 命令用于查看当前正在运行的进程。
grep 是搜索
例如: ps -ef | grep java
表示查看所有进程里 CMD 是 java 的进程信息
ps -aux | grep java
-aux 显示所有状态
(e 显示所有进程,环境变量; f 全格式
3. kill 命令用于终止进程
例如: kill -9 [PID]
-9 表示强迫进程立即停止
通常用 ps 查看进程 PID ,用 kill 命令终止进程

删除源目录,重装,成功。测试,问题依然存在。怀疑是hive版本的问题,从线上导入一份新的hive。测试后发现创建了元数据库,不能创建元数据表。自己利用hive下script文件夹中的脚本创建hive元数据表,测试一切正常。新元数据表数量大于原来的hive版本创建的。后根据hive-user组的邮件,有些配置在hive-default里默认是没有的,但是是有作用的,如下:

<property>
  <name>datanucleus.autoCreateTables</name>
  <value>true</value>
</property>
 
<property>
  <name>datanucleus.fixedDatastore</name>
  <value>false</value>
</property>
 
<property>
  <name>datanucleus.autoCreateSchema</name>
  <value>true</value>
</property>

未解之谜:1. 前后两个版本创建的hive表为什么不一致?2.为什么原版本可以创建表,后来的版本不能?

总之测试环境磕磕绊绊的搭建成功了。

 

posted on 2013-03-01 11:21  风生水起  阅读(1219)  评论(0编辑  收藏  举报