ZK集群搭建和Hadoop单机版及Java API简单操作

news/2024/4/29 7:23:20/文章来源:https://blog.csdn.net/qq_44654974/article/details/127448269

一、背景

作为软件界最为复杂度的软件代表,当时操作系统、数据库、中间件。而学习中间件,分布式系统,必然绕不开zookeepr、Hadoop的学习。以下做个人搭建zookeeper和Hadoop的搭建的简单记录。相关的代码操作放在github上。

二、搭建过程

1、环境准备

  • 虚拟机三台(也可采用Docker,云服务,WSL等进行搭建)
  • 相关的安装包(jdk、zk、Hadoop)

为便于下载,我将我所选择的版本组合放在以下网盘,大家可进行下载。

链接:https://pan.baidu.com/s/1kdtTdW9i8Qsc4notcueg-A
提取码:1213
在这里插入图片描述

2、虚拟机环境配置

基本要点

  • 配置JDK环境变量(ZK\Hadoop基于Java开发,运行在JVM中
  • 配置主机号、映射、静态网络IP(便于固定访问
  • 配置ssh免密登录(ZK、Hadoop集群是分布式需要机器直接互相通信
  • 创建相关文件、并将以上三个软件包进行解压配置

具体步骤

(1)安装虚拟机Hadoop1(先搭好一台再进行克隆,再修改主机号这些细节)

(2)进行主机名修改、静态网络配置、主机映射

  • 修改IP映射,DNS:vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=""
GATEWAY=""
NETMASK=""
DNS1=""
DNS2=""

在这里插入图片描述

  • DNS 解析:vim /etc/resolv.conf
    在这里插入图片描述
  • 主机名修改: vim /etc/hostname
  • IP映射:vim /etc/hosts

在这里插入图片描述

  • Windows测试(Windows的 hosts处也进行映射)
    C:\Windows\System32\drivers\etc\hosts下进行映射
    在这里插入图片描述ping测试主机连通性
    在这里插入图片描述
    (3)解压JDK安装包,并配置JDK环境变量
  • 下载相关安装包,并通过scp或其他方式上传到指定位置
  • 进行解压
  • 配置JDK环境变量
    在这里插入图片描述

3、ZK集群的搭建

(1)解压ZK安装包并配置环境变量(同JDK)
(2)配置ZK的配置文件
在 zk文件的etc文件夹具有配置文件,先进行配置文件另命名 mv zoo.sample.cfg zoo.cfg 并进行相关配置。

  • dataDir : 放数据文件夹(自己创建一下)
  • 集群信息配置 (server.1则至指明节点是哪个机器,会在myid进行标识,2888,3888分别为选举端口,通信端口)
    在这里插入图片描述

(3)创建myid文件

在 dataDir的文件夹下创建myid,并写入1(代表此节点为序号1):echo 1 >> myid

(4)克隆虚拟机,并修改相关配置

此时第一台机器搭好了,修改其他节点就很快了。主要修改以下

  • 修改hostname、hosts映射、IP静态地址(自行分配合理的IP即可)
  • 修改ZK的配置文件 myid分别修改为2,3,修改zoo.cfg的集群配置信息,若server.2则修改为 server.2=0.0.0.0:2888:3888

(5)配置SSH进行免密登录(分别对三台机器依次操作)

ssh-keygen 
ssh-copy-id root@hadoop1 
ssh-copy-id root@hadoop2
ssh-copy-id root@hadoop31)ssh-keygen -t dsa -P ''2)cat ./.ssh/id_dsa.pub >> ./.ssh/authorized_keys

(6)测试、相互ssh登录

(7)依次启动ZK

zkServer.sh
采用start-foreground启动,可查看启动的情况,然后进行排除,正常启动则可jps查看到相应的Java进程启动。再通过 status 参数查看状态,可以看到1、3为Follower,2为Leader。

4、Hadoop的搭建

Hadoop有HDFS、Yarn两大块组成,配置相对较复杂。以下主要列一下配置文件,基本步骤:

  • 进行相关配置
  • 文件夹创建(namenode,datanode)
  • namenode格式化:hdfs -format namenode
  • 配置相应的环境变量(使用用户)
  • 在sbin文件下进行start-all.sh(进行各个组件的启动包装)
  • 在logs中进行查看启动的问题
    在这里插入图片描述
    在这里插入图片描述

core-site.xml

<configuration>
<property><name>fs.defaultFS</name><!--注意写 0.0.0.0 否则主机访问不了,只能内部访问 ,当然你不想主机来访问测试,也可写localhost,另外端口根据自行需要填写--><value>hdfs://0.0.0.0:9002</value>
</property>
<property><name>hadoop.tmp.dir</name><value>/usr/local/software/hadoop/hadoop-3.0.2/tmp</value>
</property>
</configuration>

hdfs-site.xml

<!-- Put site-specific property overrides in this file. --><configuration>
<property><name>dfs.replication</name><value>1</value>
</property>
<property><name>dfs.namenode.name.dir</name><value>/usr/local/software/hadoop/hadoop-3.0.2/namenode</value>
</property>
<property><name>dfs.datanode.data.dir</name><value>/usr/local/software/hadoop/hadoop-3.0.2/datanode</value>
</property><property>
<!--提供HTTP访问,网站访问--><name>dfs.namenode.http-address</name><value>http://0.0.0.0:9001</value>
</property><property><name>dfs.permissions</name><value>false</value><description>need not permissions</description>
</property>
</configuration>

yarn-site.xml

property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value>
</property>

mapred-site.xml

<connfiguration><name>mapreduce.framework.name </name><value>yarn</value>
</configuration>

三、简单的API操作

(1)引入依赖

     <dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.5.8</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.0.2</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>

(2)操作ZK

public class ApiTests {//private final static String URL = "hadoop1:2181,hadoop2:2181,hadoop3:281";private ZooKeeper zooKeeper;//@Test@Beforepublic void testCon() throws IOException {//ZooKeeperzooKeeper = new ZooKeeper(URL, 2000, new Watcher() {@Overridepublic void process(WatchedEvent watchedEvent) {System.out.println(watchedEvent);}});}@Testpublic void testBaseOp(){System.out.println("state:"+zooKeeper.getState().isAlive());String path = "/testClientApi";try {System.out.println("create node");System.out.println(zooKeeper.create(path,"ok".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL));} catch (KeeperException | InterruptedException e) {e.printStackTrace();}System.out.println("get node");try {System.out.println(new String(zooKeeper.getData(path, false, new Stat()))); //Arrays.toString(zooKeeper.getData(path, false, new Stat()))} catch (KeeperException | InterruptedException e) {e.printStackTrace();}}
}

(3)操作HDFS

public class HdfsApiTests {private final String HDFS_URL = "hdfs://192.168.75.100:9002";//hadoop1private final String SCR_PATH = "E:\\JavaProjects\\CourseProjects\\bigdata-lab\\base-learn\\bigdata-hdfs\\src\\main\\resources\\files\\test_data.json";private final String DST_PATH = "/test";@Beforepublic void initLog() {FileInputStream fileInputStream = null;System.out.println("init log");try {Properties properties = new Properties();fileInputStream = new FileInputStream("src/main/resources/log4j.properties");properties.load(fileInputStream);PropertyConfigurator.configure(properties);} catch (Exception e) {e.printStackTrace();} finally {if (fileInputStream != null) {try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}}@Testpublic void testURL(){try {new URL(HDFS_URL);} catch (MalformedURLException e) {e.printStackTrace();}}@Testpublic void testCopyFile(){System.setProperty("HADOOP_USER_NAME","root");Configuration conf=new Configuration();conf.set("fs.defaultFS",HDFS_URL);FileSystem fs= null;try {fs = FileSystem.get(conf);Path src=new Path(SCR_PATH);Path dst=new Path(DST_PATH);System.out.println("connected");// 为什么一直阻塞住?设计缺陷??超时也该报错呀// time out 就是超时了,需要设置参数,思考业务场景,// 对于大规模的file文件传输很耗时,因此超时的时间也会很长、、HDFS默认的超时时长为10分钟+30秒// 配置需要 0.0.0.0 ;区分 localhost、0.0.0.0、127.0.0.1//if(!fs.exists(new Path("/t2"))){System.out.println("doest exists");fs.mkdirs(new Path("/t2"));}System.out.println("ok!");// fs.copyFromLocalFile(src,dst);//fs.listFiles(dst,true);} catch (IOException e) {e.printStackTrace();} finally {try {assert fs != null;fs.close();} catch (IOException e) {e.printStackTrace();}}}
}

四、问题记录

  • myid file missing : 在zookeeper目录创建zkData
  • 排查错误:start-foreground + logs
  • connection refused : hadoop1 — 映射 0.0.0.0:https://www.likecs.com/show-203327394.html
  • NoRouteExecption : 防火墙的关闭 , https://blog.csdn.net/weixin_42263618/article/details/111191847
  • hdfsAPI操作时无反应(HDFS的超时10Min+,因此连接不上虚拟机,注意掌握测端口进程连通性的方法:https://zhuanlan.zhihu.com/p/451237274)
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_404395.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Markdown使用方法

Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。因简洁、高效、易读、易写,Markdown被大量使用,如Github、Wikipedia、简书等。 基本语法…

【ffmpeg】YUV实践

【ffmpeg】YUV实践前言生成YUV使用摄像头采集到YUV数据从现有的视频文件中提取YUV数据播放YUV播放Y分量提取各分量参考资料个人简介 &#x1f4e6;个人主页&#xff1a;一二三o-0-O的博客 &#x1f3c6;技术方向&#xff1a;C/C客户端资深工程师&#xff08;直播音视频剪辑&…

Spring 6.0 要来了,太强了

Spring Framework 6.0 发布了首个 RC 版本。 发布公告写道&#xff0c;Spring Framework 6.0 作为重大更新&#xff0c;目前 RC1 要求使用 Java 17 或更高版本&#xff0c;并且已迁移到 Jakarta EE 9&#xff08;在 jakarta 命名空间中取代了以前基于 javax 的 EE API&#xff…

HTML零基础入门(上)

一、什么是HTML html是一门标记性语言 全称是超文本标记语言(Hyper Text Markup Language)&#xff0c;它是用来描述网页的一种语言。 HTML 不是一种编程语言&#xff0c;而是一种标记语言 (markup language)。 html只是用来制作网页的一种语言&#xff0c;由各种各样的标签…

Visual Code配置C/C++

1. 前言 VS Code和以前的Visual studio 开发环境不一样,只是代码编辑器,如果需要运行代码C/C++,需要额外安装编译器。在Linux环境下,一般系统自带了gcc编译器,但是windows环境没有,所以要额外安装编译器,选择MinGW。总体参考资料: C/C++ for Visual Studio Code2. MinG…

ZnCdTe/ZnS三元/Cu2MoS4荧光量子点/MoS2QDs二硫化钼量子点的制备

瑞禧小编这里给大家准备了ZnCdTe/ZnS三元/Cu2MoS4荧光量子点/MoS2QDs二硫化钼量子点的制备步骤与方法&#xff0c;一起来学习吧&#xff01; MoS2QDs二硫化钼量子点的制备 以钼酸钠提供钼源,谷胱甘肽提供硫源,通过"自下而上"一步水热法制备MoS2 QDs,并以其荧光强度作…

Oracle——行转列与列转行

文章目录行转列创建表和增加测试数据方式一&#xff1a;先分组&#xff0c;再统计平铺方式二&#xff1a;使用Oracle11g自带函数PIVOT实现列转行创建表和增加测试数据方式一&#xff1a;union all 单个合并方式二&#xff1a;unpivot 函数实现总结资料参考行转列 把某一个字段…

Js中六种拖拽(拉)事件(drag 和 drop)

拖拽事件 今天同事问有没有实现过表格的拖拽功能&#xff0c;我当时想的是应该跟图片的拖拽代码逻辑是一样的主要是使用了浏览器中的以下几个事件 例如&#xff1a; 一、dragstart 二、dragend 三、dragover 四、dragenter 五、drop 等 文章目录拖拽事件前言(各个浏览器的兼容性…

基于matlab的神经网络设计,深度神经网络代码matlab

为什么谈论深度学习工具时&#xff0c;很少有人讨论matlab的神经网络工具包 首先深度学习不光是在学术界非常火热, 在工业界也有着大量的运用, 这就要求深度学习框架要方便在服务器上部署, 而这个恰恰是Matlab的软肋, 想象一下你前端用个Django做个页面接受用户输入的图像, 后…

【Linux驱动开发】并发控制机制:原子操作、自旋锁、信号量、互斥锁详解

并发控制机制 首先我们来了解一下 “操作系统的并发性” 这个概念&#xff1a; 操作系统的并发性(concurrence)&#xff1a;指的是两个或者两个以上事件在同一时间间隔内发生&#xff0c;即这个设备一会执行这个事件一会执行那个事件&#xff0c;多个事件共同使用一个设备。 操…

yolov5和yolov7之实例分割训练

还没来得及实验&#xff0c;我在这里就给出几个参考的链接 1、How to train your segmentation data with seg in U7? What is the data set format?Thanks&#xff01;&#xff01; Issue #732 WongKinYiu/yolov7 GitHub 2、JSON2YOLO/general_json2yolo.py at master …

南大通用GBase8s 常用SQL语句(287)

UPDATE 语句 使用 UPDATE 语句来更改表或视图中一个或多个现有的行的一个或多个列中的值。 语法 Target WHERE 选项 元素 描述 限制 语法 alias 您在此为本地表或远程表声明的临时的名称 如果 SET 是 alias 的标识符&#xff0c;则 AS 关键字必须在 alias 之前 …

计算机网络(六) | 应用层:HTTP协议详解

目录HTTP协议HTTP协议简介理解应用层协议HTTP协议的工作过程HTTP协议格式Fiddler的简介Fiddler的使用HTTP请求格式概述HTTP响应格式概述HTTP请求格式详解URL方法请求报头请求正文(body)HTTP响应格式详解状态码响应报头响应正文(body)构造HTTP请求form表单构造HTTP请求通过ajax构…

Unity9 路径权限、场景的加载、异步加载、场景跳转

Application类 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ApplicationTest : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//游戏数据文件夹路径 只读、加密压缩Debug.Log(Application…

华为云数据库GaussDB(for MySQL)携高新技术强势而来

华为云数据库GaussDB(for MySQL)携高新技术强势而来 企业数据库堪比人的心脏一样重要&#xff0c;不仅要承担企业数据存储、维护、管理、分析等任务&#xff0c;还要保证企业数据的完整性和准确性&#xff0c;并且需要承载着对其他业务系统或客户信息进行整合处理的功能&#x…

网课搜题公众号在线查题系统

网课搜题公众号在线查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xf…

【学习笔记】JSP内置对象

JSP内置对象pageContextRequestResponseconfig [ServletConfig]outApplication [ServletContext]pageexceptionsession 其中,pageContext、Request、Application、session 用于存储数据 它们都使用setAttribute() 来存数据 <% pageContext.setAttribute("name1&quo…

Dubbo的简单使用

一、架构演进 发展演变1.1 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。 缺点性能扩展…

操作系统:文件IO

文章目录文件描述符文件描述符池基本文件操作openopen返回文件描述符的规则open的文件描述符与fopen的文件指针closewritereadlseekfcntl共享文件操作同一进程&#xff0c;多次open同一文件多个进程&#xff0c;多次open同一文件dupdup2利用dup、dup2实现重定位高级文件IO非阻塞…

【网络安全-键盘监视】学会以后去捉弄舍友,看他有了什么不可告人的秘密

&#x1f343;博主昵称&#xff1a;一拳必胜客 博主主页面链接&#xff1a;博主主页传送门 博主专栏页面连接&#xff1a;专栏传送门–计算机考研 &#x1f351;创作初心&#xff1a;本博客的初心是每天分享记录自己学习的脚步&#xff0c;和各位技术友探讨交流&#xff0c;同时…