Сопоставление таблиц Hive с помощью MongoDB

Здесь я попытался выполнить операцию уменьшения карты с помощью hiveql, он работает для запроса выбора, но выдает какое-то исключение для некоторой операции агрегирования и фильтрации, пожалуйста, помогите мне решить эту проблему. Я добавил баночки mongo-hadoop в соответствующие места

куст> выберите * из пользователей; ОК 1 Том 28 2 Алиса 18 3 Боб 29

улей> выберите * из пользователей, у которых возраст> = 20; Общее количество заданий MapReduce = 1 Запуск задания 1 из 1 Количество задач сокращения установлено на 0, так как нет оператора уменьшения

Kill Command = /home/administrator/hadoop-2.2.0//bin/hadoop job  -kill job_1398687508122_0002
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2014-05-05 12:08:41,195 Stage-1 map = 0%,  reduce = 0%
2014-05-05 12:08:57,723 Stage-1 map = 100%,  reduce = 0%`enter code here`
Ended Job = job_1398687508122_0002 with errors
Error during job, obtaining debugging information...
Examining task ID: task_1398687508122_0002_m_000000 (and more) from job job_1398687508122_0002

Task with the most failures(4): 
-----
Task ID:
  task_1398687508122_0002_m_000000
-----
Diagnostic Messages for this Task:
Error: java.io.IOException: java.io.IOException: Couldn't get next key/value from mongodb: 
    at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderNextException(HiveIOExceptionHandlerChain.java:121)
    at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderNextException(HiveIOExceptionHandlerUtil.java:77)
    at org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.doNext(HiveContextAwareRecordReader.java:276)
    at org.apache.hadoop.hive.ql.io.HiveRecordReader.doNext(HiveRecordReader.java:79)
    at org.apache.hadoop.hive.ql.io.HiveRecordReader.doNext(HiveRecordReader.java:33)
    at org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.next(HiveContextAwareRecordReader.java:108)
    at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:197)
    at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.next(MapTask.java:183)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:52)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:429)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
    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:1491)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
Caused by: java.io.IOException: Couldn't get next key/value from mongodb: 
    at com.mongodb.hadoop.mapred.input.MongoRecordReader.nextKeyValue(MongoRecordReader.java:93)
    at com.mongodb.hadoop.mapred.input.MongoRecordReader.next(MongoRecordReader.java:98)
    at com.mongodb.hadoop.mapred.input.MongoRecordReader.next(MongoRecordReader.java:27)
    at org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.doNext(HiveContextAwareRecordReader.java:274)
    ... 13 more
Caused by: com.mongodb.MongoException$Network: Read operation to server localhost/127.0.0.1:12345 failed on database test
    at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:253)
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273)
    at com.mongodb.DBCursor._check(DBCursor.java:368)
    at com.mongodb.DBCursor._hasNext(DBCursor.java:459)
    at com.mongodb.DBCursor.hasNext(DBCursor.java:484)
    at com.mongodb.hadoop.mapred.input.MongoRecordReader.nextKeyValue(MongoRecordReader.java:80)
    ... 16 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at com.mongodb.DBPort._open(DBPort.java:223)
    at com.mongodb.DBPort.go(DBPort.java:125)
    at com.mongodb.DBPort.call(DBPort.java:92)
    at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:244)
    ... 23 more
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched: 
Job 0: Map: 1   HDFS Read: 0 HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 0 msec

person Karthigai muthu    schedule 05.05.2014    source источник


Ответы (1)


В Hive «select * from table» работает в другом режиме, чем любой другой более сложный запрос. Этот запрос работает в клиенте куста в одной JVM. Логика заключается в том, что в конечном итоге запрос все равно должен будет выводить все на консоль из одного потока, поэтому просто делать все из этого потока ничуть не хуже. Все остальное, включая простой фильтр, будет выполняться как одно или несколько заданий MapReduce.

Когда вы запускаете запрос без фильтра, я предполагаю, что вы делаете это на том же компьютере, на котором работает MongoDB, поэтому он может подключиться к localhost: 12345. Но когда вы запускаете задание MapReduce, это пытается подключиться другой компьютер: узел задачи. Mapper пытается подключиться к localhost: 12345, чтобы получить данные от Mongo, но не может этого сделать. Может быть, Mongo не работает на этой машине, а может быть, он работает на другом порту. Я не знаю, как настроен ваш кластер.

В любом случае вы должны указать расположение экземпляра MongoDB таким образом, чтобы все машины в вашем кластере могли получить к нему доступ. Если у него довольно статичный локальный IP-адрес, это будет работать, но лучше было бы сделать это по имени хоста и разрешению DNS.

person Joe K    schedule 05.05.2014
comment
Привет, я изменил имя хоста, а затем сопоставил коллекцию mongo с таблицей улья, теперь она работает нормально. Спасибо - person Karthigai muthu; 05.05.2014