2015-03-17 2 views
1

Я установил (из источника) cygnus 0.7.1, а после его настройки (MySQL и HDFS) я могу запустить его без проблем. Когда я подписываюсь на cygnus в контексте orion, он получает информацию в порядке, но есть проблема с MySQL и HDFS. Это и есть журнал:Cygnus 0.7.1 не создает таблицы (MySQL и HDFS)

15/03/17 13:58:52 INFO handlers.OrionRestHandler: Starting transaction (1426597123-891-0000000000) 
15/03/17 13:58:52 INFO handlers.OrionRestHandler: Received data ({ "subscriptionId" : "5508250c1860a36e55240c84", "originator" : "localhost", "contextResponses" : [ {  "contextElement" : {  "type" : "ubk-temp",  "isPattern" : "false",  "id" : "ubk:temp:1",  "attributes" : [   {   "name" : "temperature",   "type" : "float",   "value" : "11"   }  ]  },  "statusCode" : {  "code" : "200",  "reasonPhrase" : "OK"  } } ]}) 
15/03/17 13:58:52 INFO handlers.OrionRestHandler: Event put in the channel (id=1549700267, ttl=10) 
15/03/17 13:58:52 INFO sinks.OrionSink: Event got from the channel (id=1549700267, headers={fiware-servicepath=ubktemp, destination=ubk_temp_1_ubk-temp, content-type=application/json, fiware-service=ubikwa, ttl=10, transactionId=1426597123-891-0000000000, timestamp=1426597132511}, bodyLength=462) 
15/03/17 13:58:52 INFO sinks.OrionSink: Event got from the channel (id=1549700267, headers={fiware-servicepath=ubktemp, destination=ubk_temp_1_ubk-temp, content-type=application/json, fiware-service=ubikwa, ttl=10, transactionId=1426597123-891-0000000000, timestamp=1426597132511}, bodyLength=462) 
15/03/17 13:58:52 INFO sinks.OrionMySQLSink: [mysql-sink] Persisting data at OrionMySQLSink. Database: ubikwa, Table: ubktemp_ubk_temp_1_ubk-temp, Timestamp: 2015-03-17T13:58:52.511, Data (attrs): {temperature=11}, (metadata): {temperature_md=[]} 
15/03/17 13:58:53 INFO sinks.OrionHDFSSink: [hdfs-sink] Persisting data at OrionHDFSSink. HDFS file (ubikwa/ubktemp/ubk_temp_1_ubk-temp/ubk_temp_1_ubk-temp.txt), Data ({"recvTime":"2015-03-17T13:58:52.511","temperature":"11", "temperature_md":[]}) 
15/03/17 13:58:53 WARN sinks.OrionSink: Bad context data (Table 'ubikwa.ubktemp_ubk_temp_1_ubk-temp' doesn't exist) 
15/03/17 13:58:53 INFO sinks.OrionSink: Finishing transaction (1426597123-891-0000000000) 

Ошибка в MySQL не вызывает ошибок, но таблицы не создаются. И HDFS-приемник, похоже, не может создать файлы. Я ранее устанавливал cygnus 0.6 и работал с той же конфигурацией.

Edit:

Вот его моя конфигурация:

cygnusagent.sources = http-source 
cygnusagent.sinks = hdfs-sink mysql-sink 
cygnusagent.channels = hdfs-channel mysql-channel 

#============================================= 
# source configuration 
# channel name where to write the notification events 
cygnusagent.sources.http-source.channels = hdfs-channel mysql-channel 
# source class, must not be changed 
cygnusagent.sources.http-source.type = org.apache.flume.source.http.HTTPSource 
# listening port the Flume source will use for receiving incoming notifications 
cygnusagent.sources.http-source.port = 5050 
# Flume handler that will parse the notifications, must not be changed 
cygnusagent.sources.http-source.handler = es.tid.fiware.fiwareconnectors.cygnus.handlers.OrionRestHandler 
# URL target 
cygnusagent.sources.http-source.handler.notification_target = /notify 
# Default service (service semantic depends on the persistence sink) 
cygnusagent.sources.http-source.handler.default_service = ubikwa 
# Default service path (service path semantic depends on the persistence sink) 
cygnusagent.sources.http-source.handler.default_service_path = ubktemp 
# Number of channel re-injection retries before a Flume event is definitely discarded (-1 means infinite retries) 
cygnusagent.sources.http-source.handler.events_ttl = 10 
# Source interceptors, do not change 
cygnusagent.sources.http-source.interceptors = ts de 
# Timestamp interceptor, do not change 
cygnusagent.sources.http-source.interceptors.ts.type = timestamp 
# Destination extractor interceptor, do not change 
cygnusagent.sources.http-source.interceptors.de.type = es.tid.fiware.fiwareconnectors.cygnus.interceptors.DestinationExtractor$Builder 
# Matching table for the destination extractor interceptor, put the right absolute path to the file if necessary 
# See the doc/design/interceptors document for more details 
cygnusagent.sources.http-source.interceptors.de.matching_table = /opt/cygnus/conf/matching_table.conf 

# ============================================ 
# OrionHDFSSink configuration 
# channel name from where to read notification events 
cygnusagent.sinks.hdfs-sink.channel = hdfs-channel 
# sink class, must not be changed 
cygnusagent.sinks.hdfs-sink.type = es.tid.fiware.fiwareconnectors.cygnus.sinks.OrionHDFSSink 
# Comma-separated list of FQDN/IP address regarding the Cosmos Namenode endpoints 
# If you are using Kerberos authentication, then the usage of FQDNs instead of IP addresses is mandatory 
cygnusagent.sinks.hdfs-sink.cosmos_host = 130.206.80.46 
# port of the Cosmos service listening for persistence operations; 14000 for httpfs, 50070 for webhdfs and free choice for inifinty 
cygnusagent.sinks.hdfs-sink.cosmos_port = 14000 
# default username allowed to write in HDFS 
cygnusagent.sinks.hdfs-sink.cosmos_default_username = *** 
# default password for the default username 
cygnusagent.sinks.hdfs-sink.cosmos_default_password = *** 
# HDFS backend type (webhdfs, httpfs or infinity) 
cygnusagent.sinks.hdfs-sink.hdfs_api = httpfs 
# how the attributes are stored, either per row either per column (row, column) 
cygnusagent.sinks.hdfs-sink.attr_persistence = column 
# Hive FQDN/IP address of the Hive server 
cygnusagent.sinks.hdfs-sink.hive_host = 130.206.80.46 
# Hive port for Hive external table provisioning 
cygnusagent.sinks.hdfs-sink.hive_port = 10000 
# Kerberos-based authentication enabling 
cygnusagent.sinks.hdfs-sink.krb5_auth = false 
# Kerberos username 
cygnusagent.sinks.hdfs-sink.krb5_auth.krb5_user = krb5_username 
# Kerberos password 
cygnusagent.sinks.hdfs-sink.krb5_auth.krb5_password = xxxxxxxxxxxxx 
# Kerberos login file 
cygnusagent.sinks.hdfs-sink.krb5_auth.krb5_login_conf_file = /usr/cygnus/conf/krb5_login.conf 
# Kerberos configuration file 
cygnusagent.sinks.hdfs-sink.krb5_auth.krb5_conf_file = /usr/cygnus/conf/krb5.conf 

# ============================================ 
# OrionMySQLSink configuration 
# channel name from where to read notification events 
cygnusagent.sinks.mysql-sink.channel = mysql-channel 
# sink class, must not be changed 
cygnusagent.sinks.mysql-sink.type = es.tid.fiware.fiwareconnectors.cygnus.sinks.OrionMySQLSink 
# the FQDN/IP address where the MySQL server runs 
cygnusagent.sinks.mysql-sink.mysql_host = 127.0.0.1 
# the port where the MySQL server listes for incomming connections 
cygnusagent.sinks.mysql-sink.mysql_port = 3306 
# a valid user in the MySQL server 
cygnusagent.sinks.mysql-sink.mysql_username = *** 
# password for the user above 
cygnusagent.sinks.mysql-sink.mysql_password = *** 
# how the attributes are stored, either per row either per column (row, column) 
cygnusagent.sinks.mysql-sink.attr_persistence = column 

#============================================= 
# hdfs-channel configuration 
# channel type (must not be changed) 
cygnusagent.channels.hdfs-channel.type = memory 
# capacity of the channel 
cygnusagent.channels.hdfs-channel.capacity = 1000 
# amount of bytes that can be sent per transaction 
cygnusagent.channels.hdfs-channel.transactionCapacity = 100 

#============================================= 
# mysql-channel configuration 
# channel type (must not be changed) 
cygnusagent.channels.mysql-channel.type = memory 
# capacity of the channel 
cygnusagent.channels.mysql-channel.capacity = 1000 
# amount of bytes that can be sent per transaction 
cygnusagent.channels.mysql-channel.transactionCapacity = 100 

Любые намеки?

Благодаря

+1

Можете вставить свою конфигурацию, пожалуйста? Некоторые параметры появились/исчезли из версии в другую. – frb

+0

Я редактировал исходное сообщение с моим файлом конфигурации. Благодарю. –

ответ

2

Я считаю его потому, что вы с помощью параметра столбец в конфигурации для OrionMySQLSink

# how the attributes are stored, either per row either per column (row, column) 
cygnusagent.sinks.mysql-sink.attr_persistence = column 

В документации указано, что при использовании столбец базы данных и таблицы должны быть созданы до начала of cygnus. Когда вы используете строка, все 8 строк будут созданы автоматически перед первой вставкой.

В таблицах, можно найти два варианта:

Фиксированные строки 8-полей, как обычно: recvTimeTs, recvTime, EntityId, EntityType, attrName, attrType, и значение атрибута attrMd. Эти таблицы (и базы данных) создаются во время выполнения, если в таблице не было до вставки строки. Что касается attrValue, то в его простейшей форме это значение является просто строкой, но поскольку Orion 0.11.0 это может быть Json-объектом или Json-массивом. Что касается attrMd, он содержит строку сериализации строки для метаданных для атрибута в Json (если атрибут не содержит метаданных, вставлен пустой массив []), Два столбца на каждый атрибут объекта (один для значения и другое для метаданных), плюс столбец добавления о приеме время данных (recv_time). Этот тип таблиц (и баз данных) должен быть предварительно предоставлен для выполнения Cygnus, потому что каждый объект может иметь различное количество атрибутов, а уведомления должны гарантировать, что значение для каждого атрибута будет уведомлено.

Поведение разъема относительно внутреннего представления данных определяется с помощью параметра конфигурации, attr_persistence, значениями которого могут быть строки или столбцы.

2

Как указывает Petark, «режим столбца» не создает автоматически таблицы, и это должно быть предусмотрено в расширенном виде. Зачем? Причина в том, что в зависимости от подписки, которую вы делали в CB Orion для отправки уведомлений в Cygnus, такое уведомление может включать в себя несколько раз несколько обновлений, несколько раз другие очень разные атрибуты и т. Д.

Например, рассмотрим объект под названием «автомобиль» с параметрами «скорость», «местоположение» и «уровень масла». Затем вы можете сказать «уведомлять Cygnus каждый раз, когда скорость изменяется, но отправлять только значение скорости. Но в то же время вы можете сказать« уведомлять Cygnus каждый раз, когда уровень масла изменяется, и отправлять все значение атрибута ». автомобиль начинает двигаться, и только скорость и местоположение меняются, но не уровень масла, тогда только уведомление о скорости будет уведомлено Cygnus, которое не имеет никакого шанса узнать о других атрибутах в любое время.

Таким образом, если вы хотите, чтобы строки данных имели все 3 атрибута, вам необходимо предоставить таблицу самостоятельно. Кстати, наличие таких примеров подписки приведет к множеству строк «скорость-значение, нуль, нуль» в ваших таблицах.

Разница с «режимом строки» заключается в том, что независимо от количества notifed атрибутов, ne строка w будет добавлена ​​для каждого уведомленного атрибута, имея все строки одного формата (entityId, entitytType, attrName, attrType, attrValue, attrMd); этот формат может быть автоматически предоставлен Cygnus.

Смежные вопросы