Hadoop第9周練習—Hive部署測試(含MySql部署)


1  運行環境說明... 3

1.1 硬軟件環境... 3

1.2 器網絡環境... 3

2 書面作業1:搭建Hive環境... 3

2.1 書面作業1內容... 3

2.2 搭建過程... 4

2.2.1   安裝MySql數據庫... 4

2.2.2   安裝Hive. 10

2.2.3   驗證部署... 15

3 問題解決... 17

3.1 設置mysql數據庫root用戶密碼報錯... 17

3.2 hive啟動,報CommandNeedRetryException異常... 19

3.3 hive中使用操作語言... 20

 

1 運行環境說明

1.1  硬軟件環境

l  主機操作系統:Windows 64 bit,雙核4線程,主頻2.2G6G內存

l  虛擬軟件:VMware® Workstation 9.0.0 build-812388

l  虛擬機操作系統:CentOS 64位,單核,1G內存

l  JDK1.7.0_55 64 bit

l  Hadoop1.1.2

1.2  機器網絡環境

集群包含三個節點:1namenode2datanode,其中節點之間可以相互ping通。節點IP地址和主機名分布如下:

序號

IP地址

機器名

類型

用戶名

運行進程

1

10.88.147.221

hadoop1

名稱節點

hadoop

NNSNNJobTracer

2

10.88.147.222

hadoop2

數據節點

hadoop

DNTaskTracer

3

10.88.147.223

hadoop3

數據節點

hadoop

DNTaskTracer

所有節點均是CentOS6.5 64bit系統,防火牆均禁用,所有節點上均創建了一個hadoop用戶,用戶主目錄是/usr/hadoop。所有節點上均創建了一個目錄/usr/local/hadoop,並且擁有者是hadoop用戶。

2  書面作業1:搭建Hive環境

2.1  書面作業1內容

安裝Hive,有條件的同學按本地獨立模式或遠程模式安裝,將安裝過程和最后測試成功的界面抓圖提交。

2.2  搭建過程

2.2.1安裝MySql數據庫

2.2.1.1下載mysql安裝文件

下載地址:http://dev.mysql.com/downloads/mysql/#downloads,使用系統為CentOS選擇 Red Hat Enterprise Linux/Oracle系列:

clip_image002

操作系統為64位,選擇對應安裝包進行下載:

clip_image004

clip_image006

clip_image008

下載在本地目錄如下圖:

clip_image010

2.2.1.2上傳mysql安裝文件

把下載的mysql安裝包,使用SSH Secure File Transfer工具(第12作業周2.1.3.1介紹)上傳到/home/hadoop/Downloads 目錄下,如下圖所示:

clip_image012

2.2.1.3卸載舊的mysql

(1)  查找以前是否安裝有mysql

使用命令查看是否已經安裝過mysql

rpm -qa | grep -i mysql

可以看到如下圖的所示:

clip_image014

說明之前安裝了:

MySQL-client-5.6.21-1.el6.x86_64

MySQL-server-5.6.21-1.el6.x86_64

MySQL-devel-5.6.21-1.el6.x86_64

如果沒有結果,可以進行mysql數據庫安裝

(2)  停止mysql服務、刪除之前安裝的mysql

停止mysql服務、刪除之前安裝的mysql刪除命令:rpm -e nodeps 包名

sudo rpm -ev MySQL-server-5.6.21-1.el6.x86_64

sudo rpm -ev MySQL-devel-5.6.21-1.el6.x86_64

sudo rpm -ev MySQL-client-5.6.21-1.el6.x86_64

clip_image016

如果存在CentOS自帶mysql-libs-5.6.21-1.el6.x86_64使用下面的命令卸載即可

sudo rpm -ev --nodeps mysql-libs-5.6.21-1.el6.x86_64

(3)  查找之前老版本mysql的目錄並且刪除老版本mysql的文件和庫

sudo find / -name mysql

clip_image018

刪除對應的mysql目錄

sudo rm -rf /usr/lib64/mysql

sudo rm -rf /var/lib/mysql

clip_image020

(4)  再次查找機器是否安裝mysql

sudo rpm -qa | grep -i mysql

無結果,說明已經卸載徹底、接下來直接安裝mysql即可

clip_image022

2.2.1.4安裝mysql

進入安裝文件的目錄,安裝mysql服務端

cd /home/hadoop/Downloads

sudo rpm -ivh MySQL-server-5.6.21-1.el6.x86_64.rpm

clip_image024

安裝mysql客戶端、mysql-devel

sudo rpm -ivh MySQL-client-5.6.21-1.el6.x86_64.rpm

sudo rpm -ivh MySQL-devel-5.6.21-1.el6.x86_64.rpm

clip_image026

2.2.1.5設置root密碼

CentOS6.5下安裝mysql設置root密碼時,出現如下錯誤:

clip_image028

/usr/bin/mysqladmin: connect to server at 'localhost' failed

error: 'Access denied for user 'root'@'localhost' (using password: NO)'

可以進入安全模式進行設置root密碼

(1)  停止mysql服務

使用如下命令停止mysql服務:

sudo service mysql stop

sudo service mysql status

clip_image030

(2)  跳過驗證啟動mysql

使用如下命令驗證啟動mysql,由於&結尾是后台運行進程,運行該命令可以再打開命令窗口或者Ctr+C繼續進行下步操作:

mysqld_safe --skip-grant-tables &

sudo service mysql status

clip_image032

(3)  跳過驗證啟動MySQL

驗證mysql服務已經在后台運行后,執行如下語句,其中后面三條命令是在mysql語句:

mysql -u root

mysql>use mysql;

mysql>update user set password = password('root') where user = 'root';

mysql>flush privileges;

clip_image034

(4)  跳過驗證啟動MySQL

重啟mysql服務並查看狀態

sudo service mysql stop

sudo service mysql start

sudo service mysql status

clip_image036

2.2.1.6設置hive用戶

進入mysql命令行,創建hive用戶並賦予所有權限:

mysql -uroot -proot

mysql>create user 'hive' identified by 'hive';

mysql>grant all on *.* TO 'hive'@'%' with grant option;

mysql>flush privileges;

clip_image038

(注意:如果是root第一次登錄數據庫,需要重新設置一下密碼,所報異常信息如下:ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

2.2.1.7創建hive數據庫

使用hive用戶登錄,創建hive數據庫:

mysql -uhive -phive

mysql>create database hive;

mysql>show databases;

clip_image040

2.2.2安裝Hive

2.2.2.1下載hive安裝文件

可以到Apache基金hive官網http://hive.apache.org/downloads.html,選擇鏡像下載地址:http://mirrors.cnnic.cn/apache/hive/下載一個穩定版本,如下圖所示:

clip_image042

2.2.2.2下載mysql驅動

mysql官網進入下載頁面:http://dev.mysql.com/downloads/connector/j/ ,選擇所需要的版本進行下載,這里下載的zip格式的文件

clip_image044

2.2.2.3上傳mysql安裝文件和mysql驅動

把下載的hive安裝包和mysql驅動包,使用SSH Secure File Transfer工具(第12作業周2.1.3.1介紹)上傳到/home/hadoop/Downloads 目錄下,如下圖所示:

clip_image046

2.2.2.4mysql驅動放到hivelib目錄下

把下載的hive安裝包和mysql驅動包,使用

cd /home/hadoop/Downloads

cp mysql-connector-java-5.1.34-bin.jar /usr/local/hive-0.12.0/lib

clip_image048

2.2.2.5解壓縮

到上傳目錄下,用如下命令解壓縮hive安裝文件:

cd /home/hadoop/Downloads

tar -zxvf hive-0.12.0-bin.tar.gz

clip_image050

遷移到/usr/local目錄下:

sudo mv hive-0.12.0-bin  /usr/local/hive-0.12.0

clip_image052

2.2.2.6配置/etc/profile環境變量

使用如下命令打開/etc/profile文件:

sudo vi /etc/profile

clip_image054

clip_image056

使配置文件生效:

source /etc/profile

clip_image058

2.2.2.7設置hive-env.sh配置文件

進入hive-0.12.0/conf目錄,復制hive-env.sh.templaetehive-env.sh

cd /usr/local/hive-0.12.0/conf

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

ls

vi hive-env.sh

clip_image060

分別設置HADOOP_HOMEHIVE_CONF_DIR兩個值:

clip_image062

2.2.2.8設置hive-site.xml配置文件

復制hive-default.xml.templaetehive-site.xml

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

sudo vi hive-site.xml

clip_image064

(1)  加入配置項

默認metastore在本地,添加配置改為非本地

<property>

  <name>hive.metastore.local</name>

  <value>false</value>

</property>

clip_image066

(2)  修改配置項

hive默認為derby數據庫,需要把相關信息調整為mysql數據庫

<property>

  <name>hive.metastore.uris</name>

  <value>thrift://hadoop1:9083</value>

  <description>Thrift URI for the remote metastore. ...</description>

</property>

<property>

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

  <value>jdbc:mysql://hadoop1: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>hive</value>

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

</property>

<property>

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

  <value>hive</value>

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

</property>

clip_image068

clip_image070

(3)  訂正錯誤項

在配置文件2000行左右配置項hive.server2.thrift.sasl.qop原來為<value>auth</auth>,按照如下進行修改:

<property>

  <name>hive.server2.thrift.sasl.qop</name>

  <value>auth</value>

  <des.....

</property>

clip_image072

並把hive.metastore.schema.verification配置項值修改為false

<property>

  <name>hive.metastore.schema.verification</name>

  <value>false</value>

   <desc....>

</property>

clip_image074

2.2.3驗證部署

2.2.3.1啟動metastorehiveserver

在使用hive之前需要啟動metastorehiveserver服務,通過如下命令啟用:

hive --service metastore &

hive --service hiveserver &

clip_image076

啟動用通過jps命令可以看到兩個進行運行在后台

clip_image078

2.2.3.2hive中操作

登錄hive,在hive創建表並查看該表,命令如下:

hive

hive>create table test(a string, b int);

hive>show tables;

hive>desc test;

clip_image080

登錄mysql,在TBLS表中查看新增test表:

mysql -uhive -phive

mysql>use hive;

mysql>select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;

clip_image082

3 問題解決

3.1  設置mysql數據庫root用戶密碼報錯

CentOS6.5下安裝mysql設置root密碼時,出現如下錯誤:

clip_image028[1]

/usr/bin/mysqladmin: connect to server at 'localhost' failed

error: 'Access denied for user 'root'@'localhost' (using password: NO)'

(5)  停止mysql服務

使用如下命令停止mysql服務:

sudo service mysql stop

sudo service mysql status

clip_image030[1]

(6)  跳過驗證啟動mysql

使用如下命令驗證啟動mysql,由於&結尾是后台運行進程,運行該命令可以再打開命令窗口或者Ctr+C繼續進行下步操作:

mysqld_safe --skip-grant-tables &

sudo service mysql status

clip_image032[1]

(7)  跳過驗證啟動MySQL

驗證mysql服務已經在后台運行后,執行如下語句,其中后面三條命令是在mysql語句:

mysql -u root

mysql>use mysql;

mysql>update user set password = password('root') where user = 'root';

mysql>flush privileges;

clip_image034[1]

(8)  跳過驗證啟動MySQL

重啟mysql服務並查看狀態

sudo service mysql stop

sudo service mysql start

sudo service mysql status

clip_image036[1]

3.2  hive啟動,報CommandNeedRetryException異常

啟動hive時,出現CommandNeedRetryException異常,具體信息如下:

clip_image084

Exception in thread "main" java.lang.NoClassDefFoundError:org/apache/hadoop/hive/ql/CommandNeedRetryException

        at java.lang.Class.forName0(Native Method)

        at java.lang.Class.forName(Class.java:270)

        at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.CommandNeedRetryException

        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

由於以前使用hadoop時,修改hadoop-env.shHADOOP_CLASSPATH配置項,由以前的:

export HADOOP_CLASSPATH=/usr/local/hadoop-1.1.2/myclass

修改為:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/hadoop-1.1.2/myclass

clip_image086

 

clip_image088

3.3  hive中使用操作語言

啟動hive后,使用Hsql出現異常,需要啟動metastorehiveserver

clip_image090

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

在使用hive之前需要啟動metastorehiveserver服務,通過如下命令啟用:

hive --service metastore &

hive --service hiveserver &

clip_image076[1]

啟動用通過jps命令可以看到兩個進行運行在后台

clip_image078[1]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM