1. 程式人生 > >CentOS6安裝hive-2.1.1

CentOS6安裝hive-2.1.1

hive

  這裡簡單說明一下,好對大家配置hive有點幫助。hive是建立在hadoop上的,當然,你如果只搭建hive也沒用什麼錯。說簡單一點,hadoop中的mapreduce呼叫如果面向DBA的時候,那麼問題也就顯現了,因為不是每個DBA都能明白mapreduce的工作原理,如果為了管理資料而需要學習一門新的技術,從現實生活中來說,公司又需要花錢請更有技術的人來了。

  開個玩笑,hadoop是為了儲存資料和計算而推廣的技術,而和資料掛鉤的也就屬於資料庫的領域了,所以hadoop和DBA掛鉤也就是情理之中的事情,在這個基礎之上,我們就需要為了DBA創作適合的技術。

  hive正是實現了這個,hive是要類SQL語句(HiveQL)來實現對hadoop下的資料管理。hive屬於資料倉庫的範疇,那麼,資料庫和資料倉庫到底有什麼區別了,這裡簡單說明一下:資料庫側重於OLTP(線上事務處理),資料倉庫側重OLAP(線上分析處理);也就是說,例如mysql類的資料庫更側重於短時間內的資料處理,反之。

無hive:使用者.....->mapreduce...->hadoop資料(可能需要會mapreduce)

有hive:使用者...->HQL(SQL)->hive...->mapreduce...->hadoop資料(只需要會SQL語句)

安裝hive

安裝在hadoop的namenode上,拷貝安裝檔案到linux中/usr/local/hive/apache-hive-2.1.1-bin.tar.gz

解壓:

tar –zxvf apache-hive-2.1.1-bin.tar.gz

修改檔名

mv apache-hive-2.1.1-bin hive-2.1.1

新增到環境變數

vi /etc/profile

編輯

#hive

export HIVE_HOME=/usr/local/hive/hive-21.1

export PATH=$PATH:$HIVE_HOME/bin

儲存後使其生效:

source /etc/profile

測試是否安裝成功

執行hive --version

安裝mysql作為hive的Metastore

首先檢查mysql是否已安裝:

rpm -qa | grep -i mysql

結果:

mysql-libs-5.1.71-1.el6.x86_64

刪除已安裝的mysql

yum -y remove mysql-libs*

                                       

tar xvf MySQL-5.5.49-1.linux2.6.x86_64.rpm-bundle.tar

 

rpm -ivh MySQL-server-5.5.49-1.linux2.6.x86_64.rpm

rpm -ivh MySQL-devel-5.5.49-1.linux2.6.x86_64.rpm

rpm -ivh MySQL-client-5.5.49-1.linux2.6.x86_64.rpm

 

啟動mysql

service mysql start

首次安裝時,預設密碼為空,可以使用如下命令修改root密碼

mysqladmin -u root  password mypassword

mypassword 為你設定的新密碼

登入mysql

mysql -u root –p

 

rpm包安裝的MySQL是不會安裝/etc/my.cnf檔案的,解決方法,只需要複製/usr/share/mysql目錄下的my-huge.cnf 檔案到/etc目錄,並改名為my.cnf即可

cp /usr/share/mysql/my-huge.cnf /etc/my.cnf

 

mysql預設不可以遠端訪問,設定遠端訪問

--GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

上面這句遠端訪問不需要密碼,如果需要密碼使用下面這句

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'root' WITH GRANT OPTION;

 

使許可權生效:

FLUSH PRIVILEGES;

 

設定etc/my.cnf檔案,使binlog_format=mixed

vi etc/my.cnf

將註釋掉的binlog_format=mixed這一行前面的註釋去掉然後儲存,重啟mysql即可

service mysql restart

配置hive

在hdfs中新建目錄/user/hive/warehouse

hdfs dfs –mkdir /tmp

hdfs dfs –mkdir /user

hdfs dfs –mkdir /user/hive

hdfs dfs –mkdir /user/hive/warehouse

 

hadoop fs -chmod g+w /tmp

hadoop fs -chmod g+w /user/hive/warehouse

將mysql的驅動jar包mysql-connector-java-5.1.7-bin.jar拷入hive的lib目錄下面

進入hive的conf目錄下面複製一下hive-default.xml.template名子命名為:hive-site.xml

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

 

<property>

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

    <value>jdbc:mysql://192.168.188.1:3306/hive?createDatabaseIfNotExist=true</value>

    <description>JDBC connect string for a JDBC metastore</description>

  </property>

  <property>

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

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

    <description>Driver class name for a JDBC metastore</description>

  </property>

  <property>

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

    <value>root</value>

    <description>Username to use against metastore database</description>

  </property>

  <property>

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

    <value>sa</value>

    <description>password to use against metastore database</description>

  </property>

 

  <property>

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

    <value>/usr/local/hive/hive-2.1.1/tmp</value>

    <description>Local scratch space for Hive jobs</description>

  </property>

  <property>

    <name>hive.downloaded.resources.dir</name>

    <value>/usr/local/hive/hive-2.1.1/tmp/resources</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

  </property>

  <property>

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

    <value>/usr/local/hive/hive-2.1.1/tmp</value>

    <description>Location of Hive run time structured log file</description>

  </property>

  <property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/usr/local/hive/hive-2.1.1/tmp/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

  </property>

複製mysql的驅動程式到hive/lib下面(這裡已經拷貝好了)

使用schematool 初始化metastore的schema:

schematool -initSchema -dbType mysql

執行hive

Hive shell

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

錯誤總結:

1.在執行hive之前hadoop叢集必須開啟,否則回報拒絕連線

2.這裡不得不說一下,如果你的 schematool -dbType mysql -initSchema 並沒有執行成功怎麼辦,

在hive-site.xml中配置的 <value>jdbc:mysql://192.168.188.1:3306/hive?createDatabaseIfNotExist=true</value>

192.168.188.1:表示的是Windows是ip地址,是要連線Windows下的資料庫,在資料庫中建立hive資料庫。

hive資料庫一定不能存在,如果存在請修改配置將hive變成其他名字-例如hive01,否則會一直初始化不成功。

hive-site.xml中的配置只需要寫下面內容即可,

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>javax.jdo.option.ConnectionURL</name>
                <value>jdbc:mysql://192.168.188.1:3306/hive</value>(mysql地址192.168.188.1)
        </property>

        <property>
                <name>javax.jdo.option.ConnectionDriverName</name>(mysql的驅動)
                <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>123</value>
        </property>

        <property>
                <name>hive.metastore.schema.verification</name>
                <value>false</value>
        </property>
</configuration>

 

出現HiveMetaException異常,有可能配置資料庫寫錯了,我的是ip地址寫錯了。