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里面已经有了结构。
成功结束!
todo: hive在mysql或者derby下的存储结构或者机制分析。
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下的存储结构或者机制分析。