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
<configuration>
<property>
<name>io.native.lib.avaliable</name>
<value>true</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<final>true</final>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/Cloud/workspace/temp</value>
</property>
</configuration>
#################################################core
vim hdfs-site.xml
######################################################hdfs
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/Cloud/workspace/hdfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.dir</name>
<value>/home/hadoop/Cloud/workspace/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.dir</name>
<value>/home/hadoop/Cloud/workspace/hdfs/data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
#######################################################hdfs
vim mapred-site.xml
######################################mapred
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
######################################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<stdio.h>
#include<stdlib.h>
#include<string.h>
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 /input echo "hello hadoop" > test1.txt把当前目录的所有文件导入hdfs的in目录: hadoop dfs -put / inhadoop dfs -ls /in/* hadoop dfs -cp /in/test1.txt /in/test1.txt.bak hadoop dfs -ls /in/* hadoop dfs -rm /in/test1.txt.bak mkdir 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还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。
转载于:https://blog.51cto.com/10710016/1896278
centos6.5下部署用于生产的hadoop,并使用C语言API连接hadoop相关推荐
- 部署用于生产的Exceptionlees(一个强大易用的日志收集服务)
Exceptionless简介 Exceptionless从翻译来看是无异常的意思,其实它收集了很多异常信息. 大家可以把他看做事一个非常好用的日志收集服务. 还提供了,多组织.多项目. 它是一个开源 ...
- hadoop 使用HA后java api连接获取 FileSystem
所需要配置的参数: Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs ...
- 第07章 连接Hadoop集群
序言 1.内容介绍 本章介绍了Hadoop的综合概述.连接Hadoop集群的基本条件以及具体连接的实现步骤. 2.理论目标 了解Hadoop分布式文件系统 了解MapReduce计算框架 掌握Ap ...
- Centos6.3下利用open***部署远程×××服务
Centos6.3下利用open***部署远程×××服务 open***是一款在LINUX网关服务器使用的开源的×××软件,顾名思义,其实就是用来打通一条安全的虚拟专用通道,实现用户远程办公,获取内网 ...
- CentOS下部署Hadoop高性能集群
目录: •Hadoop 概述 •实战1:部署Hadoop高性能集群 Hadoop是什么 Hadoop是Lucene创始人Doug Cutting,根据Google的相关内容山寨出来的分布式文件系统和对 ...
- 【Zabbix】CentOS6.9系统下部署Zabbix-server 3.0
[Zabbix]CentOS6.9系统下部署Zabbix-server 3.0 目录 安装Zabbix 关闭selinux 删除旧版本MySQL5.1数据库 安装MySQL 5.6数据库 安装PHP ...
- 你知道怎么在生产环境下部署tomcat吗?
享学课堂特邀作者:老顾 转载请声明出处! 一.前言 小伙伴们在网上看到的很多文章,都是对tomcat的一些介绍,什么配置啊,怎么启动.其实在生产环境中怎么部署,和网上介绍的有很大区别.这篇文章老顾就带 ...
- 夕阳桥断 Linux(centos6.5)下安装jenkins Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插
夕阳桥断 Linux(centos6.5)下安装jenkins Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎. 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插件, ...
- linux环境下编译部署php生产环境
linux环境下编译部署php生产环境 版本控制 php:7.2.4 nginx:1.9.9 部分插件版本 xlswriter:1.3.3.2 redis:3.1.3 一.安装php 1.安装依赖(之 ...
最新文章
- FPGA的设计艺术(13)使用generate语句构建可重用的逻辑设计
- 断网也能上传数据!苹果用户又可以了 | 开源
- 03-29复利计算单元测试
- 【Canvas】如何用Canvas绘制折线图
- Ubuntu Linux配置IP地址
- Firefox必备的24款web开发插件[转]
- php检测数组值的长度,php检测数组长度的函数sizeof count_PHP教程
- 定区关联快递员 定区关联收派时间
- python3生成exe文件_python3.7打包成exe就三步
- axure不显示元件库
- python自动化中使用unittestreport输出测试报告
- matlab:研究二阶系统中开环参数的影响
- 特种部队2全面反击bt电影种子下载
- DNF之架设搭建游戏流程讲解
- UV法测量cod原理及特点
- adams打不开提示msc license_Adams打开出现错误提示:
- 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗
- mpush 搭建消息服务器,MPUSH消息推送服务器搭建
- 多通道和单通道3D卷积及其运算过程详解
- VDA 6.3 2022 EN 黄皮书.最新版 汽车质量VDA6.3-2022过程审核
热门文章
- 加法神经网络--AdderNet: DoWe Really Need Multiplications in Deep Learning?
- 三值网络--Trained Ternary Quantization
- PAT甲级(Advanced Level)真题--1046 Sharing
- 虚拟私有云网络VPC
- 葫芦岛天气预报软件测试,[软件工具][软件游戏]IM智能机器人小强--给你生活带来方便和快乐!(转载)...
- matlab心电图诊断系统,ECG-diag MATLAB心电图自动诊断程序 联合开发网 - pudn.com
- docker部署Redis6-0-6
- 联想服务器升级微码文件,ThinkPad如何升级硬盘微码程序(适用于SL系列机器)
- Docker(九):Docker实战 安装 Ubuntu
- RunLoop 详解