hadoop 、hive 的一些使用经验。
1、queue的设置
hadoop2.0支持了queue,在hadoop程序里面进行queue的配置:
job.getConfiguration().set("mapred.job.queue.name", "your-queue-name");
2、reduce key-value中间的分隔符。
首先得保证outputformart是Textoutputformat,默认的分割符是'\t',用以下语句在程序中进行配置:
job.getConfiguration().set("mapred.textoutputformat.separator", "some-separator");
3、hive输出本地文件的分割符
在0.10.0之前的hive版本儿输出到本地文件列之间的分隔符是看起来是“^A”,java读取的时候是"\\x01"
4、MR读取input输入不同地址,运用不同的mapper class
org.apache.hadoop.mapreduce.lib.input.MultipleInputs.addInputPath(job, new Path(otherArgs[0]),TextInputFormat.class);
org.apache.hadoop.mapreduce.lib.input.MultipleInputs.addInputPath(job, new Path(otherArgs[1]),TextInputFormat.class );
用2.0以上版本儿的maven依赖。
5、hive的sort和order by在reduce步骤的区别
sort 会执行多个reduce数据,输出多个reduce结果文件,每个文件之间进行排序
order by只执行一个reduce,结果会排序。
所以如果需要总体排序的话尽量不要用sort,用order by
6、不知道是所有的数据库只有hive有这个问题,hive的left、full join的时候,后面如果跟上where条件,就会自动识别成普通的join。
官方解释:
will join a on b, producing a list of a.val and b.val. The WHERE clause, however, can also reference other columns of a and b that are in the output of the join, and then filter them out. However, whenever a row from the JOIN has found a key for a and no key for b, all of the columns of b will be NULL, including the ds column. This is to say, you will filter out all rows of join output for which there was no valid b.key, and thus you have outsmarted your LEFT OUTER requirement. In other words, the LEFT OUTER part of the join is irrelevant if you reference any column of b in the WHERE clause. 7、在hive中,concat_ws和cast XXX as string 联合起来比较好用。number_format会出现一些比较恶心的问题,比如如果是空值null的话会报错。
8、在hive中,case when XXX is null then '' end是不行的,必须得是 case when XXX is nul then '' else XXX end才能返回正确的结果。记住必须有end。
9、在hive中,如果用streaming的方式做map的时候,用的map的文件其中如果有问题的话,hive不会报错出来,会提示成功但是没有返回结果。所以在用streaming之前一定要先检查好map 、reduce的程序,得在python程序中加上try catche,然后错误日志需要在yarn的log里面查询:yarn -logs applicationId=XXXXX
10、在hive中,如果语句中用streaming的方式添加了第三方的程序来执行reduce,如果是python的话,在using里面要加上python XXX.py否则reduce会报错,为什么这样还不是很清楚,如果第三方程序用在map上面的话,就不需要加python。原因应该是这样的:如果是用第三方程序的话,如果不直接写明是map或者reduce的话,那么就不用写明是什么提供的,如果写明了是map还是reduce的话,就需要写明是什么提供的。
11、在hive中,如果source表里面的数据比较碎,导致map数量太多,则需要set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;set mapred.max.split.size=100000000;set mapred.min.split.size.per.node=100000000;set mapred.min.split.size.per.rack=100000000;这个数值是根据经验设置的,一般是文件较多的话,数值会较小。
12、hive-streaming报错代码为20001,可能的原因有三种情况:1、脚本本身没有main函数,2、脚本的编码没有转换到unix的格式,3、using ‘python XXX.py’。测试python 脚本的map的时候,可以用本地文件 cat XXX | python XXX.py
13、在向新表插入数据时报错:Currently the writer can only accept BytesRefArrayWritable。这个错误是hive的一个bug,在一个rcfile表select insert into 到另一个rcfile的表的时候会报错。解决方法就是,将目标表改为text的存储方式。另外网上也介绍了一个方法:ALTER TABLE table_name SET SERDEPROPERTIES('serialization.null.format'='-1'),经测试不好用。hive版本儿时:0.11
hadoop 、hive 的一些使用经验。的更多相关文章
- Hive创建表格报【Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException】引发的血案
在成功启动Hive之后感慨这次终于没有出现Bug了,满怀信心地打了长长的创建表格的命令,结果现实再一次给了我一棒,报了以下的错误Error, return code 1 from org.apache ...
- FineReport中hadoop,hive数据库连接解决方案
1. 描述 Hadoop是个很流行的分布式计算解决方案,Hive是基于hadoop的数据分析工具.一般来说我们对Hive的操作都是通过cli来进行,也就是Linux的控制台,但是,这样做本质上是每个连 ...
- hive 使用where条件报错 java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.ppd.ExprWalkerInfo.getConvertedNode
hadoop 版本 2.6.0 hive版本 1.1.1 错误: java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.ppd.ExprWalk ...
- hadoop+hive使用中遇到的问题汇总
问题排查方式 一般的错误,查看错误输出,按照关键字google 异常错误(如namenode.datanode莫名其妙挂了):查看hadoop($HADOOP_HOME/logs)或hive日志 h ...
- Hadoop Hive基础sql语法
目录 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的 ...
- Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递
http://niuzhenxin.iteye.com/blog/1706203 Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql.postgresql.. ...
- Hadoop Hive与Hbase整合+thrift
Hadoop Hive与Hbase整合+thrift 1. 简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句 ...
- Hadoop Hive sql语法详解
Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...
- Hadoop Hive与Hbase关系 整合
用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Ha ...
随机推荐
- servlet的生命周期详解
一.servlet生命周期原理解析 1.Servlet生命周期分为三个阶段: (1)初始化阶段 调用init()方法 (2)响应客户请求阶段 调用service()方法 (3)终止阶段 调用dest ...
- Python 多线程 使用线程 (二)
Python中实现多线程需要使用到 threading 库,其中每一个 Thread类 的实例控制一个线程. Thread类 #类签名 def __init__(self, group=None, t ...
- MVC5新特性(一)之RouteAttribute打造自己的URL规则
1.RouteAttribute概述 RouteAttribute的命名空间是System.Web.Mvc,区别与web api的RouteAttribute(它的命名空间是System.Web.Ht ...
- 关于CUDA5之后cutil.h不可用的问题
用CUDA进行GPU加速开发的同学在移植一些代码片段时应该都有过这样的经历,如果自己用的是高版本的CUDA,系统有时会报错:CANNOT FIND CUTIL.H.查看代码才发现原来是多了CUTIL. ...
- docker启动容器关于防火墙报错
在重启docker工程时候出错: [root@hadoop-alone ~]# docker start padError response from daemon: driver failed pr ...
- 【转】 Tomcat+redis+nginx配置
为客户开发的一个绩效系统,采用了java web的开发方式,使用了一些spring mvc, mybatis之类的框架.相比于oracle ebs的二次开发,这种开发更加灵活,虽然和ebs集成的时候遇 ...
- geomesa hbase geoserver
在geoserver中配置hbase ln -s /root/hbase/hbase-1.4.8/conf/hbase-site.xml /root/tomcat/apache-tomcat-7.0. ...
- 《移动App测试实战》读书笔记
第一章 概述 什么是移动产品? 移动产品是一个可以在移动设备上安装的App,或者一个可以在移动设备上访问的定制页面. 1.1 研发流程 互联网产品的研发过程主要涉及以下职位分工. 产品经理:负责产品方 ...
- Laravel发送邮件配置-问题解决
MAIL_DRIVER=smtp MAIL_HOST=smtp..com MAIL_PORT= MAIL_USERNAME=phpfangzhan@@@@@.com MAIL_PASSWORD=*** ...
- gem install redis安装时报错:redis requires Ruby version >= 2.2.2
Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2 解决办法是 先安装rvm,再把ruby版本提升至2.3.3 1.安装curl sudo yum install ...