千家信息网

centos6.5下部署用于生产的hadoop,并使用C语言API连接hadoop

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,#########安装hadoop2.6.0完全分布式集群#########文件及系统版本:####hadoop-2.6.0Java version 1.8.0_77centos 64位####预备#
千家信息网最后更新 2026年11月01日centos6.5下部署用于生产的hadoop,并使用C语言API连接hadoop


#####

####安装hadoop2.6.0完全分布式集群

#####


####文件及系统版本:

####

hadoop-2.6.0

Java version 1.8.0_77

centos 64位


####预备

####

在/home/hadoop/下:mkdir Cloud

把java和hadoop安装包放在/home/hadoop/Cloud下



####配置静态ip

####

master192.168.116.100

slave1192.168.116.110

slave2192.168.116.120



####修改机器相关名称(都是在root权限下)

####

su root

vim /etc/hosts

在原信息下输入:(空格+tab键)

192.168.116.100 master

192.168.116.110 slave1

192.168.116.120 slave2


vim /etc/hostname

master

shutdown -r now (重启机器)


vim /etc/hostname

slave1

shutdown -r now


vim /etc/hostname

slave2

shutdown -r now



####安装openssh

####

su root

yum install openssh

ssh-keygen -t rsa

然后一直确认


把slave1和slave2的公钥发给master:

scp /home/hadoop/.ssh/id_rsa.pub hadoop@master:~/.ssh/slave1.pub

scp /home/hadoop/.ssh/id_rsa.pub hadoop@master:~/.ssh/slave2.pub


在master下: cd .ssh/

cat id_rsa.pub >> authorized_keys

cat slave1.pub >> authorized_keys

cat slave2.pub >> authorized_keys


把公钥包发给slave1和slave2:

scp authorized_keys hadoop@slave1:~/.ssh/

scp authorized_keys hadoop@slave2:~/.ssh/


ssh slave1

ssh slave2

ssh master

相应的输入yes


到这里ssh无密码登录配置完成


####

####设计JAVA_HOME HADOOP_HOME

####

su root

vim /etc/profile

输入:

export JAVA_HOME=/home/hadoop/Cloud/jdk1.8.0_77

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/home/hadoop/Cloud/hadoop-2.6.0

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然后source /etc/profile

(三台都要配置)


####

####配置hadoop文件

####

在/home/hadoop/Cloud/hadoop-2.6.0/sbin下:

vim hadoop-daemon.sh

修改pid的路径


vim yarn-daemon.sh

修改pid的路径



在/home/hadoop/Cloud/hadoop-2.6.0/etc下:


vim slaves 输入:

master

slave1

slave2


vim hadoop-env.sh 输入:

export JAVA_HOME=/home/hadoop/Cloud/jdk1.8.0_77

export HADOOP_HOME_WARN_SUPPRESS="TRUE"


vim core-site.xml 输入:

###############################################core



io.native.lib.avaliable


true




fs.default.name


hdfs://master:9000


true




hadoop.tmp.dir


/home/hadoop/Cloud/workspace/temp



#################################################core


vim hdfs-site.xml

######################################################hdfs



dfs.replication


3




dfs.permissions


false




dfs.namenode.name.dir


/home/hadoop/Cloud/workspace/hdfs/data


true




dfs.namenode.dir


/home/hadoop/Cloud/workspace/hdfs/name




dfs.datanode.dir


/home/hadoop/Cloud/workspace/hdfs/data




dfs.webhdfs.enabled


true



#######################################################hdfs


vim mapred-site.xml


######################################mapred


mapred.job.tracker

master:9001


######################################mapred


把配置好的hadoop发送到slave1和slave2

scp -r hadoop-2.6.0 hadoop@slave1:~/Cloud/

scp -r hadoop-2.6.0 hadoop@slave2:~/Cloud/

把Java包发到slave1和slave2:

scp -r jdk1.8.0_77 hadoop@slave1:~/Cloud/

scp -r jdk1.8.0_77 hadoop@slave2:~/Cloud/


到这里,hadoop集群配置完成


########

########现在可以启动hadoop

########


首先格式化namenode

hadoop namenode -format (由于前面设计了hadoop-env.sh和系统环境,所以在任意目录下都可以执行)

查看日志没错的话往下

start-all.sh

然后

完整的的话通过jps查看:

[hadoop@master ~]$ jps

42306 ResourceManager

42407 NodeManager

42151 SecondaryNameNode

41880 NameNode

41979 DataNode


[hadoop@slave1 ~]$ jps

21033 NodeManager

20926 DataNode


[hadoop@slave2 ~]$ jps

20568 NodeManager

20462 DataNode


至此,hadoop-2.6.0完全分布式配置完成。


下面是hadoop的浏览器端口号:

localhost:50070

localhost:8088




########

########配置C的API连接HDFS

########

find / -name libhdfs.so.0.0.0

vi /etc/ld.so.conf

写入:

/home/hadoop/Cloud/hadoop-2.6.0/lib/native/

/home/hadoop/Cloud/jdk1.8.0_77/jre/lib/amd64/server/

然后设计启动加载:

/sbin/ldconfig -v


接着配置环境变量:

查找并打印:

find /home/hadoop/Cloud/hadoop-2.6.0/share/ -name *.jar|awk '{ printf("export CLASSPATH=%s:$CLASSPATH\n", $0); }'

会看到打印的内容如:

export CLASSPATH=/home/hadoop/Cloud/hadoop-2.6.0/share/hadoop/common/lib/activation-1.1.jar:$CLASSPATH

export CLASSPATH=/home/hadoop/Cloud/hadoop-2.6.0/share/hadoop/common/lib/jsch-0.1.42.jar:$CLASSPATH

。。。。。。

把打印的全部内容添加到环境变量vim /etc/profile


然后编写C语言代码验证是否配置成功:

vim above_sample.c

代码内容如下:

#################################################################################

#include"hdfs.h"


#include


#include


#include


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




hdfsFS fs =hdfsConnect("192.168.116.100", 9000); //在这里做了一点修改


const char* writePath ="/tmp/testfile.txt";


hdfsFile writeFile = hdfsOpenFile(fs,writePath, O_WRONLY|O_CREAT, 0, 0, 0);


if(!writeFile) {


fprintf(stderr, "Failed toopen %s for writing!\n", writePath);


exit(-1);


}

char* buffer = "Hello,World!";


tSize num_written_bytes = hdfsWrite(fs,writeFile, (void*)buffer, strlen(buffer)+1);


if (hdfsFlush(fs, writeFile)) {


fprintf(stderr, "Failed to'flush' %s\n", writePath);


exit(-1);


}


hdfsCloseFile(fs, writeFile);


}

###############################################################################

编译C语言代码:

gcc above_sample.c -I /home/hadoop/Cloud/hadoop-2.6.0/include/ -L /home/hadoop/Cloud/hadoop-2.6.0/lib/native/ -lhdfs /home/hadoop/Cloud/jdk1.8.0_77/jre/lib/amd64/server/libjvm.so -o above_sample

执行编译完成生成的above_sample文件:

./above_sample

查看日志和hadoop文件目录是否生成了testfile文件


至此,C语言的API连接HDFS配置完成




#########

#######集群的文件操作

########


###(自动分发脚本)auto.sh


vim auto.sh


chmod +x auto.sh


./auto.sh jdk1.8.0_77 ~/Cloud/

自动分发脚本

############################

#!/bin/bash


nodes=(slave1 slave2)


num=${#nodes[@]}


file=$1


dst_path=$2


for((i=0;i<${num};i++));do


scp -r ${file} ${nodes[i]}:${dst_path};

done;

####################

##########hadoop-2.6.0完全分布式集群基本操作#####hdfs dfs -mkdir /inputecho "hello hadoop" > test1.txt把当前目录的所有文件导入hdfs的in目录:hadoop dfs -put / inhadoop dfs -ls /in/*hadoop dfs -cp /in/test1.txt /in/test1.txt.bakhadoop dfs -ls /in/*hadoop dfs -rm /in/test1.txt.bakmkdir dir_from_hdfs从hdfs下载目录in中的全部文件放到dir_from_hdfs中:hadoop dfs -get /in/* /dir_from_hdfscd /home/hadoop/Cloud/hadoop-1.2.1以空格为分隔,统计in目录中的所有文本文件的单词数目(注意output/wordcount目录不可以为存在的目录):hadoop jar hadoop-examples-2.6.0.jar wordcount in /output/wordcount 查看统计结果:hadoop fs -cat output/wordcount/part-r-00000########管理####1.集群相关管理:edit log:修改日志,当文件系统客户端client进行写操作的时候,我们就要把这条记录放在修改日志中。在记录了修改日志后,NameNode则修改内存中的数据结构。每次写操作成功之前,edit log都会同步到文件系统中fsp_w_picpath:命名空间镜像,它是内存中的元数据在硬盘上的checkpoint。当NameNode失败的时候,最新的checkpoint的元数据信息就会从fsp_w_picpath加载到内存中,然后注意重新执行修改日志中的操作。而Secondary NameNode就是用来帮助元数据节点将内存中的元数据信息checkpoint到硬盘上的。2.集群属性:优点:1)能够处理超大的文件;2)流式访问数据。HDFS能够很好的处理"一次写入,多次读写"的任务。也就是说,一个数据集一旦生成了,就会被复制到不同的存储节点中,然后响应各种各样的数据分析任务请求。在多数情况下,分析任务都会涉及到数据集中的大部分数据。所以,HDFS请求读取整个数据集要比读取一条记录更加高效。缺点:1)不适合低延迟数据访问:HDFS是为了处理大型数据集分析任务的,主要是为达到大数据分析,所以延迟时间可能会较高。2)无法高效存储大量小文件:因为Namenode把文件系统的元数据放置在内存中,所以文件系统所能容纳的文件数目是由Namenode的内存大小来决定。3)不支持多用户写入以及任意修改文件:在HDFS的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作。目前HDFS还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。



文件 数据 配置 目录 内存 日志 系统 集群 输入 任务 分析 语言 代码 信息 内容 分布式 环境 处理 生成 设计 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是不是新科技 互联网科技公司电话 奇酷互联网络科技公司 米客互联网科技 新华互联网科技校企合作 开启互联网科技时代小说 欧洲十大科技互联网公司 成都互联网科技公司100强 新兴科技互联网创新大赛颁奖典礼 互联网科技研发水平 华夏恒生科技与互联网科技 爱医互联网络科技 中国互联网有什么科技 工业互联网科技创业 宁波跨境商互联网科技有限公司 广州智享互联网科技 西安左小互联网科技有限公司 北京天晋互联网科技有限公司 互联网科技创业有什么好项目 互联网科技企业文化 互联网科技工作委员会毛军 远信互联网科技 致骋互联网科技 互联网金融科技委员会 互联网科技大会案例 青岛科技大学互联网大赛研究生 呼和浩特新华互联网科技学院 青海科技产业互联网发展 江苏苏星互联网科技有限公司 上海乐五互联网科技有限公司
0