继续昨天的工作,首先设置了一下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.为什么原版本可以创建表,后来的版本不能?
总之测试环境磕磕绊绊的搭建成功了。