#####

####安装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 �Cv


接着配置环境变量:

查找并打印:

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);


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完全分布式集群基本操作
#####


hdfsdfs-mkdir/input
echo"hellohadoop">test1.txt

把当前目录的所有文件导入hdfs的in目录:
hadoopdfs-put/in

hadoopdfs-ls/in/*
hadoopdfs-cp/in/test1.txt/in/test1.txt.bak
hadoopdfs-ls/in/*
hadoopdfs-rm/in/test1.txt.bak
mkdirdir_from_hdfs

从hdfs下载目录in中的全部文件放到dir_from_hdfs中:
hadoopdfs-get/in/*/dir_from_hdfs

cd/home/hadoop/Cloud/hadoop-1.2.1

以空格为分隔,统计in目录中的所有文本文件的单词数目(注意output/wordcount目录不可以为存在的目录):
hadoopjarhadoop-examples-2.6.0.jarwordcountin/output/wordcount
查看统计结果:
hadoopfs-catoutput/wordcount/part-r-00000


####
####管理
####

1.集群相关管理:
editlog:修改日志,当文件系统客户端client进行写操作的时候,我们就要把这条记录放在修改日志中。在记录了修改日志后,NameNode则修改内存中的数据结构。每次写操作成功之前,editlog都会同步到文件系统中
fsimage:命名空间镜像,它是内存中的元数据在硬盘上的checkpoint。当NameNode失败的时候,最新的checkpoint的元数据信息就会从fsimage加载到内存中,然后注意重新执行修改日志中的操作。而SecondaryNameNode就是用来帮助元数据节点将内存中的元数据信息checkpoint到硬盘上的。

2.集群属性:
优点:
1)能够处理超大的文件;
2)流式访问数据。HDFS能够很好的处理“一次写入,多次读写”的任务。也就是说,一个数据集一旦生成了,就会被复制到不同的存储节点中,然后响应各种各样的数据分析任务请求。在多数情况下,分析任务都会涉及到数据集中的大部分数据。所以,HDFS请求读取整个数据集要比读取一条记录更加高效。

缺点:
1)不适合低延迟数据访问:HDFS是为了处理大型数据集分析任务的,主要是为达到大数据分析,所以延迟时间可能会较高。
2)无法高效存储大量小文件:因为Namenode把文件系统的元数据放置在内存中,所以文件系统所能容纳的文件数目是由Namenode的内存大小来决定。
3)不支持多用户写入以及任意修改文件:在HDFS的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作。目前HDFS还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。

centos6.5下部署用于生产的hadoop,并使用C语言API连接hadoop的更多相关文章

  1. 开始使用 swift 的 c语言 库

    为了手头上的一个项目,我需要使用CommonCrypto库中的HMAC函数.虽然苹果在swift中已经提供了许多系统库,但是CommonCrypto不在其中.庆幸的是,要使用这个库并不怎么费事,只需要做一点额外的工作.开始访问库在使用库之前,我们需要通知Swift编译器.要完成这个过程,我们有两种方式.它们都能在示例工程中正常运行,但是你应该根据你代码的用途来选择具体的方式.好消息是,你随便使用那

  2. Swift教程10-运算符与C语言的不同

    =,==这些运算符和其他语言的类似,是比较前后两个值是否相等,或者大小关系比较字符串内容是否相等,使用==即可但是Swift新增了===恒等于,是针对于引用类型,如两个对象之间是否是同一个对象与之对应的是!运算符示例Swift新增的??

  3. Swift 体会

    前言Swift体会我不算是一个果粉,但是我很喜欢苹果的产品,甚至可以说是狂热。运行速度从苹果官方所给出的数据来看,Objective-C比Python快2.8倍,而Swift比Python快3.9倍,可见苹果在Swift上下了大量的功夫进行优化。开发环境Swift语言的开发环境是苹果公司提供的集成开发环境Xcode,可以用来开发iOS应用、iOS游戏、OSX窗体程序、OSX游戏、OSX命令行程序,读者可以直接从AppStore中搜索并下载。由于Swift是苹果的产品,所以目前只支持苹果的系统。

  4. [翻译]Swift编程语言——关于Swift

    Swift是一门用于iOS和OSX应用开发的新的编程语言,它以C和Objective-C语言为基础,但没有C语言的兼容性约束。Swift的酝酿花费了数年。Apple为了Swift改进了已有的编译器、调试器和框架的底层。对于Objective-C语言的开发者,Swift是那样的似曾相识。在这个基础之上,Swift引入了许多新的特性并且支持面向对象编程。Swift将现代编程语言的精华和苹果工程文化中的智慧结合在一起。所有这些使得Swift对于开发者和Apple都是一笔对未来可靠的投资。

  5. swift笔记-赋值运算符

    复杂些的运算例如逻辑与运算符&&,或让i值加1的便捷自增运算符++i等。Swift支持大部分标准C语言的运算符,且改进许多特性来减少常规编码错误。当然允许你使用Swift的溢出运算符来实现溢出。本章节只描述了Swift中的基本运算符,高级运算符包含了高级运算符,及如何自定义运算符,及如何进行自定义类型的运算符重载。三元运算符操作三个操作对象,和C语言一样,Swift只有一个三元运算符,就是三目运算符(a?

  6. runTime(二)

    我们前面已经讲过一篇runtime原理,现在这篇文章主要介绍的是runtime是什么以及怎么用!首先,第一个问题,1》runtime实现的机制是什么,怎么用,一般用于干嘛?在我们平时编写的OC代码中,程序运行过程时,其实最终都是转成了runtime的C语言代码,runtime算是OC的幕后工作者比如说,下面一个创建对象的方法中,举例:OC:第二个问题runtime用来干什么呢??..这是我们学习runtime必须知道的函数!

  7. Swift:基本概述

    在介绍Swift之前,先说一段小插曲。Swift中文被翻译为“雨燕”。swift语言是苹果2014年6月3日正式推出一门新的的语言。),大家也许会困惑了,我不是在介绍Swift的使用吗?更容易让很多初学者愿意往Swift方面发展。并且它尽可能的保持方法名类名与objective-c中的一致,这也使得一些长期从事objective-c开发的程序员,很方便的转向Swift的开发。

  8. Swift学习笔记九——整型Int在Swift中表示的最大值最小值问题

    我们在学习C语言的时候,总是会去记忆一些数值,如int能表示的最大值最小值,long型能表示的最大值最小值。来到Swift中就比较简单了,直接用代码就可以看到类型所能表示的最值。。如图所示,Int8表示占一个字节,Int16表示占两个字节,以此类推。妈妈再也不用担心我记忆这些麻烦的数据了。

  9. Swift学习笔记十——Swift对数据溢出的智能检查

    我们之前说过很多次,Swift是一门类型安全的语言,能把很多运行时或者编译时遇到的问题在写代码过程中就暴露出来,使程序员少犯错误。Swift对于溢出的检查也是非常智能的,不像C语言一样,溢出了都不知道,运行中出现各种意想不到的“惊喜”。。在示例代码中,Int.max已经是当前所能表示的最大值,如果再执行加法操作,就会报错“Arithmeticoperation'.........+1'resultsintanoverflow”错误,明确告诉你已经溢出了。Int.min-1操作也是类似。所以我们再次体会到了

  10. swift-01-简述swift与OC区别

    swift语言Swift是Apple在WWDC2014所发布的一门编程语言,用来撰写OSX和iOS应用程序[1]。在设计Swift时.就有意和Objective-C共存,Objective-C是Apple操作系统在导入Swift前使用的编程语言Swift是供iOS和OSX应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束。至2014年6月发表,Swift大约历经4年的开发期。XcodePlaygrounds功能是Swift为苹果开发工具带来的最大创新,该功能提供强大的互动效果,

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部