HDFS数据导入Hbase出错,报后面key不能比前面key大,求大神

问题描述

publicclassLoadDataToHBase{publicstaticclassLoadDataToHBaseMapperextendsMapper<LongWritable,Text,ImmutableBytesWritable,Text>{publicstaticinty,m,d,h,n,s,mm;Calendarcal=Calendar.getInstance();//map的key用一个immutableBytesWritable类型的无意义的key,map的value是直接将原来的一行记录输出,//map完成后会shuffle和sort,将key-value按照key排序,否则写不进hfile,hfile要求后写的key不能小于先写的keyprivateImmutableBytesWritableimmutableBytesWritable=newImmutableBytesWritable();protectedvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedException{immutableBytesWritable.set(Bytes.toBytes(key.get()));context.write(immutableBytesWritable,value);}}//reducer每次得到map输出的value就是输入文件的中的一行//reducer的key也无意义,每一个value值就是一个hfile格式的输出,包括rowkey、family、qualifier、timestamp、valuepublicstaticclassLoadDataToHBaseReducerextendsReducer<ImmutableBytesWritable,Text,ImmutableBytesWritable,KeyValue>{publicstaticinty,m,d,h,n,s,mm;Calendarcal=Calendar.getInstance();protectedvoidreduce(ImmutableBytesWritablekey,Iterable<Text>values,Contextcontext)throwsIOException,InterruptedException{Stringvalue="";while(values.iterator().hasNext()){value=values.iterator().next().toString();if(value!=null&&!"".equals(value)){List<KeyValue>list=newArrayList<KeyValue>();list=createKeyValue(value.toString());Iterator<KeyValue>it=list.iterator();while(it.hasNext()){KeyValuekv=newKeyValue();kv=it.next();if(kv!=null){context.write(key,kv);}}}}}privateList<KeyValue>createKeyValue(Stringstr){List<KeyValue>list=newArrayList<KeyValue>();String[]values=str.toString().split("|");String[]qualifiersName=CONSTANT.qualifiersName;for(inti=1;i<qualifiersName.length;i++){longtimeStamp=System.currentTimeMillis();Stringrownum=values[0];Stringfamily=CONSTANT.familyName;Stringqualifier=qualifiersName[i];Stringvalue_str=values[i];inty=cal.get(Calendar.YEAR);intm=cal.get(Calendar.MONTH)+1;intd=cal.get(Calendar.DATE);inth=cal.get(Calendar.HOUR);intn=cal.get(Calendar.MINUTE);ints=cal.get(Calendar.SECOND);intmm=cal.get(Calendar.MILLISECOND);Stringrowkey_str=timeStamp+"-"+Integer.toString(y)+Integer.toString(m)+"/"+Integer.toString(d)+Integer.toString(h)+Integer.toString(n)+Integer.toString(s)+"/"+Integer.toString(mm)+rownum+"-"+values[4]+"-"+values[5]+"-"+values[6];KeyValuekv=newKeyValue(Bytes.toBytes(rowkey_str),Bytes.toBytes(family),Bytes.toBytes(qualifier),System.currentTimeMillis(),Bytes.toBytes(value_str));if(i!=4||i!=5||i!=6){list.add(kv);}}returnlist;}}publicstaticvoidmain(String[]args)throwsIOException,InterruptedException,ClassNotFoundException{Configurationconf=HBaseConfiguration.create();Jobjob=newJob(conf,CONSTANT.jobName);job.setJarByClass(LoadDataToHBase.class);job.setOutputKeyClass(ImmutableBytesWritable.class);//注意此处的Text.class要与map函数的输出key-value的value类型相对应job.setOutputValueClass(Text.class);job.setMapperClass(LoadDataToHBaseMapper.class);job.setReducerClass(LoadDataToHBaseReducer.class);//job.setOutputFormatClass(org.apache.hadoop.hbase.mapreduce.HFileOutputFormat.class);job.setOutputFormatClass(HFileOutputFormat.class);//job.setNumReduceTasks(4);//job.setPartitionerClass(org.apache.hadoop.hbase.mapreduce.SimpleTotalOrderPartitioner.class);Configurationfs_conf=newConfiguration();FileSystemfs=FileSystem.get(fs_conf);Stringstr_inPath=CONSTANT.str_inPath;Stringstr_outPath=CONSTANT.str_outPath;//如果输出路径存在就先删掉,因为不允许输出路径事先存在PathoutPath=newPath(str_outPath);if(fs.exists(outPath))fs.delete(outPath,true);FileInputFormat.addInputPath(job,newPath(str_inPath));FileOutputFormat.setOutputPath(job,newPath(str_outPath));System.exit(job.waitForCompletion(true)?0:1);}}

publicclassCONSTANT{publicstaticfinalStringjobName="LoadDataToHBase";publicstaticfinalString[]qualifiersName={"","01_home","04_name","05_phone","07_price","08_room","09_large","10_floor","11_n","12_site","14_compay"};//publicstaticfinalString[]qualifiersName={"","00_url","01_home","02_what",//"03_compay2","04_name","05_phone","06_title",//"07_price","08_room","09_large","10_floor","11_n","12_site","13_compay"};publicstaticfinalStringfamilyName="info";publicstaticfinalStringtableName="hbase";publicstaticfinalStringstr_inPath="/user/hadoop/loadDataToHBase/input";publicstaticfinalStringstr_outPath="/user/hadoop/loadDataToHBase/output";publicstaticfinallongtimeStamp=System.currentTimeMillis();}

报错16/03/2818:35:08INFOmapreduce.Job:map100%reduce67%16/03/2818:35:08INFOmapreduce.Job:TaskId:attempt_1458611567937_0066_r_000000_2,Status:FAILEDError:java.io.IOException:Addedakeynotlexicallylargerthanpreviouskey=x00)1459161330442-20163/2863529/403-"-|-"-"-|x04info00_urlx00x00x01SxBCxCAxF3x0Bx04,lastkey=x00)1459161330442-20163/2863529/403-"-|-"-|-"x04info13_compayx00x00x01SxBCxCAxF3x0Ax04atorg.apache.hadoop.hbase.io.hfile.AbstractHFileWriter.checkKey(AbstractHFileWriter.java:202)atorg.apache.hadoop.hbase.io.hfile.HFileWriterV2.append(HFileWriterV2.java:288)atorg.apache.hadoop.hbase.io.hfile.HFileWriterV2.append(HFileWriterV2.java:253)atorg.apache.hadoop.hbase.regionserver.StoreFile$Writer.append(StoreFile.java:935)atorg.apache.hadoop.hbase.mapreduce.HFileOutputFormat2$1.write(HFileOutputFormat2.java:196)atorg.apache.hadoop.hbase.mapreduce.HFileOutputFormat2$1.write(HFileOutputFormat2.java:149)atorg.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.write(ReduceTask.java:558)atorg.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89)atorg.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.write(WrappedReducer.java:105)attest1.LoadDataToHBase$LoadDataToHBaseReducer.reduce(LoadDataToHBase.java:69)attest1.LoadDataToHBase$LoadDataToHBaseReducer.reduce(LoadDataToHBase.java:1)atorg.apache.hadoop.mapreduce.Reducer.run(Reducer.java:171)atorg.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:627)atorg.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:389)atorg.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)atjava.security.AccessController.doPrivileged(NativeMethod)atjavax.security.auth.Subject.doAs(Subject.java:415)atorg.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)atorg.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

求大神,谢谢!我该怎么改我都加TimeStamp给ROWKEY了,还是不行,少量数据还能导进去,数据量大了根本进不去惊扰5位了,抱歉刚弄了50分,求救

解决方案

时间: 2024-12-31 07:05:44

HDFS数据导入Hbase出错,报后面key不能比前面key大,求大神的相关文章

数据导入HBase最常用的三种方式及实践分析

要使用Hadoop,数据合并至关重要,HBase应用甚广.一般而言,需要 针对不同情景模式将现有的各种类型的数据库或数据文件中的数据转入至HBase 中.常见方式为:使用HBase的API中的Put方法: 使用HBase 的bulk load 工具:使用定制的MapReduce Job方式.<HBase Administration Cookbook>一书对这三种方式有着详尽描述,由 ImportNew 的陈晨进行了编译,很有收获,推荐给大家. HBase数据迁移(1)-使用HBase的API

sqoop将oracle数据导入hbase的问题,求各位大神们指导

问题描述 sqoop将oracle数据导入hbase的问题,求各位大神们指导 sqoop将oracle数据导入hbase,要求可以Java连接服务器上的sqoop,sqoop1可以直接实现但是没有Java client的API,sqoop2 有client但是不能直接实现oracle到hbase,这是我得出的结论,请教大神们,有没有好的方法?

hdfs文件导入hbase提示Java heap space 要怎么处理

问题描述 hdfs文件导入hbase提示Java heap space 要怎么处理 hdfs文件导入hbase提示Java heap space 要怎么处理.是内存溢出吗?要怎么处理? 解决方案 代码的问题或者调整jvm

eclipse-android应用百度地图api导入sdk出错 报错代码如下 求大神指点

问题描述 android应用百度地图api导入sdk出错 报错代码如下 求大神指点 Dex Loader] Unable to execute dex: Multiple dex files define Lcom/baidu/mapapi/BMapManager;baidumapapi] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/baidu/mapapi/B

游标-android报错真的不知道怎么回事,急求大神解释 ,明天要完成任务的

问题描述 android报错真的不知道怎么回事,急求大神解释 ,明天要完成任务的 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mymail/com.example.mymail.FeedbackShow}: android.database.sqlite.SQLiteException: no such table: feedbacklist (code 1): while comp

java-Java中多线程同步锁报无效指针异常是何原因,求大神解答!

问题描述 Java中多线程同步锁报无效指针异常是何原因,求大神解答! /* 需求: 使用lock接口实现商品的生产和销售的动态平衡 思路: 1.创建被共同操作的数据类Resource,并通过多态引用分别创建lock和condition子类对象以及资源的获取和赋值方法 2.创建两个相反操作即生产和销售的类同时实现Runnable接口,并覆盖run方法 3.在主函数中,创建资源对象,并作为共同参数分别传递给生产和销售两个线程实现类的构造函数 4.分别将生产和销售类的对象作为参数,传给两个线程,并各自

http协议系统之间交互,出现的编程的报错。我该怎样修改?求大神啊

问题描述 http协议系统之间交互,出现的编程的报错.我该怎样修改?求大神啊 现在我们系统跟gps之间交互,我采用的httpClient,可是每次跑程序的时候都会报错 java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Un

数据-在C#里使用SharpPCap对程序进行抓包,求大神解答

问题描述 在C#里使用SharpPCap对程序进行抓包,求大神解答 可以监测指定程序.指定端口上所有的信息流量.最后以十六进制形式来显示数据内容,并保存数据信息的.话说这个可以通关sharpcap实现么,求大神指导.QAQ 解决方案 参考http://www.cnblogs.com/therock/articles/3572119.htmlhttp://www.360doc.com/content/11/0519/14/6889381_117894489.shtml 解决方案二: 最好是有程序的

求推荐几种web实时数据展示的技术、库或服务,比如highchart。求大神指点。

问题描述 求推荐几种web实时数据展示的技术.库或服务,比如highchart.求大神指点. 求推荐几种web实时数据展示的技术.库或服务,比如highchart.求大神指点. 解决方案 http://jingyan.baidu.com/article/ea24bc39854bb3da62b3313c.html