2016-08-09 5 views
0

Мне не удалось создать раздел в новой таблице из таблицы, которая уже присутствует на кусте.не удалось создать разделы в кусте

Запрос, который я бегу на кусте после создания таблицы является

INSERT INTO TABLE ba_data.PNR_INFO1_partitioned PARTITION(pnr_create_dt) select * from pnr_info1_external; 

ошибка, что я получаю

Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/hive/warehouse/ba_data.db/pnr_info1_partitioned/.hive-staging_hive_2016-08-09_17-47-47_508_8688474345886508021-1/_task_tmp.-ext-10002/pnr_create_dt=18%2F12%2F2013/_tmp.000000_3 could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and no node(s) are excluded in this operation. 
     at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1549) 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3200) 
     at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:641) 
     at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:482) 
     at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) 
     at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619) 
     at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2039) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2035) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAs(Subject.java:415) 
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628) 
     at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2033) 

     at org.apache.hadoop.ipc.Client.call(Client.java:1468) 
     at org.apache.hadoop.ipc.Client.call(Client.java:1399) 
     at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232) 
     at com.sun.proxy.$Proxy12.addBlock(Unknown Source) 
     at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:399) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187) 
     at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102) 
     at com.sun.proxy.$Proxy13.addBlock(Unknown Source) 
     at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1532) 
     at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1349) 
     at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:588) 

После того как я просмотрел и обнаружил, что NameNode, DataNode папки необходимо удаляться, а наменодация должна быть отформатирована. Я тоже выполнил эту санитарную задачу. Но все-таки та же ошибка, которую я получаю.

Также я установил коэффициент репликации в 1, и все процессы Hadoop работают хорошо.

Пожалуйста, предложите мне, как действовать, чтобы уйти от этой проблемы. Ваши предложения очень ценятся.

ответ

0

perform partitioned in value сначала нужно создать 1. таблицу со всеми поля 2. загрузить данные в таблицу 3. создать таблицу с колонкой разделов с их типом 4. копирование данных из первой таблицы в таблице разделов,

this image show how to create table ,load ,create partitoned and copy data from table to partitioned table

+0

Привет, Я выполнил тот же подход и попытался. При загрузке данных в секционированную таблицу, я получаю эту ошибку. – Avinash

+0

PLZ загрузить свою ошибку и команду. –

+0

вы не загружаете данные в таблицу разделов, просто скопируйте данные из предыдущей созданной таблицы в раздел taBLE;) –

0

Я думаю, что динамический раздел должен быть включен. следующие работы. set hive.exec.dynamic.partition.mode = нестрогий;

create table parttable (id int) partitioned by (partcolumn string) 
row format delimited fields terminated by '\t' 
lines terminated by '\n' 
; 

create table source_table (id int,partcolumn string) 
row format delimited fields terminated by '\t' 
lines terminated by '\n' 
; 

insert into source_table values (1,'Chicago'); 
insert into source_table values (2,'Chicago'); 
insert into source_table values (3,'Orlando'); 

set hive.exec.dynamic.partition = true; вставка переписать таблицу parttable раздел (partcolumn) select id, partcolumn from source_table;

+0

Привет, Я придерживался того же подхода и попытался. При загрузке данных в секционированную таблицу я получаю эту ошибку. – Avinash

+0

, если вы считаете, что это проблема с пропускной способностью, вы можете это исключить, ограничив размер таблицы, создав временную таблицу. создать таблицу temp как select * from pnr_info1_external limit 500; INSERT INTO TABLE ba_data.PNR_INFO1_partitioned PARTITION (pnr_create_dt) select * from temp; –

+0

Да, вы правы. Мы можем LIMIT до 500, но у меня около 1,9 записей mollion. В куче нет понятия идентификатора строки. Мы должны вручную писать UDF для генерации, что будет другой задачей для выполнения – Avinash