哪家java培训机构哪个好比较好-谁知道啊

1.从本地文件系统中通过什么命令可导入数据到Hive表?
2.什么是动态分区插入?
3.该如何实现动态分区插入?
这里可以和进行对比?
Hive的几种常见的数据导入方式
这里介绍四种:
(1)、从本地文件系统中导入数据到Hive表;
(2)、从HDFS上导入数据到Hive表;
(3)、从别的表中查询出相应的数据并导入到Hive表中;
(4)、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。
一、从本地文件系统中导入数据到Hive表
先在Hive里面创建好表,如下:
hive& create table wyp
& & & (id int, name string,
& & & age int, tel string)
& & & ROW FORMAT DELIMITED
& & & FIELDS TERMINATED BY '\t'
& & & STORED AS TEXTFILE;
OK
Time taken: 2.832 seconds复制代码
这个表很简单,只有四个字段,具体含义我就不解释了。本地文件系统里面有个/home/wyp/wyp.txt文件,内容如下:
[ ~]$ cat wyp.txt
1& && & wyp& &&&25& && &88
2& && & test& & 30& && &88
3& && & zs& && &34& && &复制代码
wyp.txt文件中的数据列之间是使用\t分割的,可以通过下面的语句将这个文件里面的数据导入到wyp表里面,操作如下:
hive& load data local inpath 'wyp.txt'
Copying data from file:/home/wyp/wyp.txt
Copying file: file:/home/wyp/wyp.txt
Loading data to table default.wyp
Table default.wyp stats:
[num_partitions: 0, num_files: 1, num_rows: 0, total_size: 67]
OK
Time taken: 5.967 seconds复制代码
这样就将wyp.txt里面的内容导入到wyp表里面去了,可以到wyp表的数据目录下查看,如下命令:
hive& dfs -ls /user/hive/warehouse/
Found 1 items
-rw-r--r--3 wyp supergroup 67
18:23 /hive/warehouse/wyp/wyp.txt复制代码
需要注意的是:
和我们熟悉的关系型数据库不一样,Hive现在还不支持在insert语句里面直接给出一组记录的文字形式,也就是说,Hive并不支持INSERT INTO …. VALUES形式的语句。
二、HDFS上导入数据到Hive表
  从本地文件系统中将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下(典型的情况是复制到上传用户的HDFS home目录下,比如/home/wyp/),然后再将数据从那个临时目录下移动(注意,这里说的是移动,不是复制!)到对应的Hive表的数据目录里面。既然如此,那么Hive肯定支持将数据直接从HDFS上的一个目录移动到相应Hive表的数据目录下,假设有下面这个文件/home/wyp/add.txt,具体的操作如下:
[ /home/q/hadoop-2.2.0]$ bin/hadoop fs -cat /home/wyp/add.txt
5& && & wyp1& & 23& && &
6& && & wyp2& & 24& && &
7& && & wyp3& & 25& && &
8& && & wyp4& & 26& && &复制代码
上面是需要插入数据的内容,这个文件是存放在HDFS上/home/wyp目录(和一中提到的不同,一中提到的文件是存放在本地文件系统上)里面,我们可以通过下面的命令将这个文件里面的内容导入到Hive表中,具体操作如下:
hive& load data inpath '/home/wyp/add.txt'
Loading data to table default.wyp
Table default.wyp stats:
[num_partitions: 0, num_files: 2, num_rows: 0, total_size: 215]
OK
Time taken: 0.47 seconds
hive& select *
OK
5& && & wyp1& & 23& && &
6& && & wyp2& & 24& && &
7& && & wyp3& & 25& && &
8& && & wyp4& & 26& && &
1& && & wyp& &&&25& && &88
2& && & test& & 30& && &88
3& && & zs& && &34& && &
Time taken: 0.096 seconds, Fetched: 7 row(s)复制代码
从上面的执行结果我们可以看到,数据的确导入到wyp表中了!请注意load data inpath ‘/home/wyp/add.txt’里面是没有local这个单词的,这个是和一中的区别。
三、从别的表中查询出相应的数据并导入到Hive表中
假设Hive中有test表,其建表语句如下所示:
hive& create table test(
& & & id int, name string
& & & ,tel string)
& & & partitioned by
& & & (age int)
& & & ROW FORMAT DELIMITED
& & & FIELDS TERMINATED BY '\t'
& & & STORED AS TEXTFILE;
OK
Time taken: 0.261 seconds复制代码
大体和wyp表的建表语句类似,只不过test表里面用age作为了分区字段。对于分区,这里在做解释一下:
分区:在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比如wyp表有dt和city两个分区,则对应dt=,city=BJ对应表的目录为/user/hive/warehouse/dt=/city=BJ,所有属于这个分区的数据都存放在这个目录中。
下面语句就是将wyp表中的查询结果并插入到test表中:
hive& insert into table test
& & & partition (age='25')
& & & select id, name, tel
& & &
#####################################################################
& && && &&&这里输出了一堆Mapreduce任务信息,这里省略
#####################################################################
Total MapReduce CPU Time Spent: 1 seconds 310 msec
OK
Time taken: 19.125 seconds
hive& select *
OK
5& && & wyp1& & & & 25
6& && & wyp2& & & & 25
7& && & wyp3& & & & 25
8& && & wyp4& & & & 25
1& && & wyp& &&&88&&25
2& && & test& & 88&&25
3& && & zs& && && && & 25
Time taken: 0.126 seconds, Fetched: 7 row(s)复制代码这里做一下说明:
我们知道我们传统数据块的形式insert into table values(字段1,字段2),这种形式hive是不支持的。
通过上面的输出,我们可以看到从wyp表中查询出来的东西已经成功插入到test表中去了!如果目标表(test)中不存在分区字段,可以去掉partition (age=’25′)语句。当然,我们也可以在select语句里面通过使用分区值来动态指明分区:
hive& set hive.exec.dynamic.partition.mode=
hive& insert into table test
& & & partition (age)
& & & select id, name,
& & & tel, age
& & &
#####################################################################
& && && &&&这里输出了一堆Mapreduce任务信息,这里省略
#####################################################################
Total MapReduce CPU Time Spent: 1 seconds 510 msec
OK
Time taken: 17.712 seconds
hive& select *
OK
5& && & wyp1& & & & 23
6& && & wyp2& & & & 24
7& && & wyp3& & & & 25
1& && & wyp& &&&88&&25
8& && & wyp4& & & & 26
2& && & test& & 88&&30
3& && & zs& && && && & 34
Time taken: 0.399 seconds, Fetched: 7 row(s)复制代码
这种方法叫做动态分区插入,但是Hive中默认是关闭的,所以在使用前需要先把hive.exec.dynamic.partition.mode设置为nonstrict。当然,Hive也支持insert overwrite方式来插入数据,从字面我们就可以看出,overwrite是覆盖的意思,是的,执行完这条语句的时候,相应数据目录下的数据将会被覆盖!而insert into则不会,注意两者之间的区别。例子如下:
hive& insert overwrite table test
& & & PARTITION (age)
& & & select id, name, tel, age
& & &复制代码
更可喜的是,Hive还支持多表插入,什么意思呢?在Hive中,我们可以把insert语句倒过来,把from放在最前面,它的执行效果和放在后面是一样的,如下:
hive& show create table test3;
OK
CREATE&&TABLE test3(
&&id int,
&&name string)
Time taken: 0.277 seconds, Fetched: 18 row(s)
hive& from wyp
& & & insert into table test
& & & partition(age)
& & & select id, name, tel, age
& & & insert into table test3
& & & select id, name
& & & where age&25;
hive& select * from test3;
OK
8& && & wyp4
2& && & test
3& && & zs
Time taken: 4.308 seconds, Fetched: 3 row(s)复制代码
可以在同一个查询中使用多个insert子句,这样的好处是我们只需要扫描一遍源表就可以生成多个不相交的输出。这个很酷吧!
四、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中
在实际情况中,表的输出结果可能太多,不适于显示在控制台上,这时候,将Hive的查询输出结果直接存在一个新的表中是非常方便的,我们称这种情况为CTAS(create table .. as select)如下:
hive& create table test4
& & & as
& & & select id, name, tel
& & &
hive& select * from test4;
OK
5& && & wyp1& &
6& && & wyp2& &
7& && & wyp3& &
8& && & wyp4& &
1& && & wyp& &&&88
2& && & test& & 88
3& && & zs& && &
Time taken: 0.089 seconds, Fetched: 7 row(s)复制代码
数据就插入到test4表中去了,CTAS操作是原子的,因此如果select查询由于某种原因而失败,新表是不会创建的!
欢迎加入about云群 、 ,云计算爱好者群,关注
主题帖子积分
注册会员, 积分 180, 距离下一级还需 20 积分
注册会员, 积分 180, 距离下一级还需 20 积分
总结的非常好,非常好的帖子
主题帖子积分
注册会员, 积分 77, 距离下一级还需 123 积分
注册会员, 积分 77, 距离下一级还需 123 积分
主题帖子积分
中级会员, 积分 517, 距离下一级还需 483 积分
中级会员, 积分 517, 距离下一级还需 483 积分
那公司实际业务中是不是主要通过java代码批量向hive中导入数据,还是少量长时间累加的向hive导入数据
主题帖子积分
那公司实际业务中是不是主要通过java代码批量向hive中导入数据,还是少量长时间累加的向hive导入数据Java是实现方式,如同我们传统数据库中,sql可以插入数据,通过程序调用sql也可以插入数据。所以Java可以插入hive,sql也可以,至于什么方式,看你的需求。如果想使用起来更加的方便,当然是通过程序一键实现,这是很多人都喜欢的
欢迎加入about云群 、 ,云计算爱好者群,关注
主题帖子积分
中级会员, 积分 517, 距离下一级还需 483 积分
中级会员, 积分 517, 距离下一级还需 483 积分
Java是实现方式,如同我们传统数据库中,sql可以插入数据,通过程序调用sql也可以插入数据。所以Java可以 ...
谢谢pig2回复,回复很快,很感谢
主题帖子积分
高级会员, 积分 1340, 距离下一级还需 3660 积分
高级会员, 积分 1340, 距离下一级还需 3660 积分
路过,学习学习
主题帖子积分
高级会员, 积分 1154, 距离下一级还需 3846 积分
高级会员, 积分 1154, 距离下一级还需 3846 积分
主题帖子积分
中级会员, 积分 982, 距离下一级还需 18 积分
中级会员, 积分 982, 距离下一级还需 18 积分
多谢楼主分享!!!!
主题帖子积分
中级会员, 积分 619, 距离下一级还需 381 积分
中级会员, 积分 619, 距离下一级还需 381 积分
经常参与各类话题的讨论,发帖内容较有主见
经常帮助其他会员答疑
活跃且尽责职守的版主
为论坛做出突出贡献的会员
积极上进,爱好学习
站长推荐 /6
about云|新出视频,openstack零基础入门,解决你ping不通外网难题
云计算hadoop视频大全(新增 yarn、flume|storm、hadoop一套视频
视频资料大优惠
大数据零基础由入门到实战
阶段1:hadoop零基础入门基础篇
阶段2:hadoop2入门
阶段3:大数据非hadoop系列课程
阶段4:项目实战篇
阶段5:大数据高级系列应用课程
阶段6:工作实用系列教程
等待验证会员请验证邮箱
新手获取积分方法
Powered by将很多段逻辑sql放在一个hive文件执行 停止提交的任务做法 - SQL当前位置:& &&&将很多段逻辑sql放在一个hive文件执行 停止提交的任将很多段逻辑sql放在一个hive文件执行 停止提交的任务做法&&网友分享于:&&浏览:0次将很多段逻辑sql放在一个hive文件执行 终止提交的任务做法
背景: hive工作中,将很多etl 脚本写在一起,然后整体提交,提交后突然后悔想取消
qyjssum.sh:
sudo -u hdfs hive -e "
清洗逻辑1.....
清洗逻辑2....
清洗逻辑3......
调用写法:
nohup /cloud/qyjs_sum_generate.sh & /cloud/qyjs_sum_generate.log
/cloud/qyjs_sum_generate.log
一般想杀死用:
-ef | grep qyjs_sum_generate.sh
此时会出现三个进程描述信息和ID,
第一个是 grep这条语句的进程
第二个是上面 nohup调用grep qyjs_sum_generate.sh 的进程
第三个是这个任务提交成mr任务的进程
一般直 kill -9 第二个 第三个进程即可,
但是昨天我用这种方式杀不死,现象是:
清洗逻辑1.....
清洗逻辑2....
清洗逻辑3......
杀死了这个进程后,
清洗逻辑2的进程提交上去,然后杀死清洗逻辑2的 清洗逻辑3的有提交上去,
具体原因我不知道,但是最后的做法就是:
hadoop job -list 查看产生的 hadoop job
然后用 hadoop job -kill jobid方式 出现一个杀死一个 这种方式实现完全杀死整个sh里面的任务。
12345678910
12345678910
12345678910 上一篇:没有了下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有最后一个广告位招租
由于目前访问人数飙升,每日流量等资源消耗较多,现出售广告位以支付每月机器费用,有意者请加qq联系站长。~
HBase导入大数据三大方式之(一)——hive类SQL语句方式
做大数据时,经常需要用到将大量格式化的文本数据导入到hbase中。此处就用到的三种方式:hive类SQL语句方式、importtsv +completebulkload 方式、mapreduce+completebulkload 方式,做下简单示例。其中当属hive类SQL语句方式最简单,首先介绍之:
实例中,我以虚拟话单作为需要导入的数据,格式如下:
1,,,20:52,33分18秒,被叫,,北京市,省际,0,32.28,0.4,全球通商旅88套餐
2,,,20:23,33分18秒,被叫,,北京市,省际,0,32.28,0.4,全球通商旅88套餐
3,,,20:52,10分52秒,主叫,,北京市,省际,0,2.8,1.9,全球通商旅88套餐
4,,,20:52,09分20秒,被叫,,绵阳市,省内,0,45.91,5.26,全球通商旅88套餐
5,,,20:53,06分00秒,被叫,,北京市,省际,0,54.79,7.16,全球通商旅88套餐
6,,,21:37,27分00秒,主叫,,绵阳市,省内,0,36.27,6.68,全球通商旅88套餐
7,,,21:37,27分02秒,主叫,,绵阳市,省内,0,65.63,4.45,全球通商旅88套餐
8,,,21:37,05分00秒,被叫,,绵阳市,省内,0,66.86,5.75,全球通商旅88套餐
9,,,21:37,13分50秒,被叫,,广州市,省际,0,60.71,3.39,全球通商旅88套餐
10,,,21:38,37分54秒,被叫,,广州市,省际,0,55.14,1.45,全球通商旅88套餐
11,,,21:38,49分34秒,主叫,,广州市,省际,0,16.84,1.36,全球通商旅88套餐
步骤如下:
1、首先在hive创建表,创建hbase识别的表bill:
在hive的shell里面执行命令:
CREATE TABLE BILLS(selfnumber string,day string,hour string,duration string,calltype string, targetnumber string,address string, longdtype string, basecost float, longdcost float, infocost float,privilege string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, calltime:day,calltime:hour,dura:duration,info:calltype,info:targetnumber,info:address,info:longdtype,info:basecost,info:longdcost,info:infocost,info:privilege")TBLPROPERTIES ("hbase.table.name" = "bills");
首先如果bill表已经存在则删除之。之后建立一个hbase可识别的表,可见里面规定了hbase列族等信息。
注意:不能有敏感关键字,比如”date”。
“hbase.columns.mapping”=后面的第一个不要写第一列即作为row的那一列,否则报错:
FAILED: Error in metadata:java.lang.RuntimeException:MetaException(message:org.apache.hadoop.hive.serde2.SerDeExceptionorg.apache.hadoop.hive.hbase.HBaseSerDe: columns has 12 elements whilehbase.columns.mapping has 13 elements (counting the key if implicit))
FAILED: Execution Error,return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
2、在hive创建一个表用于导数据进去:
create table pokes(selfnumber string,day string,hour string,duration string,calltype string, targetnumber string,address string, longdtype string, basecost float, longdcost float, infocost float,privilege string)row format delimited fields terminated by ',';
3、批量导入数据到刚刚建的hive表pokes:
预处理数据:
把数据中字段名等去掉,把连续的空格全部变为“,”分开。可以写程序做预处理,也可以使用脚本。
load data local inpath'/home/cdh4/Desktop/bill.txt' overwr
4、使用类sql语句把pokes里的数据导入到hbase可识别的表BILLS中去:
insert overwrite table bills select *
5、在hive shell中查看数据:
hive& select*
首先要起动远程服务接口,命令:
nohup hive –service hiveserver
工程中导入相应的需求
包,列表如下
antlr-runtime-3.0.1.jar
hive-exec-0.7.1.jar
hive-jdbc-0.7.1.jar
hive-metastore-0.7.1.jar
hive-service-0.7.1.jar
jdo2-api-2.3-ec.jar
libfb303.jar
3、在java代码中写sql语句的时候注意sql语句中的空格。!!!
报错处理:
1、插入时数据不成功报错:
java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:106)
atorg.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:72)
atorg.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:130)
atorg.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:413)
atorg.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
atorg.apache.hadoop.mapred.Child$4.run(Child.java:268)
atjava.security.AccessController.doPrivileged(Native Method)
atjavax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
说明:hive的classpath还需要加入hbase、zookeeper的那些jar包
解决办法:在hive的conf/hive-site.xml里面加入属性:
&property&
&name&hive.aux.jars.path&/name&
&value&file:///usr/hadoop/hive-0.7.1-cdh3u6/lib/hive-hbase-handler-0.7.1-cdh3u6.jar,file:///usr/hadoop/hive-0.7.1-cdh3u6/lib/hbase-0.90.6-cdh3u6.jar,file:///usr/hadoop/hive-0.7.1-cdh3u6/lib/zookeeper-3.3.1.jar&/value&
&/property&
2、如果导入数据时遇到报错:
Anon-native table cannot be used as target for LOAD
说明:Hive不能向非本地表导入数据。
解决办法:请检查代码里面的建的表。
3、如果hive执行mapreduce的时候遇到报错:
Exception in thread "main"java.io.IOException: Cannot initialize Cluster. Please check your configurationfor mapreduce.framework.name and the correspond server addresses.
说明:mapreduce.framework.name这个属性是MRv2即yarn中才需要配置的,在版本1下不需要,所以就很自然地找到了问题的所在,MRv2和hadoop本身整合在了一起,而MRv1和hadoop还是分开的,所以查看了下/etc/profile在配HADOOP_HOME的时候要配MR1的目录。
解决办法:请检查集群的环境变量。
只需要配MR1的环境变量就行。如:
(1)export HADOOP_HOME=/usr/hadoop/hadoop-2.0.0-mr1-cdh4.1.5
(2) export PATH=$HADOOP_HOME/bin:$PATH
OK!GOOD LUCK!小伙伴们加油!
原文链接:/articles/ENjeum
阅读: 182 |实现Hive数据同步更新的shell脚本_数据库技术_Linux公社-Linux系统门户网站
你好,游客
实现Hive数据同步更新的shell脚本
来源:Linux社区&
作者:Gandalf_lee
上一篇文章《Sqoop1.4.4 实现将 10g 中的增量数据导入 Hive0.13.1 ,并更新Hive中的主表》描述了增量更新Hive表的原理和Sqoop,Hive命令,本文基于上一篇文章的内容实现了shell脚本的编写,稍加修改就可用于实际工程。
#!/bin/bash
#Please set the synchronize interval,unit is hour.
update_interval=24
#Please set the RDBMS connection params
rdbms_connstr="jdbc:oracle:thin:@192.168.0.147:1521:ORCLGBK"
rdbms_username="SP"
rdbms_pwd="fulong"
rdbms_table="OMP_SERVICE"
rdbms_columns="ID,SERVICE_NAME,SERVICE_PROCESS,CREATE_TIME,ENABLE_ORG,ENABLE_PLATFORM,IF_DEL"
#Please set the hive params
hive_increment_table="SERVICE_TMP"
hive_full_table="service_all"
#---------------------------------------------------------
#Import icrement data in RDBMS into Hive
enddate=$(date '+%Y/%m/%d %H:%M:%S')
startdate=$(date '+%Y/%m/%d %H:%M:%S' -d '-'+${update_interval}+' hours')
$SQOOP_HOME/bin/sqoop import --connect ${rdbms_connstr} --username ${rdbms_username} --password ${rdbms_pwd} --table ${rdbms_table} --columns "${rdbms_columns}" --where "CREATE_TIME & to_date('${startdate}','yyyy-mm-dd hh24:mi:ss') and CREATE_TIME & to_date('${enddate}','yyyy-mm-dd hh24:mi:ss')" --hive-import --hive-overwrite --hive-table ${hive_increment_table}
#---------------------------------------------------------
#Update the old full data table to latest status
$HIVE_HOME/bin/hive -e "insert overwrite table ${hive_full_table} select * from ${hive_increment_table} union all select a.* from ${hive_full_table} a left outer join ${hive_increment_table} b on a.service_code = b.service_code where b.service_"
在shell脚本中执行hive hql的命令格式是 &hive -e "select ..."
添加定时任务每天凌晨2点执行该脚本
<span style="color: # * * * /home/fulong/shell/dataSync.sh
基于集群的Hive安装
Hive内表和外表的区别
Hadoop + Hive + Map +reduce 集群安装部署
Hive本地独立模式安装
Hive学习之WordCount单词统计
Hive运行架构及配置部署
Hive 的详细介绍:Hive 的下载地址:
本文永久更新链接地址:
相关资讯 & & &
& (04/12/:47)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。

我要回帖

更多关于 上海java培训机构 的文章

 

随机推荐