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 [email protected]:~/.ssh/slave1.pub

scp /home/hadoop/.ssh/id_rsa.pub [email protected]:~/.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 [email protected]:~/.ssh/

scp authorized_keys [email protected]:~/.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 [email protected]:~/Cloud/

scp -r hadoop-2.6.0 [email protected]:~/Cloud/

把Java包发到slave1和slave2:

scp -r jdk1.8.0_77 [email protected]:~/Cloud/

scp -r jdk1.8.0_77 [email protected]:~/Cloud/

到这里,hadoop集群配置完成

########

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

########

首先格式化namenode

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

查看日志没错的话往下

start-all.sh

然后

完整的的话通过jps查看:

[[email protected] ~]$ jps

42306 ResourceManager

42407 NodeManager

42151 SecondaryNameNode

41880 NameNode

41979 DataNode

[[email protected] ~]$ jps

21033 NodeManager

20926 DataNode

[[email protected] ~]$ 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 / in

hadoop 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_hdfs

cd /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都会同步到文件系统中
fsimage:命名空间镜像,它是内存中的元数据在硬盘上的checkpoint。当NameNode失败的时候,最新的checkpoint的元数据信息就会从fsimage加载到内存中,然后注意重新执行修改日志中的操作。而Secondary NameNode就是用来帮助元数据节点将内存中的元数据信息checkpoint到硬盘上的。

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

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

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

CentOS6.8下部署Zabbix3.0

Centos6.8下部署安装zabbix3.0: 环境要求 PHP >= 5.4  (CentOS6默认为5.3.3,需要更新) curl >= 7.20 (如需支持SMTP认证,需更新) 安装MySQL(已安装的忽略此步骤,最好5.6以上版本) rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm yum install mysql-server –y 启动: 设置root密码: mysql_se

centos6.4 下部署mrtg

一.安装mrtg和net-snmp:    yum -y install mrtg net-snmp-utils net-snmp gcc-* gd-* libpng-* zlib-*二.修改/etc/snmp/snmpd.conf    #去掉行首的注释符    view mib2   included  .iso.org.dod.internet.mgmt.mib-2 fc    #修改    access  notConfigGroup ""      any       noa

部署用于生产的Exceptionlees

Exceptionless是一个非常优秀的事件记录服务,目前我们的自部署的Exceptionless已经稳定运行了近一年的时间,收集了千万条事件信息.但Exceptionless官方自宿主部署的文档不是非常详细(不知道是不是为了保证云订阅).今天就来详细介绍下用于生成环境的Exceptionless部署事项. Exceptionless简介 Exceptionless从翻译来看是无异常的意思,其实它收集了很多异常信息. 大家可以把他看做事一个非常好用的日志收集服务. 还提供了,多组织.多项目.

CentOS6环境下部署Percona XtraDB Cluster

主机规划: 192.168.0.221     os6-221 192.168.0.222     os6-222 192.168.0.223     os6-223 192.168.0.224     os6-224  haproxy 192.168.0.225     os6-225  haproxy  安装脚本: #!/bin/bash sed  -i "s/SELINUX=enforcing/SELINUX=disabled/g"   /etc/selinux/config s

centOS6.7下部署LAMP

对于初学者而言,部署lnmp是一件麻烦事儿,编译安装/源码安装,单独配置mysql,php,nginx/apache 好像都很麻烦哎~所以找了一个集成的包,供大家学习参考. 再开始之前,请确保安装目录有足够的空间,请自行df -k 根据自己的服务器线路选择下载节点,我这里是东京的服务器,所以选择了国外路线. 国内路线: wget -c https://api.sinas3.com/v1/SAE_lnmp/soft/lnmp1.2-full.tar.gz && tar zxf lnmp1.2

将 Django 应用程序部署到生产服务器

原文出自: http://www.ibm.com/developerworks/cn/opensource/os-django/ 比较有启发性质的一篇文章,会避免很多弯路 Django 是一个基于 Python 的开源 Web 应用程序框架,其目的是使创建数据库驱动的 Web 站点和 Web 应用程序更加容易.开发 Django 应用程序很简单,因为该框架包含了一个开发 Web 服务器.但是这个框架不适合在生产环境中使用,因此需要进一步将 Django 应用程序部署到 Web.在本文中,您将了解

Centos下部署Flask

尝试在Centos6.5下部署Flask应用并成功,记录一下步骤,参数为什么这样配置还需要再研究uwsgi和Nginx才能回答. Python版本升级2.7 测试机器centos6.5默认自带的python版本是2.6.6,因此需要升级.我们采用Anacond的方式进行升级. 升级过程: 下载anaconda https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载Anaconda2-4.3.1-Linux-x86_64.sh 拉到服务器

Centos6.3 下使用 Tomcat-6.0.43 非root用户 jsvc模式部署 生产环境 端口80 vsftp

一.安装JDK环境 官方下载链接 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 64位:http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.tar.gz 32位:http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-

Centos6.5下kafka部署安装

一)安装JDK 步骤1:新建路径/usr/Java, 并在其下解压 jdk-7u71-linux-x64.tar.gz # mkdir -p /usr/java # tar -zxvf jdk-7u71-linux-x64.tar.gz 步骤2:添加JDK到系统环境变量 # vi /etc/profile 新增以下内容: export JAVA_HOME=/usr/java/jdk1.7.0_71 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH