0%

Hadoop3.3.2 on Windows10

简介

在windows系统上进行hadoop相关开发,不需要高可用,仅用作开发调试还是很方便的。

环境

hadoop: 3.3.2
jdk: 1.8
winutils 3.3.x 和 hadoop.dll: https://github.com/kontext-tech/winutils/tree/master/hadoop-3.3.1/bin

实测3.3.1的winutils可以适配3.3.2的hadoop版本。本机3.2.2hadoop在启动datanode时会失败。

安装和配置步骤

下载解压hadoop,假设解压到D:\PortableSoftware\hadoop-3.3.2
下载对应版本的winutils.exehadoop.dll复制到D:\PortableSoftware\hadoop-3.3.2\bin

  1. JAVA_HOME,如果你的java安装路径是含有”Program Files”, 使用Progra~1代替”Program Files”,或使用Progra~2 代替 “Program Files(x86)”
  2. HADOOP_HOME
  3. PATH变量加入%JAVA_HOME%\bin;%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin
  4. 检查: 新开cmd窗口,输入hadoop -version
  5. 配置%HADOOP_HOME%\etc\hadoop\hdfs-site.xml
  6. 配置%HADOOP_HOME%\etc\hadoop\core-site.xml
  7. 配置%HADOOP_HOME%\etc\hadoop\mapred-site.xml
  8. 配置%HADOOP_HOME%\etc\hadoop\yarn-site.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <!-- hdfs-site.xml -->
    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///D:/PortableSoftware/hadoop-3.3.2/data/dfs/namenode</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///D:/PortableSoftware/hadoop-3.3.2/data/dfs/datanode</value>
    </property>
    <property>
    <name>dfs.permissions</name>
    <value>false</value>
    </property>
    </configuration>
    1
    2
    3
    4
    5
    6
    7
    <!-- core-site.xml -->
    <configuration>
    <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9820</value>
    </property>
    </configuration>
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- mapred-site.xml -->
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <description>MapReduce framework name</description>
    </property>
    </configuration>
    1
    2
    3
    4
    5
    6
    7
    8
    <!-- yarn-site.xml -->
    <configuration>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>Yarn Node Manager Aux Service</description>
    </property>
    </configuration>

试验:

hadoop version

启动HDFS

第一次使用需要hdfs namenode -format

启动:

start-dfs.cmd

停止:

stop-dfs.cmd

访问:

http://localhost:9870/

功能描述

CDH平台需要集成多个采集端的采样数据,采集端可能来自学校或公司,可能存在非校园网,网络不通情况。
采集端数据分目录存放,文件是csv格式。
平台侧需接收文件和文件夹,同时解析入库(MySQL)和HDFS(Hadoop分布式文件系统)。
集成采取定时任务形式,初步设定为每小时一次。

概要设计

同步记录

数据集成采取增量集成模式,需在平台侧记录哪些数据已经同步完成,哪些数据尚未同步,采集端程序每次仅传输未集成的新数据。

平台端增加表记录哪个目录已经集成,提供接口告诉采集端,哪些已经采集完成。

采集端程序

采集端采用定时任务形式,任务开始会扫描数据目录下的文件夹,对比服务器上查询的同步记录,过滤未同步的文件夹。先对新目录进行zip压缩后通过Http接口上传到平台。采集端需要图形界面配置。

图形界面

  1. 定时任务间隔,单位分钟,整数输入框1个
  2. 配置数据目录,文件夹选择器1个
  3. 手动触发上传,按钮1个

报价

  • 平台侧改造,增加表、增加接口、解析入口改造:100
  • 采集端界面,pyqt界面工作量:200
  • 采集端定时,定时任务和界面结合,兼容手动按钮:100
  • 采集端上传,调用查询同步情况接口,开始上传:100
  • 整体功能联调:100

跨网络传输方案

跨局域网点对点

自己搭建zerotier或vpn,模拟局域网。————理论方案,尚未实践,需要公网ip服务器

公网ip服务器搭建中转点,采集端先上传到服务器,再下载到平台侧。————方案较复杂,实践过。

跨网方案费用预计

服务器,腾讯云最小规格500多一年,一般熟人或新客有打折。

按中转的上传下载方案,程序和服务器配置方面要增加500元。

使用场景

企业内部软件重构,接口的功能完全不变的情况下,切换数据库,或者使用元数据、多租户等技术。此时要求测试能快速全面的进行功能测试。

已有的接口自动化测试可以作为请求的发起端,接口的返回使用diffy进行断言。如果接口返回简单,需要检查数据库,将数据库查询使用接口实现,返回的数据行也作为接口的返回体,放入diffy做断言。

原理图

diffy原版使用

graph LR
a[proxy]-->c[candidate]
a-->b[primary]
a-->d[secondly]
c-->e[raw differences]
b-->e
b-->f[non-deterministic noise]
d-->f
e-->g[filtered differences]
f-->g

录制primary、candidate的返回体,存储起来。wiremock-standalone存文件

graph LR
a[proxy]-->h[wiremock-c]
h-->d[mock-c-data]
h-->c[candidate]
a-->i[wiremock-p]
i-->e[mock-p-data]
i-->b[primary]

回放primary、candidate的返回体

graph LR
a[proxy]-->c[wiremock-c]
a-->b[wiremock-p]
a-->d[secondly]
c-->e[raw differences]
b-->e
b-->f[non-deterministic noise]
d-->f
e-->g[filtered differences]
f-->g

试验命令cheatsheet

启动primary服务

java -jar diffy-mock-0.0.1-SNAPSHOT.jar –server.port=9990

启动secondly服务

java -jar diffy-mock-0.0.1-SNAPSHOT.jar –server.port=9991

启动candidate服务

java -jar diffy-mock-0.0.1-SNAPSHOT.jar –server.port=9992

启动wiremock

jave -jar .\wiremock-standalone-2.27.2.jar

浏览器打开 http://localhost:8080/__admin/recorder/

配置record http://localhost:9990

自动化脚本配置http_proxy=http://localhost:8080,或者将服务器hostip改成localhost:8080也行,是的请求的流量能到wiremock,并录制

请求完成后,点击stop,此时已经切换成回放模式。查看wiremock-standalone-2.27.2.jar目录能发现mapping目录,里面就是记录请求和返回的json。

启动diffy

1
2
3
4
5
6
7
8
9
10
11
java -jar diffy-server.jar^
-candidate=localhost:9992^
-master.primary=localhost:8080^
-master.secondary=localhost:9991^
-service.protocol=http^
-serviceName=Mock-Service^
-proxy.port=:8880^
-admin.port=:8881^
-http.port=:8888^
-rootUrl=localhost:8888^
-excludeHttpHeadersComparison=true^

家庭的路由器是刷的是openwrt,电视盒子刷的armbian,有时候想知道断网了没,内网的网络状态怎么样。这时候需要内网穿透,frp和zerotier都是使用目标,写个小东西做frpc的更新,上报一下在线状态。因为同时管理父母家里、老丈人家里、家乡等多个网络。因为之前做过一个命令推送的小项目,复用一下,用Golang先实现客户端,服务器端用Java的Netty框架,用protobuf协议。

阅读全文 »