草庐IT

Hadoop 及Spark 分布式HA运行环境搭建

Jcloud 2023-03-28 原文

作者:京东物流 秦彪

工欲善其事必先利其器,在深入学习大数据相关技术之前,先手动从0到1搭建一个属于自己的本地Hadoop和Spark运行环境,对于继续研究大数据生态圈各类技术具有重要意义。本文旨在站在研发的角度上通过手动实践搭建运行环境,文中不拖泥带水过多讲述基础知识,结合Hadoop和Spark最新版本,帮助大家跟着步骤一步步实践环境搭建。

1. 总体运行环境概览

(1) 软件包及使用工具版本介绍表:

技术名称或工具名称 版本 备注
Hadoop hadoop-3.3.4.tar.gz
VirtualBox 6.0.0 r127566 虚拟机,推荐
CentOS centos7.3
JDK jdk-8u212-linux-x64.tar.gz 1.8.0_111
Zookeeper zookeeper-3.6.tar.gz
FileZilla FileZilla_3.34.0 文件传输工具,推荐
MobaXterm MobaXterm_Portable_v10.9 SSH连接工具,推荐
Idea IDEA COMMUNITY 2019.1.4 代码IDE开发工具,推荐

(2)环境部署与分布介绍表:

主机名 IP 运行的进程
master 192.168.0.20 QuorumPeerMain、NameNode、DataNode、ResourceManager、NodeManager、JournalNode、DFSZKFailoverController、Master
slave1 192.168.0.21 QuorumPeerMain、NameNode、DataNode、ResourceManager、NodeManager、JournalNode、DFSZKFailoverController、Master、Worker
slave2 192.168.0.22 QuorumPeerMain、NameNode、DataNode、JournalNode、NodeManager、Worker

(3)进程介绍:(1表示进程存在,0表示不存在)

进程名 含义 master slave1 slave2
QuorumPeerMain ZK进程 1 1 1
NameNode Hadoop主节点 1 1 0
DataNode Hadoop数据节点 1 1 1
ResourceManager Yarn管理进程 1 1 0
NodeManager Yarn 工作进程 1 1 1
JournalNode NameNode同步进程 1 1 1
DFSZKFailoverController NameNode监控进程 1 1 0
Master Spark主节点 1 1 0
Worker Spark工作节点 1 1 1

2. 系统基础环境准备

步骤1: 虚拟机中Linux系统安装(略)

VirtualBox中安装CentOS7操作系统

步骤2: CentOS7基础配置

(1) 配置主机的hostname

命令: vim/etc/hostname

(2) 配置hosts, 命令vim /etc/hosts

(3) 安装JDK

命令:

rpm -qa | grep java 查看是否有通过rpm方式安装的java

java -version 查看当前环境变量下的java 版本

1) filezilla上传安装包,tar -zxvf
jdk-8u212-linux-x64.tar.gz 解压

2) bin目录的完整路径:
/usr/local/jdk/jdk1.8.0_212/bin

3) vim /etc/profile 配置jdk环境变量

(4) 复制主机:

1)利用VirtualBox复制功能复制两台主机

2)命令:vi
/etc/sysconfig/network-scripts/ifcfg-eth0,设置相应的网络信息

3)三台主机IP分别为: 192.168.0.20/21/22

(5) 配置三台主机ssh无密码登录(略)

(6) 安装zookeeper

1) filezilla上传安装包,zookeeper-3.4.10.tar.gz 解压

2) bin目录的完整路径:
/usr/local/zookeeper/zookeeper-3.4.10/bin

3) vim /etc/profile 配置jdk环境变量

4) zookeeper的配置文件修改,zookeeper-3.4.10/conf/

5) 执行命令从master节点复制配置到其他两个节点

6) 每台机器zookeeper目录下新建一个data目录, data目录下新建一个myid文件,master主机存放标识值1;slave1主机标识值为2;slave3主机标识值为3

7) 每台机器上命令:zkServer.sh start ,启动ZK,进程名:QuorumPeerMain

3. Hadoop安装与部署

3.1安装Hadoop

1)filezilla上传安装包,hadoop-3.3.4.tar.gz 解压

2)bin目录的完整路径: /usr/local/hadoop/hadoop-3.3.4/bin

3)vim /etc/profile 配置jdk环境变量

4) 修改配置文件共6个: hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers

文件1: hadoop-env.sh; 增加jdk环境变量

文件2: core-site.xml; 配置临时目录及zookeeper信息

文件3: hdfs-site.xml; 配置hdfs信息

文件4: mapred-site.xml; 配置mapreduce和dfs权限信息

文件5: yarn-site.xml; 配置yarn资源调度信息

文件6: worker文件存放当前的worker节点名,复制到每一个虚拟机中

3.2启动Hadoop

1) 使用命令: hadoop-daemon.sh start journalnode 启动journalnode 进程(每个节点执行)

2) 使用命令: hadoop-daemon.sh start namenode 启动namenode 进程(master、slave1节点上执行)

3) 使用命令:hadoop-daemon.sh start datanode 在所有节点上启动datanode 进程

4) 使用命令:start-yarn.sh 在master上启动yarn

5) 使用命令: hdfs zkfc -formatZK 在ZK上生成ha节点

6) 使用命令: hadoop-daemon.sh start zkfc 启动 DFSZKFailoverController进程,在master节点执行

a. 访问HDFS的管理页面

http://192.168.0.20:50070此处192.168.0.20为namenode节点的Active节点

http://192.168.0.21:50070 此处192.168.0.20为namenode节点的standby节点

3.3 验证HDFS使用

使用命令:hdfs dfs -ls / 查看HDFS中文件

使用命令:hdfs dfs -mkdir /input 在HDFS上创建目录

使用命令:hdfs dfs -put ./test.txt /input 将本地文件上传到HDFS指定目录

使用命令:hdfs dfs -get /input/test.txt ./tmp 将HDFS文件复制到本地目录

使用命令:hdfs dfs -text /input/test.txt 查看HDFS上的文本文件

web端浏览HDFS目录

3.4 验证MapReduce的wordcount案例

(1)先通过命令将带有文本内容的test2.txt文件上传到HDFS

(2)对HDFS上test2.txt文件执行wordcount统计,结果放回HDFS新目录,命令:

hadoop jar /usr/local/hadoop/hadoop-3.3.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input/test2.txt /out

4. Spark安装与部署

4.1安装Scala

(1)安装scala

上传scala压缩包解压,使用命令:

scala -version 查看当前环境变量下的scala 版本

(2)拷贝scala目录和环境变量到其他两台机器

使用命令:

scp -r /usr/local/scala root@slave1:/usr/local/

scp /etc/profile root@slave1:/etc/profile

4.2安装Spark

(1)上传spark压缩包解压,修改配置文件

命令: vim
/usr/local/spark/spark-3.3.1/conf/spark-env.sh

(2) 新建worker目录,写入master机器名称

4.3启动Spark

(1)在master的spark安装目录下启动spark

命令:

cd /usr/local/spark/spark-3.3.1/sbin

./start-all.sh

(2)在slave1同样目录启动master进程

命令:./start-master.sh

(3)访问spark管理页面ui

4.4 验证Spark的wordcount案例

(1)执行命令:

cd /usr/local/spark/spark-3.3.1/bin

./spark-shell --master spark://master:7077

(3)从HDFS读取数据执行自定义wordcount代码,结果写入HDFS,命令:

sc.textFile("hdfs://master:9000/input/test2.txt").flatMap(.split(" ")).map(word=>(word,1)).reduceByKey(+_).map(pair=>(pair._2,pair._1)).sortByKey(false).map(pair=>(pair._2,pair._1)).saveAsTextFile("hdfs://master:9000/spark_out")

(4)输出结果:

5. 后记

大数据技术日新月异,得益于互联网技术加持下的商业和工业模式变革。人们日益增长的对生活生产便捷性、数字化、智能化的需求,催生了数据爆炸式的增长,推动了大数据技术推陈出新。作为新时代的程序开发者,必须掌握一定的大数据基础知识才能适应时代的要求,本文只是一个引子,从自身实践的角度帮助初学者认识大数据,并基于此搭建自己属于自己的开发环境,希望大家能够在此基础上继续钻研有所建树。

有关Hadoop 及Spark 分布式HA运行环境搭建的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  3. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  4. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 无法让 rspec、spork 和调试器正常运行 - 2

    GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'

  7. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  8. ruby-on-rails - before_filter 运行多个方法 - 2

    是否有可能:before_filter:authenticate_user!||:authenticate_admin! 最佳答案 before_filter:do_authenticationdefdo_authenticationauthenticate_user!||authenticate_admin!end 关于ruby-on-rails-before_filter运行多个方法,我们在StackOverflow上找到一个类似的问题: https://

  9. ruby - 分布式事务和队列,ruby,erlang,scala - 2

    我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和

  10. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

随机推荐