hive與mysql的整合

hive與mysql的整合


1. 配置文件hive-site.xml的修改
< property>
 <name>javax.jdo.option.ConnectionURL</name> 
 <value>jdbc:mysql://will-vm1: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用戶名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
  <value>abc123_</value>
  <description>密碼</description>
</property>
<property>
 <name>datanucleus.autoCreateSchema</name>
 <value>fasle</value>
 <description>如果庫裏沒有的話,創建需要的數據庫。創建後把它設爲false</description>
</property>


注意:
a. 如果沒有createDatabaseIfNotExist=true,需要保證數據庫hive已經存在;
b. 可以指定編碼jdbc:mysql://localhost:3306/hive_hdp?characterEncoding=UTF-8&createDatabaseIfNotExist=true


2. 需要把一個jar包mysql-connector-java-5.1.15-bin.jar拷貝到hive的lib目錄下才行,否則執行語句的時候會報錯,類似下面這樣
hive> show tables;
FAILED: Error in metadata: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
NestedThrowables:
java.lang.reflect.InvocationTargetException
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

3. 下載測試數據:
wget http://www.grouplens.org/sites/www.grouplens.org/external_files/data/ml-data.tar.gz
tar xvzf ml-data.tar.gz
這是官網給的地址。。總是404或者301什麼的。建議自己去搜索下載可以找到我試了下面的地址:
wget http://code.google.com/p/hadoop-clusternet/source/browse/trunk/clusternet/thirdparty/data/ml-data.tar__0.gz?r=20
是可以的,不過弄下來要改一下名字: mv ml-data.tar__0.gz?r=20 ml-data.tar.gz


4. 開始測試:
4.1 首先建立數據表:
CREATE TABLE u_data (
 userid INT,
 movieid INT,
 rating INT,
 unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
4.2 之後加載剛剛下載的數據進入數據表u_data:
LOAD DATA LOCAL INPATH '/home/will/testforhadoop/ml-data/u.data' 
OVERWRITE INTO TABLE u_data;
注:這裏也可以使用相對路徑 load data local inpath 'ml-data/u.data' overwrite into table u_data;
4.3 在hive中進行驗證數據的導入:select count(1) from u_data.命令行窗口會輸出mapreduce的詳細過程以及最終結果.也可以在web端查看任務執行情況。
注:貌似大部分運行都會觸發mapreduce任務,但是有幾個包含*的查詢不會觸發,比如select * from u_data. 其他的就暫時沒有試出來了。
4.4 退出hive,登陸mysql,進入相應數據庫,show tables。可以發現mysql裏面已經有了結構。


成功結束!

參見:https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-DDLOperations



todo: hive在mysql或者derby下的存儲結構或者機制分析。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章