1 運行環境說明
1.1 硬軟件環境
1.2 機器網絡環境
2 書面作業1:搭建Hive環境
2.1 書面作業1內容
2.2 搭建過程
2.2.1 安裝MySql數據庫
2.2.2 安裝Hive
2.2.3 驗證部署
3 問題解決
3.1 設置mysql數據庫root用戶密碼報錯
3.2 hive啟動,報CommandNeedRetryException異常
3.3 在hive中使用操作語言
1 運行環境說明
1.1 硬軟件環境
l 主機操作系統:Windows 64 bit,雙核4線程,主頻2.2G,6G內存
l 虛擬軟件:VMware® Workstation 9.0.0 build-812388
l 虛擬機操作系統:CentOS 64位,單核,1G內存
l JDK:1.7.0_55 64 bit
l Hadoop:1.1.2
1.2 機器網絡環境
集群包含三個節點:1個namenode、2個datanode,其中節點之間可以相互ping通。節點IP地址和主機名分布如下:
序號 |
機器名 |
類型 |
用戶名 |
運行進程 |
|
1 |
10.88.147.221 |
hadoop1 |
名稱節點 |
hadoop |
NN、SNN、JobTracer |
2 |
10.88.147.222 |
hadoop2 |
數據節點 |
hadoop |
DN、TaskTracer |
3 |
10.88.147.223 |
hadoop3 |
數據節點 |
hadoop |
DN、TaskTracer |
所有節點均是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系列:
操作系統為64位,選擇對應安裝包進行下載:
下載在本地目錄如下圖:
2.2.1.2上傳mysql安裝文件
把下載的mysql安裝包,使用SSH Secure File Transfer工具(第1、2作業周2.1.3.1介紹)上傳到/home/hadoop/Downloads 目錄下,如下圖所示:
2.2.1.3卸載舊的mysql
(1) 查找以前是否安裝有mysql
使用命令查看是否已經安裝過mysql:
rpm -qa | grep -i mysql
可以看到如下圖的所示:
說明之前安裝了:
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
如果存在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
刪除對應的mysql目錄
sudo rm -rf /usr/lib64/mysql
sudo rm -rf /var/lib/mysql
(4) 再次查找機器是否安裝mysql
sudo rpm -qa | grep -i mysql
無結果,說明已經卸載徹底、接下來直接安裝mysql即可
2.2.1.4安裝mysql
進入安裝文件的目錄,安裝mysql服務端
cd /home/hadoop/Downloads
sudo rpm -ivh MySQL-server-5.6.21-1.el6.x86_64.rpm
安裝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
2.2.1.5設置root密碼
在CentOS6.5下安裝mysql設置root密碼時,出現如下錯誤:
/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
(2) 跳過驗證啟動mysql
使用如下命令驗證啟動mysql,由於&結尾是后台運行進程,運行該命令可以再打開命令窗口或者Ctr+C繼續進行下步操作:
mysqld_safe --skip-grant-tables &
sudo service mysql status
(3) 跳過驗證啟動MySQL
驗證mysql服務已經在后台運行后,執行如下語句,其中后面三條命令是在mysql語句:
mysql -u root
mysql>use mysql;
mysql>update user set password = password('root') where user = 'root';
mysql>flush privileges;
(4) 跳過驗證啟動MySQL
重啟mysql服務並查看狀態
sudo service mysql stop
sudo service mysql start
sudo service mysql status
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;
(注意:如果是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;
2.2.2安裝Hive
2.2.2.1下載hive安裝文件
可以到Apache基金hive官網http://hive.apache.org/downloads.html,選擇鏡像下載地址:http://mirrors.cnnic.cn/apache/hive/下載一個穩定版本,如下圖所示:
2.2.2.2下載mysql驅動
到mysql官網進入下載頁面:http://dev.mysql.com/downloads/connector/j/ ,選擇所需要的版本進行下載,這里下載的zip格式的文件
2.2.2.3上傳mysql安裝文件和mysql驅動
把下載的hive安裝包和mysql驅動包,使用SSH Secure File Transfer工具(第1、2作業周2.1.3.1介紹)上傳到/home/hadoop/Downloads 目錄下,如下圖所示:
2.2.2.4把mysql驅動放到hive的lib目錄下
把下載的hive安裝包和mysql驅動包,使用
cd /home/hadoop/Downloads
cp mysql-connector-java-5.1.34-bin.jar /usr/local/hive-0.12.0/lib
2.2.2.5解壓縮
到上傳目錄下,用如下命令解壓縮hive安裝文件:
cd /home/hadoop/Downloads
tar -zxvf hive-0.12.0-bin.tar.gz
遷移到/usr/local目錄下:
sudo mv hive-0.12.0-bin /usr/local/hive-0.12.0
2.2.2.6配置/etc/profile環境變量
使用如下命令打開/etc/profile文件:
sudo vi /etc/profile
使配置文件生效:
source /etc/profile
2.2.2.7設置hive-env.sh配置文件
進入hive-0.12.0/conf目錄,復制hive-env.sh.templaete為hive-env.sh:
cd /usr/local/hive-0.12.0/conf
cp hive-env.sh.template hive-env.sh
ls
vi hive-env.sh
分別設置HADOOP_HOME和HIVE_CONF_DIR兩個值:
2.2.2.8設置hive-site.xml配置文件
復制hive-default.xml.templaete為hive-site.xml
cp hive-default.xml.template hive-site.xml
sudo vi hive-site.xml
(1) 加入配置項
默認metastore在本地,添加配置改為非本地
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
(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>
(3) 訂正錯誤項
在配置文件2000行左右配置項hive.server2.thrift.sasl.qop原來為<value>auth</auth>,按照如下進行修改:
<property>
<name>hive.server2.thrift.sasl.qop</name>
<value>auth</value>
<des.....
</property>
並把hive.metastore.schema.verification配置項值修改為false
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<desc....>
</property>
2.2.3驗證部署
2.2.3.1啟動metastore和hiveserver
在使用hive之前需要啟動metastore和hiveserver服務,通過如下命令啟用:
hive --service metastore &
hive --service hiveserver &
啟動用通過jps命令可以看到兩個進行運行在后台
2.2.3.2在hive中操作
登錄hive,在hive創建表並查看該表,命令如下:
hive
hive>create table test(a string, b int);
hive>show tables;
hive>desc test;
登錄mysql,在TBLS表中查看新增test表:
mysql -uhive -phive
mysql>use hive;
mysql>select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;
3 問題解決
3.1 設置mysql數據庫root用戶密碼報錯
在CentOS6.5下安裝mysql設置root密碼時,出現如下錯誤:
/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
(6) 跳過驗證啟動mysql
使用如下命令驗證啟動mysql,由於&結尾是后台運行進程,運行該命令可以再打開命令窗口或者Ctr+C繼續進行下步操作:
mysqld_safe --skip-grant-tables &
sudo service mysql status
(7) 跳過驗證啟動MySQL
驗證mysql服務已經在后台運行后,執行如下語句,其中后面三條命令是在mysql語句:
mysql -u root
mysql>use mysql;
mysql>update user set password = password('root') where user = 'root';
mysql>flush privileges;
(8) 跳過驗證啟動MySQL
重啟mysql服務並查看狀態
sudo service mysql stop
sudo service mysql start
sudo service mysql status
3.2 hive啟動,報CommandNeedRetryException異常
啟動hive時,出現CommandNeedRetryException異常,具體信息如下:
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.sh的HADOOP_CLASSPATH配置項,由以前的:
export HADOOP_CLASSPATH=/usr/local/hadoop-1.1.2/myclass
修改為:
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/hadoop-1.1.2/myclass
3.3 在hive中使用操作語言
啟動hive后,使用Hsql出現異常,需要啟動metastore和hiveserver
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之前需要啟動metastore和hiveserver服務,通過如下命令啟用:
hive --service metastore &
hive --service hiveserver &
啟動用通過jps命令可以看到兩個進行運行在后台