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地址寫錯了。