hadoop单机及伪分布式

网友投稿 220 2022-11-11

hadoop单机及伪分布式

hadoop的基本概念 伪分布式hadoop集群安装 hdfs、MapReduce演示 互联网正在从IT走向DT时代。 大数据应用分析 1、统计类的分析 2、推荐类的分析 3、机器学习(分类,聚类) 4、人工智能、预测(算法)

一、什么是hadoop

官网:http://hadoop.apache.org hadoop是apache旗下的一套开源软件平台。 是一个可靠的、可扩展的、可分布式计算的开源软件。 apache hadoop平台是一个框架,允许使用简单的编程模型。 该平台被设计成可以从单个服务器扩展到数千台服务器,每个服务器都提供本地计算和存储。 也被设计成可检测和处理应用层的故障(即高可靠、高容错),高可用服务是基于计算机集群的,并且其中每一台计算机都有可能失效。 hadoop提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 作者:doug cutting hadoop的核心组件: hadoop common:hadoop工具 hadoop distributed file system(HDFS):分布式文件系统,解决海量数据的存储 hadoop YARN:运算资源调度系统,解决资源管理调度 hadoop MapReduce:分布式运算编程框架,解决海量数据的分析模型 Hadoop在2.0将资源管理从MapReduce中独立出来变成通用框架后,就从1.0的三层结构演变为了现在的四层架构: 1. 底层——存储层,文件系统HDFS 2. 中间层——资源及数据管理层,YARN以及Sentry等 3. 上层——MapReduce、Impala、Spark等计算引擎 4. 顶层——基于MapReduce、Spark等计算引擎的高级封装及工具,如Hive、Pig、Mahout等等 广义上来说,hadoop通常是指一个更广泛的概念——Hadoop生态圈

二、hadoop产生背景

1、hadoop最早起源于Nutch。 Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。 2、2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。 分布式文件系统(GFS),可用于处理海量网页的存储; 分布式计算框架MapReduce,可用于处理海量网页的索引计算问题。 3、Nutch的开发人员完成了相应的开源实现HDFS和MapReduce,并从Nutch中剥离成为独立项目hadoop,到2008年1月,hadoop成为apache顶级项目,迎来了快速发展期。

三、hadoop在大数据、云计算中的位置和关系

hadoop对海量数据处理的解决思路:

HDFS的架构: 主从结构: 主节点:namenode 从节点:有很多个datanode namenode负责: 接受用户操作请求 存储文件的元数据以及每个文件的块列表和块所在的datanode等 维护文件系统的目录结构 管理文件与block之间的关系,block与datanode之间关系 datanode负责: 存储文件 在本地文件系统存储文件块数据,以及块数据的校验和 文件被分成block存储在磁盘上 为保证数据安全,文件会有多个副本 secondary namenode(2nn):用于监控HDFS状态的辅助后台程序,每隔一段时间获取和hdfs元数据的快照。 YARN架构: 1)ResourceManager(RM)主要作用如下: (1)处理客户端请求 (2)监控NodeManager (3)启动或监控ApplicationMaster 2)NodeManager(nm)主要作用如下: (1)管理单个节点上的资源 (2)处理来自ResourceManager的命令 (3)处理来自ApplicationMaster的命令 3)ApplicationMaster(AM)作用: (1)辅助数据的切分 (2)为应用程序申请资源并分配给内部的任务 (3)任务的监控与容错 4)Container Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。 问题:怎么解决海量数据的计算 Mapreduce架构: 两个程序: Map:局部并行处理输入数据 reduce:汇总局部处理的结果,再统计全局 hadoop1.x和hadoop2.x版本的区别: 安装部署,运维、开发、测试 HDFS三大核心:HDFS、MapReduce、YARN 四个模块: hadoop common:为其他hadoop模块提供基础设施 hadoop dfs:一个高可靠、高吞吐量的分布式文件系统 hadoop mapreduce:一个分布式的离线并行计算框架 hadoop yarn:一个新的mapreduce框架,任务调度和资源管理 hadoop安装:

Hadoop三种安装模式

1.Hadoop单机模式 单机模式是Hadoop默认的安装模式,这种安装模式主要就是并不配置更多的配置文件,只是保守的去设置默认的几个配置文件中的初始化参数,它并不与其他节点进行交互,并且也不使用HDFS文件系统,它主要就是为了调试MapReduce程序而生。 2.Hadoop伪分布式安装模式 Hadoop伪分布式安装,需要配置5个常规的配置文件(XML),并且这里涉及到了NameNode和DataNode节点交互问题,而且NameNode和DataNode在同一个节点上,还需要配置互信。其实从严格意义上来讲,伪分布式集群,就已经可以称之为真正意义上的集群了,而且这里也包含了hdfs和MapReduce所有组件,只不过就是所有组件在同一个节点上而已。 3.Hadoop完全分布式安装模式 Hadoop完全分布式集群主要分为:常规Hadoop完全分布式集群和Hadoop HA集群(这里主要针对的是NameNode个数和NameNode的高可用保障机制而言)。由此可知较伪分布式集群而言,完全分布式集群,所有处理节点并不在同一个节点上,而是在多个节点上。

搭建一个伪分布式集群

一、环境搭建

1、系统环境 平台:VMware Workstation 14 系统:centos 7.4 2、修改主机名: hostnamectl set-hostname hadoop useradd hadoop passwd hadoop visodu hadoop ALL=(ALL) ALL 注:改完主机名后,需要exit退出,重新启动。 3、修改/etc/hosts域名解析配置文件 vi /etc/hosts 192.168.80.100 hadoop 4、关闭防火墙和selinux systemctl disable firewalld systemctl stop firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 5、安装时间同步 yum -y install ntpdate ntpdate time1.aliyun.com 6、安装Java环境 1)解压Java压缩包 tar -xf jdk-8u11-linux-x64.tar.gz -C /opt cp -rf jdk1.8.0_11/ /usr/local/java 2)配置Java环境变量 vi /etc/profile 末尾新增: export JAVA_HOME=/usr/local/java export JRE_HOME=/usr/local/java/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin 3)生效环境变量 source /etc/profile 4)验证 java -version 出现以下提示,代表java环境部署成功: java version "1.8.0_11" Java(TM) SE Runtime Environment (build 1.8.0_11-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode) 二、hadoop正式部署安装 官方文档:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#Standalone_Operation 下载地址:http://archive.apache.org/dist/hadoop/core/hadoop-3.1.0/hadoop-3.1.0.tar.gz 1、解压hadoop软件包 tar xf hadoop-3.1.0.tar.gz 2、重命名 mv hadoop-3.1.0/ /home/hadoop/hadoop 3、配置环境变量 vi /etc/profile export HADOOP_HOME=/home/hadoop/hadoop export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native export HADOOP_COMMON_LIB_NATIVE_DIR=/home/hadoop/hadoop/lib/native export HADOOP_OPTS="-Djava.library.path=/home/hadoop/hadoop/lib" export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin #hadoop-3.1.0必须添加如下5个变量否则启动报错,hadoop-2.x貌似不需要 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root

4、生效环境变量 source /etc/profile 5、测试是否配置成功 hadoop version 出现以下信息,代表配置成功: Hadoop 3.1.0 Source code repository -r 16b70619a24cdcf5d3b0fcf4b58ca77238ccbe6d Compiled by centos on 2018-03-30T00:00Z Compiled with protoc 2.5.0 From source with checksum 14182d20c972b3e2105580a1ad6990 This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.1.0.jar

7、hadoop目录认识 修改配置文件之前,先看一下hadoop下的目录: bin:hadoop最基本的管理脚本和使用脚本所在目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用hadoop etc:配置文件存放的目录,包括core-site.xml,hdfs-site.xml,mapred-site.xml等从hadoop1.x继承而来的配置文件和yarn-site.xml等hadoop2.x新增的配置文件 include:对外提供的编程库头文件(具体动态库和静态库在lib目录中,这些头文件军事用c++定义的,通常用于c++程序访问hdfs或者编写mapreduce程序) Lib:该目录包含了hadoop对外提供的才变成动态库和静态库,与include目录中的头文件结合使用 libexec:各个服务对应的shell配置文件所在目录,可用于配置日志输出目录、启动参数等信息 sbin:hadoop管理脚本所在目录,主要包含hdfs和yarn中各类服务的启动、关闭脚本 share:hadoop各个模块编译后的jar包所在目录。 cd /home/hadoop/hadoop/etc/hadoop #此目录是存放配置文件的 vi hadoop-env.sh #hadoop的变量设置脚本 #hadoop-3.1.0是第54行,hadoop-2.7.7是第25行 export JAVA_HOME=/usr/local/java 测试: mkdir /home/input hadoop jar /home/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.0.jar wordcount /home/input /home/output

hdfs dfs -ls /

cd /home/hadoop/hadoop/etc/hadoop/ vi core-site.xml #hadoopg公共文件,全局配置文件 添加以下几行: fs.defaultFS hdfs://hadoop:9000 hadoop.tmp.dir #指定临时数据存储目录 /home/hadoop/hadoop/tmp #系统路径 注意:在hadoop安装目录的文档中有所有配置文件的默认参数表,用户可以查看后,根据实际情况进行修改。 uri是使用自己的协议以及自己的地址端口

/usr/local/hadoop/share/doc/hadoop/hadoop-project-dist/hadoop-common/core-default.html文档中可以看到: hadoop.tmp.dir的默认值是/tmp/hadoop-${user.name}。/tmp/是Linux系统的临时目录,如果我们不重新指定的话,默认Hadoop工作目录在Linux的临时目录,一旦Linux系统重启,所有文件将会清空,包括元数据等信息都丢失了,需要重新进行格式化,非常麻烦。 vi hdfs-site.xml #hdfs站点配置文件 添加以下几行: dfs.replication #指定hdfs的副本数 1 #指定副本数量 dfs. 192.168.80.100:50070 注: hdfs-default.xml文档中可以看到: dfs.replication的默认值是3,由于HDFS的副本数不能大于DataNode数,而我们此时安装的hadoop中只有一个DataNode,所以将dfs.replication值改为1。 dfs.namenode.,在hadoop-2.7.7版本上的默认值是0.0.0.0:50070,所以不同版本可以通过不同端口访问NameNode。

cp mapred-site.xml.templete mapred-site.xml #重命名,hadoop-3.1.0系统中就是mapred-site.xml不需要改名,hadoop-2.x需要改名 vi mapred-site.xml #添加如下几行,指定hadoop运行在哪种计算框架上,这里指定yarn框架。   mapreduce.framework.name #指定MapReduce程序放在哪个服务上去启用   yarn

vi yarn-env.xml #2.x版本需要更改jdk路径 export JAVA_HOME = vi yarn-site.xml #添加如下几行 yarn.resourcemanager.hostname hadoop yarn.nodemanager.aux-services # mapreduce_shuffle

8、免密码交互 ssh-keygen -t rsa #生成ssh密钥对 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #直接回车 Enter passphrase (empty for no passphrase): #直接回车 Enter same passphrase again: #直接回车 Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:9NevFFklAS5HaUGJtVrfAlbYk82bStTwPvHIWY7as38 root@hadoop The key's randomart image is: +---[RSA 2048]----+ | | | | | | | . | | . o S = | | ..O * = | | =X.%.E . . | | *+=%oBo+.o | | o=B+o++o.oo. | +----[SHA256]-----+ cd /root/.ssh/ ls id_rsa id_rsa.pub known_hosts 注: #id_rsa为私钥,id_rsa.pub为公钥 因为搭建的是hadoop伪分布式,所以namenode与datanode都在一个节点上。 cp id_rsa.pub authorized_keys #使主机之间可以免密码登录 ssh hadoop date #查看(不需要输入密码,直接输出结果,说明免密成功) 9、启动hadoop集群 1)首先格式化NameNode 注意:如果格式化NameNode之后运行过hadoop,然后又想再格式化一次NameNode,那么需要先删除第一次运行Hadoop后产生的VERSION文件,否则会出错,详情见第四部分问题4。 cd [root@hadoop ~]# hdfs namenode -format #中间没有报错并且最后显示如下信息表示格式化成功 ... /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hadoop/192.168.80.100 ************************************************************/

格式化完成后,系统会在dfs.data.dir目录下生成元数据信息。 name/current data/current bin/hdfs namenode -format sbin/hadoop-daemon.sh start namenode sbin/hadoop-daemon.sh start datanode 或者: start-dfs.sh start-yarn.sh 2)输入 start-all.sh 启动 start-all.sh Starting namenodes on [hadoop] 上一次登录:四 4月 18 23:06:27 CST 2019从 192.168.80.1pts/1 上 Starting datanodes 上一次登录:四 4月 18 23:53:44 CST 2019pts/1 上 localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. Starting secondary namenodes [hadoop] 上一次登录:四 4月 18 23:53:46 CST 2019pts/1 上 2019-04-18 23:54:08,969 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Starting resourcemanager 上一次登录:四 4月 18 23:54:03 CST 2019pts/1 上 Starting nodemanagers 上一次登录:四 4月 18 23:54:10 CST 2019pts/1 上 3)执行 jps 验证集群是否启动成功 jps #显示以下几个进程说明启动成功 96662 Jps 95273 DataNode #可有可无 95465 SecondaryNameNode #重要 95144 NameNode #重要 95900 NodeManager #可有可无 95775 ResourceManager #非常重要

4)登录HDFS管理界面(NameNode):http://ip:8088

使用: 上传文件到hdfs中: hadoop fs -put aa hdfs://192.168.80.100:9000/ 注:aa是要上传的文件名

简写: hadoop fs -put aa / 从hdfs中下载文件: hadoop fs -get hdfs://192.168.80.100:9000/aa

在hdfs中创建目录: hadoop fs -mkdir hdfs://192.168.80.100:9000/word 也可以简写: hadoop fs -mkdir /word

调用MapReduce程序: hadoop jar hadoop-mapreduce-examples~ pi 5 5 注: pi:主类,计算圆周率 5:参数,map的任务数量 5:每个map的取样数 hadoop jar hadoop-mapreduce-example~ word /word/input /word/output hadoop fs -ls /word/output hadoop fs -cat /word/output/part~ HDFS的实现思想: 1、hdfs是通过分布式集群来存储文件 2、文件存储到hdfs集群中去的时候是被切分成block的 3、文件的block存放在若干台datanode节点上 4、hdfs文件系统中的文件与真实的block之间有映射关系,由namenode管理 5、每一个block在集群中会存储多个副本,好处是可以提高数据的可靠性,还可以提高访问的吞吐量 我们可以看到不管是启动还是关闭hadoop集群,系统都会报如下错误: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 解决方式:先看看我们安装的hadoop是否是64位的 [root@hadoop hadoop]# file /usr/local/hadoop/lib/native/libhadoop.so.1.0.0 #出现以下信息表示我们的hadoop是64位的 /usr/local/hadoop/lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=8d84d1f56b8c218d2a33512179fabffbf237816a, not stripped 永久解决方式: vi /usr/local/hadoop/etc/hadoop/log4j.properties #在文件末尾添加如下一句,保存退出 log4j.logger.org.apache.hadoop.util.NativeCodeLoader=Error 配置说明 JDK :Hadoop和Spark 依赖的配置,官方建议JDK版本在1.7以上!!! Scala:Spark依赖的配置,建议版本不低于spark的版本。 Hadoop: 是一个分布式系统基础架构。 Spark: 分布式存储的大数据进行处理的工具。 zookeeper:分布式应用程序协调服务,HBase集群需要。 HBase: 一个结构化数据的分布式存储系统。 Hive: 基于Hadoop的一个数据仓库工具,目前的默认元数据库是mysql。 配置历史服务器 vi mapred-site.xml mapreduce.jobhistory.address hadoop:10020 mapreduce.jobhistory.webapp.address hadoop:19888 启动历史服务器: sbin/mr-jobhistory-daemon.sh start historyserver 查看历史服务器是否启动 jps 查看jobhistory: 192.168.80.100:19888 配置日志聚集 日志聚集:应用运行完成以后,将程序运行日志信息上传到HDFS系统上 好处:可以方便的查看到程序运行详情,方便开发调试 注:开启日志聚集功能,需要重新启动NodeManager、ResourceManager和HistoryManager 步骤: 关闭所有 sbin/mr-jobhistory-daemon.sh stop historyserver sbin/yarn-daemon.sh stop nodemanager sbin/yarn-daemon.sh stop resourcemanager jps vi yarn-site.xml yarn.log-aggregation-enable true yarn.log-aggregation.retain-seconds 604800 sbin/yarn-daemon.sh start resourcemanager sbin/yarn-daemon.sh start nodemanager sbin/mr-jobhistory-daemon.sh start historyserver 测试: hadoop jar hadoop-mapreduce-examples~ pi 5 5

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:KEA的bootloade的三个层面:bootloader 层,通信层和驱动层
下一篇:Java 将Excel转为OFD格式(方法步骤)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~