设为首页 收藏本站
查看: 804|回复: 0

[经验分享] centos6.5下部署用于生产的hadoop,并使用C语言API连接hadoop

[复制链接]

尚未签到

发表于 2018-10-29 09:22:01 | 显示全部楼层 |阅读模式
  #####
  ####安装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>  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>  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>  会看到打印的内容如:

  export>
  export>  。。。。。。
  把打印的全部内容添加到环境变量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 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还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627792-1-1.html 上篇帖子: 安装Hadoop及Spark(Ubuntu 16.04) 下篇帖子: Hadoop集群安装--Ubuntu
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表