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下的存儲結構或者機制分析。