मुझे Mac पर Hadoop पाइप कोड चलाने में समस्या है। यह मेरा सी ++ कोड है।

#include <algorithm>
#include <limits>
#include <stdint.h>
#include <string>

#include "Pipes.hh"
#include "TemplateFactory.hh"
#include "StringUtils.hh"
using namespace std;

class MaxTemperatureMapper : public HadoopPipes::Mapper {
public:
  MaxTemperatureMapper(HadoopPipes::TaskContext& context) {
  }
  void map(HadoopPipes::MapContext& context) {
    std::string line = context.getInputValue();
    std::string year = line.substr(15, 4);
    std::string airTemperature = line.substr(87, 5);
    std::string q = line.substr(92, 1);
    if (airTemperature != "+9999" &&
        (q == "0" || q == "1" || q == "4" || q == "5" || q == "9")) {
      context.emit(year, airTemperature);
    }
  }
};

class MapTemperatureReducer : public HadoopPipes::Reducer {
public:
  MapTemperatureReducer(HadoopPipes::TaskContext& context) {
  }
  void reduce(HadoopPipes::ReduceContext& context) {
    int maxValue = INT_MIN;
    while (context.nextValue()) {
      maxValue = std::max(maxValue, HadoopUtils::toInt(context.getInputValue()));
    }
    context.emit(context.getInputKey(), HadoopUtils::toString(maxValue));
  }
};

int main(int argc, char * argv[]) {

    int i=HadoopPipes::runTask(HadoopPipes::TemplateFactory<WordCountMap, WordCountReduce>()); // 运行任务
    return 0;
}

मेरा मेकफ़ाइल है:

wordcount :wordcount.cpp
    g++ -Wall -I/Users/macbookpro/Documents/hadoop-2.7.5/include -L/Users/macbookpro/Documents/hadoop-2.7.5/lib/native -lhadooppipes -lhadooputils -lpthread -lcrypto -lssl -g -O2 -o $@

जब मैंने स्रोत फ़ाइल को संकलित करने का प्रयास किया, तो मुझे यह कहते हुए एक त्रुटि मिली कि

आर्किटेक्चर के लिए अपरिभाषित प्रतीक x86_64: "_main", से संदर्भित: मुख्य निष्पादन योग्य एलडी के लिए अंतर्निहित प्रविष्टि/प्रारंभ: आर्किटेक्चर के लिए प्रतीक नहीं मिला x86_64 क्लैंग: त्रुटि: लिंकर कमांड निकास कोड 1 के साथ विफल रहा (आमंत्रण देखने के लिए -v का उपयोग करें) बनाना: *** [वर्डकाउंट] त्रुटि १

मुझे नहीं पता कि इसका क्या अर्थ है क्योंकि मेरे पास पहले से ही एक मुख्य कार्य है।

क्या आप इस समस्या का समाधान कर सकते हैं?

धन्यवाद!

3
Joon 20 अप्रैल 2018, 06:34

1 उत्तर

सबसे बढ़िया उत्तर

आपने स्रोत फ़ाइल को नुस्खा में पास नहीं किया है, इससे बचने का सबसे आसान तरीका केवल एक-शॉटिंग प्रोग्राम के लिए अंतर्निहित मेक नियम पर भरोसा करना है, आपको बस इतना करना है:

CPPFLAGS := -I/Users/macbookpro/Documents/hadoop-2.7.5/include -pthread
CXXFLAGS := -Wall -g -O2
LDFLAGS  := -L/Users/macbookpro/Documents/hadoop-2.7.5/lib/native -pthread 
LDLIBS   := -lhadooppipes -lhadooputils -lcrypto -lssl

wordcount:

%: %.cpp के लिए निहित अंतर्निहित नियम बाकी का ध्यान रखेगा। ध्यान दें कि आप pthread का गलत उपयोग कर रहे हैं, आपको pthread विकल्प को प्रीप्रोसेसर और लिंकर को पास करना होगा, न कि lib।

1
user657267 20 अप्रैल 2018, 08:44