невозможно создать разделы в улье

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

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

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 необходимо удалить, а namenode следует отформатировать. Я также выполнил эту санитарную задачу. Но все еще та же ошибка, которую я получаю.

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

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


person Avinash    schedule 09.08.2016    source источник


Ответы (2)


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

это изображение показывает, как создать таблицу, загрузить, создать разделенную на разделы и скопировать данные из таблицы в разделенную таблицу

person Mahesh Gupta    schedule 10.08.2016
comment
Привет, я следовал тому же подходу и пытался. При загрузке данных в секционированную таблицу я получаю эту ошибку. - person Avinash; 11.08.2016
comment
вы не загружаете данные в таблицу разделов, просто копируете данные из предыдущей созданной таблицы в таблицу разделов;) - person Mahesh Gupta; 11.08.2016
comment
Я подозреваю, что это связано с инфраструктурой (4 ГБ оперативной памяти) и работой на платформе Native Hadoop и Hive. Размер моей таблицы для разделения близок к 1 ГБ (1,9 миллиона записей). Я создал несколько таблиц с 50 000 записей в каждой и попытался скопировать данные в реальную таблицу разделов, которая пока работала нормально. В любом случае. Надеюсь, что это не будет то же самое для большого размера кластера. Спасибо за ваш ответ. - person Avinash; 11.08.2016

Я думаю, что динамический раздел должен быть включен. следующие работы. установить 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');

установить hive.exec.dynamic.partition = true; вставить раздел таблицы таблицы перезаписи (столбец части) выбрать идентификатор, столбец части из исходной_таблицы;

person Sagar Shah    schedule 10.08.2016
comment
Привет, я следовал тому же подходу и пытался. При загрузке данных в секционированную таблицу я получаю эту ошибку. - person Avinash; 11.08.2016
comment
если вы считаете, что это проблема емкости, вы можете исключить ее, ограничив размер таблицы, создав временную таблицу. создать временную таблицу как select * from pnr_info1_external limit 500; ВСТАВИТЬ В ТАБЛИЦУ ba_data.PNR_INFO1_partitioned PARTITION(pnr_create_dt) select * from temp; - person Sagar Shah; 16.08.2016
comment
Да, вы правы. Мы можем ОГРАНИЧИТЬ до 500, но у меня около 1,9 миллиона записей. В улье нет понятия идентификатора строки. Мы должны вручную написать UDF для генерации, что будет другой задачей для выполнения - person Avinash; 16.08.2016