Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19429
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 78
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-07 08:48
文章分类

全部博文(2)

文章存档

2013年(2)

我的朋友

分类: HADOOP

2013-02-14 16:50:58

基于hadoop集群的hive安装步骤

----嵌入式derby 模式



安装环境hadoop已经安装结束,mysql已经安装结束。hive是安装在集群中的主节点上(hostname:node0)

hadoop 版本号:hadoop-0.23.5


hive版本号:hive-0.8.1


derby版本号:db-derby-10.9.1.0


mysql版本号:mysql-5.1.47(linux redhat 安装时已经安装)


首先是hive的嵌入式模式的安装,

在hive嵌入式安装时默认的数据库是derby,

嵌入式模式的安装无法用于实际的工作,

即这种模式的运行环境无法支持双向同步或是集群工作。

但是可以用来对hive安装是否正确起到测试和调配作用,

待到嵌入模式下hive正确运行后,

可以在此基础上对配置文件做简单的调配就可以进行mysql安装配置了。

可以先创建好目录:

mkdir -p /usr/hive   用来存放hive压缩包解压后的相应文件

mkdir -p /usr/derby 用来存放derby解压后的相应文件
--------------------------------------------------------
将hive的压缩包从主机copy到虚拟机上的


/usr 目录下,


然后对压缩包进行解压,命令是:

tar -xzf  hive-0.8.1-bin.tar

解压后会在/usr目录下生成一个


hive-0.8.1-bin的文件夹,


切换到该文件夹下


cd  /usr/hive-0.8.1-bin 


ls
会看到conf lib bin 等相应的文件夹,

cp * -r /usr/hive   将所有的文件都拷贝到/usr/hive下

cd /usr     切换目录到/usr路径下

rm -r -f  hive-0.8.1-bin    这步可选,将原先的解压后的文件删除

-------------------------------------------------------------------
将derby的压缩包从主机copy到虚拟机上的/usr 目录下,

解压该压缩文件:

tar -xzf db-derby-10.9.1.0-bin.tar

解压后生成文件夹: db-derby-10.9.1.0-bin

将该文件夹下的所有内容转入到/usr/derby 文件夹下

cd  /db-derby-10.9.1.0-bin 

ls  执行这个命令之后会看见  bin lib  test 等一些文件夹

cp * -r  /usr/derby

cd   /usr

rm -f -r db-derby-10.9.1.0  将文件夹递归强制删除。
------------------------------------------------------------
这样derby被安装在/usr/derby 下

而hive则被安装在/usr/hive下,

安装路径的设置很重要,因为这关系到配置文件的改写。

-------------------------------------------------------------
vi /etc/profile

在末尾加上:

#set for hive

export HIVE_HOME=/usr/hive

export HIVE_CONF_DIR=/usr/hive/conf


//在系统中指出hive的配置文件所在


export PATH=$PATH:$HIVE_HOME/bin


//这个可以实现,只要输入hive,hive service就会自动响应,而不用必须输入hive所在的绝对路径。


export HIVE_LIB=$HIVE_HOME/lib 

由于hadoop已经安装上了,所以关于hadoop路径的export不再说明。

当然为了让profile文件立即生效:

source /etc/profile

这样既可生效。

-------------------------------------
接下来是对hive配置文件的调配

首先应该切换到目录:

cd /usr/hive/conf/

ls
会看见有:hive-env.sh.template这个文件,


(.template文件是模板文件,让用户参照其中的格式进行自定义的修改和优化)



将其cp并命名为:hive-env.sh 命令如下:



cp hive-env.sh.template  hive-env.sh



vi hive-env.sh



将export HADOOP_HEAPSIZE=1024前面的‘#’去掉



当然可以根据自己的环境对这个默认的1024进行优化



将export HADOOP_HOME前面的‘#’号去掉,



并让它指向您所安装hadoop的目录 (就是切换到这个目录下有hadoop的conf,lib,bin 等文件夹的目录),



(mine:HADOOP_HOME=/home/hadoop/hadoop)



其实在安装hive时需要指定HADOOP_HOME的原理基本上与



在安装Hadoop时需要指定JAVA_HOME的原理是相类似的。



Hadoop需要java作支撑,而hive需要hadoop作为支撑。



将export HIVE_CONF_DIR=/usr/hive/conf,并且把‘#’号去掉



将export HIVE_AUX_JARS_PATH=/usr/hive/lib



esc(键)


:wq



source /hive-env.sh(生效文件)

----------------------------------------------------------finish hive-env.sh

在修改之前,要相应的创建目录,以便与配置文件中的


路径相对应,否则在运行hive时会报错的。


mkdir -p /usr/hive/warehouse
mkdir -p /usr/hive/tmp
mkdir -p /usr/hive/log

cp  hive-default.xml.template   hive-site.xml

vi hive-site.xml

这个文件中的配置项很多,篇幅也很长,所以要有耐心看。

当然也可以使用搜索匹配字符串的方式进行查找:


键入‘/hive.metastore.warehouse.dir’(回车)


就会锁定到所需要的字符串上。


其中有三处需要修改:



hive.metastore.warehouse.dir


/usr/hive/warehouse



这个是设定数据目录

------------------------------------------------------------------------


hive.exec.scratdir


/usr/hive/tmp



这个是设定临时文件目录

------------------------------------------------------------
//这个在笔者的文件中没有可以自己添加



hive.querylog.location


/usr/hive/log



这个是用于存放hive相关日志的目录



其余的不用修改。

-------------------------------------------finish hive-site.xml

cp hive-log4j.properties.template  hive-log4j.proprties

vi hive-log4j.properties

hive.log.dir=

这个是当hive运行时,相应的日志文档存储到什么地方

(mine:hive.log.dir=/usr/hive/log/${user.name})

hive.log.file=hive.log


这个是hive日志文件的名字是什么



默认的就可以,只要您能认出是日志就好,


只有一个比较重要的需要修改一下,否则会报错。


log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter



如果没有修改的话会出现:


WARNING: org.apache.hadoop.metrics.EventCounter is deprecated.


please use org.apache.hadoop.log.metrics.EventCounter  in all the  log4j.properties files.


(只要按照警告提示修改即可)。


-------------------------------------------------------finish all

接着只要输入命令:hive


就可以显示出:


hive>


输入命令show tables;(不要忘记加上分号,否则不会执行)



输入命令exit;(不要忘记加上分号)


退出hive


---------------------------------------------------------finish install

接下来要配置的是mysql模式下的hive;


要使用hadoop来创建相应的文件路径,


并且要为它们设定权限:


hdfs dfs -mkdir -p  /usr/hive/warehouse  


hdfs dfs -mkdir -p /usr/hive/tmp


hdfs dfs -mkdir -p /usr/hive/log


hdfs dfs -chmod g+w /usr/hive/warehouse


hdfs dfs -chmod g+w /usr/hive/tmp


hdfs dfs -chmod g+w /usr/hive/log



此种模式下是将hive的metadata存储在Mysql中,


Mysql的运行环境支撑双向同步或是集群工作环境,


这样的话,至少两台数据库服务器上会备份hive的元数据。


既然在derby模式下的hive已经能够成功运行,


这就说明在系统中关于hive配置文件中的参数是正确的。


----------------------------------------------------------------------

----------------------------------------------------------------------

接下来是关于mysql的安装,


以及hive的配置文件关于mysql而进行一些参数的调配。

可以在系统中输入命令:



service mysqld restart

mysql

来判断计算机中是否安装有mysql。


如果系统中安有mysql,会出现提示:


mysql>    (进入到mysql的命令模式)

------------------------------------------


如果系统中没有安装可以从mysql官方网站下载。




----------------------------------------------
继续配置hive-site.xml文件:



hive.metastore.warehouse.dir


hdfs://node0:9000/usr/hive/warehouse

(这里就与前面的hdfs dfs -mkdir -p /usr/hive/warehouse相对应)




其中node0指的是笔者的NameNode的hostname;



hive.exec.scratchdir


hdfs://node0:9000/usr/hive/warehouse



//这个没有变化与derby配置时相同




hive.querylog.location


/usr/hive/log



------------------------------------------------------------------------------------------------------


javax.jdo.option.ConnectionURL


jdbc:mysql://localhost:3306/hive?createDatabaseIfNoExist=true




javax.jdo.option.ConnectionURL


这个参数使用来设置元数据连接字串

----------------------------------------------------


javax.jdo.option.ConnectionDriverName


com.mysql.jdbc.Driver



javax.jdo.option.ConnectionDriverName


关于在hive中用java来开发与mysql进行交互时,


需要用到一个关于mysql的connector,


这个可以将java语言描述的对database进行的操作,


转化为mysql可以理解的语句。


connector是一个用java语言描述的jar文件。


而这个connector可在官方网站上下载得到。


经证实即便connector与mysql的版本号不一致,


也可以实现相应的功能。


connector是要copy到/usr/hive/lib目录下面的。


cp  mysql-connector-java-5.1.1.18-bin  /usr/hive/lib
-----------------------------------------------------------


javax.jdo.option.ConnectorUserName


hive



这个javax.jdo.option.ConnectionUserName

是用来设置hive存放的元数据的数据库(这里是mysql数据库)的用户名称的。

而这个‘hive‘可以根据用户自己的需要来自行设置
--------------------------------------------------------------


javax.jdo.option.ConnectionPassword


hive



这个javax.jdo.option.ConnetionPassword是用来设置,


用户登录数据库的时候需要输入的密码的。


而这个‘hive’同样可以根据用户自己的需要来进行设置。

---------------------------------------------------------------


datanucleus.fixedDatastore


false


Disable updates to the schemaonce it has been created.



//在笔者的hive-site.xml文件中并没有关于这个的设置项
//后添加后会遇到运行错误,如果您对此感兴趣可以参阅网站上的说明

//更进一步的研究可以参考:



----------------------------------------------------------------------
在hive配置好以后,若想让其运行起来,


应该在mysql库中创建用户hive,并且密码也要设置为hive;


这个用户名与密码是和前面的配置文件的

javax.jdo.option.ConnectorUserName

javax.jdo.option.ConnectionPassword

是相对应的。


如何在mysql中创建用户?并赋予其权限呢?

(所创建的用户名密码要与配置文件相对应)


service mysqld start

mysql

mysql> CREATE USER 'hvie'@'node0' IDENTIFIED BY 'hive';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'node0' WITH GRANT OPTION;

mysql> flush privileges;(刷新一下mysql,让mysql记录新的用户名)


执行上述语句后就可以用hive用户登录来检验用户是否添加成功

mysql -uhive -hnode0 -p  (enter)

password:****(hive)

node0是笔者主机的hostname,当然您也可以写localhost


其中-u参数后接创建的用户名称,而-h后接的是创建mysql用户时主机的名称(@之后的)


-----------------------------------------------------------------------------------------
对于hive登录后出现的错误:

hive>show tables;


FAILED :Error in metadata : java.lang.IllegalArgumentException:URL: does not have a scheme 



FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

hive>show tables;

FAILED:Error in metadata:javax.jdo.JDOFatalDataStoreException:Unknow database 'hive' NestedThrowables;


com.mysql.jdbc.execeptions.jdbc4.MySQLSyntaxErrorException:Unknown database 'hive'



按照错误提示:必须要为hive的metadata存储创建相应的database。

而创建database应该使用的是mysql 的hive用户来创建的database

以hive用户创建hive数据库的命令:

mysql -uhive -hnode0 -p(enter)

password:****(hive)

mysql>show databases;

......show something

mysql>create database hive;

.......show something

mysql>show databases;


.......show something

mysql>exit;


输入hive(enter)


hive>show databases;


OK;



就可以看见相应的显示;



阅读(3038) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~