Hadoop Hive入门学习笔记

哎~我不会JAVA,我不会编程~~~~(>_<)~~~~

之前走马观花地看了点《hadoop权威指南》,没有细嚼,主要是还没有接触正式环境,而且平时工作中繁杂的事情好多啊,几天不看又忘记了。。。目前也只在虚拟机中Ubuntu系统中搭建了一个伪分布式环境。到目前为止还是问题多多。。。

一、hadoop安装

    JDK下载安装配置:
    使用wget下载jdk: wget
    root@ubuntu:~$ chmod +x jdk-6u20-linux-i586.bin #赋执行权限
    root@ubuntu:~$  ./jdk-6u20-linux-i586.bin     #执行安装
    环境变量配置:JAVA_HOME,PATH,CLASSPATH配置到/etc/profile
    JAVA_HOME=/home/hadoop2/jdk1.6.0_20
    PATH=$JAVA_HOME/bin:$PATH
    CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    export JAVA_HOME PATH CLASSPATH  

    hadoop下载安装配置:
   下载:wget
    解压:sudo tar xzvf hadoop-0.20.2.tar.gz
    环境变量设置:
    hadoop2@ubuntu:/opt/hadoop-0.20.2/conf$vi hadoop-env.sh
    添加内容:export JAVA_HOME=/home/hadoop2/jdk1.6.0_20
                    export HADOOP_HOME=/opt/hadoop-0.19.0
                    export PATH=$PATH:$HADOOP_HOME/bin

二、hive的参数主要有以下几种方式:

~配置文件:

来自hadoop-default.xml 和hadoop-site.xml的配置(默认配置和自定义配置);

来自hive-default.xml和hive-site.xml;

~命令行参数:

。。# bin/hive -hiveconf hive.root.logger=INFO,console

~参数设置:

hive> set mapred.reduce.tasks=100;

注意:自定义配置会覆盖默认配置;后两种方式都是session级别的。 

三、hive连mysql存储元数据的hive-site.xml配置:

这个版本的hadoop安装好的时候已经自带安装好了hive.默认hive是使用自带的derby数据库来存储元数据的。

这时,$HIVE_HOME/conf下 hive-default.xml提供主要配置参数。

现在想通过配置hive-site.xml来连接mysql数据库做为元数据库:

安装mysql: root@ubuntu:/etc# apt-get install mysql-server mysql-client

重启mysql:root@ubuntu:/etc# /etc/init.d/mysql restart

连接mysql:root@ubuntu:/etc# mysql -u root -p 

配置hive-site.xml四个主要参数如下:

<property>
  <name>hive.metastore.local</name>
  <value>true</value>
</property>

<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.109.128:3306/hivedb?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>root</value>
        <description>username TOUSE against metastore database</description>
</property> 
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>chengjuan</value>
        <description>password TOUSE against metastore database</description>
</property>

    自认为配置没有一点问题了,可是却总是连接不上,一直报错如下:

root@ubuntu:/opt/hadoop-0.19.0/contrib/hive # bin/hive
hive> show tables;
FAILED: Error in semantic analysis: javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
NestedThrowables:
java.lang.reflect.InvocationTargetException
java.lang.NullPointerException
        at org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:221)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:112)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:137)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:234)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:165)
        at org.apache.hadoop.mapred.JobShell.run(JobShell.java:54)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
        at org.apache.hadoop.mapred.JobShell.main(JobShell.java:68)

     纠结,能想到的修改方式都尝试多了,还是没有解决。。。。待解决中!哎,不懂JAVA好痛苦。。。

                         

四、hive基本语法

    这一部分是今天周会准备分享的内容,拖了好几周了,总是没有时间,这次又拖到下周。

    

查看所有表:

Show tables;

使用通配符:

show tables ‘带通配符’;

查看表分区:

Show partitions table_name;

查看表结构:

Describe table_name;

两表关联(只支持等值关联 ):

select a.*,b.* from cn_se_section_sdt0 a

join cn_se_section_dimt0 b

on( a.section_id=b.section_id)

Limit  3;  

分区表创建:

Create table cn_se_section_sdt4 

(stat_date date

,search_type_id int

,section_id int

,seo_clk_cnt int

,site_clk_cnt int)

partitioned by (dt string)

row format delimited fields terminated by ',';

分区表加载数据:

load data local inpath '/usr/mydata/aaa.txt' into table cn_se_section_sdt4 partition(dt='20110415');

分区表查询:

select a.* from cn_se_section_sdt4 a where a.dt='20110415' limit 3;

分区表添加分区:

alter table cn_se_section_sdt4 add partition (dt='20110416');

建表:

Create table cn_se_section_sdt0 

(stat_date date

,search_type_id int

,section_id int

,seo_clk_cnt int

,site_clk_cnt int)  

row format delimited fields terminated by ',‘;

复制一个空表:

create table table_name1 like table_name2;

加载数据:

Load data from local:

Hive>load data local inpath '/usr/mydata/sdt.txt' overwrite into table cn_se_section_sdt0;

Load data from hdfs:

hive> load data inpath'/home/chengjuan/input3/sdt.txt' overwrite into table cn_se_section_sdt1;

FAILED: Error in semantic analysis: line 1:16 Path is not legal ‘hdfs://localhost:9000/home/chengjuan/input3/sdt.txt': Cannot load data across filesystems, use load data local

建立外部表:

Create external table cn_se_section_external

(stat_date date

,search_type_id int

,section_id int

,seo_clk_cnt int

,site_clk_cnt int)  

row format delimited fields terminated by ','

location '/home/chengjuan/input4';

查询:

Select …from  table_name where…

Or

From table_name select …where …

限制返回记录条数:

Limit n;

查询结果写入文件:

insert overwrite directory '/tmp/test.dat' select a.* from cn_se_section_sdt0 a limit 5;

查询结果写入表:

insert overwrite  table cn_se_section_sdt3 select a.* from cn_se_section_sdt0 a  limit 5;

删除表(drop外部表时,存放数据的文件也被删除了 ):

Drop table table_name;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/32ef0f3784022f7bae2581bc135bc325.html