哎~我不会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;