Hadoop C访问

现在计划做通过C访问Hadoop,选择了LibHDFS,打算用Eclipse(V3.7.2) CDT和cygwin测试。
1.下载CDT,通过Eclipse Install New Software,在地址安装。
2.Cygwin安装开发库,包含
gcc, gcc-core,gcc-g++, gcc-mingw-core, gcc-mingw-g++, make , gdb, binutils
3.添加cygwin的bin目录到Windows的Path环境变量里
4.在Windows下执行gcc,运行报错,显示“访问被拒绝” (access denied),检查g++.exe, gcc.exe是否只有1k大小,如果是,那么文件是符号链接,那么把文件重命名一下(备份)。然后把g++-3.exe(或者g++-4.exe)拷贝一份,重命名为g++.exe。 把gcc-3.exe拷贝一份,重命名为gcc.exe,参加文章
5.编写代码

#include "hdfs.h" int main(int argc, char **argv) { if (argc != 4) { fprintf(stderr, "Usage: hdfs_write \n"); exit(-1); } hdfsFS fs = hdfsConnect("default", 0); if (!fs) { fprintf(stderr, "Oops! Failed to connect to hdfs!\n"); exit(-1); } const char* writeFileName = argv[1]; tSize fileTotalSize = strtoul(argv[2], NULL, 10); tSize bufferSize = strtoul(argv[3], NULL, 10); hdfsFile writeFile = hdfsOpenFile(fs, writeFileName, O_WRONLY, bufferSize, 0, 0); if (!writeFile) { fprintf(stderr, "Failed to open %s for writing!\n", writeFileName); exit(-2); } // data to be written to the file char* buffer = malloc(sizeof(char) * bufferSize); if (buffer == NULL) { return -2; } int i = 0; for (i = 0; i < bufferSize; ++i) { buffer[i] = 'a' + (i % 26); } // write to the file tSize nrRemaining; for (nrRemaining = fileTotalSize; nrRemaining > 0; nrRemaining -= bufferSize) { int curSize = (bufferSize < nrRemaining) ? bufferSize : (int) nrRemaining; hdfsWrite(fs, writeFile, (void*) buffer, curSize); } free(buffer); hdfsCloseFile(fs, writeFile); hdfsDisconnect (fs); return 0; }

6.增加环境变量HADOOP_HOME,在cygwin目录下执行

export HADOOP_HOME=/home/test/hadoop0.20.2或在/etc/profile文件中增加上述内容。

7.在cygwin里面执行

gcc writeHDFS.c -I ${HADOOP_HOME}/src/c++/libhdfs -I /usr/local/jdk/include -I/usr/local/jdk/include/win32 -L${HADOOP_HOME}/c++/Linux-i386-32/lib -lhdfs -o writeHDFS
8.在linux里面执行gcc writeHDFS.c -I ${HADOOP_HOME}/src/c++/libhdfs -I ${JAVA_HOME}/include -I ${JAVA_HOME}/include/linux -L${HADOOP_HOME}/c++/Linux-i386-32/lib -lhdfs -L${JAVA_HOME}/jre/lib/i386/client -ljvm -o writeHDFS
9.运行./writeHDFS老报错,提示error while loading shared libraries: libhdfs.so.0: cannot open shared object file: No such file or directory,由于hadoop的c++/Linux-i386-32/lib目录下libhdfs.so、libhdfs.so.0、libhdfs.so.0.0.0文件相同,先将libhdfs.so.0改为libhdfs.so.0.bak,再执行ln -s ./libhdfs.so.0.0.0 ./libhdfs.so.0然后运行sudo vi /etc/ld.so.conf添加如下内容/home/pc01/hadoop-1.0.1/c++/Linux-i386-32/lib /usr/local/lib/jdk1.7.0_03/jre/lib/i386/server再运行sudo /sbin/ldconfig -v



### 解决无法访问Hadoop官方网址的方法 当遇到无法访问Hadoop官方网站的情况时,可能的原因涉及网络连接、DNS解析失败或是本地防火墙设置等问题。针对这些问题,可以从以下几个方面着手排查并解决问题。 #### 1. 检查网络连接状态 确认当前设备能够正常上网,尝试打开其他网站验证是否存在普遍性的网络故障。如果仅Hadoop官网不可达,则可能是特定于该站点的问题[^2]。 #### 2. 验证域名解析功能 使用命令行工具`nslookup`或`dig`来测试对`hadoop.apache.org`的DNS查询是否成功。这有助于判断问题是出自本地计算机还是更广泛的互联网服务提供商层面。 ```bash nslookup hadoop.apache.org ``` #### 3. 修改Hosts文件配置 有时为了绕过潜在的DNS劫持或其他异常情况,可以在本地hosts文件中手动指定目标服务器的真实IP地址。编辑位于Windows系统的`C:\Windows\System32\drivers\etc\hosts` 或 Linux/MacOS 的 `/etc/hosts` 文件,加入如下条目(假设已知确切IP): ``` <真实ip> hadoop.apache.org ``` #### 4. 关闭安全软件干扰 部分杀毒程序或个人防火墙可能会误拦截对外部资源的请求。暂时禁用这些防护措施后再试一次访问操作,观察是否有改善[^1]。 #### 5. 清除浏览器缓存数据 旧版网页残留可能导致加载新页面出现问题。清除历史记录与Cookies后重新启动浏览器进行尝试。 以上方案涵盖了从基础到高级的不同层次解决方案,按照上述建议逐步实施应该能有效定位并修复无法访问Hadoop官网上述提到的具体问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值