static int hdfsSingleNameNodeConnect(struct NativeMiniDfsCluster *cl, hdfsFS *fs, const char *username) { int ret; tPort port; hdfsFS hdfs; struct hdfsBuilder *bld; port = (tPort)nmdGetNameNodePort(cl); if (port < 0) { fprintf(stderr, "hdfsSingleNameNodeConnect: nmdGetNameNodePort " "returned error %d\n", port); return port; } bld = hdfsNewBuilder(); if (!bld) return -ENOMEM; hdfsBuilderSetForceNewInstance(bld); hdfsBuilderSetNameNode(bld, "localhost"); hdfsBuilderSetNameNodePort(bld, port); hdfsBuilderConfSetStr(bld, "dfs.block.size", TO_STR(TLH_DEFAULT_BLOCK_SIZE)); hdfsBuilderConfSetStr(bld, "dfs.blocksize", TO_STR(TLH_DEFAULT_BLOCK_SIZE)); if (username) { hdfsBuilderSetUserName(bld, username); } hdfs = hdfsBuilderConnect(bld); if (!hdfs) { ret = -errno; return ret; } *fs = hdfs; return 0; }
hdfsFS hdfsConnectAsUser(const char* nn, tPort port, const char *user) { struct hdfsBuilder* bld = hdfsNewBuilder(); if (!bld) { return NULL; } hdfsBuilderSetNameNode(bld, nn); hdfsBuilderSetNameNodePort(bld, port); hdfsBuilderSetUserName(bld, user); return hdfsBuilderConnect(bld); }
hdfsFS hdfsConnectAsUserNewInstance(const char* host, tPort port, const char *user) { struct hdfsBuilder *bld = hdfsNewBuilder(); if (!bld) return NULL; hdfsBuilderSetNameNode(bld, host); hdfsBuilderSetNameNodePort(bld, port); hdfsBuilderSetUserName(bld, user); hdfsBuilderSetForceNewInstance(bld); return hdfsBuilderConnect(bld); }
hdfsFS Hdfs3FindConnection(const std::string& hostport) { std::unique_lock<std::mutex> lock(s_hdfs_mutex); auto it = s_hdfs_map.find(hostport); if (it != s_hdfs_map.end()) return it->second; // split host:port std::vector<std::string> splitted = common::Split(hostport, ':', 2); uint16_t port; if (splitted.size() == 1) { port = 8020; } else { if (!common::from_str<uint16_t>(splitted[1], port)) die("Could not parse port in host:port \"" << hostport << "\""); } // split user@host std::vector<std::string> user_split = common::Split(splitted[0], '@', 2); const char* host, * user; if (user_split.size() == 1) { host = user_split[0].c_str(); user = nullptr; } else { user = user_split[0].c_str(); host = user_split[1].c_str(); } hdfsBuilder* builder = hdfsNewBuilder(); hdfsBuilderSetNameNode(builder, host); hdfsBuilderSetNameNodePort(builder, port); if (user) hdfsBuilderSetUserName(builder, user); hdfsFS hdfs = hdfsBuilderConnect(builder); if (!hdfs) die("Could not connect to HDFS server \"" << hostport << "\"" ": " << hdfsGetLastError()); s_hdfs_map[hostport] = hdfs; return hdfs; }