zoukankan      html  css  js  c++  java
  • 基于hadoop集群的hive 安装(mysql,derby)

    基于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’(回车) 就会锁定到所需要的字符串上。

    其中有三处需要修改:

    <property>

    <name>hive.metastore.warehouse.dir</name>

    <value>/usr/hive/warehouse</value>

    </property> 这个是数据目录

    <property>

    <name>hive.exec.scratdir</name>

    <value>/usr/hive/tmp</value>

    </property> 这个是临时文件目录

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

    <property>

    <name>hive.querylog.location</name>

    <value>/usr/hive/log</value>

    </property>

    这个是用于存放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;

    此种模式下是将hive的metadata存储在Mysql中, Mysql的运行环境支撑双向同步或是集群工作环境,

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

    既然在derby模式下的hive已经能够成功运行, 这就说明在系统中关于hive配置文件中的参数是正确的。

    接下来是关于mysql的安装, 以及hive的配置文件关于mysql而进行一些参数的调配。

    ---------------------------------------------------------------------- 可以在系统中输入命令:

    service mysqld restart

    mysql

    来判断计算机中是否安装有mysql。 如果系统中安有mysql,会出现提示: mysql>    (进入到mysql的命令模式)

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

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

    http://www.mysql.com/downloads/

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

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

    <property>

    <name>hive.metastore.warehouse.dir</name>

    <value>hdfs://node0:9000/usr/hive/warehouse</value>

    </property>

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

    <property>

    <name>hive.exec.scratchdir</name>

    <value>hdfs://node0:9000/usr/hive/warehouse</value>

    </property>

    //这个没有变化

    <property>

    <name>hive.querylog.location</name>

    <value>/usr/hive/log</value> </property>

    <property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNoExist=true</value>

    </property>

    javax.jdo.option.ConnectionURL 这个参数使用来设置元数据连接字串

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

    <property>

    <name>javax.jdo.option.ConnectionDriverName</name>

    <value>com.mysql.jdbc.Driver</value>

    </property>

    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

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

    <property>

    <name>javax.jdo.option.ConnectorUserName</name>

    <value>hive</value>

    </property>

    这个javax.jdo.option.ConnectionUserName

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

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

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

    <property> <name>javax.jdo.option.ConnectionPassword</name>

    <value>hive</value>

    </property>

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

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

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

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

    <property>

    <name>datanucleus.fixedDatastore</name>

    <value>false</value>

    <description>Disable updates to the schema  once it has been created.</description>

    </property>

    //在笔者的hive-site.xml文件中并没有关于这个的设置项

    //后添加后会遇到运行错误,如果您对此感兴趣可以参阅网站上的说明

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

    https://issues.apache.org/jira/browse/HIVE-1841

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

    在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;

    执行上述语句后就可以用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;

    ......

    mysql>create database hive;

    .......

    mysql>show databases;

    .......

    mysql>exit;

    输入hive(enter) hive>show databases; OK;

    就可以看见相应的显示;

  • 相关阅读:
    Linux命令行和Shell高效率使用方法
    PHP导出word,CVS,PDF
    PHP的CLI综合
    [PHP]算法-二叉树中和为某一值的路径的PHP实现
    [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现
    [PHP]算法- 二叉树的深度的PHP实现
    [PHP] 算法-镜像二叉树的PHP实现
    [PHP] 算法-二叉树的子结构判断的PHP实现
    [PHP] 算法-邻接矩阵图的广度和深度优先遍历的PHP实现
    [PHP] 算法-根据前序和中序遍历结果重建二叉树的PHP实现
  • 原文地址:https://www.cnblogs.com/inuyasha1027/p/2911182.html
Copyright © 2011-2022 走看看