热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[大数据学习研究]3.hadoop分布式环境搭建

1.Java安装与环境配置Hadoop是基于Java的,所以首先需要安装配置好java环境。从官网下载JDK,我用的是1.8版本。在Mac下可以在终端下使用scp命令远程拷贝

 

1. Java安装与环境配置

Hadoop是基于Java的,所以首先需要安装配置好java环境。从官网下载JDK,我用的是1.8版本。 在Mac下可以在终端下使用scp命令远程拷贝到虚拟机linux中。

danieldu@daniels-MacBook-Pro-857  ~/Downloads  scp jdk-8u121-linux-x64.tar.gz root@hadoop100:/opt/software
root@hadoop100\'s password:
danieldu@daniels-MacBook-Pro-857  ~/Downloads 

其实我在Mac上装了一个神器-Forklift。 可以通过SFTP的方式连接到远程linux。然后在操作本地电脑一样,直接把文件拖过去就行了。而且好像配置文件的编辑,也可以不用在linux下用vi,直接在Mac下用sublime远程打开就可以编辑了 :) 

 

 

 

然后在linux虚拟机中(ssh 登录上去)解压缩到/opt/modules目录下

[root@hadoop100 include]# tar -zxvf /opt/software/jdk-8u121-linux-x64.tar.gz -C /opt/modules/

然后需要设置一下环境变量, 打开 /etc/profile, 添加JAVA_HOME并设置PATH用vi打开也行,或者如果你也安装了类似forklift这样的可以远程编辑文件的工具那更方便。

vi /etc/profile 

按shift + G 跳到文件最后,按i切换到编辑模式,添加下面的内容,主要路径要搞对。

#JAVA_HOME export JAVA_HOME
=/opt/modules/jdk1.8.0_121 export PATH=$PATH:$JAVA_HOME/bin

按ESC , 然后 :wq存盘退出。

执行下面的语句使更改生效

[root@hadoop100 include]# source /etc/profile

检查java是否安装成功。如果能看到版本信息就说明安装成功了。
[root@hadoop100 include]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
[root@hadoop100 include]#

2. Hadoop安装与环境配置

 Hadoop的安装也是只需要把hadoop的tar包拷贝到linux,解压,设置环境变量.然后用之前做好的xsync脚本,把更新同步到集群中的其他机器。如果你不知道xcall、xsync怎么写的。可以翻一下之前的文章。这样集群里的所有机器就都设置好了。

 

[root@hadoop100 include]# tar -zxvf /opt/software/hadoop-2.7.3.tar.gz -C /opt/modules/

[root@hadoop100 include]# vi /etc/profile 继续添加HADOOP_HOME

#JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.8.0_121
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP_HOME=/opt/modules/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

 

[root@hadoop100 include]# source /etc/profile

把更改同步到集群中的其他机器

[root@hadoop100 include]# xsync /etc/profile

[root@hadoop100 include]# xcall source /etc/profile

[root@hadoop100 include]# xsync hadoop-2.7.3/

 

3. Hadoop分布式配置

然后需要对Hadoop集群环境进行配置。对于集群的资源配置是这样安排的,当然hadoop100显得任务重了一点 :) 

 

 

 

 

编辑0/opt/modules/hadoop-2.7.3/etc/hadoop/mapred-env.sh、yarn-env.sh、hadoop-env.sh 这几个shell文件中的JAVA_HOME,设置为真实的绝对路径。

export JAVA_HOME=/opt/modules/jdk1.8.0_121

 

打开编辑 /opt/modules/hadoop-2.7.3/etc/hadoop/core-site.xml, 内容如下

<configuration>
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://hadoop100:9000value>
    property>

    <property>
        <name>hadoop.tmp.dirname>
        <value>/opt/modules/hadoop-2.7.3/data/tmpvalue>
    property>
  
configuration>

 

编辑/opt/modules/hadoop-2.7.3/etc/hadoop/hdfs-site.xml, 指定让dfs复制5份,因为我这里有5台虚拟机组成的集群。每台机器都担当DataNode的角色。暂时也把secondary name node也放在hadoop100上,其实这里不太好,最好能和主namenode分开在不同机器上。

<configuration>
    <property>
        <name>dfs.replicationname>
        <value>5value>
    property>

    <property>
        <name>dfs.namenode.secondary.http-addressname>
        <value>hadoop100:50090value>
    property>

    <property>
        <name>dfs.permissionsname>
        <value>falsevalue>
    property>
configuration>

 

YARN 是hadoop的集中资源管理服务,放在hadoop100上。 编辑/opt/modules/hadoop-2.7.3/etc/hadoop/yarn-site.xml

<configuration>



    <property>
        <name>yarn.nodemanager.aux-servicesname>
        <value>mapreduce_shufflevalue>
    property>


    <property>
        <name>yarn.resourcemanager.hostnamename>
        <value>hadoop100value>
    property>

    <property>
        <name>yarn.log-aggregation-enbalename>
        <value>truevalue>
    property>

    <property>
        <name>yarn.log-aggregation.retain-secondsname>
        <value>604800value>
    property>
configuration>

 

为了让集群能一次启动,编辑slaves文件(/opt/modules/hadoop-2.7.3/etc/hadoop/slaves),把集群中的几台机器都加入到slave文件中,一台占一行。

hadoop100
hadoop101
hadoop102
hadoop103
hadoop104

 

最后,在hadoop100上全部做完相关配置更改后,把相关的修改同步到集群中的其他机器

xsync hadoop-2.7.3/

在启动Hadoop之前需要format一下hadoop设置。

hdfs namenode -format

 

然后就可以启动hadoop了。从下面的输出过程可以看到整个集群从100到104的5台机器都已经启动起来了。通过jps可以查看当前进程。

[root@hadoop100 sbin]# ./start-dfs.sh
Starting namenodes on [hadoop100]
hadoop100: starting namenode, logging to /opt/modules/hadoop-2.7.3/logs/hadoop-root-namenode-hadoop100.out
hadoop101: starting datanode, logging to /opt/modules/hadoop-2.7.3/logs/hadoop-root-datanode-hadoop101.out
hadoop102: starting datanode, logging to /opt/modules/hadoop-2.7.3/logs/hadoop-root-datanode-hadoop102.out
hadoop100: starting datanode, logging to /opt/modules/hadoop-2.7.3/logs/hadoop-root-datanode-hadoop100.out
hadoop103: starting datanode, logging to /opt/modules/hadoop-2.7.3/logs/hadoop-root-datanode-hadoop103.out
hadoop104: starting datanode, logging to /opt/modules/hadoop-2.7.3/logs/hadoop-root-datanode-hadoop104.out
Starting secondary namenodes [hadoop100]
hadoop100: starting secondarynamenode, logging to /opt/modules/hadoop-2.7.3/logs/hadoop-root-secondarynamenode-hadoop100.out
[root@hadoop100 sbin]# jps
2945 NameNode
3187 SecondaryNameNode
3047 DataNode
3351 Jps
[root@hadoop100 sbin]# ./start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /opt/modules/hadoop-2.7.3/logs/yarn-root-resourcemanager-hadoop100.out
hadoop103: starting nodemanager, logging to /opt/modules/hadoop-2.7.3/logs/yarn-root-nodemanager-hadoop103.out
hadoop102: starting nodemanager, logging to /opt/modules/hadoop-2.7.3/logs/yarn-root-nodemanager-hadoop102.out
hadoop104: starting nodemanager, logging to /opt/modules/hadoop-2.7.3/logs/yarn-root-nodemanager-hadoop104.out
hadoop101: starting nodemanager, logging to /opt/modules/hadoop-2.7.3/logs/yarn-root-nodemanager-hadoop101.out
hadoop100: starting nodemanager, logging to /opt/modules/hadoop-2.7.3/logs/yarn-root-nodemanager-hadoop100.out
[root@hadoop100 sbin]# jps
3408 ResourceManager
2945 NameNode
3187 SecondaryNameNode
3669 Jps
3047 DataNode
3519 NodeManager
[root@hadoop100 sbin]#

 

4. Hadoop的使用

使用hadoop可以通过API调用,这里先看看使用命令调用,确保hadoop环境已经正常运行了。

 这中间有个小插曲,我通过下面的命令查看hdfs上面的文件时,发现连接不上。

[root@hadoop100 ~]# hadoop fs -ls
ls: Call From hadoop100/192.168.56.100 to hadoop100:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused

 

后来发现,是我中间更改过前面提到的xml配置文件,忘记format了。修改配置后记得要format。

hdfs namenode -format

 

hdfs 文件操作

[root@hadoop100 sbin]# hadoop fs -ls /
[root@hadoop100 sbin]# hadoop fs -put ~/anaconda-ks.cfg /
[root@hadoop100 sbin]# hadoop fs -ls /
Found 1 items
-rw-r--r--   5 root supergroup       1233 2019-09-16 16:31 /anaconda-ks.cfg
[root@hadoop100 sbin]# hadoop fs -cat /anaconda-ks.cfg

文件内容

[root@hadoop100 ~]# mkdir tmp
[root@hadoop100 ~]# hadoop fs -get /anaconda-ks.cfg ./tmp/
[root@hadoop100 ~]# ll tmp/
total 4
-rw-r--r--. 1 root root 1233 Sep 16 16:34 anaconda-ks.cfg

 

执行MapReduce程序

hadoop中指向示例的MapReduce程序,wordcount,数数在一个文件中出现的词的次数,我随便找了个anaconda-ks.cfg试了一下:

[root@hadoop100 ~]# hadoop jar /opt/modules/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /anaconda-ks.cfg ~/tmp
19/09/16 16:43:28 INFO client.RMProxy: Connecting to ResourceManager at hadoop100/192.168.56.100:8032
19/09/16 16:43:29 INFO input.FileInputFormat: Total input paths to process : 1
19/09/16 16:43:29 INFO mapreduce.JobSubmitter: number of splits:1
19/09/16 16:43:30 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1568622576365_0001
19/09/16 16:43:30 INFO impl.YarnClientImpl: Submitted application application_1568622576365_0001
19/09/16 16:43:31 INFO mapreduce.Job: The url to track the job: http://hadoop100:8088/proxy/application_1568622576365_0001/
19/09/16 16:43:31 INFO mapreduce.Job: Running job: job_1568622576365_0001
19/09/16 16:43:49 INFO mapreduce.Job: Job job_1568622576365_0001 running in uber mode : false
19/09/16 16:43:49 INFO mapreduce.Job: map 0% reduce 0%
19/09/16 16:43:58 INFO mapreduce.Job: map 100% reduce 0%
19/09/16 16:44:10 INFO mapreduce.Job: map 100% reduce 100%
19/09/16 16:44:11 INFO mapreduce.Job: Job job_1568622576365_0001 completed successfully
19/09/16 16:44:12 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=1470
FILE: Number of bytes written=240535
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operatiOns=0
HDFS: Number of bytes read=1335
HDFS: Number of bytes written=1129
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operatiOns=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Rack-local map tasks=1
Total time spent by all maps in occupied slots (ms)=6932
Total time spent by all reduces in occupied slots (ms)=7991
Total time spent by all map tasks (ms)=6932
Total time spent by all reduce tasks (ms)=7991
Total vcore-milliseconds taken by all map tasks=6932
Total vcore-milliseconds taken by all reduce tasks=7991
Total megabyte-milliseconds taken by all map tasks=7098368
Total megabyte-milliseconds taken by all reduce tasks=8182784
Map-Reduce Framework
Map input records=46
Map output records=120
Map output bytes=1704
Map output materialized bytes=1470
Input split bytes=102
Combine input records=120
Combine output records=84
Reduce input groups=84
Reduce shuffle bytes=1470
Reduce input records=84
Reduce output records=84
Spilled Records=168
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=169
CPU time spent (ms)=1440
Physical memory (bytes) snapshot=300003328
Virtual memory (bytes) snapshot=4159303680
Total committed heap usage (bytes)=141471744
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=1233
File Output Format Counters
Bytes Written=1129
[root@hadoop100 ~]#

 

 在web端管理界面中可以看到对应的application:

 

执行的结果,看到就是“#” 出现的最多,出现了12次,这也难怪,里面好多都是注释嘛。

[root@hadoop100 tmp]# hadoop fs -ls /root/tmp
Found 2 items
-rw-r--r--   5 root supergroup          0 2019-09-16 16:44 /root/tmp/_SUCCESS
-rw-r--r--   5 root supergroup       1129 2019-09-16 16:44 /root/tmp/part-r-00000
[root@hadoop100 tmp]# hadoop fs -cat /root/tmp/part-r-0000
cat: `/root/tmp/part-r-0000\': No such file or directory
[root@hadoop100 tmp]# hadoop fs -cat /root/tmp/part-r-00000
#    12
#version=DEVEL    1
$6$JBLRSbsT070BPmiq$Of51A9N3Zjn/gZ23mLMlVs8vSEFL6ybkfJ1K1uJLAwumtkt1PaLcko1SSszN87FLlCRZsk143gLSV22Rv0zDr/    1
%addon    1
%anaconda    1
%end    3
%packages    1
--addsupport=zh_CN.UTF-8    1
--boot-drive=sda    1
--bootproto=dhcp    1
--device=enp0s3    1
--disable    1
--disabled="chronyd"    1
--emptyok    1
。。。

 

通过web 界面可以查看hdfs中的文件列表 http://192.168.56.100:50070/explorer.html#

 

 hadoop还有好多好玩儿的东西,等待我去发现呢,过几天再来更新。

 


推荐阅读
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 在加载一个第三方厂商的dll文件时,提示“找不到指定模块,加载失败”。由于缺乏必要的技术支持,百思不得期间。后来发现一个有用的工具 ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有